后期资源网|非编软件网|杉宫竹苑|非编插件|高清视频素材|音频素材|非编软件汉化

 找回密码
 立即注册
后期非编系统发布及其详细简介后期非编系统VIP专享下载区影视后期非编模版免费下载区网站注册及其办理VIP业务说明
查看: 800|回复: 0

[教程] PECompact 2.70加壳后手动脱壳技巧

[复制链接]
发表于 2013-1-4 11:23:35 | 显示全部楼层 |阅读模式
【 标题 】 PECompact2.70脱壳. h/ G9 w* F9 a! k; [# H# q
【 作者 】 linxer
* s  P( G/ R* P+ I. `【破解平台】 Win2k3 English Version
+ I6 a: j& M( v1 ^8 ~- p8 H【脱壳工具】 OllyDbg v1.10 + OllyDump插件
5 ~; z& g, i1 U7 r' y  w【待脱软件】 Win2k3自带NOTEPAD(用PECompact2.70加壳)2 D3 ^# ^. d2 u/ D- L  T
【 声明 】 初学脱壳,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
+ c5 @7 E* N; O
0 P" @. ^/ f" U5 @& {6 y, o1 G1 TOD异常设置忽略所有异常8 C$ T: M  f) n" z7 z2 U) s

3 O* V0 P0 d3 z, N- ?01001000 N> B8 64BA0101 mov eax,NOTEPAD.0101BA64 //OD载入后停于此处3 W) m) r; W; ~5 `/ \1 W
01001005 50 push eax //向堆栈中压入一个异常处理回调函数地址(底下发生内存访问异常,将会调用这个函数)4 M% r4 B8 C0 i6 V# r5 O! A
01001006 64:FF35 00000000 push dword ptr fs:[0], U! [6 w. P$ q/ G2 l  e
0100100D 64:8925 00000000 mov dword ptr fs:[0],esp //向SEH链中插入一个异常处理项, y% h' P4 p+ w: v
01001014 33C0 xor eax,eax
6 W( D4 p+ x6 O/ j1 U01001016 8908 mov dword ptr ds:[eax],ecx //内存访问异常
- e! G( P+ W& H9 a6 G. g
5 x4 u0 A# h* d5 j( V) K由上面的代码知,bp 0x0101BA64,F9运行到该断点
6 u9 G5 B$ ]2 _. ]# d
4 m& D0 S3 u( [$ h. _底下就是异常处理回调函数的代码了
# P& o3 k; F0 K- z) d0101BA64 B8 2EA801F1 mov eax,F101A82E7 F/ V( I: V5 H# O# u& u5 [+ j8 t
0101BA69 8D88 59120010 lea ecx,dword ptr ds:[eax+10001259] //此指令执行后ecx为0x0101ba87,注意这是retn指令后的第一条指令地址! r8 f6 R' E' ?5 o  k
0101BA6F 8941 01 mov dword ptr ds:[ecx+1],eax //修改0x0101ba87处mov指令的操作数2 }3 p) p$ u0 V$ I4 _- b2 e7 W5 h0 h  r4 r
0101BA72 8B5424 04 mov edx,dword ptr ss:[esp+4] //取EXCEPTION_RECORD结构地址7 c! `' }, X7 @3 A7 c! m7 O
0101BA76 8B52 0C mov edx,dword ptr ds:[edx+C] //取发生异常指令的地址(就是上面的0x01001016)* n3 F. _  }" {6 B/ L2 _% r
0101BA79 C602 E9 mov byte ptr ds:[edx],0E9 //修改引发异常处指令的opcode为jmp(0xe9,它的操作数是四字节的)
% w# s- z0 z/ C" x1 W0 r2 x( C0 l0101BA7C 83C2 05 add edx,5 //edx是引发异常处的下条指令地址( Z& h9 O* t- G! e( C2 \2 ]0 T
0101BA7F 2BCA sub ecx,edx //计算相对偏移  s/ b8 M& t$ j  R# ?5 _" \$ E
0101BA81 894A FC mov dword ptr ds:[edx-4],ecx //修改引发异常处指令的操作数(它将使程序跳到0x0101ba87处). \: B  ], N( H+ b# B
0101BA84 33C0 xor eax,eax5 J. t. ~  g( J. y1 e  D$ W* p
0101BA86 C3 retn
, \$ Y/ u# z) g. Y, r6 i. d0101BA87 B8 78563412 mov eax,12345678) \' J1 z2 }8 O3 k$ l& f9 P

4 x, Q# g+ s) n; S通过对异常处理回调函数的分析,知道程序流程在异常处理结束后会来到0x0101ba87处,bp 0x0101ba87,F9到该断点处( `. Q  t' b7 O. S3 X! F" U! G2 Z9 p

9 X& P1 w; l9 D4 G1 L* @" u0101BA87 B8 2EA801F1 mov eax,F101A82E" z9 c1 E; Q# Y
0101BA8C 64:8F05 00000000 pop dword ptr fs:[0]# B" b# a& N4 A  j: _! r
0101BA93 83C4 04 add esp,4 //删除刚才插入的异常处理项9 Q4 z! O  E/ n4 S; y5 o# c
0101BA96 55 push ebp
7 Y% F/ a; r$ B  t% C+ ?0101BA97 53 push ebx
! p* q+ s9 _. j; x/ \' P2 A: B+ l0101BA98 51 push ecx2 f5 c6 Y; P$ j+ w
0101BA99 57 push edi4 q3 }8 j) l9 i0 y; @, }
0101BA9A 56 push esi  B) A: Z. g7 n& }
0101BA9B 52 push edx //这片是真正的解压代码了,往下找对应的pop系列指令
4 t, i& x1 |  W# ~! O( ^4 n/ ?! x* y2 J4 e. L0101BA9C 8D98 12120010 lea ebx,dword ptr ds:[eax+10001212]" f/ M; Z9 E' `/ m4 E
0101BAA2 8B53 18 mov edx,dword ptr ds:[ebx+18]
" X* h8 n' m' |* w0101BAA5 52 push edx
* Z0 c- L7 @6 |. {9 P0101BAA6 8BE8 mov ebp,eax& U* q4 e5 t3 b2 P* g
0101BAA8 6A 40 push 40
7 T5 g9 Y' Z! E8 a6 R0101BAAA 68 00100000 push 1000
2 ^6 G0 Y" Y0 z6 d* G0 i  N. k. i- |0101BAAF FF73 04 push dword ptr ds:[ebx+4]$ `, T9 d' ^5 V6 e* w
0101BAB2 6A 00 push 0* S9 F& a# \  L: B1 W# K
0101BAB4 8B4B 10 mov ecx,dword ptr ds:[ebx+10]3 X: E) z- @1 \% U& j  `- Y" S( S
0101BAB7 03CA add ecx,edx  C& B- F1 I% z; e# M3 i2 n% m
0101BAB9 8B01 mov eax,dword ptr ds:[ecx]" }% i+ k* a' T9 ~, U4 ^
0101BABB FFD0 call eax
; B: w/ l" K# Y, E  y0101BABD 5A pop edx
* W. ~/ i( h* t7 E0101BABE 8BF8 mov edi,eax; o0 O* X* }7 P; M1 }
0101BAC0 50 push eax; p8 F9 }& Q# S; j; C
0101BAC1 52 push edx" F0 d7 i* `7 n& M) [
0101BAC2 8B33 mov esi,dword ptr ds:[ebx]  d5 M# _: z4 z  |4 ?+ k
0101BAC4 8B43 20 mov eax,dword ptr ds:[ebx+20]$ F1 `5 \: O" V, J5 t8 ^
0101BAC7 03C2 add eax,edx6 ]( Q% D0 ~- G9 J$ o0 @4 F! Y/ o5 w
0101BAC9 8B08 mov ecx,dword ptr ds:[eax]
0 r' m$ _4 R. K* n! ^3 W! ^0101BACB 894B 20 mov dword ptr ds:[ebx+20],ecx4 P; }+ D: N, V
0101BACE 8B43 1C mov eax,dword ptr ds:[ebx+1C]$ ]3 ]  P! t8 U/ O1 _' ~
0101BAD1 03C2 add eax,edx' I; _% p% R: v# e- @, B
0101BAD3 8B08 mov ecx,dword ptr ds:[eax]7 q3 ?( V  I0 y& G
0101BAD5 894B 1C mov dword ptr ds:[ebx+1C],ecx8 d, O1 f: l% Q; g
0101BAD8 03F2 add esi,edx* j) @: z% g7 G/ D( b& v; {! V+ i
0101BADA 8B4B 0C mov ecx,dword ptr ds:[ebx+C]
/ L4 o+ q5 T! h- J, R; |; O/ O0101BADD 03CA add ecx,edx* [' j, l1 @8 L8 O9 V
0101BADF 8D43 1C lea eax,dword ptr ds:[ebx+1C]
1 m% S6 [- N+ A* j0101BAE2 50 push eax
. l( \6 G; j1 d0101BAE3 57 push edi# \0 r/ ]5 J. Z& a/ B4 v
0101BAE4 56 push esi& s$ k6 w; W% u' ]
0101BAE5 FFD1 call ecx( j1 X5 [4 S. {- P% G2 z
0101BAE7 5A pop edx$ [& @% f) x) p
0101BAE8 58 pop eax. b- N5 D+ `9 e4 l8 v9 h
0101BAE9 0343 08 add eax,dword ptr ds:[ebx+8]. z6 n' |+ A& k
0101BAEC 8BF8 mov edi,eax
  E" P2 V% ^8 v. V7 f( \, n0101BAEE 52 push edx
. K5 ?& U+ z! T+ G2 h0101BAEF 8BF0 mov esi,eax
$ g' r. ~  {# ~8 d7 S) l: m# V0101BAF1 8B46 FC mov eax,dword ptr ds:[esi-4]+ f" _7 I; s; w' C1 Q
0101BAF4 83C0 04 add eax,4
# m+ H0 J6 ~# W9 X% t0101BAF7 2BF0 sub esi,eax5 m  M! f, X( G0 A6 x/ T7 [
0101BAF9 8956 08 mov dword ptr ds:[esi+8],edx/ `) i( P$ @* i6 o6 s0 S5 w' g
0101BAFC 8B4B 0C mov ecx,dword ptr ds:[ebx+C]
( i3 Q- U5 {- {0101BAFF 894E 14 mov dword ptr ds:[esi+14],ecx
% D& e: {2 e5 m5 K8 j# @' U0101BB02 FFD7 call edi
0 B/ Y* s! c% h4 d0101BB04 8985 FA120010 mov dword ptr ss:[ebp+100012FA],eax
$ p4 L/ v8 W1 f* z( Z0101BB0A 8BF0 mov esi,eax0 y  k2 `6 M( ]
0101BB0C 8B4B 14 mov ecx,dword ptr ds:[ebx+14]
5 _2 }& _' e3 a8 A0101BB0F 5A pop edx. v6 `' @+ X1 M$ b5 M" i
0101BB10 EB 0C jmp short NOTEPAD.0101BB1E
/ y: g. ]6 a3 T! }1 v, E, |, f% c0101BB12 03CA add ecx,edx
# E0 c, p6 |7 C& {& V- c0101BB14 68 00800000 push 8000) z4 A" e" b( W/ s7 m2 z; J/ `
0101BB19 6A 00 push 0
$ d: I& g. m4 C; u# e0101BB1B 57 push edi
  `( D8 ]7 T% W: }2 `0101BB1C FF11 call dword ptr ds:[ecx]. O, ~3 b! M, n  k
0101BB1E 8BC6 mov eax,esi
+ C1 X$ n' x" c3 Q0101BB20 5A pop edx2 K2 C7 Q# @* l( P( g0 U  B
0101BB21 5E pop esi
8 c# w, B4 q" s& _: I8 B0101BB22 5F pop edi7 {. E- F5 R8 P! j' R" e
0101BB23 59 pop ecx& w$ t  c& Q, ?) o7 J, t5 F
0101BB24 5B pop ebx
" u) z1 a$ V' S0101BB25 5D pop ebp //到这里真实的NOTEPAD代码被释放出来
% I5 @& V" Z2 }$ A4 ]) W  i! x0101BB26 FFE0 jmp eax //F4运行到该处
& K( h. a/ z; }7 ?) M. C- s% J  q( J7 z6 Q% E. f
到这里只要在F7一下就到了真正的NOTEPAD程序了,dump下来,就OK了。
" S  z% s+ Y- V" _( O0 G' L( V7 _. \& W* h7 E# t3 e4 h; u/ ~+ A
' t( r# x+ B4 [6 N: x
【 总结 】PECompact2.70脱壳步骤:
5 V3 _/ @) I( j* a" _( _. a1.OD加载程序,记下OD停处指令的第二个操作数xxxxxxxx,Ctrl + G到xxxxxxxx处
1 c5 A2 B  a6 |1 f* f2.从xxxxxxxx处Ctrl + F查找jmp eax指令
- d2 ~1 v0 m" f8 U9 J$ M! V3.F4运行到jmp eax处
: E3 d3 S6 b- @9 N  \+ X4.F7步过一条指令
( D6 W  O$ ^$ ?& u3 x0 K7 }) ]5.Dump内存镜像
# _" v! O8 j1 e. Q$ h6.完事收工
后期资源网,打造没有广告、免除隐藏回复的全开放式影视技术交流平台。 你的所求就是我们服务的宗旨!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|后期资源网

GMT+8, 2024-5-3 02:15 , Processed in 0.109040 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表