5ecurity技术团队

砥砺奋进
不断前行

逆向之小程序算法分析

1.简介:
逆向是个技术活,不是一朝一夕就能学会的,我在学习过程中,发现一个挺有意思的小程序,单纯爆破是很简单的,破解手法也算不上高明,不过其中的设计算法的人倒是挺有意思,各种弯弯绕,只是自己在学习过程中的一些小心得,各位大佬不喜勿喷。。。能力有限,如有错误或捷径,敬请指正。
2.分析过程:
程序比较简单,不需要脱壳,分析的工具用的是OllyDbg
现在分析这个叫做Acid什么的,打开后这个样子。点击最左边的,其他的没有什么用,点击后输入账号和序列号,提示错误,然后打开OD,分析。
1.png

搜素关键字,在这可能用搜索ASCII搜不到,没事用智能搜索就可以了,找到后,找关键的代码,寻找`关键跳,直接跳过判断就可以破解了,不过意义不在爆破,是对于这个程序算法的分析。
其中包含两个关键跳:一个判断长度,一个判断正误
长度判断的话,是在第一个错误点附近寻找cmp字符,cmp eax,0x4,然后需要注意看跳转的条件,jge,大于等于则跳转,所以只要输入的用户名长度大于4就可跳过判断。
2.png

3.png

分析算法的时候,首先要找到关键代码,当然,分析的时候要有逻辑性,不要乱来,首先在第一个跳转比较的是什么?长度,那么,他会在比较正确答案之前还是之后比较长度,当然是前之了,长度不对还看什么正误,然后继续,看跳转之后的代码。
看到字的输入的admin了吧,说明基本方向正确,继续喽。
4.png

这是什么,取第一位,然后往下进行乘运算,继续。
5.png

这个add算法后的结果的数字先记下,然后继续你会发现在这个数字前后加了cw--cracked,奇怪了吧,不着急,继续。
6.png

这里你会看到组合后的结果,上面也会发现自己输入的12345
7.png

再然后,你会发现经过一个call后,直接跳转,那么这个call就是关键了
8.png

进去后看到这部分代码(图是一部分),分析一下就是比较结果的正确性
9.png

然后就可以知道答案的对错了,然后弹窗,分析完毕。
3.小提示:
movzx一般用于将较小值拷贝到较大值中。
imul 后只有1个操作数,默认被乘数eax,imul后面的是乘数。
4.具体计算过程:
首先进行一个长度的比较,然后跳转到算法中

0042FA79  |> \8D55 F0       lea edx,[local.4]
在这开始
将[local,4]的地址送入eax中
eax=[local,4]
movzx,将较小的值拷贝到较大的值中
eax=a=61(将ds:eax中的第一位赋值给eax)
eax=eax*ds:[0431750]=61*29=F89
eax*ds:[0431750]=eax=F89
eax=eax*ds:[0431750]=F89
add-->F89+F89=1F12=7954

然后在7954前后加入cw--cracked,此时就是对应的序列号

未经允许不得转载:5ecurity技术团队 » 逆向之小程序算法分析

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址