鱼C论坛

 找回密码
 立即注册

【原创】第一次逆向算法

热度 3已有 740 次阅读2013-8-30 14:11 |个人分类:逆向

第一次自己逆向出别人的算法,挺开心的。

本CM并不难,关键是要耐心。本篇小文纯属小菜分享心得以及记录下自己的足迹,以激励自己继续前进,并逐渐总结经验。

我下手的是两个程序,第一个程序通过字符串,很快就看到相关函数;第二个程序加了用户名的验证,爆破可以直接搞定,于是我就开始逆向它的算法。过程稍稍有点曲折,不过最终还是破解出来了。下面开始分享我的两个程序的破解逆向过程。

【第一枚】BradSoblesky.1

1、  运行程序 ,尝试胡乱输入密码,看看它的弹出框会显示什么信息

2、发现字符串”Incorrecttry again!!” 于是在OD中查看字符串列表,锁定字符串位置


发现上方有字符串比较的函数,以及经典的判断字符“jnz”于是初步可以判断字符串比较函数是和真正的密码比较的。

3、在开始的地方下好断点,运行程序,再单步几下,立刻可以发现密码已经出来了:


asdasdasd是我胡乱输的,上面的<BrD-SoB>就是密码。

4、运行原来的程序,输入密码,成功破解


【爆破】爆破的方法很简单,把jnz nop掉就口以啦。

【第二枚】BradSoblesky.2

第二枚的逆向花了点功夫。

1、  首先我按照之前的思路,运行程序,看看提供的字符串信息。

 

2、  发现字符串文本”Incorrect!!,TryAgain.”很兴奋,于是觉得也这么找就口以了于是也锁定位置,下好断点。


但是在这句话的周围部分没有发现关键的选择判断跳转,怀着忐忑的心情,我直接运行程序,输入用户名密码,再验证,发现程序根本没有停住。说明根本没有用到这个位置的字符串,不能这么简单的爆破了。

3、  于是我索性将字符串全部打上断点,因为字符串本身就不多。接着,我运行程序,输入用户名密码,发现程序在一个”%lu”的位置断住了。

我发现了MFC函数ForMat ,上网查了一下,是把对应的int,float,等数转换为字符串形式,同时立刻瞟到下面的jnz ,感觉很可能这里就是爆破点。为了确定,下好断点,输入之后,果然在这个定住,修改一下寄存器标志位的值,果然成功爆破了。接下来开始寻找它的算法核心位置,首先觉得上面的call很可能有算法,

4、  于是进去一瞧 ,发现里面直接就是密码比较的工作了。


函数_mbscmp 就是比较的函数。

再上面一个函数,发现是做无用功。

5、  接着开始仔细研究MFC的Format函数,发现eax里面的值就是密码的值,在往上看,锁定[ebp-10]里面的值就是密码的值。接着发现是有一个大大的循环的,由此,核心算法就在这里面了。


接下来就是对核心算法的逆向,根据汇编代码逐步分析

算法逆向的过程中注意两点:

(1)      变量本身的值发生了改变,还是只是借用变量的值来进行计算;

(2)      mima初始值在这里面是十六进制的,转化成c语言的时候,要注意进制的问题,不能直接用数据。

 

对于找到关键位置的破解总结,还有更直接的办法,除了将所有字符串下断点这种碰运气的做法,可以直接搜索函数”GetDlgItemText()”,获取控件字符串的函数,将会更快的找到关键位置,当字符串不管用的时候。

【测试】

下面是对我的小keygen的测试。




【心得】

本次的小CM不难,重要的是耐心以及细心。还有破解的思路方法。

附CM源文件,以及keygen代码。

http://pan.baidu.com/share/link?shareid=1791954131&uk=1646915303


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (6 个评论)

回复 豪翔天下 2013-8-30 23:57
再等几天或许我就能看明白了
回复 压寨宝宝 2013-8-31 08:00
豪翔天下: 再等几天或许我就能看明白了
   加油~
回复 红头发 2013-8-31 21:55
楼主可将此帖发至加解密的技术交流版块,让更多人分享楼主的成果哈,楼主加油
回复 myfishcaccount 2013-9-1 11:15
   不错不错。。
回复 压寨宝宝 2013-9-3 09:33
红头发: 楼主可将此帖发至加解密的技术交流版块,让更多人分享楼主的成果哈,楼主加油
好哒!~有更多成果一定分享出来,大家互相交流进步!
回复 压寨宝宝 2013-9-3 09:36
myfishcaccount:    不错不错。。
一起加油,共同进步!!

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 21:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部