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

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

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

[复制链接]
发表于 2013-1-4 11:23:35 | 显示全部楼层 |阅读模式
【 标题 】 PECompact2.70脱壳# Q  ^; q3 e5 y( R6 c% T$ H2 G) `7 ^
【 作者 】 linxer
, a1 H& r' s, d) z/ Z# d+ \【破解平台】 Win2k3 English Version2 o/ z0 O" q3 p
【脱壳工具】 OllyDbg v1.10 + OllyDump插件/ n; i% b1 O8 ~" C/ X
【待脱软件】 Win2k3自带NOTEPAD(用PECompact2.70加壳)
4 y4 w! {$ K4 M6 X9 \【 声明 】 初学脱壳,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
4 \' @, f3 f; r; U; a! f: s! N% ^; H3 q( l/ T, D' V$ d  y
OD异常设置忽略所有异常
. s* {3 V6 |/ m6 O5 Q+ A. X# n! p0 z9 `0 X6 ]
01001000 N> B8 64BA0101 mov eax,NOTEPAD.0101BA64 //OD载入后停于此处2 f" ~2 I, f$ s3 g: |2 B4 m
01001005 50 push eax //向堆栈中压入一个异常处理回调函数地址(底下发生内存访问异常,将会调用这个函数)
1 h' t' h& V* E  m/ `6 F$ b01001006 64:FF35 00000000 push dword ptr fs:[0]. L0 m6 H2 d/ t* V4 l
0100100D 64:8925 00000000 mov dword ptr fs:[0],esp //向SEH链中插入一个异常处理项
5 N) }  @& R0 z1 o  T01001014 33C0 xor eax,eax2 ^) X0 j. m7 x+ i  [/ f
01001016 8908 mov dword ptr ds:[eax],ecx //内存访问异常
; u/ r, \2 W; G  `) r, P6 \" Z
5 z, ^9 G7 x6 g$ d6 U, p- w) j由上面的代码知,bp 0x0101BA64,F9运行到该断点
0 [- c  Q' @5 \. s' D, b& c0 M- {; L
底下就是异常处理回调函数的代码了
2 G6 Q! K% W- J0 L, c( C$ l* v! Z0101BA64 B8 2EA801F1 mov eax,F101A82E" V0 j2 S, x8 z- T# q0 [' c* N
0101BA69 8D88 59120010 lea ecx,dword ptr ds:[eax+10001259] //此指令执行后ecx为0x0101ba87,注意这是retn指令后的第一条指令地址% u2 ]7 Z" p) p0 ?* W! E) y. n
0101BA6F 8941 01 mov dword ptr ds:[ecx+1],eax //修改0x0101ba87处mov指令的操作数
" n  ]* v: R# l- @6 Q( @0101BA72 8B5424 04 mov edx,dword ptr ss:[esp+4] //取EXCEPTION_RECORD结构地址
2 |7 N8 E( D2 M+ O/ T5 V. U! ]0101BA76 8B52 0C mov edx,dword ptr ds:[edx+C] //取发生异常指令的地址(就是上面的0x01001016)
7 f& R  Q- `+ z# S8 L8 n0101BA79 C602 E9 mov byte ptr ds:[edx],0E9 //修改引发异常处指令的opcode为jmp(0xe9,它的操作数是四字节的)1 x6 Y0 h7 e8 ^9 Y2 [" ^! V2 `( `
0101BA7C 83C2 05 add edx,5 //edx是引发异常处的下条指令地址/ ~( u4 {7 n# {5 j$ b
0101BA7F 2BCA sub ecx,edx //计算相对偏移, b3 c9 c( F4 Y( p% }" a! p/ x# w
0101BA81 894A FC mov dword ptr ds:[edx-4],ecx //修改引发异常处指令的操作数(它将使程序跳到0x0101ba87处)
% O+ d0 \/ _: x0101BA84 33C0 xor eax,eax6 W5 B0 B& o: p* a8 v$ K  t
0101BA86 C3 retn6 y$ H& T/ w' _% z( C
0101BA87 B8 78563412 mov eax,12345678
+ [$ C0 u$ \; T# g: T7 `; a- m6 r- B: C2 b4 {
通过对异常处理回调函数的分析,知道程序流程在异常处理结束后会来到0x0101ba87处,bp 0x0101ba87,F9到该断点处
+ M4 t- C/ l* O  @
9 w: j% \! F7 S& w, v  E5 x: H9 i0101BA87 B8 2EA801F1 mov eax,F101A82E
5 N8 o; j7 ?  K) ]0101BA8C 64:8F05 00000000 pop dword ptr fs:[0]% r, _7 @8 P0 Y6 a2 c
0101BA93 83C4 04 add esp,4 //删除刚才插入的异常处理项
9 ]- p2 [' e" {" _% u0101BA96 55 push ebp
$ a8 b9 Z" D& y! p% ]0101BA97 53 push ebx
% p) k7 t! N# [, Z0101BA98 51 push ecx0 B$ u/ [7 F! L  J2 S
0101BA99 57 push edi
& ]! Q, a/ M" K) G0101BA9A 56 push esi
3 O) J! S. ?* I5 {0101BA9B 52 push edx //这片是真正的解压代码了,往下找对应的pop系列指令
8 S4 X( A8 W: J4 u; E' ~9 n) F0101BA9C 8D98 12120010 lea ebx,dword ptr ds:[eax+10001212]# L3 {! L' a" n) ?) P
0101BAA2 8B53 18 mov edx,dword ptr ds:[ebx+18]& W$ L7 E( I0 W" t4 x6 ]
0101BAA5 52 push edx0 P! [- {5 V% |  {4 A2 R' x7 q
0101BAA6 8BE8 mov ebp,eax( U3 ~6 }9 x# O3 y4 r( y# ~( z
0101BAA8 6A 40 push 40
* ]6 K" ~4 ~/ b& `8 M+ X1 c" L0101BAAA 68 00100000 push 1000
! K0 J( _; h. Z5 P4 ^/ l0101BAAF FF73 04 push dword ptr ds:[ebx+4]
  E( v4 |/ V9 {# Z, F* \3 N0101BAB2 6A 00 push 0& Q; _" e1 u* z. I" q
0101BAB4 8B4B 10 mov ecx,dword ptr ds:[ebx+10]% u; }* c: @  M- x$ \) ?
0101BAB7 03CA add ecx,edx
/ H$ M7 s9 ]8 p: y0101BAB9 8B01 mov eax,dword ptr ds:[ecx]% ]- q6 |/ Q; |% A8 T: \+ G& N
0101BABB FFD0 call eax, ^+ t: [8 ?3 b7 n  r, Z' D
0101BABD 5A pop edx
3 o5 |5 m% T  e& {0 E0101BABE 8BF8 mov edi,eax$ t7 v) G0 G- `+ j+ D$ I: Z3 w
0101BAC0 50 push eax$ ~0 M( E0 ?3 }# |5 a
0101BAC1 52 push edx
( m  u  \! |/ C! J' K0101BAC2 8B33 mov esi,dword ptr ds:[ebx]
* o" m! R' ~& v! q& i0101BAC4 8B43 20 mov eax,dword ptr ds:[ebx+20], d. t2 E6 u- ~6 G  e5 w2 p
0101BAC7 03C2 add eax,edx1 @' J) Y5 _4 I/ W  \" D* K
0101BAC9 8B08 mov ecx,dword ptr ds:[eax]
7 i" @1 Y# p. Z) F8 t0101BACB 894B 20 mov dword ptr ds:[ebx+20],ecx
3 j" e5 G8 [" K( k0101BACE 8B43 1C mov eax,dword ptr ds:[ebx+1C]% D1 s. A1 `: x1 `# r0 f. W
0101BAD1 03C2 add eax,edx
. n& p- d( W1 T) I, g0101BAD3 8B08 mov ecx,dword ptr ds:[eax], Q- z7 l+ `4 L. |' l
0101BAD5 894B 1C mov dword ptr ds:[ebx+1C],ecx5 L# T, N# }1 r9 O: h+ \/ s  k
0101BAD8 03F2 add esi,edx
: S/ N; H+ S3 I' W+ S' a3 m0101BADA 8B4B 0C mov ecx,dword ptr ds:[ebx+C]/ w6 y0 j6 I/ ^( |7 V/ W( P
0101BADD 03CA add ecx,edx
) V: n2 o0 r1 E& y+ r- L0101BADF 8D43 1C lea eax,dword ptr ds:[ebx+1C]
. }& L. Z' M" ?* W+ ^4 Y0101BAE2 50 push eax  `! f! O% I& y7 P) }' _% P
0101BAE3 57 push edi, P9 M9 F0 J1 l2 Q: p
0101BAE4 56 push esi! K( L2 o) Q' b7 s; J3 g2 a
0101BAE5 FFD1 call ecx7 p, _9 q) {; ~
0101BAE7 5A pop edx, M, w" f' N" ?* b
0101BAE8 58 pop eax
  f/ N4 o- Q0 v. ]9 r) C; K0 j+ K/ K6 Q0101BAE9 0343 08 add eax,dword ptr ds:[ebx+8]& n& p( y8 X3 B3 E6 c- h- m' i
0101BAEC 8BF8 mov edi,eax) n, m+ a9 ^9 L; I
0101BAEE 52 push edx6 x5 H& P. Y$ m  G9 R
0101BAEF 8BF0 mov esi,eax; v) s% u, V7 g4 r1 D$ i+ ?
0101BAF1 8B46 FC mov eax,dword ptr ds:[esi-4]8 p9 S9 C. f0 T% C) o
0101BAF4 83C0 04 add eax,4
, y9 j$ O7 n/ O; D! u3 a; F0 o0101BAF7 2BF0 sub esi,eax, t  E# p, S, f  Z% v
0101BAF9 8956 08 mov dword ptr ds:[esi+8],edx" F: m( Z/ p- Q2 b$ I
0101BAFC 8B4B 0C mov ecx,dword ptr ds:[ebx+C]: Z: e, ^4 U# g2 }4 [
0101BAFF 894E 14 mov dword ptr ds:[esi+14],ecx8 @  }* v; b4 y
0101BB02 FFD7 call edi( k8 x9 J6 r% k. x) Q. Q
0101BB04 8985 FA120010 mov dword ptr ss:[ebp+100012FA],eax
/ C8 I( l3 f7 ^- R+ W& E1 N0101BB0A 8BF0 mov esi,eax
5 r) S% c6 I  B9 O; S0101BB0C 8B4B 14 mov ecx,dword ptr ds:[ebx+14]
* M: z3 Q7 n" b; v$ g3 i0101BB0F 5A pop edx
1 y% o$ I' S' c. \0101BB10 EB 0C jmp short NOTEPAD.0101BB1E
6 J7 W& B/ X' d7 ~, k0101BB12 03CA add ecx,edx
9 r* m8 t. A: X7 H0 Q0101BB14 68 00800000 push 8000& E9 G" i. J; O  I" o
0101BB19 6A 00 push 0* ^3 G1 R; M: m* F% k1 T' P$ d
0101BB1B 57 push edi2 k3 C* [( }/ W/ g( p$ i2 }5 B' C
0101BB1C FF11 call dword ptr ds:[ecx]# n* q- X0 ~$ y0 M
0101BB1E 8BC6 mov eax,esi. O) o9 H( H2 G: A
0101BB20 5A pop edx& D" T6 K0 W8 Y4 ?; D
0101BB21 5E pop esi
# b5 C9 p2 l) h: t& B0101BB22 5F pop edi
4 ]( Y" o) Q4 G7 u- G0101BB23 59 pop ecx! K& N9 E7 k  r
0101BB24 5B pop ebx
- s# N8 F: [* b# U  t5 j% s2 s0101BB25 5D pop ebp //到这里真实的NOTEPAD代码被释放出来" M/ h. J9 k+ [$ t) h0 r
0101BB26 FFE0 jmp eax //F4运行到该处
5 ]) S. ]% s# w9 c/ U) I* N
, j1 e" I" D6 Z6 T1 D- C/ [到这里只要在F7一下就到了真正的NOTEPAD程序了,dump下来,就OK了。" J8 i6 i& C8 p, \) a1 N

! s" }) d* P7 ~6 }  Y" T3 m( l: Y/ y0 v/ `( b
【 总结 】PECompact2.70脱壳步骤:
3 Z9 P9 [# P" L8 H% ~& X1.OD加载程序,记下OD停处指令的第二个操作数xxxxxxxx,Ctrl + G到xxxxxxxx处+ N  G, G3 t' \$ _3 K/ q, p4 Y
2.从xxxxxxxx处Ctrl + F查找jmp eax指令' s: |$ d0 Z6 ^' c, C
3.F4运行到jmp eax处( v7 H1 k: N! U9 @. g/ ^
4.F7步过一条指令& N( d; x6 X& ~' y7 G
5.Dump内存镜像* e$ B5 I5 o( N. k' [) R9 R
6.完事收工
后期资源网,打造没有广告、免除隐藏回复的全开放式影视技术交流平台。 你的所求就是我们服务的宗旨!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-3 00:37 , Processed in 0.126199 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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