mymwy 发表于 2020-11-13 14:28

Crackme004逆向分析

本帖最后由 mymwy 于 2020-11-13 20:38 编辑

   新人报到,新开第一帖。这是我本学期逆向分析一门课的课程作业,逆向分析Crack004。首先是运行程序。
https://gitee.com/mymywxy/pic-go/raw/master/img/20201113195652.png
提示如下:

https://gitee.com/mymywxy/pic-go/raw/master/img/20201112112146.png

使用Delphi反编译工具Darkde4,得到下图结果:


https://gitee.com/mymywxy/pic-go/raw/master/img/20201112112651.png


可以看到Panel1有两个方法,单击和双击,是一个按钮
进入事件:

https://gitee.com/mymywxy/pic-go/raw/master/img/20201112112811.png



FromCreate   窗体的创建事件
chkcode          校验代码

KeyUp         响应的键盘的弹起

DbClick   按钮的双击事件

Click         按钮的单击事件得到了几个事件的RVA,接下来进行分析

由于OD反汇编Delphi程序的能力较弱,所以我先用IDR反汇编该程序得到map文件,然后加载到OD中

通过上述分析得到了几个事件的RVA,接下来进行分析,首先是Click事件:拖入OD右键复制Click的RVA打开OD,ctrl + G 粘贴点击OKhttps://gitee.com/mymywxy/pic-go/raw/master/img/20201112113701.pngF2设置断点,运行测试。输入一组用户名和注册码,双击之后单步调试。https://gitee.com/mymywxy/pic-go/raw/master/img/20201112140012.png出现用户名:https://gitee.com/mymywxy/pic-go/raw/master/img/20201112142833.png此处getText为获取用户名。https://gitee.com/mymywxy/pic-go/raw/master/img/20201112143548.png获取用户名长度,用户名长度+0x1E(30)https://gitee.com/mymywxy/pic-go/raw/master/img/20201112143729.png出现“32”https://gitee.com/mymywxy/pic-go/raw/master/img/20201112142859.png字符串拼接:https://gitee.com/mymywxy/pic-go/raw/master/img/20201112143817.png循环0x13次:https://gitee.com/mymywxy/pic-go/raw/master/img/20201112140104.png关键跳转:https://gitee.com/mymywxy/pic-go/raw/master/img/20201112145259.png可以得到此事件中的主要行为:
[*]获取用户名
[*]获取用户名长度 将长度加上0x1E
[*]将长度转为字符串
[*]字符串拼接 拼接为长度+用户名+循环次数
[*]整个算法循环18次 最后的结果如上图
[*]的值必须是0x85

分析双击事件:
https://gitee.com/mymywxy/pic-go/raw/master/img/20201112145256.png
获取长度
长度+0x9
长度转str
循环:
https://gitee.com/mymywxy/pic-go/raw/master/img/20201112145715.png
字符串拼接:长度+用户名+循环次数
https://gitee.com/mymywxy/pic-go/raw/master/img/20201112145759.png和0x3E作比较,如果成立,就把赋值为0x85,也就满足了单击事件的条件
的值必须为0x3E接着分析chkcode,事实上问题的关键也在这里https://gitee.com/mymywxy/pic-go/raw/master/img/20201112150217.png此处设置断点运行注册码刚输入1就停住了,分析:https://gitee.com/mymywxy/pic-go/raw/master/img/20201112195848.png发现关键语句https://gitee.com/mymywxy/pic-go/raw/master/img/20201112150157.png验证了我们前面的分析,此处将的值赋为0x3E关键语句:https://gitee.com/mymywxy/pic-go/raw/master/img/20201112231657.png
https://gitee.com/mymywxy/pic-go/raw/master/img/20201113202606.png此处edx应该就是存放注册码的寄存器了可以据此制作内存注册机,使用Keymakehttps://gitee.com/mymywxy/pic-go/raw/master/img/20201113201801.png验证:https://gitee.com/mymywxy/pic-go/raw/master/img/20201113201912.pnghttps://gitee.com/mymywxy/pic-go/raw/master/img/20201113201950.png接着分析算法https://gitee.com/mymywxy/pic-go/raw/master/img/20201113202905.png让我们看看0x951C68处是什么数据窗口右键转到0x951C68处,下写入断点https://gitee.com/mymywxy/pic-go/raw/master/img/20201113202749.png发现程序断在https://gitee.com/mymywxy/pic-go/raw/master/img/20201112222617.pngkeyup中统计输入字符故算法为:首先获取用户名长度 然后将用户名长度+5,接着进行字符串拼接 拼接方式为黑头Sun Bird(用户名长度+5)dseloffc-012-OK(用户名),拼接好的字符串就是密码。写出算法注册机(需java环境)运行效果https://gitee.com/mymywxy/pic-go/raw/master/img/20201113203446.png注:此程序用户名为空也可以输入注册码后需要双击和单击才能出现图片,对应我们分析的双击和单击事件

Hmily 发表于 2020-11-13 15:59

好乱呀,看这个学习下编辑图片到正文中吧https://www.52pojie.cn/misc.php?mod=faq&action=faq&id=29&messageid=36

mymwy 发表于 2020-11-13 19:53

Hmily 发表于 2020-11-13 15:59
好乱呀,看这个学习下编辑图片到正文中吧https://www.52pojie.cn/misc.php?mod=faq&action=faq&id=29&messa ...

好哒,第一次发帖,还不太熟悉{:1_937:}

Hackilog 发表于 2020-11-14 19:40

厉害啊,学习学习了

shr123 发表于 2020-11-14 22:04

楼主我看你不像新注册的新手啊,这技术我都看不懂……
我都注册几个月了

Lester576 发表于 2020-11-15 15:11

学习到了 楼主介绍的十分详细太感谢了

mymwy 发表于 2020-11-15 16:51

shr123 发表于 2020-11-14 22:04
楼主我看你不像新注册的新手啊,这技术我都看不懂……
我都注册几个月了

很多都是在《加密与解密》中学的,加上这学期修了一门逆向分析课,就稍微会一点:lol

shr123 发表于 2020-11-15 16:52

mymwy 发表于 2020-11-15 16:51
很多都是在《加密与解密》中学的,加上这学期修了一门逆向分析课,就稍微会一点

哦~那么楼主加油
页: [1]
查看完整版本: Crackme004逆向分析