简介:
文章首发于云众可信:https://www.sec-in.com/article/661
看雪上一道Re的crackme题目,参考了lantie@15PB老师的帖子。是一个很有意思的程序,可以学到很多。
1. 初步试探
1.1 初步试探之——运行
1 | 运行程序,尝试各种用户名和密码组合,测试报错格式及关键字 |
1.2 初步试探之——查壳
1 | 基本信息: |
1 | 查看导入表信息: |
1.3 初步试探之——定位
1 | 动态调试,找到程序入口点 |
1 | 事件按钮函数与报错关键字 |
1 | 按钮事件起始地址:00401410 |
2. 动静结合
2.1 IDA分析之——F5
1 | IDA定位至起始地址:401410,查看可获取基本信息 |
1 | 可用OD动态调试,验证猜想 |
1 | IDA分析4015E0处代码 |
1 | data_start:解密的起始地址 |
2.2 OD调试之——代码跟踪
1 | 动态跟踪call 4015E0处的代码 |
1 | 402010为402000调用完之后返回解密的起始地址 |
1 | .text1 如果足够了解PE结构,就可以发现这是一个专门添加的区段 |
1 | 继续往下,运行至401614处,查看EBP寄存器值 |
1 | 关键信息: |
2.3 IDA分析之——提取代码
1 | 解密函数:4015A0 |
1 | 求hash函数:401550 |
1 | InitHashTable函数代码分析 |
1 | 确定变量g_hashTable的大小 |
1 | g_hashTabe地址 |
1 | g_IsInit地址 |
1 | 计算大小:404550-404150 = 0x400 |
2.4 代码分析之——暴力破解
1 | 编写代码注意事项: |
1 | // 1. 将源代码拷贝到新的缓冲区中 |
1 | 优化循环 |
1 | 优化代码: |
1 | 完整暴力破解hash值代码 |
3. 分析代码
3.1 OD调试之——dump内存
1 | 使用OD动态跟踪函数,当输入的密码前4位为BEEF时,内存中会正确解密代码,然后完成对用户名和密码前4位之后的验证和判断 |
3.2 动静结合之——函数解析
1 | IDA结合OD,多次组合判断函数作用 |
1 | 402800处函数:对用户名的16进制数据和常量字符串201510261314的16进制数据进行混合计算 |
1 | 4021A0处函数:将传入的密码每两个字节转为一个16进制数据,并与0x86进行异或,传入的值不为0-F即返回0 |
3.3 完整注册机编写
1 | # -*- coding: utf-8 -*- |
4. 总结
这个题目从OD、IDA等分析工具的使用,到VS、python代码的编写,是一个很综合的题目。动态调试和静态分析可以说是完美的结合了起来,方方面面的能力都可以得到锻炼。强烈推荐自己去学习一遍。
5. 感谢
最后,非常感谢 lantie@15PB 师傅的帖子,写的异常详细,考虑到了各种问题。帖子的链接已放在文章下面,强推!!!
1 | https://bbs.pediy.com/thread-221038.htm |
本文作者:
foxcookie
发布时间: 2020-11-18
最后更新: 2023-07-21
本文标题: 看雪Re_翩若惊鸿
本文链接: https://foxcookie.github.io/2020/11/18/看雪Re-翩若惊鸿/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
发布时间: 2020-11-18
最后更新: 2023-07-21
本文标题: 看雪Re_翩若惊鸿
本文链接: https://foxcookie.github.io/2020/11/18/看雪Re-翩若惊鸿/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!