hehesd 发表于 2015-8-6 21:05

新手预习吾爱破解培训第五课~

本帖最后由 hehesd 于 2015-8-6 21:48 编辑

直接上主题了。。一、搜索字符串直接爆破。
拿到程序后搜索字符串发现 @我是用户 大牛给我们留下了“验证通过”字符串,定位到跳转的地方直接NOP掉


爆破成功!
二、如果没有字符串怎么办?
一般我们拿到程序后都是先打开看看有怎么迹象可循。
我们发现,在编辑框输入注册码后,按下三个按钮,前两个按钮按下之后软件会重启,随之在文件目录里面会出现2个文件,第三个软件木有反应!
仔细想想,既然他是重启验证,他肯定要在电脑某个部位去读取某些东西来验证! 而最常见的就是读取txt文件、ini文件以及注册表了。
对于以上三种方式:有三种常用的API~分别是:ReadFile(读取txt文件)、GetPrivateProfileString(读取ini文件)、RegOpenKey(读取注册表).
那好,既然有想法我们就一个一个试一试:
打开OD载入文件:CTRL+G 输入 Readfile (这是带了插件的吾爱OD,有些朋友的OD如果么有插件的话可能不会出现这种界面)
程序跳到了ReadFile的地址,段首F2下段,然后F9让程序跑起来。

然而我们发现不是想象中那么简单,程序有可能会断下很多次,这是因为不只我们主程序会调用ReadFile 其他相关的模块也有可能会调用,比如我电脑上TaobaoProtect模块。
那么,怎么样才能知道哪一次是我们的验证代码段调用的呢?这时候就需要看堆栈了。

看,当堆栈是这个样子的时候我们就可以取消断点,然后根据堆栈回朔(在我画圈圈的那 ”0018F1B8|0040204E返回到 52PoJie?0040204E 来自 kernel32.ReadFile“ 点击回车键

)到验证的代码段了。
到这里,肯定有很多新手朋友有疑问了;我也不怎么会表达,简要说一下我理解的原理吧,就是通过堆栈,我们可以看到是哪里需要调用Readfile这个api,即当程序调用完毕之后,自然要回到原来调用API的地方。究竟要回到哪呢?程序在调用api之前就会把返回地址压入堆栈,所以往栈底看(堆栈向下拉),就可以找到程序要返回的地方了!这里是返回到”52PoJie?0040204E“,也就是exe主程序的代码段,所以就从这里返回!(什么是代码段? 请参考@奋斗丶小Zhttp://www.52pojie.cn/thread-393034-1-1.html(内存篇),咱语文没学好,也只能描述成这个样子了!)
好,我们从堆栈回到0040204E的地方! 哇,豁然开朗!

下面的东西就写在图片上了啊。。。。
从ret返回后返现。。就是我们搜索到字符串的地方(另外两处验证的关键call也差不多,大家自己去分析看看)

好了,我们输入刚刚找到的真码试试 00402052|.B9 24465400   mov ecx,52PoJie?00544624               ;JXU2MjExJXU2   
成功啦!
剩下两种验证方式,大家自己去试一试吧。。。。总结一下:
1爆破,搜索字符串然后nop,一般人都会。
2根据api回朔到验证代码段。
(这里补充一句,很多人肯定说不会汇编怎么办。我也不会~这个程序,我是搜索字符串后找到关键call,然后看他如何验证,我们逆向去推:
00402BB8|. /74 24         je short 52PoJie?00402BDE
00402BBA|. |8B8D E4FEFFFF mov ecx,
00402BC0|. |E8 1BF4FFFF   call 52PoJie?00401FE0                  ;关键call 1
00402BC5|. |85C0          test eax,eax                                          
00402BC7|. |74 15         je short 52PoJie?00402BDE                         //这个是关键跳转,影响他的是eax ,eax是call 52PoJie?00401FE0 这个函数的返回值。当eax=0时跳转则成立,那么我们就要进入call 00401FE0里面去看看 是哪一条语句影响返回时候 eax的值!
                                                                                                      当然对于此程序,直接在 call 00401FE0函数的开头 moveax,1    然后ret 也可以。 另外两个关键call亦如是。。。。。
00402BC9|. |8B8D DCFEFFFF mov ecx,
00402BCF|. |68 18465400   push 52PoJie?00544618                  ;验证通过
00402BD4|. |E8 E7980100   call 52PoJie?0041C4C0


第一次发帖,肯定有很多不正确的地方,请各位坛友多多指出!共同进步!
最后,感谢吾爱提供学习平台以及各位大牛的指导!   @Hmily@Kido   @小生我怕怕 @L4Nce   @Poner




Hmily 发表于 2015-8-7 15:27

我就想问,最帅的是不是Hmily?

苏紫方璇 发表于 2015-8-7 15:40

楼主分析的不错,学习了

bzzxabc 发表于 2015-8-7 20:15

楼主分析的很细,预热了。谢谢

蚯蚓翔龙 发表于 2015-8-7 20:36

Hmily 发表于 2015-8-7 15:27
我就想问,最帅的是不是Hmily?

应该说没有特别说你最帅。。。
OO我是用户OO就有{:301_1005:}
然而这个很简单就能写了个有自己ID的Key了...话说这样说出来会不会不是很好玩...

益达口香糖 发表于 2015-8-7 22:12

日了,都被你讲了,老师还讲啥课?
页: [1]
查看完整版本: 新手预习吾爱破解培训第五课~