经过一天的研究
成功的脱掉了3个
ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov
加的壳
可是这个 却怎么都脱不掉
把分析过程给大家看一下
一、寻找OEP
设置Ollydbg忽略除了“内存访问异常”之外的所有其它异常选项。老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志。载入后弹出“是压缩代码――要继续进行分析吗?”,点“否”。
00401000 > 68 01B04700 PUSH IeConfig.0047B001 //停在这里
00401005 E8 01000000 CALL IeConfig.0040100B
0040100A C3 RETN
0040100B C3 RETN
0040100C 86A2 3E56D29D XCHG BYTE PTR DS:[EDX+9DD2563E],AH
00401012 - 73 A5 JNB SHORT IeConfig.00400FB9
00401014 20B8 9CB827B1 AND BYTE PTR DS:[EAX+B127B89C],BH
0040101A 17 POP SS ; 段寄存器更改
0040101B B3 85 MOV BL,85
0040101D FD STD
0040101E DC63 78 FSUB QWORD PTR DS:[EBX+78]
00401021 F678 E0 IDIV BYTE PTR DS:[EAX-20]
00DF020D C601 3E MOV BYTE PTR DS:[ECX],3E//SHEIFT+F9 一次
00DF0210 36:EB 01 JMP SHORT 00DF0214 ; 多余的前缀
00DF0213 F0:67:64:8F06 0>LOCK POP DWORD PTR FS:[0] ; 不允许锁定前缀
00DF021A 83C4 04 ADD ESP,4
00DF021D 65:EB 01 JMP SHORT 00DF0221 ; 多余的前缀
00DF0220 F2: PREFIX REPNE: ; 多余的前缀
00DF0221 B9 045E4100 MOV ECX,415E04
00DF0226 8D4C35 55 LEA ECX,DWORD PTR SS:[EBP+ESI+55]
00DF022A 59 POP ECX
00DEF3CC 0156 00 ADD DWORD PTR DS:[ESI],EDX //SHEIFT+F9二次
00DEF3CF 67:64:8F06 0000 POP DWORD PTR FS:[0]
00DEF3D5 83C4 04 ADD ESP,4
00DEF3D8 037424 38 ADD ESI,DWORD PTR SS:[ESP+38]
00DEF3DC 037424 18 ADD ESI,DWORD PTR SS:[ESP+18]
00DEF3E0 5E POP ESI
00DEF3E1 50 PUSH EAX
00DEF3E2 E8 CA000000 CALL 00DEF4B1
00DEF3E7 56 PUSH ESI
00DEF3E8 BE A2FC4400 MOV ESI,44FCA2
00DEF3ED 83EE CD SUB ESI,-33
00DEF3F0 8B7424 10 MOV ESI,DWORD PTR SS:[ESP+10]
00DEF4BF C700 8FE6F8B4 MOV DWORD PTR DS:[EAX],B4F8E68F//SHEIFT+F9三次
00DEF4C5 EF OUT DX,EAX ; I/O 命令
00DEF4C6 DCBD BCDD159D FDIVR QWORD PTR SS:[EBP+9D15DDBC]
00DEF4CC ^ 7F BA JG SHORT 00DEF488
00DEF4CE 77 67 JA SHORT 00DEF537
00DEF4D0 64:8F06 POP DWORD PTR FS:[ESI]
00DEF4D3 0000 ADD BYTE PTR DS:[EAX],AL
00DEF4D5 83C4 04 ADD ESP,4
00DEF4D8 81F0 DE4A28AB XOR EAX,AB284ADE
00DEF4DE 58 POP EAX
00DEF4DF E8 74EAFFFF CALL 00DEDF58
00DEF4E4 8BD8 MOV EBX,EAX
00DEF756 C601 5E MOV BYTE PTR DS:[ECX],5E //第4次异常
00DEF759 3E:624D 81 BOUND ECX,QWORD PTR DS:[EBP-7F] ; 多余的前缀
00DEF75D 9A 7653ED3A 541>CALL FAR 1A54:3AED5376 ; 远调用
00DEF764 D7 XLAT BYTE PTR DS:[EBX+AL]
00DEF765 67:64:8F06 0000 POP DWORD PTR FS:[0]
00DEF76B 83C4 04 ADD ESP,4
00DEF76E F3: PREFIX REP: ; 多余的前缀
00DEF76F EB 02 JMP SHORT 00DEF773
00DEF771 CD 20 INT 20
00DEF773 8D4C7A 6C LEA ECX,DWORD PTR DS:[EDX+EDI*2+6C]
00DEF777 83E9 6C SUB ECX,6C
00DEF893 893B MOV DWORD PTR DS:[EBX],EDI//第5次异常
00DEF895 1F POP DS ; 段寄存器更改
00DEF896 95 XCHG EAX,EBP
00DEF897 EF OUT DX,EAX ; I/O 命令
00DEF898 7B 48 JPO SHORT 00DEF8E2
00DEF89A 8C2E MOV WORD PTR DS:[ESI],GS
00DEF89C EB 01 JMP SHORT 00DEF89F
00DEF89E C7 ??? ; 未知命令
00DEF89F 67:64:8F06 0000 POP DWORD PTR FS:[0]
00DEF8A5 83C4 04 ADD ESP,4
00DEF8A8 F2: PREFIX REPNE: ; 多余的前缀
00DEF8A9 EB 01 JMP SHORT 00DEF8AC
00DEF8AB E8 83EB1303 CALL 03F2E433
00DEF8B0 5C POP ESP
00DEF993 C601 FE MOV BYTE PTR DS:[ECX],0FE//第6次异常
00DEF996 ^ 7E 89 JLE SHORT 00DEF921
00DEF998 9E SAHF
00DEF999 842E TEST BYTE PTR DS:[ESI],CH
00DEF99B EB 01 JMP SHORT 00DEF99E
00DEF99D 9A 67648F06 000>CALL FAR 0000:068F6467 ; 远调用
00DEF9A4 83C4 04 ADD ESP,4
00DEF9A7 B9 82044700 MOV ECX,470482
00DEF9AC 334C24 28 XOR ECX,DWORD PTR SS:[ESP+28]
00DEF9B0 59 POP ECX
00DEF9B1 E8 25000000 CALL 00DEF9DB
00DEF9B6 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C]
00DEF9BA 8380 B8000000 0>ADD DWORD PTR DS:[EAX+B8],2
00DEF9E3 3100 XOR DWORD PTR DS:[EAX],EAX //第7次异常
00DEF9E5 64:8F05 0000000>POP DWORD PTR FS:[0]
00DEF9EC 58 POP EAX
00DEF9ED A1 604BDF00 MOV EAX,DWORD PTR DS:[DF4B60]
00DEF9F2 50 PUSH EAX
00DEF9F3 8D85 FDFEFFFF LEA EAX,DWORD PTR SS:[EBP-103]
00DEF9F9 8B0D 5C4BDF00 MOV ECX,DWORD PTR DS:[DF4B5C]
00DEF9FF 8BD3 MOV EDX,EBX
00DEFA01 E8 FAD7FFFF CALL 00DED200
00DEFA06 A3 544BDF00 MOV DWORD PTR DS:[DF4B54],EAX
00DEFA0B 56 PUSH ESI
00DEFA0C E8 24000000 CALL 00DEFA35
00DEFA11 53 PUSH EBX
00DEFA12 81DB 7A57AD4E SBB EBX,4EAD577A
00DED2E3 891F MOV DWORD PTR DS:[EDI],EBX //第8次异常
00DED2E5 5C POP ESP
00DED2E6 E7 15 OUT 15,EAX ; I/O 命令
00DED2E8 ^ 7E C7 JLE SHORT 00DED2B1
00DED2EA 5E POP ESI
00DED2EB 67:64:8F06 0000 POP DWORD PTR FS:[0]
00DED2F1 83C4 04 ADD ESP,4
00DED2F4 F2: PREFIX REPNE: ; 多余的前缀
00DED2F5 EB 01 JMP SHORT 00DED2F8
00DED2F7 69BF 62A54100 C>IMUL EDI,DWORD PTR DS:[EDI+41A562],5F2DC>
00DED301 83FB FF CMP EBX,-1
其他异常 省略。。从这里开始``
00DF0594 891F MOV DWORD PTR DS:[EDI],EBX //33次异常
00DF0596 875A AE XCHG DWORD PTR DS:[EDX-52],EBX
00DF0599 E5 67 IN EAX,67 ; I/O 命令
00DF059B 64:8F06 POP DWORD PTR FS:[ESI]
00DF059E 0000 ADD BYTE PTR DS:[EAX],AL
00DF05A0 F3: PREFIX REP: ; 多余的前缀
00DF05A1 EB 02 JMP SHORT 00DF05A5
00DF05A3 CD 20 INT 20
00DF05A5 83C4 04 ADD ESP,4
00DF05A8 337C24 08 XOR EDI,DWORD PTR SS:[ESP+8]
00DF05AC 83DF AD SBB EDI,-53
硬盘指纹出现
0012FF20 0012FF2C 指向下一个 SEH 记录的指针
0012FF24 00DF04AF SE处理程序
0012FF28 00DF41A8
0012FF2C 0012FF80 指向下一个 SEH 记录的指针
0012FF30 00DF10BC SE处理程序
0012FF34 0012FF78
0012FF38 00DD0000
0012FF3C 00DA0000
0012FF40 00DF0098
0012FF44 00000000
0012FF48 00E2BF3C ASCII "co6U8ACA/Ck=" //硬盘指纹出现第一次
00DF08A4 0156 00 ADD DWORD PTR DS:[ESI],EDX//34次异常
00DF08A7 ^ E3 C1 JECXZ SHORT 00DF086A
00DF08A9 7A E9 JPE SHORT 00DF0894
00DF08AB ^ 7C E2 JL SHORT 00DF088F
00DF08AD 67:64:8F06 0000 POP DWORD PTR FS:[0]
00DF08B3 83C4 04 ADD ESP,4
00DF08B6 33F3 XOR ESI,EBX
00DF08B8 5E POP ESI
0012FF20 0012FF2C 指向下一个 SEH 记录的指针
0012FF24 00DF080A SE处理程序
0012FF28 00E004DC
0012FF2C 0012FF80 指向下一个 SEH 记录的指针
0012FF30 00DF10BC SE处理程序
0012FF34 0012FF78
0012FF38 00DD0000
0012FF3C 00DA0000
0012FF40 00DF0098
0012FF44 00000000
0012FF48 00E2BF3C ASCII "co6U8ACA/Ck=" //硬盘指纹第2次
00DF0E19 C601 FE MOV BYTE PTR DS:[ECX],0FE //35次异常
00DF0E1C 2E:014A 25 ADD DWORD PTR CS:[EDX+25],ECX
00DF0E20 BC 0EFA6367 MOV ESP,6763FA0E
00DF0E25 64:8F06 POP DWORD PTR FS:[ESI]
00DF0E28 0000 ADD BYTE PTR DS:[EAX],AL
00DF0E2A 83C4 04 ADD ESP,4
00DF0E2D 81C9 00385ED3 OR ECX,D35E3800
00DF0E33 59 POP ECX
00DF0E34 A1 F025DF00 MOV EAX,DWORD PTR DS:[DF25F0]
00DF0E39 8078 30 00 CMP BYTE PTR DS:[EAX+30],0
00DF0E3D 75 0B JNZ SHORT 00DF0E4A
00DF0E3F A1 F025DF00 MOV EAX,DWORD PTR DS:[DF25F0]
0012FF20 0012FF2C 指向下一个 SEH 记录的指针
0012FF24 00DF0CE1 SE处理程序
0012FF28 00000000
0012FF2C 0012FF80 指向下一个 SEH 记录的指针
0012FF30 00DF10BC SE处理程序
0012FF34 0012FF78
0012FF38 00DD0000
0012FF3C 00DA0000
0012FF40 00DF0098
0012FF44 00000000
0012FF48 00E2BF3C ASCII "co6U8ACA/Ck="//硬盘指纹出现第3次
00DF106A 0156 00 ADD DWORD PTR DS:[ESI],EDX//第36次异常
00DF106D 03DC ADD EBX,ESP
00DF106F 67:64:8F06 0000 POP DWORD PTR FS:[0]
00DF1075 83C4 04 ADD ESP,4
00DF1078 BE 362D4A00 MOV ESI,4A2D36
00DF107D C1CE 77 ROR ESI,77 ; 移位常量超出 1..31 的范围
00DF1080 5E POP ESI
00DF1081 A1 4426DF00 MOV EAX,DWORD PTR DS:[DF2644]
00DF1086 C700 DE000000 MOV DWORD PTR DS:[EAX],0DE
00DF108C 803D 6C4BDF00 0>CMP BYTE PTR DS:[DF4B6C],0
00DF1093 74 05 JE SHORT 00DF109A
0012FF20 0012FF2C 指向下一个 SEH 记录的指针
0012FF24 00DF0F93 SE处理程序
0012FF28 00E004DC
0012FF2C 0012FF80 指向下一个 SEH 记录的指针
0012FF30 00DF10BC SE处理程序
0012FF34 0012FF78
0012FF38 00DD0000
0012FF3C 00DA0000
0012FF40 00DF0098
0012FF44 00000000
0012FF48 00E2BF3C ASCII "co6U8ACA/Ck="//硬盘指纹第4次
00DEF106 891F MOV DWORD PTR DS:[EDI],EBX //第37次异常
00DEF108 875A AE XCHG DWORD PTR DS:[EDX-52],EBX
00DEF10B E5 67 IN EAX,67 ; I/O 命令
00DEF10D 64:8F06 POP DWORD PTR FS:[ESI]
00DEF110 0000 ADD BYTE PTR DS:[EAX],AL
00DEF112 F3: PREFIX REP: ; 多余的前缀
00DEF113 EB 02 JMP SHORT 00DEF117
00DEF115 CD 20 INT 20
00DEF117 83C4 04 ADD ESP,4
00DEF11A 337C24 08 XOR EDI,DWORD PTR SS:[ESP+8]
00DEF11E 83DF AD SBB EDI,-53
00DEF121 5F POP EDI
00DEF122 A1 9826DF00 MOV EAX,DWORD PTR DS:[DF2698]
0012FF50 0012FF80 指向下一个 SEH 记录的指针
0012FF54 00DEF021 SE处理程序
0012FF58 00DD0000
0012FF5C 00DA0000
0012FF60 00DF0098
0012FF64 00E09124
0012FF68 00DF111C 返回到 00DF111C 来自 00DD96D4
0012FF6C 8C797F2F
0012FF70 00027000
0012FF74 0001CB24 //硬盘指纹消失``
0012FF78 0012FF98
00DEF202 0156 00 ADD DWORD PTR DS:[ESI],EDX //第38次异常
00DEF205 D332 SAL DWORD PTR DS:[EDX],CL
00DEF207 59 POP ECX
00DEF208 0B30 OR ESI,DWORD PTR DS:[EAX]
00DEF20A 7C 52 JL SHORT 00DEF25E
00DEF20C EA 67648F06 000>JMP FAR 0000:068F6467 ; 远跳转
00DEF213 83C4 04 ADD ESP,4
00DEF216 81C6 A6916630 ADD ESI,306691A6
00DEF21C 5E POP ESI
00DEF21D 833D 784BDF00 0>CMP DWORD PTR DS:[DF4B78],0
00DEF224 74 14 JE SHORT 00DEF23A
00DEF226 6A 0C PUSH 0C
00DEF228 B9 784BDF00 MOV ECX,0DF4B78
00DEF22D 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
00DEF230 BA 04000000 MOV EDX,4
00DEF235 E8 A622FFFF CALL 00DE14E0
0012FF50 0012FF80 指向下一个 SEH 记录的指针
0012FF54 00DEF1A3 SE处理程序
0012FF58 00E004DC
0012FF5C 00DA0000
0012FF60 00DF0098
0012FF64 00E09124
0012FF68 00400000 ASCII "MZP" //这是什么东西?
0012FF6C 00000000
0012FF70 0012FF54
00DE46E6 3100 XOR DWORD PTR DS:[EAX],EAX//39次
00DE46E8 EB 01 JMP SHORT 00DE46EB
00DE46EA 68 648F0500 PUSH 58F64
00DE46EF 0000 ADD BYTE PTR DS:[EAX],AL
00DE46F1 00EB ADD BL,CH
00DE46F3 02E8 ADD CH,AL
00DE46F5 0158 E8 ADD DWORD PTR DS:[EAX-18],EBX
00DE46F8 25 0000008B AND EAX,8B000000
00DE46FD 44 INC ESP
00DE46FE 24 0C AND AL,0C
00DE4700 8380 B8000000 0>ADD DWORD PTR DS:[EAX+B8],2
00DE4707 51 PUSH ECX
0104FFA4 /0104FFDC 指向下一个 SEH 记录的指针
0104FFA8 |00DE469D SE处理程序
0104FFAC |7C92EE18 ntdll.7C92EE18
0104FFB0 |00E004EC
0104FFB4 |0104FFEC
0104FFB8 |7C80B50B 返回到 kernel32.7C80B50B
0104FFBC |00E004EC
0104FFC0 |0012FD48
0104FFC4 |7C92EE18 ntdll.7C92EE18
0104FFC8 |00E004EC
0104FFCC |7FFDE000
0104FFD0 |822F6600
0104FFD4 |0104FFC0 //什么都没
0104FFD8 |FCC7B2A0
0104FFDC \FFFFFFFF SEH 链尾部
0104FFE0 7C8399F3 SE处理程序
00DE4729 3100 XOR DWORD PTR DS:[EAX],EAX//40次异常
00DE472B 64:8F05 0000000>POP DWORD PTR FS:[0]
00DE4732 58 POP EAX
00DE4733 EB 0F JMP SHORT 00DE4744
00DE4735 EB 01 JMP SHORT 00DE4738
00DE4737 9A 6A01A174 26D>CALL FAR DF26:74A1016A ; 远调用
00DE473E 008B 4034FFD0 ADD BYTE PTR DS:[EBX+D0FF3440],CL
00DE4744 807B 38 00 CMP BYTE PTR DS:[EBX+38],0
00DE4748 75 33 JNZ SHORT 00DE477D
00DE474A 807B 2E 00 CMP BYTE PTR DS:[EBX+2E],0
00DE474E ^ 74 E8 JE SHORT 00DE4738
00DE4750 EB 2B JMP SHORT 00DE477D
00DE4752 EB 01 JMP SHORT 00DE4755
00DE4754 - E9 BA845BDE JMP DF39CC13
00DE4759 00BE 6845DE00 ADD BYTE PTR DS:[ESI+DE4568],BH
00DE475F 2BD6 SUB EDX,ESI
0104FFA4 /0104FFDC 指向下一个 SEH 记录的指针
0104FFA8 |00DE46FC SE处理程序
0104FFAC |7C92EE18 ntdll.7C92EE18
0104FFB0 |00E004EC
0104FFB4 |0104FFEC
0104FFB8 |7C80B50B 返回到 kernel32.7C80B50B
0104FFBC |00E004EC
0104FFC0 |0012FD48
0104FFC4 |7C92EE18 ntdll.7C92EE18
0104FFC8 |00E004EC
0104FFCC |7FFDE000
0104FFD0 |822F6600
0104FFD4 |0104FFC0 //什么都没
0104FFD8 |FCC7B2A0
在运行一次 程序运行
问题如下
这个壳的特征代码为什么没有?
特征代码 例子1
这整段代码几乎是固定的,很好判断。另外:再按一次Shift+F9程序就会运行。
00A639EE 64:8F05 00000000 pop dword ptr fs:[0]
00A639F5 58 pop eax
00A639F6 833D B07EA600 00 cmp dword ptr ds:[A67EB0],0
00A639FD 74 14 je short 00A63A13
00A639FF 6A 0C push 0C
00A63A01 B9 B07EA600 mov ecx,0A67EB0
00A63A06 8D45 F8 lea eax,dword ptr ss:[ebp-8]
00A63A09 BA 04000000 mov edx,4
00A63A0E E8 2DD1FFFF call 00A60B40
00A63A13 FF75 FC push dword ptr ss:[ebp-4]
00A63A16 FF75 F8 push dword ptr ss:[ebp-8]
00A63A19 8B45 F4 mov eax,dword ptr ss:[ebp-C]
00A63A1C 8338 00 cmp dword ptr ds:[eax],0
00A63A1F 74 02 je short 00A63A23
00A63A21 FF30 push dword ptr ds:[eax]
00A63A23 FF75 F0 push dword ptr ss:[ebp-10]
00A63A26 FF75 EC push dword ptr ss:[ebp-14]
00A63A29 C3 retn//直接在这下断!Shift+F9断在这!返回到00A75FE0
特征代码例子2
0AA39EC 3100 xor dword ptr ds:[eax],eax 最后一次异常停在这里,壳已解压用LordPE脱壳
00AA39EE 64:8F05 0000000>pop dword ptr fs:[0]
00AA39F5 58 pop eax
00AA39F6 833D B07EAA00 0>cmp dword ptr ds:[AA7EB0],0
00AA39FD 74 14 je short 00AA3A13
00AA39FF 6A 0C push 0C
00AA3A01 B9 B07EAA00 mov ecx,0AA7EB0
00AA3A06 8D45 F8 lea eax,dword ptr ss:[ebp-8]
00AA3A09 BA 04000000 mov edx,4
00AA3A0E E8 2DD1FFFF call 00AA0B40
00AA3A13 FF75 FC push dword ptr ss:[ebp-4]
00AA3A16 FF75 F8 push dword ptr ss:[ebp-8]
00AA3A19 8B45 F4 mov eax,dword ptr ss:[ebp-C]
00AA3A1C 8338 00 cmp dword ptr ds:[eax],0
00AA3A1F 74 02 je short 00AA3A23
00AA3A21 FF30 push dword ptr ds:[eax]
00AA3A23 FF75 F0 push dword ptr ss:[ebp-10]
00AA3A26 FF75 EC push dword ptr ss:[ebp-14]
00AA3A29 C3 retn 这里下F2断点,Shift+F9运行到此,随后取消
特征代码例子3
1073A2C 3100 XOR DWORD PTR DS:[EAX],EAX ; 第 28 次异常处
01073A2E 64:8F05 0000000>POP DWORD PTR FS:[0] ; 现在就可以用Loadpe脱壳了
01073A35 58 POP EAX
01073A36 833D B07E0701 0>CMP DWORD PTR DS:[1077EB0],0
01073A3D 74 14 JE SHORT 01073A53
01073A3F 6A 0C PUSH 0C
01073A41 B9 B07E0701 MOV ECX,1077EB0
01073A46 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
01073A49 BA 04000000 MOV EDX,4
01073A4E E8 EDD0FFFF CALL 01070B40
01073A53 FF75 FC PUSH DWORD PTR SS:[EBP-4]
01073A56 FF75 F8 PUSH DWORD PTR SS:[EBP-8]
01073A59 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
01073A5C 8338 00 CMP DWORD PTR DS:[EAX],0
01073A5F 74 02 JE SHORT 01073A63
01073A61 FF30 PUSH DWORD PTR DS:[EAX]
01073A63 FF75 F0 PUSH DWORD PTR SS:[EBP-10]
01073A66 FF75 EC PUSH DWORD PTR SS:[EBP-14]
01073A69 C3 RETN ; 在此设置一个断点
大家请注意 上面3个例子 程序 语言都不一样
但是有一个共同的地方
就是有 POP XXX 然后 POP EAX 为什么我这个程序没有
完全是 把我搞疯了 请各位大侠发表一下意见?
[培训]科锐逆向工程师培训第53期2025年7月8日开班!