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

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

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

[复制链接]
发表于 2013-1-4 11:23:35 | 显示全部楼层 |阅读模式
【 标题 】 PECompact2.70脱壳6 C$ k2 \  h" z' p- {
【 作者 】 linxer
# {) `4 _( m( _* Q  U! g【破解平台】 Win2k3 English Version
% Q2 v3 Y; G) _# x' ?【脱壳工具】 OllyDbg v1.10 + OllyDump插件
6 f$ Y: v, S2 |【待脱软件】 Win2k3自带NOTEPAD(用PECompact2.70加壳)
/ d1 Q4 _: i: N- r0 i【 声明 】 初学脱壳,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!+ A& F- g* `/ T4 A- b) A
( S: Q. m) W0 D" @0 n& |( Y
OD异常设置忽略所有异常& a/ g5 l7 A, R: L
  j) L' }1 ]( _
01001000 N> B8 64BA0101 mov eax,NOTEPAD.0101BA64 //OD载入后停于此处$ k2 s" L6 s- N9 s% U
01001005 50 push eax //向堆栈中压入一个异常处理回调函数地址(底下发生内存访问异常,将会调用这个函数)4 X) d; G1 S! S
01001006 64:FF35 00000000 push dword ptr fs:[0]
: {. o3 y) |  e2 n5 J1 \0100100D 64:8925 00000000 mov dword ptr fs:[0],esp //向SEH链中插入一个异常处理项0 ]* [3 s4 N' M  X8 x$ _( I8 q0 m
01001014 33C0 xor eax,eax+ E) R- v/ d' y4 v% ]2 e  p1 G& @  Z
01001016 8908 mov dword ptr ds:[eax],ecx //内存访问异常
; E5 W3 s4 J* G$ C$ G* {. [1 a  U( `8 l7 }; Y1 M
由上面的代码知,bp 0x0101BA64,F9运行到该断点
2 C6 i+ f( g- }; Q
8 _( G9 G8 ^* p. D, m( E! ]0 a4 q  i, n底下就是异常处理回调函数的代码了
, M# H& ]* u: C  V" A- W% X& s8 b0101BA64 B8 2EA801F1 mov eax,F101A82E+ A- R4 X4 Y0 j
0101BA69 8D88 59120010 lea ecx,dword ptr ds:[eax+10001259] //此指令执行后ecx为0x0101ba87,注意这是retn指令后的第一条指令地址1 |( p: U0 I  @6 Y# d3 z8 x
0101BA6F 8941 01 mov dword ptr ds:[ecx+1],eax //修改0x0101ba87处mov指令的操作数
9 v: u/ B% g$ N+ L0101BA72 8B5424 04 mov edx,dword ptr ss:[esp+4] //取EXCEPTION_RECORD结构地址& t7 f! p3 o8 d* U+ ^. q
0101BA76 8B52 0C mov edx,dword ptr ds:[edx+C] //取发生异常指令的地址(就是上面的0x01001016)
, n5 s! l5 ^9 [4 l- y$ l2 [. t0101BA79 C602 E9 mov byte ptr ds:[edx],0E9 //修改引发异常处指令的opcode为jmp(0xe9,它的操作数是四字节的)9 T6 {, a6 @8 E0 i/ E+ q' }
0101BA7C 83C2 05 add edx,5 //edx是引发异常处的下条指令地址0 U2 j  }3 F" p4 s: x7 k; Y0 m7 L
0101BA7F 2BCA sub ecx,edx //计算相对偏移! f, y, M/ f1 M
0101BA81 894A FC mov dword ptr ds:[edx-4],ecx //修改引发异常处指令的操作数(它将使程序跳到0x0101ba87处)
* f5 Y- F: L7 r% R3 ?+ Z4 E2 Q0101BA84 33C0 xor eax,eax
6 K) T8 y# U. T0 D5 \1 T4 b0101BA86 C3 retn. }# V5 s5 e4 G4 b! N
0101BA87 B8 78563412 mov eax,12345678- W  ]  ^- C) }7 K0 n6 D& H
& I' {8 R' Z! Z- t1 }
通过对异常处理回调函数的分析,知道程序流程在异常处理结束后会来到0x0101ba87处,bp 0x0101ba87,F9到该断点处
# d# H! V* |9 }/ q8 W! V* m  T; c% b% i- v* s9 c5 D
0101BA87 B8 2EA801F1 mov eax,F101A82E
3 L: u  l8 x% m! J+ U. d% c6 j0101BA8C 64:8F05 00000000 pop dword ptr fs:[0]
8 p2 e" r; p# D4 a- |0101BA93 83C4 04 add esp,4 //删除刚才插入的异常处理项* G$ P  G5 s* x; p
0101BA96 55 push ebp
0 b1 H* X5 d. @' ~6 N. g0101BA97 53 push ebx
0 s& d" ~9 Y( V1 @: c6 q# e; q7 k* Y0101BA98 51 push ecx( I  {- b& q/ H6 [8 i  O
0101BA99 57 push edi9 ~9 `- T8 l1 G/ _, R- A
0101BA9A 56 push esi: N; B' q- a" g- X
0101BA9B 52 push edx //这片是真正的解压代码了,往下找对应的pop系列指令
+ `6 V+ _* H4 z; V# h  D1 p- Y0101BA9C 8D98 12120010 lea ebx,dword ptr ds:[eax+10001212]
4 y1 b! ^! S( l% W9 c: L0101BAA2 8B53 18 mov edx,dword ptr ds:[ebx+18]5 H) a; P3 B0 V1 L. E
0101BAA5 52 push edx
2 G/ G: F0 k+ P7 a1 d) T: }0101BAA6 8BE8 mov ebp,eax" z/ p/ V; X* n& h
0101BAA8 6A 40 push 40- ]+ h2 W4 q0 G" H6 G( h
0101BAAA 68 00100000 push 10008 k" a  H0 W. z) X
0101BAAF FF73 04 push dword ptr ds:[ebx+4]
* K; O( f; Y) Q) m0101BAB2 6A 00 push 0
( |. z- }; ?, \. s9 W1 K0101BAB4 8B4B 10 mov ecx,dword ptr ds:[ebx+10]
0 d1 J% F+ p9 q" j# G0101BAB7 03CA add ecx,edx
) C$ T) I, Z/ W3 A0101BAB9 8B01 mov eax,dword ptr ds:[ecx]
1 V/ O' t* H, r6 [0101BABB FFD0 call eax+ A! S; Y7 a, Z; z& z! E4 i
0101BABD 5A pop edx
" J( d- b$ x3 a6 \  p; Y0101BABE 8BF8 mov edi,eax: t; _0 f3 b, J, J7 S! z
0101BAC0 50 push eax0 p. `) V, j5 g" z, h. V9 k8 E
0101BAC1 52 push edx* C3 p. h; O" F. K  A4 a3 u& x
0101BAC2 8B33 mov esi,dword ptr ds:[ebx]* x6 h1 x! S+ X' ?5 W# y1 s
0101BAC4 8B43 20 mov eax,dword ptr ds:[ebx+20]) |! T' b  u6 o, v
0101BAC7 03C2 add eax,edx; v* P  F1 {9 a) a0 K
0101BAC9 8B08 mov ecx,dword ptr ds:[eax]# E4 ^, d  ~5 l( y
0101BACB 894B 20 mov dword ptr ds:[ebx+20],ecx
6 S! S  a' G" J0 Q0101BACE 8B43 1C mov eax,dword ptr ds:[ebx+1C]
- r! n# z% r& r) b1 _0101BAD1 03C2 add eax,edx
$ r1 H6 u: W8 A' h0101BAD3 8B08 mov ecx,dword ptr ds:[eax]
  W( s! O9 _3 t; p. ^* f. @& j0101BAD5 894B 1C mov dword ptr ds:[ebx+1C],ecx$ Z  D- F* k! q" i% t8 W* q
0101BAD8 03F2 add esi,edx
8 }% O1 N. h( C% E4 h( r0101BADA 8B4B 0C mov ecx,dword ptr ds:[ebx+C]
1 ~4 P. y" e- Y6 A0101BADD 03CA add ecx,edx
* ]9 o# K& L6 v) j' ~1 S" C/ [% D0101BADF 8D43 1C lea eax,dword ptr ds:[ebx+1C]
2 {5 r( g. N0 S1 I6 A- j0101BAE2 50 push eax$ v# y! D# l9 h) |: \. Q
0101BAE3 57 push edi
; K# m6 _8 H  P+ d4 ]7 B0101BAE4 56 push esi
8 r: a6 C% u" _5 U$ L3 R/ F0101BAE5 FFD1 call ecx
$ J7 H8 @* G9 a0101BAE7 5A pop edx
$ j" w4 W' ]+ e$ W0101BAE8 58 pop eax: }, X7 k8 T8 W6 z& S+ S2 S. n
0101BAE9 0343 08 add eax,dword ptr ds:[ebx+8]& Q+ V$ g  s0 S: d
0101BAEC 8BF8 mov edi,eax
; g& c6 l1 I! k- N- B* M+ G: `0101BAEE 52 push edx' e4 Q! V4 S" Y" i& R' ?
0101BAEF 8BF0 mov esi,eax
4 }0 D6 ^8 K; f+ e! L. v0101BAF1 8B46 FC mov eax,dword ptr ds:[esi-4]7 ]. h; d6 z3 F' |+ W  ]& x
0101BAF4 83C0 04 add eax,4
: L9 [  [* i6 L0101BAF7 2BF0 sub esi,eax
& u* M- W- I1 V% Z4 }& _0101BAF9 8956 08 mov dword ptr ds:[esi+8],edx
6 I+ t# f* G9 u7 e0101BAFC 8B4B 0C mov ecx,dword ptr ds:[ebx+C]
6 G% ^5 O+ L* U( x& w* R$ t0101BAFF 894E 14 mov dword ptr ds:[esi+14],ecx
* v7 _; \' _, U; b& x0101BB02 FFD7 call edi
# E5 Z  u2 J: S# |2 |0 f: v0101BB04 8985 FA120010 mov dword ptr ss:[ebp+100012FA],eax  @8 ^! [' C# v& T) ^# c
0101BB0A 8BF0 mov esi,eax$ C  x& y' m' M& ^. t0 Y4 F
0101BB0C 8B4B 14 mov ecx,dword ptr ds:[ebx+14]4 u0 k+ s/ p/ Y, J% k+ ?
0101BB0F 5A pop edx& p' I0 X, c1 u( `+ _
0101BB10 EB 0C jmp short NOTEPAD.0101BB1E
6 t* a2 F! ]& V0101BB12 03CA add ecx,edx: _' I$ J+ C$ T2 z$ E
0101BB14 68 00800000 push 80005 r/ P* f7 _5 B- u
0101BB19 6A 00 push 0/ @; a3 h4 Q/ Z1 b
0101BB1B 57 push edi5 K, c+ X) T# [. r- B
0101BB1C FF11 call dword ptr ds:[ecx]& M2 _" U( A7 }; Q6 Z2 k% @
0101BB1E 8BC6 mov eax,esi7 T& a6 K6 {  S1 H
0101BB20 5A pop edx
2 R) l7 w6 o4 v! n) B0101BB21 5E pop esi
  f+ b9 J% y  y0101BB22 5F pop edi
  J* i9 }  e9 C( g7 x1 m+ R0101BB23 59 pop ecx
- x0 v; ?* X: ]' ~0101BB24 5B pop ebx8 z) y' O  {& c, m; h3 v; y4 j
0101BB25 5D pop ebp //到这里真实的NOTEPAD代码被释放出来
6 v/ ?2 i0 O; V. X. K0101BB26 FFE0 jmp eax //F4运行到该处9 ?3 \7 X# _0 S7 Y7 a- b
9 r& ^4 x- i" d; ^% @
到这里只要在F7一下就到了真正的NOTEPAD程序了,dump下来,就OK了。' f3 V; B1 l* e0 d& {' _

" F! l# L7 E0 ^1 q+ W1 F' ~0 B  L. i* u+ a  Q; H3 |" w2 K
【 总结 】PECompact2.70脱壳步骤:
! K1 ?% w' k/ K" I- {4 R1 H+ {6 L1.OD加载程序,记下OD停处指令的第二个操作数xxxxxxxx,Ctrl + G到xxxxxxxx处. Y4 I' V9 u& I) o! d
2.从xxxxxxxx处Ctrl + F查找jmp eax指令3 {  p4 y/ k- y; u+ P3 L; l
3.F4运行到jmp eax处0 ~2 c$ J' u$ @8 D2 A9 x" ?/ z4 ]: @0 Y
4.F7步过一条指令
" Z7 [, |! e1 s. F5.Dump内存镜像
& M# ~+ f7 C7 b  x( g$ ^) Q6.完事收工
后期资源网,打造没有广告、免除隐藏回复的全开放式影视技术交流平台。 你的所求就是我们服务的宗旨!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-19 00:49 , Processed in 0.250198 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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