逆向分析之核心代码的定位

逆向分析中,定位核心代码是一项关键任务。本文介绍了四种方法:1) 堆栈回溯,利用已知API调用来找到未知函数;2) 字符串搜索,通过核心代码中使用的字符串来定位;3) 二进制字串搜索,推测并寻找特定机器码模式;4) 读写断点,针对访问特定地址的代码设置断点。这些策略能有效帮助在庞大的二进制流中快速定位目标函数。
摘要由CSDN通过智能技术生成

逆向一般是带有强烈的目的性的, 比如逆出一个程序的某种功能的实现函数,或者是逆出一个程序的流程等等.
要完成这样的功能就需要定位到具体的函数上, 然后才能分析其代码,否则在庞大的二进制流中, 信息的获取必定是极其艰难的.
在庞大的二进制流中找到一个地址未知的函数. 需要推测这个函数的一些特征,没有特征就很难定位到这个函数. 因为在庞大的二进制流中有着上万乃至数十万行以上的机器码,在这里面使用常规的方法找到几百行特定的机器码是非常耗时耗力的.
所以, 必须要推测出函数的一些特征,才能快速定位到核心代码处.
一般一个函数的特征会有:
• 这个函数将会完成什么样的功能,在完成这些功能的时候调用了什么 API.
• 使用了容易搜索出的字符串.
• 有一些特定的机器码等等.
• 读写了特定的地址.
• 只要是稍微异于其他代码的特征都可以.

对于第 1点特征, 可以使用堆栈回溯找到核心代码.
对于第 2点特征, 利用到的是字符串搜索找到核心代码.
对于第 3点特征, 利用到的是二进制字串搜索找到核心代码.
对于第 4点特征, 利用到的是硬件读写断点或软件读写断点.

1 关于堆栈回溯的原理:
有两个函数 UnKnownFunction(), 和 WellKnowFunction(), 其中, 已知条件有:
• UnKnownFunction 代码的地址是未知的.
• WellKnowFunction代码的地址是已知的.
• 在 UnKnownFunction函数的代码中, 有调用 WellKnowFunction函数的语句.
现在, 需要找出 UnKnownFunction 代码的地址.
• 从第3条已知条件中可以得到一个信息, 当 WellKnowFunction函数被调用时, 有可能就是在 UnlKnowFunction函数中调用的, 如果 WellKnowFunction函数被调用,那么在栈中就一定保存着返回地址(call WellKnowFunction

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值