动态调试ELF文件Crackme
Posted Clark的个人博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态调试ELF文件Crackme相关的知识,希望对你有一定的参考价值。
文件运行
文件放入虚拟机 /root 目录下
查看文件信息
修改文件属性,添加可执行
运行
带命令行参数运行
IDA 动静结合调试
静态分析
查看文件信息
使用32位IDA打开这个程序
跟踪call main 发现跟到了交叉引用
跟踪main 上一条的offset,有一个流程图
具体行为
基本上流程也就这些了,接下来进行动态调试
动态调试
调试器设置
命令行参数传递
设置断点
程序运行状态
重新设置参数动态观察
直接验证
总结
文件放入虚拟机 /root 目录下
查看文件信息
修改文件属性,添加可执行
运行
带命令行参数运行
IDA 动静结合调试
静态分析
查看文件信息
使用32位IDA打开这个程序
跟踪call main 发现跟到了交叉引用
跟踪main 上一条的offset,有一个流程图
具体行为
基本上流程也就这些了,接下来进行动态调试
动态调试
调试器设置
命令行参数传递
设置断点
程序运行状态
重新设置参数动态观察
直接验证
总结
文件运行
文件放入虚拟机 /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的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段
Android 逆向使用 Python 代码解析 ELF 文件 ( PyCharm 中进行断点调试 | ELFFile 实例对象分析 )