吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 4851|回复: 19

[原创逆向图文] 逆向160个练习crackme之ajj.2

[复制链接]
victor8093 发表于 2017-11-20 20:43 | 显示全部楼层 |阅读模式

作者特意写了一个文档,告诉我们这个程序有着层层防御,这让我很好奇,也很欣喜。刚学的逆向,就想要这种一个程序里有多个坎,可以让我把学到的东西都用上。,破这个程序让我还真是费了不少劲,但是弄完之后,知识掌握的更熟练,确实是个练习的好程序。废话不多说,来讲讲我心酸的逆向过程吧。

打开程序,查看是如何使用及是否有相关信息可以利用。

1.png

看到程序虽然有注册按钮,但是按下的时候没有反应,中间的图片框是滚动的,当点击滚动框时,就会有注册未成功的提示信息。

2.png

将程序导入PEiD(查壳工具)看到程序有一个UPX壳,那么我们需要先进行脱壳,可以利用ESP定律。

3.png

将程序导入OD,F8运行一行后,对ESP的值进行数据窗口中跟随,然后选择数据窗口中dword长度的字节进行设置内存访问断点后F9运行,发现状态是运行状态,OD并没有中断下来,说明程序对内存访问断点有检测。

4.png

重新将程序导入OD,我们就在相同位置设置硬件断点。F9运行,就会到了跳转的位置,F8运行就会来到OEP的位置了。

5.png

我们需要把程序转存下来,可以利用插件OllyDump,也可以用工具PETools等,当然手动转存也是可以的,就是比较复杂。这里我们只要转存代码,修复IAT的事情我们自己来做,所以就取消勾选重建输入表。点击脱壳后保存文件即可。

6.png

这时候转存出来的程序是不能打开的,因为还没有修复IAT,我们需要对其进行修复。

7.png

在CPU窗口(注意要是系统领空的位置)右键查找所有模块间的调用。
8.png

对API函数调用表中随便找一个进行跟随,在数据窗口中进行内存地址的数据窗口跟随(将数值显示方式改为长型地址),就可以找到IAT表了。

9.png

打开REC工具,选择调试中的程序后,在IAT Infos needed框中填入相关的OEP(原始起始位置),RVA(IAT表的起始位置),Size信息(IAT表的大小,IAT表的结尾是00000000位置而不是最后一个API函数的位置)。这里要注意的是,填写的内容是偏移量,需要去掉基址,大部分程序的基址都是400000。

获取完IAT表后点击Fix Dump对转存的程序进行IAT修复。这次再打开会发现没有错误提示信息,但是程序依然打不开。我们将其导入到OD查看。

10.png

发现OEP位置的代码发生了错误,那么我们就将正确的代码二进制复制过来进行粘贴。

11.png

我们修改代码后进行保存到文件替换修复IAT后的程序,这时候程序就可以正常打开了,同时也去掉了UPX壳。

将修改后的程序导入OD,通过智能搜索查看是否有相关可用的信息。
12.png

找到一个类似注册成功的提示信息,我们双击跟过去查看一下。

13.png

发现有一个跳转跳过了注册成功的提示,信息,那么我们就顺着这个跳转往上看。

14.png

这里有五个比较,每个比较后都有一个关键跳,直接将跳转NOP就可以暴力PJ了。注册成功后,点击画板框就会有提示信息“厉害厉害真厉害!佩服佩服真佩服!!”,同时右下角的注册按钮会变成“注册了”。

但我们需要知道的是注册码如何生成,由于OD对于调试Delphi的无力感,我们将程序导入到DarkDe中进行查看。

15.png

这次的窗体没有直接明显的验证事件,那么我们将程序导入OD中,对每个事件的段首设置一个cc断点。同时我们对关键跳前的五个比较设置断点,这样我们就可以针对性的分析那个事件对应哪个比较。

16.png

断点设置完后,F9运行程序,可以看到先是执行FormCreate事件,之后就是进行Timer1事件,接着就到了Timer2事件中第一个比较的位置。Timer1是设置定时检测的作用,那么涉及到第一个比较参数的赋值就应该在FormCreate事件中了。

17.png

对代码进行分析,可以看到一个字符串X:\ajj.126.c0m\j\o\j\o\ok.txt,继续往下分析知道是在要指定的路径检测ok.txt文档是否存在,若是不存在就会跳转,将第一个比较处的值赋为0c34.

18.png

因为我们没有X盘,那么就直接加字符串修改为D:\ajj.126.c0m\j\o\j\o\ok.txt,在D盘中创建相关的文件夹及ok.txt文件。可以看到在之后还会提取ok文档中的内容与ajj写的CKme真烂!进行比较,那么我们就把ok文档中的内容写为ajj写的CKme真烂!(需要注意到首字节是空格)

19.png

F9运行到第一比较处的位置,就会看到这里不会跳转,说明我们已经破了程序的第一道防御,F9运行起程序,会意外的发现窗体多了一个输入框,但是这个窗体还不能输入。

我们进行下一步的分析。解决第二个比较的问题。但是通过对事件及比较处设置断点的方式,我们都无法定位到相关的事件位置,那么我们就只能通过对内存地址设置硬件断点来进行定位。禁用所有断点后,先在第一处比较的位置设置断点,F9运行起来程序中断在该处后,对第二处比较的内存地址进行数据窗口中跟随,在数据处选择dword长处并设置硬件断点(不设置内存访问断点是为了重载的时候不会消失)。

20.png

设置好之后将程序运行起来,对注册窗体进行点击等操作,发现是点击注册按钮后,会修改该内存地址的值,那么我们就在OD中进行代码的分析。

21.png

分析代码可以发现,该内存地址起始值为028e鼠标左键点击注册按钮,cl就会置为0,从而会导致第二处比较后的跳转是一直成立的。我们只要对注册按钮进行右击,该内存地址的数值每次就会+3,并且不会与230d相等,第二道防御就解除了。

注意到代码处对该内存地址的调用还有一个地方,就是在panel1事件中。

22.png

通过DarkDe软件,查看到Panel会调用OnDblClick(点击事件)。那么我们在Panel事件段首启用断点后将程序运行起来,经过测试发现只有在画板空白处双击OD才会断下来。

23.png

当该内存地址的数值为29D的时候,就会设置显现的输入框为可输入状态。该内存地址起始数值为28e,鼠标右击一次数值加3,。那么也就是说,右击注册按钮(29D-28E)/3=5次(PS:在注册窗体出现后不能在注册按钮上鼠标左击且右击只能五次)后再在画板空白处双击,这时显现的输入框状态才会变为可输入。

24.png

可以看到在Edit2事件中也有一个点击事件,那么我们在Edit2段首处设置断点后,到Edit2输入框点击看如何触发。

25.png

输入相关注册信息后,双击Edit2输入框就会发现程序中断下来。进行代码的跟踪分析。

26.png
要求注册用户名长度要是3的倍数,注册码的长度必须是8,注册码的第二个字节必须是_,第六个字节必须是,才可以。

这个事件分析完成后会发现并没有对第三处比较的内存地址有所改动,那么我们就需要对第三处比较的内存地址进行设置断点来跟踪。

27.png

设置好断点后,F9运行程序,就能看到对第三处比较的内存地址进行修改的事件是在FormMouseMove中。我们在该事件的段首设置断点来逐步分析。

28.png

判断image3(性相近)是否出现,若image3出现了,鼠标是否有在右下角移动。(PS:因为是处于FormMouseMove事件中,eax跟edx所表示的就是鼠标移动的坐标,我们在比较处设置条件断点eax>=0ex2 && edx>=12c就可以找到具体的位置了)

之后判断image2(性本善)是否出现,若是image2出现了,鼠标是否有在左下角移动。

29.png

操作完成后,就会在注册按钮的左边显现出一个数字。这时候,第三处的防御我们就解除了。

30.png


第四处比较会需要到两个内存地址[ebx+314]和[ebx+318],我们在分析第三处比较的时候,会有看到内存地址[ebx+314]的赋值。

31.png

对内存地址[ebx+314]的赋值有四个值且是固定的,那么我们需要跟踪内存地址[ebx+318]的变化,看是如何计算从而与内存地址[ebx+314]的值进行比较的。

32.png

内存地址[ebx+318]的值是在对图片的点击事件中触发的。这里以image1为例来分析代码。右键单击一次,内存地址[ebx+318]的值就加上11(注意这里是十六进制数),左键单击一次,内存地址[ebx+318]的值就加上2.那么我们只要根据提示的数字,对应的点击图片就可以解开第四道防御了。

33.png

第五处比较的内存地址[ebx+31c]的值是在Button1Click事件中触发的,也很简单,就是鼠标左键双击注册按钮就可以了,这样第五道防御也就解除了。至此整个逆向过程也就结束了。


最后总结下注册的整个流程:
1.        新建文件X:\ajj.126.c0m\j\o\j\o\ok.txt,文件内容为“ ajj写的CKme真烂!“(若是没有X盘,我们可以进行修改为D盘等其他盘。Txt文件中的内容最前面有一个空格,感叹号是英文字符)。本操作的作用是显示输入框Edit2,但这时候还是处于被禁用的状态,无法输入。
2.        打开程序,在“注册”按钮上用鼠标右键点击5次。本操作之前或之间都不能用鼠标左键点击按钮,并且本操作之后不能用鼠标右键点击按钮。
3.        在图片框中双击没有图片显示的空白位置。本操作与操作2相结合,是为了启用已显示的输入框让其可以进行输入。
4.        输入注册名和注册码,然后双击输入框Edit2。注册名必须为”ajj”,注册码长度为8且第2个字符为’_’且第6个字符为’,’。 (注册名和注册码的内容也可以自己进行修改)
5.        当图片3“性相近”出现时,鼠标在界面右下角移动一下;然后当图片2“性本善”出现时,鼠标在界面左下角移动一下。本操作的作用是在图片框下方显示一个粗体数字。
6.        根据上一操作显示的粗体数字点击图片框中的图片。(如何点击图片可以参考每张图片所对应加的值来操作)
7.        用鼠标左键双击“注册”按钮。


PS:这篇文章写了我好长时间,主要是这个程序破的很头疼,尤其是对Delphi不熟悉的时候,完全不知道怎么入手。希望大家看完之后能给个评分。@Shark恒 看在我写的这么辛苦的份上,是不是可以给个精华,我觉得这个是最繁琐的了,虽然爆破起来很简单。

评分

参与人数 14威望 +1 HB +113 THX +7 收起 理由
longge188 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
一路走来不容易 + 1
吵架第一名 + 1
消逝的过去 + 2 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
EMT + 1
bnjzzheng + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
cai7381237 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
lies + 1
ma80366466 + 1 + 1 [快捷评语] - 吃水不忘打井人,给个评分懂感恩!
w_xh73 + 1 + 1 [快捷评语] - 2017,让我们17学破解!
soho + 1 [快捷评语] - 评分=感恩!简单却充满爱!感谢您的作品!
kanxue2018 + 1 + 1 [快捷评语] - 分享精神,是最值得尊敬的!
Oneness神 + 2 + 1 好努力的样子啊,加油
Shark恒 + 1 + 100 + 1 你这认真劲儿,很快就追上你的师哥师姐们了。加油~

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2017-11-20 21:12 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| victor8093 发表于 2017-11-20 23:03 | 显示全部楼层

Shark恒 发表于 2017-11-20 21:12
你这认真劲儿,很快就追上你的师哥师姐们了。加油~

有师姐吗,我怎么看好像都是师兄啊
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Oneness神 发表于 2017-11-21 20:26 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
kanxue2018 发表于 2017-11-22 10:05 | 显示全部楼层

经典中的经典的精华,很好!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
小红最棒棒 发表于 2017-11-22 13:45 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| victor8093 发表于 2017-11-22 14:32 | 显示全部楼层

小红最棒棒 发表于 2017-11-22 13:45
有没有CM的链接啊。。。

cm的链接啊,我下一篇文章的时候一起发吧
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
691877719 发表于 2017-12-6 19:13 | 显示全部楼层

好难啊 任重而道远
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
fate911 发表于 2017-12-13 16:06 | 显示全部楼层

虽然只能看懂一点点,但会继续坚持
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
lingyin 发表于 2018-3-10 11:11 | 显示全部楼层

今天正在逆向这个程序,遇到很多问题,学习了。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表