好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 Bingeye 于 2013-7-17 01:28 编辑
1、这一课的软件没有加壳,脱壳就不用了。
2、od载入-----F9 打开软件,随便输点东西,然后确定,果然弹出来有信息框.
咳,然后先用找字符大法,测试无果。只好用 F12暂停法 试一下,成功找到了 关键跳 ,之间过程省略,忘记的可回翻恒大的
S02E01课加强记忆。
3、然后测试爆破,这里有一些小手段,都能达到目的,就不上图了,注在图上。
继续,可看到。
004014C9 |> \837D F8 00 cmp [local.2],0x0 ; 跳前比较,把0h改成任意非0值可爆破,这里的 local.2 代表的是局部变量 ,
可在调试设置中勾选是否显未局部变量来转换成 基址+偏移量 的模式。这个局部变量在哪里被赋值呢,往上看,原来在这里,
004014B6 |. 8945 F8 mov [local.2],eax ; 局部变量2的值来源于eax,那eax值又来自哪里的,继续往上看,又看到了这一句:
004014B3 |. 0F94C0 sete al ; sete的作用是比较两个值,相同则置位,这里相同会使eax的值为00000001,不同则是00000000
于是我想到这比较的两个值有可能就是我们输入的注册码和真码,当然,也有可能是真码计算过后的伪码(如果软件有这个机制的),到底是不是,
下个断试试,一般情况下,如果这里是我们输入的注册码和真码 在进行比较,那么一般在它上边的call里就有计算真码的算法在内,所以我把断下在这个
call上,然后F9运行,点击注册,程序就断下来了,这时堆栈窗口己经可以看到有一个疑似注册码的东西,赶紧滴保存下来,试一试,咳咳,菜鸟就是这
么心急的,莫怪莫怪。。。。。结果悲催啦,还是不成功,难道不成功?得想办法验证一下。
通上上图,我们看到,断下来的时候出现了一串疑似注册真码的字符串,到底是不是呢,那就得看与它做比较的值是不是我们输入的值,我们看旁边
的寄存器窗口,EAX 001629E0 ASCII "1FABFBFF000206A714" ,我现在猜测它是下边 sete al 语句中比较的双方之一,于是F8到sete al 那一行,一路
观察寄存器的变化,结果如图
看到这里己可愉肯定这 "1FABFBFF000206A714" 应是程序计算出来的注册码无疑,必竟要执行sete al 这一句代码也仅能够比较寄存器中己存在的两个值,
可是为是么测试去不通过呢,咳,突然一道灵光闪现,恒大说这东西有猫腻,可这个算出来的码怎么不是跟我输入的密码比较,而是跟用户名比较呢?
why?难道比较的不是这两个值!?于是我又这样测试了一下,于是重新测试运行到 sete al 的上一行代码,并双击ebx寄存器的值并修改成跟eax中的一样,
即"1FABFBFF000206A714" ,然后F8,咳,这个不靠谱,结果仍然一样,那么,只能暂且把这个当成是一个疑点吧。菜鸟就是菜鸟啊,要不是菜鸟也就
不会搞这些旁门左道了,无法,只好走正道跟进call里单步F8看下,结果就在头几行经分析如下图,果然是在用算出的码跟用户名做比较,
再在这里尝试把edx寄存器的值修改成跟ecx的值相同,再f9测试,果然注册成功了,于是我大胆的猜测,这个计算出来的真码应是填在用户名里的,于是马上行动,
测试一下,于是再次动行在用户名里输入“ 1FABFBFF000206A714 ”,这次终于成功了。
最终结果~
虽然最终也成功了,但是说心底话这只是撞大运,看来玩破解汇编不行还是不靠谱的。经继续努力,不然哪天运气用光了,那不就。。。。咳咳,
我是菜鸟,大牛勿喷。
附注:虽然因为看不懂汇编码不知道它具体算法是怎么样,但根具跟进的分少析得出,这个程序是根据输入的注册码项的长度计算出了用户名的真码,所
以在跟出这个真码后,可以更改注册码的内容,但是不能更改它的长度,否则会造成不匹配而注册失败~
|
-
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|