看了网上一篇很详细的说明,脱PeCompact2.98.4b。
工具:ollydbg
先断VirtualAlloc;F9,Shift+F9,F9
来到:
7C809AF1 > 8BFF MOV EDI,EDI 'F2,去掉断点
7C809AF3 55 PUSH EBP
7C809AF4 8BEC MOV EBP,ESP
7C809AF6 FF75 14 PUSH DWORD PTR SS:[EBP+14]
7C809AF9 FF75 10 PUSH DWORD PTR SS:[EBP+10]
7C809AFC FF75 0C PUSH DWORD PTR SS:[EBP+C]
7C809AFF FF75 08 PUSH DWORD PTR SS:[EBP+8]
7C809B02 6A FF PUSH -1
7C809B04 E8 09000000 CALL kernel32.VirtualAllocEx
7C809B09 5D POP EBP
7C809B0A C2 1000 RETN 10 'F2,加断点
F9,F8
来到:
009B2C5D 5A POP EDX ; dbcore4o.00870000
009B2C5E 8BF8 MOV EDI,EAX
009B2C60 50 PUSH EAX
009B2C61 52 PUSH EDX
009B2C62 8B33 MOV ESI,DWORD PTR DS:[EBX]
009B2C64 8B43 20 MOV EAX,DWORD PTR DS:[EBX+20]
009B2C67 03C2 ADD EAX,EDX
009B2C69 8B08 MOV ECX,DWORD PTR DS:[EAX]
009B2C6B 894B 20 MOV DWORD PTR DS:[EBX+20],ECX
009B2C6E 8B43 1C MOV EAX,DWORD PTR DS:[EBX+1C]
009B2C71 03C2 ADD EAX,EDX
009B2C73 8B08 MOV ECX,DWORD PTR DS:[EAX]
009B2C75 894B 1C MOV DWORD PTR DS:[EBX+1C],ECX
009B2C78 03F2 ADD ESI,EDX
往下拉,拉到这里:
009B2CC6 FFE0 JMP EAX 'F2,加断点
009B2CC8 0000 ADD BYTE PTR DS:[EAX],AL
009B2CCA 0000 ADD BYTE PTR DS:[EAX],AL
009B2CCC 0000 ADD BYTE PTR DS:[EAX],AL
009B2CCE 0000 ADD BYTE PTR DS:[EAX],AL
009B2CD0 0000 ADD BYTE PTR DS:[EAX],AL
009B2CD2 0000 ADD BYTE PTR DS:[EAX],AL
009B2CD4 0000 ADD BYTE PTR DS:[EAX],AL
009B2CD6 0000 ADD BYTE PTR DS:[EAX],AL
009B2CD8 0000 ADD BYTE PTR DS:[EAX],AL
F9,F7 4下,来到:
009D0F24 55 PUSH EBP '教程中说是这个位置,复制地址009D0F24
009D0F25 8BEC MOV EBP,ESP
009D0F27 83C4 E8 ADD ESP,-18
009D0F2A 53 PUSH EBX
009D0F2B 57 PUSH EDI
009D0F2C 56 PUSH ESI
009D0F2D E8 00000000 CALL 009D0F32
009D0F32 5B POP EBX
009D0F33 81EB 90170010 SUB EBX,10001790
009D0F39 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]
009D0F3C 33C0 XOR EAX,EAX
009D0F3E 33C9 XOR ECX,ECX
009D0F40 034E 3C ADD ECX,DWORD PTR DS:[ESI+3C]
009D0F43 74 0A JE SHORT 009D0F4F
009D0F45 8B56 08 MOV EDX,DWORD PTR DS:[ESI+8]
009D0F48 8BFE MOV EDI,ESI
009D0F4A 83C6 50 ADD ESI,50
009D0F4D EB 07 JMP SHORT 009D0F56
009D0F4F 5E POP ESI
009D0F50 5F POP EDI
009D0F51 5B POP EBX
复制地址009D0F24到IMP工具的OEP D0F24
点 IAT AutoSearch 按钮,提示找不到任何信息,那应该是OEP不对,于是就接着F7,F9的按下来,找到了这个:
009832E0 55 DB 55 ; CHAR 'U'
貌似找到了。
但是还是木有用。。。。。。
我试过找一个未加壳的dll,用PE加壳后,按上面的方法,可以成功找到OEP并完成后面的脱壳操作。
但是好像这个方法对我要脱的这个文件不管用。
高手们,能帮忙解释一下吗?
新手,求技术增长!
附件为dll
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课