飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3671|回复: 5

[转贴] 实例解说带壳逆向分析程序

[复制链接]

该用户从未签到

发表于 2006-11-26 15:02:47 | 显示全部楼层 |阅读模式
现在软件加壳保护越来越普遍,有时候为了分析逆向一下程序都会费很多周折,特别是为了查找一些程序一些bug。而本文是通过逆向一个共享程序的注册流程来简述带壳分析的一些基本问题。
一、 带壳分析的可行性
现在市场主流的加壳软件可以分为压缩保护及加密保护,对于这两类保护,程序的一些可执行代码都会在某一时刻在内存中还原,这时就可以用一些汇编工具对这些代码进行反向分析了。对于压缩的保护,壳的代码会把可执行文件完全解压到内存中,然后再把控制权交还给可执行文件,这时就可以用动态调试器进行反汇编内存中的程序了。对于那些动态解密的程序,只要在它动态解密后能断下来(如解密的代码调用API,就可以用API作断点),就可以反汇编了。
二、 带壳分析的优点及不足
由于脱壳要花费一定的时间,对于一些要修复输入函数的程序更麻烦,带壳分析可以直接跳过脱壳这一步,可以省不少时间,同时还不用去深入研究那些日新月异加壳技术。另外对于一些带自校验的软件,我们也不用考虑修改那些校验点,还有些代码在壳里面的,我们也不用考虑去还原。
带壳分析也有很多不足,如你不能直接修改那些解压代码,还有就是加壳的代码都会有相应的反跟踪代码,所以带壳分析可能会触动那些反跟踪代码。
不过如果你觉得脱壳比较烦或者只是为了简单了解逆向软件,带壳分析不失也是一种方法。
三、 分析前准备的工作
首先得准备一个动态分析工具如softice或ollydbg,.其次得准备一些隐藏调试器的工具如ollydbg对应的隐身工具IsdebuggerPresent,softice的flogice及iceExc等,这些工具你都可以从网上免费获得。
四、 实例分析
这次我们实例分析一下一个共享程序的注册流程,这个软件是Advanced Maillist ManagerV1.0(下载地址:http://www.mailutilities.com/amm/?ammlnk)
1、先运行一下程序,了解一下程序的加密保护
初步了解可以发现程序是加了ASPROTECT1.22的壳,注册方式是系列号保护,输入错误的注册码会有出错提示,未注册有功能限制。
2、加载反汇编:
好了,这次我们用动态调试器ollydbg1.09D工具来加载它。F9运行后,再按CTRL+A进行反汇编(由于程序已经在内存中解压完毕了,这时就可以反汇编了)。反汇编完后,你可以搜索出错信息或用MessageBoxA下断,会来到这里:
0043FCD2 PUSH ECX
0043FCD3 PUSH AMM.0046A39C ; ASCII "Enter registration code:"
0043FCD8 PUSH AMM.0046A38C ; ASCII "Registration"
0043FCDD CALL EDI
0043FCDF PUSH EAX
0043FCE0 CALL AMM.0043FB90 ; 弹出输入框
0043FCE5 ADD ESP,14
0043FCE8 CMP EAX,1
0043FCEB JNZ SHORT AMM.0043FD42 判断是否输入注册码
0043FCED LEA EDX,DWORD PTR SS:[ESP+8] ; 注册码
0043FCF1 PUSH EDX
0043FCF2 CALL AMM.0043F870 ; 注册关键函数,F8进入
0043FCF7 MOV ESI,EAX
0043FCF9 ADD ESP,4
0043FCFC TEST ESI,ESI
0043FCFE JE SHORT AMM.0043FD2D 出错关键跳转
0043FD00 LEA EAX,DWORD PTR SS:[ESP+8]
…(省略)…
0043FD2D PUSH 30
0043FD2F PUSH AMM.0046A38C ; ASCII "Registration"
0043FD34 PUSH AMM.0046A348 ; ASCII "The code you've entered is invalid!"
0043FD39 CALL EDI
0043FD3B PUSH EAX
0043FD3C CALL DWORD PTR DS:[4613E4]
从以上分析可以看出,带壳分析与加壳分析基本没什么区别。
我们继续看注册过程,在0043FCED按F2下断,在弹出的注册输入框中输入注册码654321,然后点击注册,会断在这里:
0043FCED LEA EDX,DWORD PTR SS:[ESP+8] 断在这,在[esp+8]可以看到假码
0043FCF1 PUSH EDX
0043FCF2 CALL AMM.0043F870 ; 注册关键函数,F8进入
0043FCF7 MOV ESI,EAX
我们进入CALL AMM.0043F870看一下注册过程
0043F879 CALL AMM.0043EB70 ; md5初始值
0043F87E MOV EDX,DWORD PTR SS:[ESP+74]
0043F882 OR ECX,FFFFFFFF
0043F885 MOV EDI,EDX
0043F887 XOR EAX,EAX
0043F889 REPNE SCAS BYTE PTR ES:[EDI]
0043F88B NOT ECX
0043F88D DEC ECX
0043F88E PUSH ECX
0043F88F LEA ECX,DWORD PTR SS:[ESP+1C] ; md5初始值
0043F893 PUSH EDX
0043F894 PUSH ECX
0043F895 CALL AMM.0043EBA0
0043F89A LEA EDX,DWORD PTR SS:[ESP+24]
0043F89E LEA EAX,DWORD PTR SS:[ESP+14]
0043F8A2 PUSH EDX
0043F8A3 PUSH EAX
0043F8A4 CALL AMM.0043EC50 ; 计算输入注册码的md5值
0043F8A9 LEA ECX,DWORD PTR SS:[ESP+1C]
0043F8AD PUSH ECX
0043F8AE CALL AMM.0043F800 ; 关键,注册成功标志入eax,F8进入
0043F8B3 ADD ESP,1C
0043F8B6 POP EDI
0043F8B7 ADD ESP,68
继续进入这个0043F8AE CALL AMM.0043F800来到这里
0043F82D MOV ESI,DWORD PTR SS:[ESP+1C] ; md5值
0043F831 MOV ECX,4
0043F836 MOV EDI,EDX
0043F838 XOR EAX,EAX
0043F83A REPE CMPS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI] ; 与预置表中的md5值比较,比较是否相等
0043F83C JE SHORT AMM.0043F846
0043F83E INC EBX
0043F83F ADD EDX,10
0043F842 CMP EBX,EBP ; 共有1000个内置的注册码md5值
0043F844 JL SHORT AMM.0043F82D
0043F846 MOV EAX,DWORD PTR SS:[ESP+14]
0043F84A POP EDI
0043F84B POP ESI
0043F84C PUSH EAX
0043F84D CALL AMM.00451C71
0043F852 MOV EAX,DWORD PTR SS:[ESP+C]
0043F856 ADD ESP,4
0043F859 CMP EBX,EAX
0043F85B POP EBP
0043F85C JNZ SHORT AMM.0043F865 关键跳,要成功必须跳走,这里就是爆破点
0043F85E XOR EAX,EAX
0043F860 POP EBX
0043F861 ADD ESP,8
0043F864 RETN
0043F865 LEA EAX,DWORD PTR DS:[EBX+1] 注册成功标志
0043F868 POP EBX
0043F869 ADD ESP,8
0043F86C RETN
可以看到程序是把输入的注册码求其md5值,再与内置的1000个真码md5值比较,如相等则注册成功。由于md5是单向不可反推,要成功注册,只能用穷举或爆破,或制作内存补丁。到此这个程序的注册流程分析完毕。
五、 总结
从以上实例分析可以看出,带壳分析完全是可行,一个高明的cracker要善于抓住对手问题的关键,用最快捷、最优美的方式进行解决。
PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2024-2-21 13:53
  • 签到天数: 624 天

    [LV.9]以坛为家II

    发表于 2006-11-26 21:51:14 | 显示全部楼层
    "带壳分析也有很多不足,如你不能直接修改那些解压代码" 是这个情况,哪应该如何修改呢?
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-5-3 19:45
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    发表于 2007-6-23 15:08:44 | 显示全部楼层
    原帖由 kangaroo 于 2006-11-26 21:51 发表
    "带壳分析也有很多不足,如你不能直接修改那些解压代码" 是这个情况,哪应该如何修改呢?


    我也有这个问题

    楼主

    如何?
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-6-24 13:15:58 | 显示全部楼层
    原帖由 avel 于 2007-6-23 15:08 发表


    我也有这个问题

    楼主

    如何?



    不是可以SMC吗?不过我不会
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-6-24 13:17:04 | 显示全部楼层
    今天才知道不用脱壳直接下API也可以破解
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-12-8 13:11
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2007-12-2 10:08:38 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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