动态调试ELF文件Crackme

文件运行

文件放入虚拟机 /root 目录下

查看文件信息

是读写属性

修改文件属性,添加可执行

运行

大致意思是:运行时需要输入命令行参数 --key <内容> 

带命令行参数运行

提示错误的key

IDA 动静结合调试

静态分析

查看文件信息

使用32位IDA打开这个程序

跟踪call main 发现跟到了交叉引用

跟踪main 上一条的offset,有一个流程图

具体行为

先申请了一个内存空间

命令行参数的比较

为--key的时候 不跳转,然后取出第二个命令行参数。比较完不为 --key 后,要进行下一轮的比较,继续往下观察

对另一个字符串做了个操作 而这个字符串刚好是第二个命令行参数

对字符串(乱码)做了些操作并输出猜测是解密函数,有可能是输出正确或者错误的提示

观察对字符串做操作的函数

会对申请的空间做一些操作,可以下断点在calloc处,观察后续 对这个内存的操作

基本上流程也就这些了,接下来进行动态调试

动态调试

调试器设置

命令行参数传递


直接写参数,多个参数以空格间隔

设置断点

比较命令行参数处设置断点

除去 --key 比较第二个参数的函数

解密字符串caloc处下断点,需要它的返回值EAX

循环结束后设置一个断点,观察内存变成什么样了

程序运行状态

点击运行按键
两条警告后弹出一个选择调试信息文件(经尝试选择原文件本身就可以了)

比较key的地方

与明文字符串比较的地方

比较完之后对比 EAX的值 跟踪接下来的流程

解密字符串 F7 进入上边的 CALL 804853B
caloc 后内存窗口跟踪EAX的值,F9 到函数结束的地方

所以,应该传入的参数是hello15

重新设置参数动态观察

比较完长度,比较完每一个字符后,返回1

跟踪接下来的解密 函数F9 到函数结束处的断点

解密出正确的提示

直接验证

总结

这个简单小程序复习了Linux的一些常用操作指令,如:

文件的信息    ls -l         readelf -h Crackme
文件属性的修改    chmode 777 Crackme
可执行文件的运行:    ./Crackme
Linux下IDA 的静态分析和动态分析方法

由于这个IDA6.4版本不能直接F5 查看C语言代码,可以在Windows下静态分析完,再到Linux 下进行测试,不过,还是希望进行直接看汇编代码。熟能生巧嘛!
原文地址:https://www.cnblogs.com/by-clark/p/9129633.html