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

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

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

[复制链接]
发表于 2013-1-4 11:23:35 | 显示全部楼层 |阅读模式
【 标题 】 PECompact2.70脱壳* |0 G, ^' z; N1 v
【 作者 】 linxer
, [2 e5 J+ S3 z9 o3 T【破解平台】 Win2k3 English Version
( ]4 A$ G$ D) \" ]3 A【脱壳工具】 OllyDbg v1.10 + OllyDump插件) o# p& F; q  N# y
【待脱软件】 Win2k3自带NOTEPAD(用PECompact2.70加壳)
! v8 U' T' q* b$ a- e, |【 声明 】 初学脱壳,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!: s, D. a3 `) r! S7 M! a/ @, t
% N! p, g; B# Q* R9 I
OD异常设置忽略所有异常4 o. |1 o# k8 a& v

& O" v+ ], Q$ E01001000 N> B8 64BA0101 mov eax,NOTEPAD.0101BA64 //OD载入后停于此处! Q& K* p- x- R# N' B/ O! {% e. d. @7 `
01001005 50 push eax //向堆栈中压入一个异常处理回调函数地址(底下发生内存访问异常,将会调用这个函数), h  i) p( \! @+ |% z
01001006 64:FF35 00000000 push dword ptr fs:[0]2 I: s, K. Z( v; G$ K
0100100D 64:8925 00000000 mov dword ptr fs:[0],esp //向SEH链中插入一个异常处理项/ |+ [& r4 h# T' t7 B9 Y" j
01001014 33C0 xor eax,eax+ [5 d1 v6 A! `8 ?. k0 Q* d
01001016 8908 mov dword ptr ds:[eax],ecx //内存访问异常' F5 D1 E" j+ x+ Q. S5 L

5 Q$ S( r9 B& I$ H" h由上面的代码知,bp 0x0101BA64,F9运行到该断点+ |; o9 }9 F% {6 y

" T0 ~  q0 |, C8 F+ n4 @( R底下就是异常处理回调函数的代码了
- R$ o2 `4 ]# o( i# [0101BA64 B8 2EA801F1 mov eax,F101A82E4 Q& L) a+ d" ]2 l: G
0101BA69 8D88 59120010 lea ecx,dword ptr ds:[eax+10001259] //此指令执行后ecx为0x0101ba87,注意这是retn指令后的第一条指令地址
9 r3 H4 H' |( ], {; |) t0101BA6F 8941 01 mov dword ptr ds:[ecx+1],eax //修改0x0101ba87处mov指令的操作数
9 O$ G4 q* a3 {. |1 l0101BA72 8B5424 04 mov edx,dword ptr ss:[esp+4] //取EXCEPTION_RECORD结构地址
. J' I" Y# V* }1 O  o* R0101BA76 8B52 0C mov edx,dword ptr ds:[edx+C] //取发生异常指令的地址(就是上面的0x01001016)
$ t3 o- i4 A$ W; w1 T4 Z3 I. f0101BA79 C602 E9 mov byte ptr ds:[edx],0E9 //修改引发异常处指令的opcode为jmp(0xe9,它的操作数是四字节的)
4 F7 o% I- v* U' n0101BA7C 83C2 05 add edx,5 //edx是引发异常处的下条指令地址
& `: p" x% M5 E3 A& V0101BA7F 2BCA sub ecx,edx //计算相对偏移
3 p( V$ F6 [7 E0101BA81 894A FC mov dword ptr ds:[edx-4],ecx //修改引发异常处指令的操作数(它将使程序跳到0x0101ba87处)
  O1 V  i- M& m: E0101BA84 33C0 xor eax,eax
: p9 D7 L- C' r3 S7 k. M0101BA86 C3 retn2 y' b! J! S  n/ O( a
0101BA87 B8 78563412 mov eax,12345678
3 O& t3 V9 R" {6 l+ ?) K
1 j- o9 d% J* [# L通过对异常处理回调函数的分析,知道程序流程在异常处理结束后会来到0x0101ba87处,bp 0x0101ba87,F9到该断点处% e- ?6 M- m) k* i5 |

7 E3 E: Z) v5 {  T, ~9 Q+ D2 m9 A2 G0101BA87 B8 2EA801F1 mov eax,F101A82E
" C! Z4 m$ C. z+ O3 v7 J: d0 p0101BA8C 64:8F05 00000000 pop dword ptr fs:[0]9 v& x  t& t- a/ D7 Y; b  T# X
0101BA93 83C4 04 add esp,4 //删除刚才插入的异常处理项
6 ~7 [8 q3 E. e" J( x" |" x9 A4 u0101BA96 55 push ebp
3 c+ }: V, w( Q, e0101BA97 53 push ebx* z, {6 M9 z7 n0 Q0 U/ |% p
0101BA98 51 push ecx
' c* P5 b& O5 V6 r3 `: p2 V) b* ]' u0101BA99 57 push edi6 c$ o+ b; P# p8 M& S2 @
0101BA9A 56 push esi
! @/ {5 I8 G* q' ]/ w0101BA9B 52 push edx //这片是真正的解压代码了,往下找对应的pop系列指令
, L* E( o. e$ q! Y7 O( N0101BA9C 8D98 12120010 lea ebx,dword ptr ds:[eax+10001212]
1 {0 ^% J' K+ z$ @, J4 Z0101BAA2 8B53 18 mov edx,dword ptr ds:[ebx+18]
: m" J2 a/ Y6 \) b0101BAA5 52 push edx  Y! P. `  d6 @0 g( i
0101BAA6 8BE8 mov ebp,eax
) i0 n) d, x" a7 Y4 |0101BAA8 6A 40 push 40
% T" w% ]7 t' }- t" I2 |0101BAAA 68 00100000 push 1000# X# s/ ^2 \0 k/ [, q3 f4 }
0101BAAF FF73 04 push dword ptr ds:[ebx+4]% d( g. I9 C1 c1 ?# F
0101BAB2 6A 00 push 0; y* x5 X5 a6 \/ q. ?& Q% w7 ?) j
0101BAB4 8B4B 10 mov ecx,dword ptr ds:[ebx+10]* L4 l- o* F0 d
0101BAB7 03CA add ecx,edx3 p( i8 b" ?* S& E& m; @
0101BAB9 8B01 mov eax,dword ptr ds:[ecx]; K% T. U" r8 {
0101BABB FFD0 call eax
5 E" e  C2 x* j% T0101BABD 5A pop edx
. g: v5 Q: h7 ?% H0101BABE 8BF8 mov edi,eax; Y; K* F+ V+ g; I, _, C( y7 z
0101BAC0 50 push eax) m8 t% g4 ]  f$ e6 ^; b; x+ \
0101BAC1 52 push edx. g  Z/ r( L1 i  v
0101BAC2 8B33 mov esi,dword ptr ds:[ebx]
6 `5 P9 R$ E. z6 Z+ B) t0101BAC4 8B43 20 mov eax,dword ptr ds:[ebx+20]; \. c  d$ {6 W8 P
0101BAC7 03C2 add eax,edx
4 f" j% {. q# V/ |2 b' I; K6 ?% m& O9 i0101BAC9 8B08 mov ecx,dword ptr ds:[eax]' w9 {0 G/ x. z( m/ N: {& Y
0101BACB 894B 20 mov dword ptr ds:[ebx+20],ecx
' L5 [* Z6 j) O1 f0101BACE 8B43 1C mov eax,dword ptr ds:[ebx+1C]
6 @7 i9 Y3 Q, d* q0101BAD1 03C2 add eax,edx
, x, n9 S4 I, Z! Y. y0101BAD3 8B08 mov ecx,dword ptr ds:[eax]
( Y: n) z; f# `" B4 B; w4 X0101BAD5 894B 1C mov dword ptr ds:[ebx+1C],ecx' z: T3 s1 O; D' h8 k
0101BAD8 03F2 add esi,edx4 ?; w9 e1 X( g& S$ ^
0101BADA 8B4B 0C mov ecx,dword ptr ds:[ebx+C]" L. ?8 \4 G" m/ w
0101BADD 03CA add ecx,edx( N8 }, B! D% o* y; \/ v6 |
0101BADF 8D43 1C lea eax,dword ptr ds:[ebx+1C]
0 M/ l8 L4 n) J0101BAE2 50 push eax  T5 D) v, J# a! q
0101BAE3 57 push edi1 _9 G& Q6 }% s% L1 D
0101BAE4 56 push esi5 u% V) b$ F6 A5 D0 {" S  x
0101BAE5 FFD1 call ecx' ?) d' `3 C2 _7 I7 k* ]4 d  }
0101BAE7 5A pop edx- `* Y# A& D( D6 J7 E1 q  O% p
0101BAE8 58 pop eax% r6 r' p8 q# Y3 U' M
0101BAE9 0343 08 add eax,dword ptr ds:[ebx+8]
. _  `) P+ F3 o/ j! U' U0101BAEC 8BF8 mov edi,eax" A; m; {5 q) i( X/ q* c, f  B
0101BAEE 52 push edx& [9 ]5 W& e' O
0101BAEF 8BF0 mov esi,eax# \$ ?' U  B, U+ y
0101BAF1 8B46 FC mov eax,dword ptr ds:[esi-4]
; f  |) ~: m( q  _' w0101BAF4 83C0 04 add eax,4
" _! y& @5 m3 i# ~0 T0101BAF7 2BF0 sub esi,eax& F' p2 z+ F) I, q6 n) q
0101BAF9 8956 08 mov dword ptr ds:[esi+8],edx* r; i6 C) {# b- y' P
0101BAFC 8B4B 0C mov ecx,dword ptr ds:[ebx+C]5 s% o- o0 R! T  w1 z( \
0101BAFF 894E 14 mov dword ptr ds:[esi+14],ecx% A, |$ Y5 m% ^% }
0101BB02 FFD7 call edi
; E& e  B' v1 q! q6 p- s7 Z! q0101BB04 8985 FA120010 mov dword ptr ss:[ebp+100012FA],eax
4 ]; b3 [9 I$ g0101BB0A 8BF0 mov esi,eax
& L% d+ V  {1 q6 N. c& ?8 N4 B7 d% Y1 N0101BB0C 8B4B 14 mov ecx,dword ptr ds:[ebx+14]
0 [4 e; ]: ?. h; C" l9 V0101BB0F 5A pop edx" |. s0 K& H; Y
0101BB10 EB 0C jmp short NOTEPAD.0101BB1E9 _' t+ F' f7 X5 [
0101BB12 03CA add ecx,edx+ j% N" ?: N" I  ^0 U& ?, u4 F: s
0101BB14 68 00800000 push 8000% `& o" T; w7 A/ [8 t; t- p% r
0101BB19 6A 00 push 0
7 V* l# c6 S! _% f$ ~1 l0101BB1B 57 push edi  @, X3 g% U) z& R9 v
0101BB1C FF11 call dword ptr ds:[ecx]7 h) q% C" _( t0 l7 S) Z
0101BB1E 8BC6 mov eax,esi
8 e8 ?5 K' u. x0101BB20 5A pop edx
4 I; ~) H4 y  c$ V$ j0101BB21 5E pop esi4 F  C1 }' \2 o! }( i
0101BB22 5F pop edi1 B( ]5 ~, ]3 d2 ~
0101BB23 59 pop ecx6 v. T1 S8 Q5 r! ^) ~
0101BB24 5B pop ebx
! }2 M8 p6 h+ E7 N; k- o0101BB25 5D pop ebp //到这里真实的NOTEPAD代码被释放出来8 |8 f: j- v4 e3 Y
0101BB26 FFE0 jmp eax //F4运行到该处. Y, r  y$ ]* z
& w" _' z' D+ B+ }/ o
到这里只要在F7一下就到了真正的NOTEPAD程序了,dump下来,就OK了。7 t' M( a0 |) D* C8 L
0 e" R2 w0 R! S# K
" z+ n+ W5 d5 {, y7 _4 i
【 总结 】PECompact2.70脱壳步骤:* X/ {* f2 }* t4 @
1.OD加载程序,记下OD停处指令的第二个操作数xxxxxxxx,Ctrl + G到xxxxxxxx处6 t8 Q1 N( f  ?8 X% R7 N; U- @" p' J
2.从xxxxxxxx处Ctrl + F查找jmp eax指令- \/ w  q. I* B
3.F4运行到jmp eax处
0 r- r$ G3 Y& [8 a4.F7步过一条指令
; W7 W5 g  Q# E$ e: e% W/ F  m5.Dump内存镜像
/ \- T( V0 h1 N6.完事收工
后期资源网,打造没有广告、免除隐藏回复的全开放式影视技术交流平台。 你的所求就是我们服务的宗旨!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-18 17:04 , Processed in 0.115361 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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