-
-
[原创]Anti007的一种脱法
-
发表于:
2010-1-18 04:05
4763
-
【文章标题】: Anti007的一种脱法
【文章作者】: lovebird/爱鸟
【作者邮箱】: lovebird_ustc#126.com
【作者QQ号】: 1282260064
【软件名称】: 记事本
【下载地址】: 附件中
【加壳方式】: anti007
【保护方式】: Anti007 V1.0-V2.X
【使用工具】: OD dump插件
【操作平台】: XPSP3+VM6
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
说的还是上次那堆记事本,这个比较luck,peid一扫,Anti007 V1.0-V2.X -> NsPacK Private,标准方式加壳
OD不躲不藏,忽略一切异常。
0101CEF6 > 81EE 632B3970
SUB ESI,70392B63
; 进来停在这儿
0101CEFC 81C6 632B3970
ADD ESI,70392B63
0101CF02 897424 FC
MOV DWORD PTR SS:[
ESP-4],
ESI
0101CF06 83EC 04
SUB ESP,4
0101CF09 53
PUSH EBX
0101CF0A 6A FF
PUSH -1
0101CF0C 5B
POP EBX
0101CF0D 2BF3
SUB ESI,
EBX
0101CF0F 5B
POP EBX
0101CF10 8B3424
MOV ESI,
DWORD PTR SS:[
ESP]
0101CF13 83C4 04
ADD ESP,4
0101CF16 60
PUSHAD
0101CF17 57
PUSH EDI ; 此处hr esp
0101CF18 51
PUSH ECX
0101CF19 83C4 04
ADD ESP,4
在0101CF17处hr
esp,然后Shift+F9 16次,程序运行.
为此,我们Ctrl+F2重来,然后Shift+F9 15次:
0101B527 33DE
XOR EBX,
ESI
0101B529 61
POPAD
0101B52A 5E
POP ESI ; 第15次停在这儿
0101B52B 51
PUSH ECX
0101B52C F7D1
NOT ECX
0101B52E 59
POP ECX
0101B52F C3
RETN ; 返回去
0101B530 0000
ADD BYTE PTR DS:[
EAX],
AL
返回到了这儿:
0101A179 9C
PUSHFD
0101A17A 60
PUSHAD
0101A17B 33D2
XOR EDX,
EDX ; 此句hr esp
0101A17D 66:8CE2
MOV DX,
FS
0101A180 0F03D2
LSL EDX,
EDX
0101A183 66:8CE3
MOV BX,
FS
0101A186 66:3BD3
CMP DX,
BX
0101A189 75 03
JNZ SHORT Anti007_.0101A18E
0101A18B 6A 00
PUSH 0
0101A18D C3
RETN
0101A18E E8 00000000
CALL Anti007_.0101A193
0101A193 5D
POP EBP
0101A194 B8 7C864100
MOV EAX,41867C
0101A199 2D 62864100
SUB EAX,418662
0101A19E 2BE8
SUB EBP,
EAX
0101A1A0 8DB5 CFFCFFFF
LEA ESI,
DWORD PTR SS:[
EBP-331]
0101A1A6 8B06
MOV EAX,
DWORD PTR DS:[
ESI]
0101A1A8 83F8 00
CMP EAX,0
0101A1AB 74 17
JE SHORT Anti007_.0101A1C4
0101A1AD 8DB5 DBFCFFFF
LEA ESI,
DWORD PTR SS:[
EBP-325]
0101A1B3 8B06
MOV EAX,
DWORD PTR DS:[
ESI]
在0101A17B处hr
esp,不一会,程序运行出错,关闭后,来到OEP:
0100739D 6A
DB 6A
; CHAR 'j'
0100739E 70
DB 70
; CHAR 'p'
0100739F 68
DB 68
; CHAR 'h'
010073A0 98
DB 98
010073A1 18
DB 18
010073A2 00
DB 00
010073A3 01
DB 01
010073A4 E8
DB E8
010073A5 BF
DB BF
010073A6 01
DB 01
010073A7 00
DB 00
010073A8 00
DB 00
010073A9 33
DB 33
; CHAR '3'
010073AA
DB DB DB
010073AB 53
DB 53
; CHAR 'S'
010073AC 8B
DB 8B
010073AD 3D
DB 3D
; CHAR '='
010073AE CC
DB CC
010073AF 10
DB 10
010073B0 00
DB 00
010073B1 01
DB 01
010073B2 FF
DB FF
010073B3 D7
DB D7
Ctrl+A分析一下:
0100739D . 6A 70
PUSH 70
0100739F . 68 98180001
PUSH Anti007_.01001898
010073A4 . E8 BF010000
CALL Anti007_.01007568
010073A9 . 33DB
XOR EBX,
EBX
010073AB . 53
PUSH EBX ; /pModule => NULL
010073AC . 8B3D CC100001
MOV EDI,
DWORD PTR DS:[10010CC]
; |kernel32.GetModuleHandleA
010073B2 . FFD7
CALL EDI ; \GetModuleHandleA
010073B4 . 66:8138 4D5A
CMP WORD PTR DS:[
EAX],5A4D
010073B9 . 75 1F
JNZ SHORT Anti007_.010073DA
010073BB . 8B48 3C
MOV ECX,
DWORD PTR DS:[
EAX+3C]
010073BE . 03C8
ADD ECX,
EAX
010073C0 . 8139 50450000
CMP DWORD PTR DS:[
ECX],4550
010073C6 . 75 12
JNZ SHORT Anti007_.010073DA
010073C8 . 0FB741 18
MOVZX EAX,
WORD PTR DS:[
ECX+18]
010073CC . 3D 0B010000
CMP EAX,10B
010073D1 . 74 1F
JE SHORT Anti007_.010073F2
010073D3 . 3D 0B020000
CMP EAX,20B
直接用脱壳插件dump就行。
--------------------------------------------------------------------------------
【经验总结】
此例借鉴了“最后一次异常法”的思想,使用“最后一次硬件断点法”,直接来到OEP。前面脱的一个anti007的变形壳,
最后也是出错关闭来到OEP。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2010年01月18日 4:06:28
[培训]科锐逆向工程师培训第53期2025年7月8日开班!