当前位置:   article > 正文

逆向分析总结

逆向分析

逆向分析的两大基本功:

· 核心代码的分析(分析反汇编代码).

· 核心代码的定位.

 

2. 核心代码的定位

    逆向一般是带有强烈的目的性的比如逆出一个程序的某种功能的实现函数,或者是逆出一个程序的流程等等. 

    要完成这样的功能就需要定位到具体的函数上然后才能分析其代码,否则在庞大的二进制流中信息的获取必定是极其艰难的.

    在庞大的二进制流中找到一个地址未知的函数需要推测这个函数的一些特征,没有特征就很难定位到这个函数因为在庞大的二进制流中有着上万乃至数十万行以上的机器码,在这里面使用常规的方法找到几百行特定的机器码是非常耗时耗力的.

    所以必须要推测出函数的一些特征,才能快速定位到核心代码处.

    一般一个函数的特征会有:

· 这个函数将会完成什么样的功能,在完成这些功能的时候调用了什么 API.

· 使用了容易搜索出的字符串.

· 有一些特定的机器码等等.

· 读写了特定的地址.

· 只要是稍微异于其他代码的特征都可以.

 

对于第 1点特征可以使用堆栈回溯找到核心代码.

对于第 2点特征利用到的是字符串搜索找到核心代码.

对于第 3点特征利用到的是二进制字串搜索找到核心代码.

对于第 4点特征利用到的是硬件读写断点或软件读写断点.

 

2.1 关于堆栈回溯的原理:

有两个函数 UnKnownFunction(),  WellKnowFunction(), 其中已知条件有:

· UnKnownFunction 代码的地址是未知的.

· WellKnowFunction代码的地址是已知的.

·  UnKnownFunction函数的代码中有调用 WellKnowFunction函数的语句.

现在需要找出 UnKnownFunction 代码的地址.

· 从第3条已知条件中可以得到一个信息 WellKnowFunction函数被调用时有可能就是在 UnlKnowFunction函数中调用的如果 WellKnowFunction函数被调用,那么在栈中就一定保存着返回地址(call WellKnowFunction,call语句先把下一条语句的首地址压栈,然后才跳转到WellKnowFunction函数中), 这个返回地址将会返回到 WellKnowFunction函数被调用的地址.

· 根据第二条已知条件可知, WellKnowFunction函数的地址是已知的因此可以在这个函数中下断点当这个函数被中断时就可以根据栈中的返回地址找到这个函数执行完后将会返回到的地方(也就是调用这个函数的语句之后).

· 因此利用这一点可以找到程序的核心代码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/90517
推荐阅读
相关标签
  

闽ICP备14008679号