QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2258|回复: 0
打印 上一主题 下一主题

新版aspr脱壳方法(完全版)

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-6 09:50 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

作者:jwh51  来自:看雪论坛

/ y' E4 o) v) y! F- ~

, r6 E4 d9 {- O7 |% p& t 新版ASPR的加壳方法有了一些变化,用工具是脱不了了,所以写了这个,给大家一个简单的解决方案. 6 M3 h" Y+ E. l+ ~5 }7 A4 L用OD载入,BP IsDebuggerPresent,F9,停了下来: 4 ?! q4 i' h/ q$ I$ H5 G0 U 77E52740 > 64:A1 18000000 MOV EAX, DWORD PTR FS:[18] 5 ]$ X; ?- x& A8 Z" X* h) o# j 77E52746 8B40 30 MOV EAX, DWORD PTR DS:[EAX+30] 3 v4 Z) k/ x& i& |* o77E52749 0FB640 02 MOVZX EAX, BYTE PTR DS:[EAX+2] 9 U- r e1 S4 b4 v% Z3 o9 n( p77E5274D C3 RETN # A2 ^7 c0 s0 H$ q4 {% ]1 n5 ~7 y; l; ` F8,到RETN之前这一行,看看[EAX+2],我是7FFDF002=01, ! Z% w+ ]: F i+ R& {1 M重新载入,把7FFDF002值改为0(这样可跳过ASPR对程序级调试的检查),F9,这时有异常会停下来,这时就用SHIFT+F9过,大约30次左右,你可看到这样的代码 $ j. P- x4 E3 |; g, a9 [ 00C23D5F 3100 XOR DWORD PTR DS:[EAX], EAX 8 m- c6 b' J! N& `+ H: i00C23D61 64:8F05 0000000>OP DWORD PTR FS:[0] 5 L* o5 J) i9 b9 H' k8 f00C23D68 58 POP EAX - v7 ~% d: Q- a8 ~% E00C23D69 833D BC7EC200 0>CMP DWORD PTR DS:[C27EBC], 0 " y( ]" w( b4 T0 |* q. I! T 00C23D70 74 14 JE SHORT 00C23D86 $ J5 T0 s5 X9 T" w" s 00C23D72 6A 0C PUSH 0C ! f+ x( L, y+ r5 `, g* E. W 00C23D74 B9 BC7EC200 MOV ECX, 0C27EBC * y4 }6 f6 R( A D00C23D79 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8] g/ O; i( g6 [) J+ Z$ l8 a/ k( A; C00C23D7C BA 04000000 MOV EDX, 4 5 I% B! h8 e8 a5 `9 g7 h. \# D 00C23D81 E8 8ED2FFFF CALL 00C21014 ! P: u# {( x# q+ k2 Z% I 00C23D86 FF75 FC PUSH DWORD PTR SS:[EBP-4] & ]1 {' A, d, H! |, r4 X00C23D89 FF75 F8 PUSH DWORD PTR SS:[EBP-8] 7 H0 ~) S" l3 R00C23D8C 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C] ; K! c; _# g& L7 o 00C23D8F 8338 00 CMP DWORD PTR DS:[EAX], 0 ( W7 R f A1 i9 }! C 00C23D92 74 02 JE SHORT 00C23D96 $ y& b" j+ Z* j5 b 00C23D94 FF30 PUSH DWORD PTR DS:[EAX] + |4 }- n" ~7 X! _3 K0 b1 ` 00C23D96 FF75 F0 PUSH DWORD PTR SS:[EBP-10] % G7 r. [" n- j3 Q5 c 00C23D99 FF75 EC PUSH DWORD PTR SS:[EBP-14] , r% {1 g( C/ K _' ^5 E 00C23D9C C3 RETN , {2 \0 E$ j9 Q5 |这是典型的ASPR的最后一个异常。(两个JE加个RETN),这时不要SHIFT+F9了,不然程序会运行的。要用SHIFT+F7进入。这时会停在系统空间。用ALT+M打开MEMORY MAP,找到SYSTEM CLEAN所在的位置,第一个SECTION如下. & r4 h ?9 K( L# w- ?Address size section contains # C3 R* C% o7 M$ G5 T2 N00401000 00161000 code * `9 B# Z4 v6 S- @+ E* G3 a 在上面这个地方“右键—>set memory breakpoint on access"下个内存断点.然后F9运行,呵,你可发现,我们已经从壳的迷宫走出来了,(这个方法,再也不用象以前那样小心翼翼的F8F7了.)程序停在这: R+ C8 \7 @* E* N# ]0 @2 F 00407278 - FF25 2CF35600 JMP DWORD PTR DS:[56F32C] ) q# G! K# k* a6 p# O2 V 0040727E 8BC0 MOV EAX, EAX # x& C4 x D" h' R: m00407280 - FF25 28F35600 JMP DWORD PTR DS:[56F328] , w( w( q1 ]* \- M2 B: [ 00407286 8BC0 MOV EAX, EAX ! J$ m2 v+ A* T1 N! I: V: R 00407288 - FF25 24F35600 JMP DWORD PTR DS:[56F324] # I, N7 U8 G# M* Y+ P' B 0040728E 8BC0 MOV EAX, EAX ( f H3 l9 J* \1 R6 W, k7 m( @ 00407290 - FF25 20F35600 JMP DWORD PTR DS:[56F320] 4 I: g" {- w# w( ^, A00407296 8BC0 MOV EAX, EAX - L o5 X' m4 |# a( j2 J7 B: U7 a00407298 50 PUSH EAX # G% r2 b( C' f- ~! ^( z% l 00407299 6A 40 PUSH 40 ; Z( I3 ~# t9 n) ?& I. Z1 k3 O0040729B E8 E0FFFFFF CALL SystemCl.00407280 " h' O3 E( o& J$ S' \: {9 W 004072A0 C3 RETN , O, p# |2 T; l0 e0 G 这并不是程序的真正入口(入口位还远呢,这是ASPR的新特点),但是它给我们提供了一个很有用的信息,那就是IAT的位置(新版SAPR无法用importREC自动搜索IAT了),所以我们可以先 D 56F32C,让内存区定位在这里,去掉内存断点,F8,又回到壳中,不过没关系再按几下F8就又可从壳中回来的,回来后我们来到这: 9 o& z' \1 ]- a2 y& T9 ~, X 0040734D A3 68B65600 MOV DWORD PTR DS:[56B668], EAX ; SystemCl.00400000 : V, @5 h" c3 A4 a- R" T$ A& d 00407352 A1 68B65600 MOV EAX, DWORD PTR DS:[56B668] % I! A% y6 i7 N6 x0 _) s 00407357 A3 D8205600 MOV DWORD PTR DS:[5620D8], EAX ; R9 r. v0 m8 D% \! k0040735C 33C0 XOR EAX, EAX 2 v9 r2 }; a0 D) Q) L2 F0040735E A3 DC205600 MOV DWORD PTR DS:[5620DC], EAX , z7 w. A9 n" M; u" ? 00407363 33C0 XOR EAX, EAX 7 w0 g1 a6 x) T6 Q y7 j6 @9 j& @; u0 y 00407365 A3 E0205600 MOV DWORD PTR DS:[5620E0], EAX : b4 x/ a7 V* {( P4 ^# k. ? 0040736A E8 C1FFFFFF CALL SystemCl.00407330 1 z Z* \$ `& q5 |' o/ f% [ 0040736F BA D4205600 MOV EDX, SystemCl.005620D4 ) a1 p0 G: f! O8 @; t4 _$ y# W o00407374 8BC3 MOV EAX, EBX / @/ F& k1 ^ M00407376 E8 75D8FFFF CALL SystemCl.00404BF0 6 q4 S7 _( |" z& m 0040737B 5B POP EBX 0 a" x; D8 p4 W, I0040737C C3 RETN 7 n4 D! r2 _. W7 E- m到这里我们要做3件事: , ]4 e+ C! _* o( W* ~1.拿出LOADPE,把这个东东从内存DUMP出来DUMPED.EXE. 9 m, b' i. B, z6 e 2,记下EBX的值560d08. 4 p2 V q! R6 c- r! H! X7 Z! z' J3,先修复好引入表,修复方法如下: , E5 h! {1 q) T. C8 k5 U( ]# S 看看内存区在56f32c一块(别不记得为什么在这里了,上下找找,很快就可发现IAT的位置:56F21C--->56FBA4,大小为56FBA4-56F21C=988, 7 [# v; P6 a2 W9 ^3 b 打开importREC,选中程序IAT的RVA填入16F21C,size:988,按下"获得输入信息",这时可找到一些指针,但还用很多无效,按"显示无效--->追踪层次1(分解),可修复大部分指针,还有一些得手动了,不过我发现用新版的ASPR插件竞可以全部修复(试了几个都可以,所以也就偷懒了,用ASPR插件修复,还有几个无效的指针其实是垃圾把它们CUT了(看看它们的值就知道是不是垃圾了).然后FIX DUMPED.EXE为DUMPED_.EXE. , n5 Y; r1 M5 ]; \# |7 D下面就是修复入口处了. 7 h& w$ p. ]4 w7 k# M$ ` 3 [- B. ?- D- B$ {回到原程序.按几下F8,过了RETN我们就来到程序入口了. 4 |! u: M4 j9 x0 ?0 Q @5 h 005613DF 0000 ADD BYTE PTR DS:[EAX], AL 7 A6 F8 j) q: Z4 M6 O 005613E1 0000 ADD BYTE PTR DS:[EAX], AL - C% x8 e7 _8 x9 `2 R X/ G$ m6 K 005613E3 0000 ADD BYTE PTR DS:[EAX], AL # s5 k9 v3 w+ P* J: q" S9 T005613E5 0000 ADD BYTE PTR DS:[EAX], AL $ s" K! C; G/ c1 t005613E7 0000 ADD BYTE PTR DS:[EAX], AL ' ] Q" A$ y3 \, A4 R. Y005613E9 0000 ADD BYTE PTR DS:[EAX], AL - O# _2 ~4 C% Y* o) j( m8 z) J 005613EB E8 4C5FEAFF CALL SystemCl.0040733C 3 m9 z ]# d& n* j' F- m 005613F0 FF15 84A15600 CALL DWORD PTR DS:[56A184] ; SystemCl.005608F0 ( N4 N& k; r# I5 r 005613F6 E8 BD39EAFF CALL SystemCl.00404DB8 ) y2 X" ]6 k4 m' t$ L+ R) a 005613FB 90 NOP ( y$ ]6 i1 Q* f, V8 O程序是停在5613F0,可以断定前面的CALL已运行过了.而且入口处和以前一样被 ' O7 E. f& `6 j3 u4 o1 O 改成了0,我们要把它补回,但是新版入口的代码似乎不好找(如果谁发现更好的方法告诉我一声:-),不过看这个特点 % U9 N: p6 c; [% @ 是用D7写的,D7的代码特征是 " U: a% B- F4 p2 h* k% y) p PUSH EBP 3 T" z; y0 r. q$ t0 U* H7 UMOV EBP,ESP , q, V) V p7 Z" l; H& O$ Y) e* IADD ESP -10(也可能是ADD ESP -0C) ) i+ L5 o& U3 h' C, {2 _$ S MOV EAX,****** ' c/ @5 N$ d* T) {; M' @, q所以只要找出最后这一句MOV,EAX,******,中的*****值就可以补回去了,还记得开始要大家记做的EBX的值560D08吗,它就是这里的值.这样我们就可以打开DUMP出并已经修复引入表的程序DUMPED_.EXE,把这一段代码补回去了,补完后是这样 ( U6 q- A+ `& S) Z$ }6 E005613E0 > $Content$nbsp; 55 PUSH EBP ) K+ b4 Z) ?0 b# @3 p1 y; o005613E1 . 8BEC MOV EBP, ESP + `% Z8 P0 ]* R3 x" {8 ?005613E3 . 83C4 F0 ADD ESP, -10 % U; q' E- U2 J005613E6 . B8 080D5600 MOV EAX, jjjj_.00560D08 8 u# C0 |( R$ O$ q- d$ M" `7 V' Q 005613EB . E8 4C5FEAFF CALL jjjj_.0040733C & U* t0 i) T$ d( o005613F0 . FF15 84A15600 CALL DWORD PTR DS:[56A184] ; jjjj_.005608F0 3 P; W, s# h5 A( j p; J# E! V* r 005613F6 . E8 BD39EAFF CALL jjjj_.00404DB8 ; R$ w1 ^& \# B/ C/ f/ t( w2 [ 保存后用LOADPE把入口点改成1613e0,OK,程序可以运行了.脱壳完成. 8 N: p- U( i& B- V- R$ W

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-18 15:54 , Processed in 0.360462 second(s), 52 queries .

回顶部