-
-
[原创] 手脱某未知壳
-
发表于:
2010-1-13 15:38
5556
-
【文章标题】: 手脱某未知壳
【文章作者】: lovebird/爱鸟
【作者邮箱】: lovebird_ustc#126.com
【作者QQ号】: 1282260064
【软件名称】: 未知壳加壳的XP记事本
【软件大小】: 脱前51.5Kb 脱后140KB
【下载地址】: 附件中
【加壳方式】: 未知
【保护方式】: 未知壳加壳
【编写语言】: VC++
【使用工具】: OD+dump插件
【操作平台】: WinSP3+VMware6.0
【作者声明】: 菜鸟一个,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
在BST论坛淘到一堆加壳的记事本 检测一下,基本都是这阶段要学习的压缩壳 正好一个个的脱。
Peid一扫,是Nothing found *,换成Hardcore,检验是Anti007 -> NsPacK Private。估计是Anti007的变形壳。
不管它,od载入。异常选项选择忽略一切异常
0101BC32 > 50
PUSH EAX ; 停在这里
0101BC33 40
INC EAX
0101BC34 58
POP EAX
0101BC35 60
PUSHAD
0101BC36 57
PUSH EDI
0101BC37 BF 16F7226A
MOV EDI,6A22F716
0101BC3C 5F
POP EDI
0101BC3D E8 00000000
CALL 3_.0101BC42
0101BC42 56
PUSH ESI
0101BC43 46
INC ESI
0101BC44 5E
POP ESI
0101BC45 59
POP ECX
0101BC46 81FE 17F7060D
CMP ESI,0D06F717
0101BC4C 74 02
JE SHORT 3_.0101BC50
0101BC4E 75 00
JNZ SHORT 3_.0101BC50
; 明显的花指令
0101BC50 81C1 63000000
ADD ECX,63
0101BC56 53
PUSH EBX
眼一扫,各种花指令。手跟的结果是,这个壳保护方式主要三个花指令:
push/
pop对
JE/
JNZ跳转同一个地址
jmp来回跳
另外壳中有SEH的使用,问题不是很大,我们看见0101BC35的
pushad指令,在0101BC36处点鼠标,然后F4
命令行下断hr
esp
Shift+F9运行:
0101BCC7 9C
PUSHFD ; 第一次Esp定律到了这儿 取消硬断
0101BCC8 9D
POPFD ; F8过来 hr esp 或者直接走下去
0101BCC9 ^ E9 8EFBFFFF
JMP 3_.0101B85C
0101BCCE F3: PREFIX
REP:
; 多余的前缀
0101BCCF A9 36D42F36
TEST EAX,362FD436
0101BCD4 C3
RETN
0101BCD5 8915 9F35AD3F
MOV DWORD PTR DS:[3FAD359F],
EDX
0101BCDB 2C DE
SUB AL,0DE
0101BCDD C8 EE8679
ENTER 86EE,79
0101BCE1 094CBF 68
OR DWORD PTR DS:[
EDI+
EDI*4+68],
ECX
0101BCE5 C6C5 9A
MOV CH,9A
0101BCE8 B1 66
MOV CL,66
0101BCEA 15 23E81588
ADC EAX,8815E823
0101BCEF 5D
POP EBP
0101BCF0 006D
DD ADD BYTE PTR SS:[
EBP-23],
CH
0101BCF3 93
XCHG EAX,
EBX
0101BCC8处hr
esp
Shift+F9运行:
0101B85D 81F3 DA081565
XOR EBX,651508DA
; 第二次esp到了这儿 取消硬断
0101B863 5B
POP EBX
0101B864 60
PUSHAD
0101B865 56
PUSH ESI ; 此句F4 hr esp
0101B866 BE 0BFF9915
MOV ESI,1599FF0B
0101B86B 5E
POP ESI
0101B86C E8 1C010000
CALL 3_.0101B98D
0101B871 ED
IN EAX,
DX ; I/O 命令
0101B872 07
POP ES ; 段寄存器更改
0101B873 DF2F
FILD QWORD PTR DS:[
EDI]
0101B875 EC
IN AL,
DX ; I/O 命令
0101B876 D236
SAL BYTE PTR DS:[
ESI],
CL
0101B878 082D 48DDBEC0
OR BYTE PTR DS:[C0BEDD48],
CH
0101B87E 4E
DEC ESI
0101B87F EA 7E80667D 563>
JMP FAR 3B56:7D66807E
; 远跳转
0101B865处hr
esp
Shift+F9运行,删除硬断。
0101BBFA 57
PUSH EDI ; ntdll.7C930228
0101BBFB 0F02FE
LAR EDI,
ESI
0101BBFE 5F
POP EDI
0101BBFF 53
PUSH EBX
0101BC00 9B
WAIT
0101BC01 DBE3
FINIT
0101BC03 52
PUSH EDX
0101BC04 85F7
TEST EDI,
ESI
0101BC06 74 02
JE SHORT 3_.0101BC0A
0101BC08 75 00
JNZ SHORT 3_.0101BC0A
; 花指令
0101BC0A 57
PUSH EDI
0101BC0B 56
PUSH ESI
0101BC0C 51
PUSH ECX
0101BC0D 81C6 8D179777
ADD ESI,7797178D
0101BC13 81C1 B07B6E5E
ADD ECX,5E6E7BB0
0101BC19 59
POP ECX
0101BC1A 5E
POP ESI
0101BC1B 56
PUSH ESI
0101BC1C 56
PUSH ESI
0101BC1D 68 36816E22
PUSH 226E8136
0101BC22 5E
POP ESI
0101BC23 5E
POP ESI
0101BC24 50
PUSH EAX
0101BC25 50
PUSH EAX
0101BC26 9B
WAIT
0101BC27 DFE0
FSTSW AX
0101BC29 58
POP EAX
0101BC2A C2 1000
RETN 10
诸多花指令后,返回。
0101A1B8 B8 853C0000
MOV EAX,3C85
0101A1BD E8 64140000
CALL 3_.0101B626
0101A1C2 18BA 0CE8D8B0
SBB BYTE PTR DS:[
EDX+B0D8E80C],
BH ; 此句F4
0101A1C8 0000
ADD BYTE PTR DS:[
EAX],
AL
0101A1CA 848CF9 009494C2
TEST BYTE PTR DS:[
ECX+
EDI*8+C2949400],
CL
0101A1D1 60
PUSHAD
0101A1D2 A4
MOVS BYTE PTR ES:[
EDI],
BYTE PTR DS:[
ESI]
0101A1D3 8D41 E8
LEA EAX,
DWORD PTR DS:[
ECX-18]
0101A1D6 E8 2C0200B4
CALL B501A407
0101A1DB 00F2
ADD DL,
DH
0101A1DD BB FCF80200
MOV EBX,2F8FC
0101A1E2 4D
DEC EBP
0101A1E3 61
POPAD
一阵延迟后,停在
0101A1C2 9C
PUSHFD
0101A1C3 EB 0C
JMP SHORT 3_.0101A1D1
0101A1C5 E8 00000000
CALL 3_.0101A1CA
0101A1CA 58
POP EAX
0101A1CB 83F8 00
CMP EAX,0
0101A1CE ^ 74 FA
JE SHORT 3_.0101A1CA
0101A1D0 C3
RETN
0101A1D1 60
PUSHAD
0101A1D2 40
INC EAX ; 此句F4 hr esp
0101A1D3 40
INC EAX
0101A1D4 40
INC EAX
0101A1D5 E8 00000000
CALL 3_.0101A1DA
0101A1DA 58
POP EAX
0101A1DB 8BF0
MOV ESI,
EAX
0101A1DD BB 0C120000
MOV EBX,120C
0101A1E2 B9 28120000
MOV ECX,1228
0101A1E7 2BCB
SUB ECX,
EBX
0101A1D2处hr
esp
不一会显示运行出错
不用管它,现在走到OEP了,用od的dump插件 方式1直接dump出来就行
--------------------------------------------------------------------------------
【经验总结】
如果在0101A1D2不用
ESP定律 也可以找到oep 而且不会出现运行错误。但是比较慢 。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2010年01月13日 15:36:50
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课