ida动态调试的一些技巧小结

  • 动态调试是逆向分析中相当强大的一个功能,它是很多时候我们在静态分析遇到难点或者伪代码比较繁冗时候的一个首选解决方法。甚至之后遇到的一些关于代码保护的问题也可以用动态分析来大大让我们更快地分析更好地理解一段代码。(下文都以动调来称呼)

动调汇编相关的插件

keypatch:可以更方便对汇编区域的代码进行修改。
(如何安装:https://blog.csdn.net/fjh658/article/details/52268907)

动调的基本步骤

这里以程序文件(executable和elf文件)的ida动调过程为例子:

分析代码逻辑

  1. IDA打开之后对伪代码或是汇编区域进行一个大致的静态分析,然后在汇编区选择一些合适的地方下断点。如下简单例子:
    img
    静态分析出关键函数flag。
    img
    对应的汇编区域点处下一个断点。目的是程序运行到这里的时候可以步入进关键函数一步一步进行分析。

  2. 动调的第二步就是利用动调是程序运行过程中暂停程序的运行从而可观察程序运行时的内存状态这一点来分析,通过观察每一步前后的程序内存状态来获取每一步所进行操作的作用信息来得到一段代码的运行逻辑。
    img
    如上一段代码直接进行静态分析倒也是可以勉强看出来的,但是动调下就可以确实这里是干什么的了。
    img
    img
    img
    运行程序,输入测试字符串,运行到关键函数断点,步入进函数进行分析。
    img
    静态过程我们知道这段难分析的代码主要对v6进行相关操作。所以这里我们关注v6的值。
    img
    判断处我们动调到下一步的时候,直接进入到else里面了,所以上面的基本不用分析,逻辑是既然错误都进入到这里进行预处理,那么正确的字符串也会进入到这里预处理。
    进入这部分的第一个循环v6值还是传入字符串的第一个地址。

img
进入到第二个循环之后变成了剔除了前几个字符的指向指针了。
img
而进入到开始跟正确的flag相关的操作的时候,v6的值就变为最后字符产回车键的ascii值了。
img
v12存的原字符串偏移1的相对地址。
然后这里整理一下就可以分析出上面那段代码的逻辑其实就是获取字符串的末尾ascii值。然后与原字符串偏移1位的ascii相减得到一个ascii整值。

这题之后的逻辑并不难,不讲,注意环境就好。

posted @ 2025-11-20 19:01  喵老师哒哟  阅读(40)  评论(0)    收藏  举报