动态调试ELF文件Crackme

Posted Clark的个人博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态调试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 下进行测试,不过,还是希望进行直接看汇编代码。熟能生巧嘛!

以上是关于动态调试ELF文件Crackme的主要内容,如果未能解决你的问题,请参考以下文章

020 Android之so文件动态调试

GDB动态调试攻防世界Simple-Check-100

GDB动态调试攻防世界Simple-Check-100

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段

记录一次安卓动态调试lib库

Android 逆向使用 Python 代码解析 ELF 文件 ( PyCharm 中进行断点调试 | ELFFile 实例对象分析 )