QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

作者:jwh51  来自:看雪论坛

$ d+ T0 u" i" v& D9 ?

; s! h4 J! K( I1 H% e! M新版ASPR的加壳方法有了一些变化,用工具是脱不了了,所以写了这个,给大家一个简单的解决方案. 4 h6 h! ^( r) P- h& I用OD载入,BP IsDebuggerPresent,F9,停了下来: 4 L! D( J: |9 Q8 F5 N N2 h 77E52740 > 64:A1 18000000 MOV EAX, DWORD PTR FS:[18] 7 z* ^. \- A% ?77E52746 8B40 30 MOV EAX, DWORD PTR DS:[EAX+30] 8 g9 V& P1 z; J9 _! P77E52749 0FB640 02 MOVZX EAX, BYTE PTR DS:[EAX+2] - {# p; i% j; [* P1 l 77E5274D C3 RETN / m4 b" p( p) w " H" {( V) O7 o6 WF8,到RETN之前这一行,看看[EAX+2],我是7FFDF002=01, . T& {, ?; v- q 重新载入,把7FFDF002值改为0(这样可跳过ASPR对程序级调试的检查),F9,这时有异常会停下来,这时就用SHIFT+F9过,大约30次左右,你可看到这样的代码 O, n8 N m) f: b$ p 00C23D5F 3100 XOR DWORD PTR DS:[EAX], EAX # D3 d3 h3 w# v# V' g; w1 c1 F- ?00C23D61 64:8F05 0000000>OP DWORD PTR FS:[0] % U6 V9 `$ w6 S; f5 l; w00C23D68 58 POP EAX ; Z6 F3 k9 f6 E7 Q4 P( k4 `- m 00C23D69 833D BC7EC200 0>CMP DWORD PTR DS:[C27EBC], 0 4 K& Z7 E' u; a$ m2 m# d 00C23D70 74 14 JE SHORT 00C23D86 a- D$ |+ `7 W! ^+ n$ e0 n! K00C23D72 6A 0C PUSH 0C + w Z# F: w! U* e$ }8 D- b 00C23D74 B9 BC7EC200 MOV ECX, 0C27EBC - c+ d# E& D) [) X- w00C23D79 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8] * O; x. L% f7 L: B& \1 Y00C23D7C BA 04000000 MOV EDX, 4 2 L5 V( C( p% M6 C; k. Q9 V00C23D81 E8 8ED2FFFF CALL 00C21014 & Q3 H8 u1 ` i; [; g* f00C23D86 FF75 FC PUSH DWORD PTR SS:[EBP-4] : Y9 ]$ N' i& }3 N 00C23D89 FF75 F8 PUSH DWORD PTR SS:[EBP-8] + b) P$ s# }- G5 u5 F5 | 00C23D8C 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C] ' Q( R$ k* b( ^; J" f& X 00C23D8F 8338 00 CMP DWORD PTR DS:[EAX], 0 / L/ o* |- Y9 Y2 P V4 w1 V00C23D92 74 02 JE SHORT 00C23D96 8 ]- n. P# [. d. p+ Z( U 00C23D94 FF30 PUSH DWORD PTR DS:[EAX] & ~1 ]5 G, Y( F7 S7 x' ` 00C23D96 FF75 F0 PUSH DWORD PTR SS:[EBP-10] & I7 E0 U U9 r, ^00C23D99 FF75 EC PUSH DWORD PTR SS:[EBP-14] $ T* r9 c; j8 k 00C23D9C C3 RETN 4 F# Q) J2 A( e$ N; f. y$ _4 B这是典型的ASPR的最后一个异常。(两个JE加个RETN),这时不要SHIFT+F9了,不然程序会运行的。要用SHIFT+F7进入。这时会停在系统空间。用ALT+M打开MEMORY MAP,找到SYSTEM CLEAN所在的位置,第一个SECTION如下. 1 q9 P6 _& ]1 U( z# c4 XAddress size section contains `0 ^4 Z9 z/ i 00401000 00161000 code ) i. P. J3 b! l; H# O 在上面这个地方“右键—>set memory breakpoint on access"下个内存断点.然后F9运行,呵,你可发现,我们已经从壳的迷宫走出来了,(这个方法,再也不用象以前那样小心翼翼的F8F7了.)程序停在这: 8 w) i9 D! G' C: O/ D 00407278 - FF25 2CF35600 JMP DWORD PTR DS:[56F32C] + I3 i g, s6 ~1 V2 l n 0040727E 8BC0 MOV EAX, EAX 2 {% N* l2 S. ^+ z1 p; p+ b2 s00407280 - FF25 28F35600 JMP DWORD PTR DS:[56F328] % l% }, d# O7 D% A* J- m! f 00407286 8BC0 MOV EAX, EAX 5 u& t4 H' x R& [6 H4 y+ x G9 J00407288 - FF25 24F35600 JMP DWORD PTR DS:[56F324] 4 w- W% S1 E6 e& v" ?% b6 Q1 a0040728E 8BC0 MOV EAX, EAX 3 F% t+ m& { B5 h% {# P0 I" y 00407290 - FF25 20F35600 JMP DWORD PTR DS:[56F320] `9 } N: ^1 Q; N& n* e. J+ j. I00407296 8BC0 MOV EAX, EAX 9 G3 X. q1 r) z! P# r5 `00407298 50 PUSH EAX 9 C( n1 c/ v6 u8 J! P2 {* D 00407299 6A 40 PUSH 40 9 |7 O8 ^5 J) Y7 V( v$ j1 @7 L0040729B E8 E0FFFFFF CALL SystemCl.00407280 . H; A, z5 u4 G$ A% M8 \5 j 004072A0 C3 RETN + q) [, ]2 i: Y 这并不是程序的真正入口(入口位还远呢,这是ASPR的新特点),但是它给我们提供了一个很有用的信息,那就是IAT的位置(新版SAPR无法用importREC自动搜索IAT了),所以我们可以先 D 56F32C,让内存区定位在这里,去掉内存断点,F8,又回到壳中,不过没关系再按几下F8就又可从壳中回来的,回来后我们来到这: : X7 ^% o' b# g+ H7 ^9 E! y2 W0040734D A3 68B65600 MOV DWORD PTR DS:[56B668], EAX ; SystemCl.00400000 + ^. T7 W) P6 B( ]- O2 _; ^00407352 A1 68B65600 MOV EAX, DWORD PTR DS:[56B668] 8 o- D9 P% c* P: z' |: }$ @4 \9 U 00407357 A3 D8205600 MOV DWORD PTR DS:[5620D8], EAX / s4 y" V" F/ @6 x4 |, o4 W 0040735C 33C0 XOR EAX, EAX $ ^: Z* F8 h D# N3 ~' @' e0040735E A3 DC205600 MOV DWORD PTR DS:[5620DC], EAX $ a; V: f8 Q# a, {* q00407363 33C0 XOR EAX, EAX 7 u! Q- c4 K. h. ~$ u' e 00407365 A3 E0205600 MOV DWORD PTR DS:[5620E0], EAX ) X7 u9 d7 N0 G, o/ ^, h. O0040736A E8 C1FFFFFF CALL SystemCl.00407330 ! r, t- d: [3 D/ i- j4 W( p/ v0040736F BA D4205600 MOV EDX, SystemCl.005620D4 * }, q9 x; l- t( V! e. D+ p, h00407374 8BC3 MOV EAX, EBX & F- u) h6 N4 g4 o( m# j) M7 x 00407376 E8 75D8FFFF CALL SystemCl.00404BF0 1 z0 a9 U. D7 \/ p$ S+ `* W! x 0040737B 5B POP EBX . ?! j/ i( a! E' C: w 0040737C C3 RETN : D4 x& R5 \/ P5 P/ A/ h9 [ 到这里我们要做3件事: $ ^7 g2 e% U# O5 O$ a. T 1.拿出LOADPE,把这个东东从内存DUMP出来DUMPED.EXE. 1 L n) f1 b w2 |4 x7 | 2,记下EBX的值560d08. % r& ^' f( W) W* R3,先修复好引入表,修复方法如下: 5 o/ ^, X* _. K3 p- } 看看内存区在56f32c一块(别不记得为什么在这里了,上下找找,很快就可发现IAT的位置:56F21C--->56FBA4,大小为56FBA4-56F21C=988, ( @) `: f) l! }' b d7 p$ u打开importREC,选中程序IAT的RVA填入16F21C,size:988,按下"获得输入信息",这时可找到一些指针,但还用很多无效,按"显示无效--->追踪层次1(分解),可修复大部分指针,还有一些得手动了,不过我发现用新版的ASPR插件竞可以全部修复(试了几个都可以,所以也就偷懒了,用ASPR插件修复,还有几个无效的指针其实是垃圾把它们CUT了(看看它们的值就知道是不是垃圾了).然后FIX DUMPED.EXE为DUMPED_.EXE. 6 ~7 q% N: [) y7 l8 Z2 h: ]) ^$ X下面就是修复入口处了. / F+ Z7 D* l5 u0 [7 G( h; H d5 _% O( E% `: q3 `% w回到原程序.按几下F8,过了RETN我们就来到程序入口了. % z3 }5 k* K( G$ k005613DF 0000 ADD BYTE PTR DS:[EAX], AL $ b% M. U! |. T# `- c: m 005613E1 0000 ADD BYTE PTR DS:[EAX], AL L2 `, a/ x: L" N; @7 Q) ~005613E3 0000 ADD BYTE PTR DS:[EAX], AL 5 u) ?6 H+ m% ?4 B- }* l005613E5 0000 ADD BYTE PTR DS:[EAX], AL 1 \+ s2 |7 S! w9 I- I* f, o4 y 005613E7 0000 ADD BYTE PTR DS:[EAX], AL . [6 | ~1 \" X! T+ |005613E9 0000 ADD BYTE PTR DS:[EAX], AL 4 Q6 ]0 P& L5 Y6 t4 ]4 U 005613EB E8 4C5FEAFF CALL SystemCl.0040733C # r+ v- x9 Y" N" J6 m7 u/ U005613F0 FF15 84A15600 CALL DWORD PTR DS:[56A184] ; SystemCl.005608F0 ) I) S/ T+ D; i6 z. \ 005613F6 E8 BD39EAFF CALL SystemCl.00404DB8 m* n0 Z, S8 P h4 R4 q: w005613FB 90 NOP - X) I. f) I: {' V d7 Y程序是停在5613F0,可以断定前面的CALL已运行过了.而且入口处和以前一样被 ( f3 H: d$ w4 f* Y" k4 Q6 o2 L2 X 改成了0,我们要把它补回,但是新版入口的代码似乎不好找(如果谁发现更好的方法告诉我一声:-),不过看这个特点 * @, w5 {9 E5 D( s0 ^ 是用D7写的,D7的代码特征是 2 S4 m& g! V& l! ?PUSH EBP 2 I. D$ m- h& o: g9 w4 Q* XMOV EBP,ESP 6 `& i* }# C7 o1 [: hADD ESP -10(也可能是ADD ESP -0C) 2 ~& n/ S4 g; P MOV EAX,****** ; A; i! _* _ M所以只要找出最后这一句MOV,EAX,******,中的*****值就可以补回去了,还记得开始要大家记做的EBX的值560D08吗,它就是这里的值.这样我们就可以打开DUMP出并已经修复引入表的程序DUMPED_.EXE,把这一段代码补回去了,补完后是这样 - A% z8 s& }% {# N: N005613E0 > $Content$nbsp; 55 PUSH EBP " m/ {2 i& X: {, m: l0 ?! B 005613E1 . 8BEC MOV EBP, ESP 3 u" t- @! f: d! g6 N" D005613E3 . 83C4 F0 ADD ESP, -10 2 g3 L8 _% s9 R* \3 E005613E6 . B8 080D5600 MOV EAX, jjjj_.00560D08 , p9 x O1 q" K: N" ?) e4 o" o3 V; O5 B 005613EB . E8 4C5FEAFF CALL jjjj_.0040733C . D. [4 Y; q8 S; t6 _+ f: s- C 005613F0 . FF15 84A15600 CALL DWORD PTR DS:[56A184] ; jjjj_.005608F0 ; ^) |0 ?) R7 W) t( E7 R- l6 w2 \5 ~ 005613F6 . E8 BD39EAFF CALL jjjj_.00404DB8 - B4 m% F7 I3 s' Y% D9 ~! q保存后用LOADPE把入口点改成1613e0,OK,程序可以运行了.脱壳完成. 1 q L. a( A! x

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-6-15 08:00 , Processed in 0.351580 second(s), 52 queries .

回顶部