当前位置:首页 > 软件逆向分析过程中基于ollydbg的三种汇编代码定位方法
软件逆向分析过程中
基于OllyDbg的三种汇编代码定位方法 【摘要】软件逆向分析技术在信息安全领域发挥着至关重要的作
用。软件逆向分析过程中,对汇编代码的定位速度极大地影响着工作效率。本文以OllyDbg为调试工具,结合具体的实例,总结和分析了三种汇编代码定位思路。
【关键字】逆向分析;汇编代码;代码定位;OllyDbg 中国分类号:IP393.09 引言
软件逆向分析技术在恶意代码调查、软件漏洞挖掘、电子取证、软件维护等领域中发挥着至关重要的作用。在对软件进行逆向分析的过程中,不同的源代码编译的可执行文件都会被无差别的反编译成汇编语言。分析过程中,根据具体情况对具体汇编代码进行定位的速度,极大的影响着软件逆向分析的工作效率。
然而,编译器在编译源代码时,会添加包括启动函数在内的额外
代码:软件的原创者可能会加入干扰性的代码或垃圾代码:一些压缩器和保护器更是会对可执行文件进行处理。这些因素,都给你想分析中的汇编代码定位带来额外的困难和挑战。如何高效的定位汇编代码,一直是逆向分析工作人员重点关注的问题。
本文结合具体的实例,对3中常用的汇编代码定位方法进行了
分析和总结。
方法1---单步再现法
1.1原理与思路
此方法依赖于程序的可重现性。通过逐条执行汇编语句重现出要定位的事件,锁定代码位置。 1.2实例
图一 输入错误的密码弹出的对话框
在某软件登录操作时,如果输入了错误的密码,会弹出如图一的对话框。
现欲定位此对话框弹出时所对应的代码位置,可通过OllyDbg的单步调试功能(快捷键F8)逐条执行汇编代码,并通过输入错误密码的方式重现出图一中的对话框弹出事件,此时代码窗口中对应的位置4010CF处的CALL00401000指令,就是我们的要定位的位置(如图二所示)
1.3适用情况与局限性。
当事件可以被明确的重现出来时,可以优先考虑通过单步再现法逐条执行汇编代码来定
位,对于程序中的一些逻辑复杂、不容易被明确的重现的事件,此方法往往效率很低,而且不适用。
方法2---字符串定位法
2.1原理与思路
程序运行时,程序中引用的静态字符串会被加载到进程内存中。可通过观察这些字符串在代码中的那些位置被引用,提高汇编代码调试效率。
2.2实例
图三 All referenced text strings
通过OllyDbg右键菜单中的Search for-Allreferenced text strings选项,可调出如图3所示的列表窗口,列表中显示了程序中引用的静态字符串及其地址。
可通过这个列表,结合断点跟踪等调试手段,提高调试效率。 2.3 适用情况
当程序中出现明确已知的字符串时,可通过此方法提高调试效率,此方法往往与其他方法配合使用。
3 方法3---API定位法
3.1原理与思路
编程经验丰富的逆向分析人员,往往会根据程序执行时的特征,大致推测出程序调用了那些系统API,可通过重点追踪某个具体的API来验证推测。定位代码。
3.2实例--跟踪程序代码中调用的API
图4 Found intermodular calls
通过OllyDbg右键菜单中的Search for- All intermodular calls选
项,可调出如图4所示的列表窗口,列表中显示了程序内部调用的系统API。
可以死通过具体跟踪某个API来锁定某些有特征的事件所对应的代码。如:通过重点跟踪MessageBoxA被调用的地址来追踪对话框被调用的事件。
3.3 实例2 --对DLL代码库的断点跟踪
经过压缩器、保护器处理过的可执行文件,其
API调用列表往
往不会出现在上述的Found intermodular calls列表中。
共分享92篇相关文档