通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 网络编程 >> 文章正文
新版aspr脱壳方法(完全版)
责任编辑:admin   更新日期:2005-7-6
 
作者:jwh51  来自:看雪论坛

新版ASPR的加壳方法有了一些变化,用工具是脱不了了,所以写了这个,给大家一个简单的解决方案.
用OD载入,BP IsDebuggerPresent,F9,停了下来:
77E52740 >  64:A1 18000000  MOV    EAX, DWORD PTR FS:[18]
77E52746    8B40 30        MOV    EAX, DWORD PTR DS:[EAX+30]
77E52749    0FB640 02      MOVZX  EAX, BYTE PTR DS:[EAX+2]
77E5274D    C3              RETN

F8,到RETN之前这一行,看看[EAX+2],我是7FFDF002=01,
重新载入,把7FFDF002值改为0(这样可跳过ASPR对程序级调试的检查),F9,这时有异常会停下来,这时就用SHIFT+F9过,大约30次左右,你可看到这样的代码
00C23D5F    3100            XOR    DWORD PTR DS:[EAX], EAX
00C23D61    64:8F05 0000000>POP    DWORD PTR FS:[0]
00C23D68    58              POP    EAX
00C23D69    833D BC7EC200 0>CMP    DWORD PTR DS:[C27EBC], 0
00C23D70    74 14          JE      SHORT 00C23D86
00C23D72    6A 0C          PUSH    0C
00C23D74    B9 BC7EC200    MOV    ECX, 0C27EBC
00C23D79    8D45 F8        LEA    EAX, DWORD PTR SS:[EBP-8]
00C23D7C    BA 04000000    MOV    EDX, 4
00C23D81    E8 8ED2FFFF    CALL    00C21014
00C23D86    FF75 FC        PUSH    DWORD PTR SS:[EBP-4]
00C23D89    FF75 F8        PUSH    DWORD PTR SS:[EBP-8]
00C23D8C    8B45 F4        MOV    EAX, DWORD PTR SS:[EBP-C]
00C23D8F    8338 00        CMP    DWORD PTR DS:[EAX], 0
00C23D92    74 02          JE      SHORT 00C23D96
00C23D94    FF30            PUSH    DWORD PTR DS:[EAX]
00C23D96    FF75 F0        PUSH    DWORD PTR SS:[EBP-10]
00C23D99    FF75 EC        PUSH    DWORD PTR SS:[EBP-14]
00C23D9C    C3              RETN
这是典型的ASPR的最后一个异常。(两个JE加个RETN),这时不要SHIFT+F9了,不然程序会运行的。要用SHIFT+F7进入。这时会停在系统空间。用ALT+M打开MEMORY MAP,找到SYSTEM CLEAN所在的位置,第一个SECTION如下.
Address    size          section      contains
00401000  00161000                    code
在上面这个地方“右键—>set memory breakpoint on access"下个内存断点.然后F9运行,呵,你可发现,我们已经从壳的迷宫走出来了,(这个方法,再也不用象以前那样小心翼翼的F8F7了.)程序停在这:
00407278  - FF25 2CF35600  JMP    DWORD PTR DS:[56F32C]
0040727E    8BC0            MOV    EAX, EAX
00407280  - FF25 28F35600  JMP    DWORD PTR DS:[56F328]
00407286    8BC0            MOV    EAX, EAX
00407288  - FF25 24F35600  JMP    DWORD PTR DS:[56F324]
0040728E    8BC0            MOV    EAX, EAX
00407290  - FF25 20F35600  JMP    DWORD PTR DS:[56F320]
00407296    8BC0            MOV    EAX, EAX
00407298    50              PUSH    EAX
00407299    6A 40          PUSH    40
0040729B    E8 E0FFFFFF    CALL    SystemCl.00407280
004072A0    C3              RETN
这并不是程序的真正入口(入口位还远呢,这是ASPR的新特点),但是它给我们提供了一个很有用的信息,那就是IAT的位置(新版SAPR无法用importREC自动搜索IAT了),所以我们可以先 D 56F32C,让内存区定位在这里,去掉内存断点,F8,又回到壳中,不过没关系再按几下F8就又可从壳中回来的,回来后我们来到这:
0040734D    A3 68B65600    MOV    DWORD PTR DS:[56B668], EAX      ; SystemCl.00400000
00407352    A1 68B65600    MOV    EAX, DWORD PTR DS:[56B668]
00407357    A3 D8205600    MOV    DWORD PTR DS:[5620D8], EAX
0040735C    33C0            XOR    EAX, EAX
0040735E    A3 DC205600    MOV    DWORD PTR DS:[5620DC], EAX
00407363    33C0            XOR    EAX, EAX
00407365    A3 E0205600    MOV    DWORD PTR DS:[5620E0], EAX
0040736A    E8 C1FFFFFF    CALL    SystemCl.00407330
0040736F    BA D4205600    MOV    EDX, SystemCl.005620D4
00407374    8BC3            MOV    EAX, EBX
00407376    E8 75D8FFFF    CALL    SystemCl.00404BF0
0040737B    5B              POP    EBX
0040737C    C3              RETN
到这里我们要做3件事:
1.拿出LOADPE,把这个东东从内存DUMP出来DUMPED.EXE.
2,记下EBX的值560d08.
3,先修复好引入表,修复方法如下:
看看内存区在56f32c一块(别不记得为什么在这里了,上下找找,很快就可发现IAT的位置:56F21C--->56FBA4,大小为56FBA4-56F21C=988,
打开importREC,选中程序IAT的RVA填入16F21C,size:988,按下"获得输入信息",这时可找到一些指针,但还用很多无效,按"显示无效--->追踪层次1(分解),可修复大部分指针,还有一些得手动了,不过我发现用新版的ASPR插件竞可以全部修复(试了几个都可以,所以也就偷懒了,用ASPR插件修复,还有几个无效的指针其实是垃圾把它们CUT了(看看它们的值就知道是不是垃圾了).然后FIX DUMPED.EXE为DUMPED_.EXE.
下面就是修复入口处了.

回到原程序.按几下F8,过了RETN我们就来到程序入口了.
005613DF    0000            ADD    BYTE PTR DS:[EAX], AL
005613E1    0000            ADD    BYTE PTR DS:[EAX], AL
005613E3    0000            ADD    BYTE PTR DS:[EAX], AL
005613E5    0000            ADD    BYTE PTR DS:[EAX], AL
005613E7    0000            ADD    BYTE PTR DS:[EAX], AL
005613E9    0000            ADD    BYTE PTR DS:[EAX], AL
005613EB    E8 4C5FEAFF    CALL    SystemCl.0040733C
005613F0    FF15 84A15600  CALL    DWORD PTR DS:[56A184]            ; SystemCl.005608F0
005613F6    E8 BD39EAFF    CALL    SystemCl.00404DB8
005613FB    90              NOP
程序是停在5613F0,可以断定前面的CALL已运行过了.而且入口处和以前一样被
改成了0,我们要把它补回,但是新版入口的代码似乎不好找(如果谁发现更好的方法告诉我一声:-),不过看这个特点
是用D7写的,D7的代码特征是
PUSH EBP
MOV EBP,ESP
ADD ESP -10(也可能是ADD ESP -0C)
MOV EAX,******
所以只要找出最后这一句MOV,EAX,******,中的*****值就可以补回去了,还记得开始要大家记做的EBX的值560D08吗,它就是这里的值.这样我们就可以打开DUMP出并已经修复引入表的程序DUMPED_.EXE,把这一段代码补回去了,补完后是这样
005613E0 > $Content$nbsp; 55            PUSH    EBP
005613E1  .  8BEC          MOV    EBP, ESP
005613E3  .  83C4 F0      ADD    ESP, -10
005613E6  .  B8 080D5600  MOV    EAX, jjjj_.00560D08
005613EB  .  E8 4C5FEAFF  CALL    jjjj_.0040733C
005613F0  .  FF15 84A15600 CALL    DWORD PTR DS:[56A184]            ;  jjjj_.005608F0
005613F6  .  E8 BD39EAFF  CALL    jjjj_.00404DB8
保存后用LOADPE把入口点改成1613e0,OK,程序可以运行了.脱壳完成.




  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 爱国者安全网2007年度优秀版主评选
    普通文章 瑞星公司01月11日发布 每日计算机病毒及木马播报
    普通文章 破解博彩神助(专注彩票) V2.8.01
    推荐文章 推荐:跨站脚本执行漏洞代码的六点思路
    普通文章 Windows系统下的远程堆栈溢出 实战篇
    普通文章 Windows系统下的远程堆栈溢出 原理篇
    普通文章 MsSQLServer是如何加密口令的
    普通文章 浅谈国内的渗透评估过程
    普通文章 Dvbbs8.1 0DAY(通杀Access和mssql版本)
    普通文章 微软:我们的代码比赛门铁克更安全
    热门文章
    普通文章REAL蛀虫利用播放器漏洞下载恶意程序
    普通文章李彦宏:中国要在互联网领域逐渐超越美国
    普通文章马云:阿里巴巴的成功是一个生态链的成功
    普通文章Ingres用户认证非授权访问漏洞
    普通文章TCPreen FD_SET()函数远程栈溢出漏洞
    普通文章Winace UUE文件解压堆溢出漏洞
    普通文章Pclxav木马猎手第一代特征码引擎源代码
    普通文章IE收藏夹管理小精灵算法分析
    普通文章Extra Drive Pro算法分析历程
    普通文章雨过天晴自我注册
    精彩专题