wangzhiyuyeshou 发表于 2022-4-16 20:52

换换口味,我第一个MFC程序

本人第一个Cracke程序,用C++编写。什么都没做,单纯的release生成的文件。
花了我很多心思写这个程序,看看强度如何。哈哈

网盘链接:链接:https://pan.baidu.com/s/1n9qACLZ6kTapsbpl6eiasA提取码:uex2

xiaoyu2032 发表于 2022-4-20 00:39

本帖最后由 xiaoyu2032 于 2022-4-20 16:11 编辑

输入错误有错误弹窗提示,因此优先考虑在弹窗下断点,在CODE区按Ctrl+N查找当前模块中的名称,找到MessageBoxW函数,右键“在每个参考上设置断点”,这样可以下到3个断点。

运行,输入错误信息,登录,断在4036F8位置,该处即为错误弹窗。(另外两个断点一个是注册按钮的弹窗,一个是参数错误的弹窗)

一直往上翻,翻到4033E0位置,可以确定为关键函数的入口地址。

关键函数代码段很长,F8单步跟踪走一遍,应该能发现下图位置的代码在对字符串进行比较。

比较的内容看寄存器区域可以发现是两个长度为40的字符串,其中一个是随输入用户名变化而变化的,另一个是不变的。

初步猜测是sha1加密字符串,将用户名“111”做sha1加密,发现和其中一条一致,因此可以确定为sha1加密比较。
字符串搜索:常用字符串搜索大法,OD中使用智能搜索,找不到任何有效的提示字符串,但是用搜索UNICODE,可以搜索到“不可以为空”、“不可以空”、“为了美观,未实现”等提示字符串,意外的可以发现其中还有一个字符串是“wangzhiyu52pojie”,拿去sha1一下,发现命中,这个就是正确的用户名了。

其实在程序运行后,在内存中搜索“you are wrong”和“you Success”也是能找到的,但是尝试过在内存中设断点,不大好用,断的次数太多,找不到位置(可能我没掌握技巧)。
以上是比较容易分析出来的结果,接下来的验证过程,由于程序里面设计了反反复复好多重的验证,F8单步跟踪很容易迷失方向,因此需要多找一些参照点来进行定位,包括错误提示代码段、正确提示代码段,这样才便于判断哪些是关键跳转,避免改错到程序异常。
错误弹窗代码段前面已经找到了,正确提示代码段怎么找呢?
根据作者给出的成功界面,成功时界面上的按钮和输入框等控件都不显示了,只显示“you Success”字符串,因此成功时程序应该是对这些字符串进行了隐藏操作(还有一种可能是对主界面进行了隐藏操作,然后另外显示一个界面)。
因此可以找个工具来查看一下程序的资源,ResScope(论坛虚拟机自带),打开后可以查看到主界面中的主要控件的ID编号,比如“用户名:”字符串,其ID为1003,其他还有1003,1005等。

根据一般的编程经验,无论VC、Delphi、VB还是易语言,对windows界面的控件状态的控制,一般都是是根据控件ID来设置其属性来实现的,因此要隐藏控件,程序代码中肯定要对赋值对应的ID常量。在OD中搜索常量1001(16进制3E9),可以看到共有4处。

分别双击过去查看,可以发现403731就在关键函数内,后面还有1002、1003等,基本可以确定这里就是输入正确时需要执行的代码,前面的跳转中凡是跳过这段的都是验证失败的跳转。

另外,通过IDA转成伪代码后,也很容易看出如下所示代码为控件属性设置代码。

有了以上信息,爆破就比较简单了,F8跟踪运行到403486处,有个跳转是跳到错误弹窗函数位置,此处可以配合4034B9处的大跳转(该处大跳转也是跳到错误处理流程去),先将403486行改成“jmp short 004034B9”,再将4034B9行改成“jmp 0040372C”,直接跳到正确处理流程代码位置。
00403486   /75 1E         jnz short crackeMe.004034A6
004034B9   /E9 38020000   jmp crackeMe.004036F6

403726也是一个判断跳转,上面修改的代码直接跳到它的下一步。

这样,爆破就完成了。用户名和密码区输入任意内容(非空),点击“登录”,即可显示成功界面。


rz66 发表于 2022-4-18 13:26

软件逆向了不少,但竟然从未玩过 Crackme,看来我是功利型。
等待大神们的分析文章。感谢先。

xiaoyu2032 发表于 2022-4-18 23:42

花了一晚上,还没找到。VC的窗口处理流程看不懂啊

wangzhiyuyeshou 发表于 2022-4-20 16:53

xiaoyu2032 发表于 2022-4-20 00:39
输入错误有错误弹窗提示,因此优先考虑在弹窗下断点,在CODE区按Ctrl+N查找当前模块中的名称,找到Messag ...

强啊,大佬。
第一个框本来想做字符串隐藏的,就用智能搜索搜了一下,没看到就以为隐藏掉了。哈哈,下次还得试试unicode搜索。全隐藏了才行。

scncrenyong 发表于 2023-2-15 14:47

本帖最后由 scncrenyong 于 2023-2-15 15:29 编辑



用户名:wangzhiyu52pojie
密码是:you kill me!oh no ,i am wangzhiyuyeshou!123456789

fancyblue 发表于 2023-4-15 09:37

xiaoyu2032 发表于 2022-4-20 00:39
输入错误有错误弹窗提示,因此优先考虑在弹窗下断点,在CODE区按Ctrl+N查找当前模块中的名称,找到Messag ...

https://www.52pojie.cn/thread-1772753-1-1.html   这个帮忙看看?大佬
页: [1]
查看完整版本: 换换口味,我第一个MFC程序