玩玩破解,写给新人看(阶段练习1)

查看 278|回复 18
作者:yyhd   
[color=]大家已经看了十二课了,辛苦了。
[color=]今天周六,大家也该休息一下了。
[color=]我们就不讲课了。大家一起HAPPY。
[color=]我写了小的练习软件,做为新人学习课程的知识的阶段性练习,大家一起玩玩。
[color=]呵呵,软件还是非常友好的。
[color=]不过,既然我写出来让新人们做为练习,就一定不会太容易。
[color=]你可能要把前几课学过的知识都试试看看。
[color=]祝大家成功,在今天再次享受破解成功的乐趣!
[color=]如果你破解成功,可以把破解成功的截图和破解思路发上来,和大家一起分享,共同进步!
[color=]如果今天还有空闲,我会再写1个练习软件,也放在这个贴子里。所以抽空你再回来看看有新的练习软件吗?
[color=]光学不练,等于白干!
[color=]如果您已经不是新手,我写的教程和练习软件就不适合您了,因为对您来说就太小儿科了,所以请论坛上的大神们多多包涵。
[color=]我发的这个CM,是根据我们以前所讲的知识有针对性的设计的,通过练习,你会对过去讲的一些知识有更加清晰的认识,才会把一些知识点串联起来。
[color=]既然是同步的阶段性练习,我不会在CM中增加超过新人的破解能力的陷阱,会留下一些线索让你能够分析。
[color=]所以你在破解的过程中,要多问几个为什么?
[color=]练习用的CM,我会等大家自己试试以后专门讲讲,讲什么?就讲我在软件编写的时候为“新人们”设置了哪些反破解的“障碍”的。
学破解的乐趣,就在于攻防对抗。
[color=]我觉得这种针对性的阶段性练习,为每个软件设置不同类型的“障碍”,目的是让新人们在练习中引发思考,通过练习会对所学过的知识印象更深刻、理解更深入。
如果您觉得我发的内容确实对您有所帮助,请麻烦您支持一个热心值,进行精神鼓励,也是我继续写下去的动力!
玩玩破解,写给新人看(第一集)
玩玩破解,写给新人看(第二集)
玩玩破解,写给新人看(第三集)
玩玩破解,写给新人看(第四集)
玩玩破解,写个新人看(第五集)
玩玩破解,写给新人看(第六集)
玩玩破解,写给新人看(第七集)
玩玩破解,写给新人看(第八集)
玩玩破解,写给新人看(第九集)
玩玩破解,写给新人看(第十集)
玩玩破解,写给新人看(第十一集)
玩玩破解,写给新人看(第十二集)
玩玩破解,写给新人看(阶段练习1)
玩玩破解,写给新人看(第十三集)
玩玩破解,写给新人看(第十四集)
玩玩破解,写给新人看(第十五集)
玩玩破解,写给新人看(第十六集)
玩玩破解,写给新人看(第十七集)
玩玩破解,写给新人看(第十八集)
玩玩破解,写给新人看(第十九集)
玩玩破解,写给新人看(第二十集)
玩玩破解,写给新人看(第二十一集)
玩玩破解,写给新人看(第二十二集)
玩玩破解,写给新人看(第二十三集)
玩玩破解,写给新人看(第二十四集)
闲谈如何破解软件?
玩玩破解——小白实战1,你也行!
玩玩破解——小白实战2,巧搜字符串
玩玩破解——小白实战3,易语言字符串比较通杀
玩玩破解——小白实战4,冰火两重天
对新人们学习《玩玩破解》系列教程的集中解答
玩玩破解—加点油,再前行!

宋体, 人看

dydsaf   



image.png (84.83 KB, 下载次数: 1)
下载附件
2021-1-30 15:06 上传

[color=]哈哈哈,乱搞乱搞成功了
讲一下过程(纯运气哈哈)
1.程序拖入OD按下F9运行起来,然后
E语言定律 00401000(其实这个具体是啥我也不太清白),来到此处


image.png (67.46 KB, 下载次数: 0)
下载附件
2021-1-30 15:14 上传

2.然后中文搜索,可看到三个回显的内容都在这


image.png (71.41 KB, 下载次数: 1)
下载附件
2021-1-30 15:15 上传

3.准备下断点,我这里先是在MessageBoxA和MessageBoxB这两个函数这下断点,发现拦不下,程序直接就弹窗。后来又在刚刚用中文搜索搜到的登录失败那里下了个断点,还是没有断下来(刚开始到这里的时候已经开始有点懵逼了)


image.png (71.6 KB, 下载次数: 0)
下载附件
2021-1-30 15:21 上传

4.后来鬼使神差的在“请输入账号密码”这里下了个断点,断下来了!!!不过走了两步就弹窗了,好,又懵逼了,就来论坛看各位大佬有没有什么思路,看见有个大佬说程序是先判断有没有输入账户密码,去找了一下,发现就在上面有个跳转,而且这个跳转刚好能跳过这个没有输入账户密码的弹窗


image.png (66.28 KB, 下载次数: 1)
下载附件
2021-1-30 15:28 上传



image.png (138.72 KB, 下载次数: 1)
下载附件
2021-1-30 15:31 上传

5.现在来让它跳过弹“请输入账号密码”的那个,然后跳到00402282这里,然后后面我就不清白了(看不懂汇编),就暂时一步一步跟过去,看它到哪个地方弹窗


image.png (91.18 KB, 下载次数: 1)
下载附件
2021-1-30 15:34 上传

6.跟着跟着发现一个非常可疑的地方,有两段差不多的代码,上面有一个跳转,直接跳过去的话走两步就弹窗登录失败,到这应该懂得都懂了


image.png (92.11 KB, 下载次数: 1)
下载附件
2021-1-30 15:42 上传

本人小白刚接触破解没多久,不懂的地方很多,写着记录一下,大佬勿喷
哈哈哈,破解成功的喜悦,继续加油,感谢楼主做出这么好的教程
夜弦风   

随便输入账号密码,先看一下弹窗。


1.png (12.74 KB, 下载次数: 0)
下载附件
2021-1-30 17:20 上传

试了试字符串破解,找不到关键跳转,改变思路。
下了信息框断点,断不下来,在观察一下,其实可以发现这是个窗口,并非易语言自带信息框。
下断点,创建窗口断点,CreateWindow,CreateWindowExW,CreateWindowExA
再次点击登录,断下


2.png (18.13 KB, 下载次数: 0)
下载附件
2021-1-30 17:23 上传

往下翻,找到第一个“返回到...”


3.png (15.06 KB, 下载次数: 0)
下载附件
2021-1-30 17:24 上传

选中这一行,按回车。
盲猜附近应该有创建窗口代码,易语言创建窗口都有一样代码,直接搜索“push 0x10001”
来到这里


4.png (27.26 KB, 下载次数: 0)
下载附件
2021-1-30 17:25 上传

可以发现一个判断包含着两个窗口,那么猜测另外一个是登陆成功的窗口。
在判断上面下断点,继续运行,再次点击登录,程序再次中断。


5.png (59.8 KB, 下载次数: 0)
下载附件
2021-1-30 17:27 上传

双击Z坐标的值改为0(改变跳转方向),继续运行,成功破解。


6.png (12.26 KB, 下载次数: 0)
下载附件
2021-1-30 17:29 上传

本人菜鸡,大佬勿喷。
xiaoyu2032   

最近开始追大佬的教程,很不错,很适合新手。
这两道体,有弹窗的那道,用弹窗API下断点,没断下来,因此怀疑弹窗是用子窗口做的,因此用push 10001下断,问题解决。
反而是只提示未注册这道体,感觉无从下手,翻看了大家的回帖才开始有思路。
有提示用“SetWindowsTextA”下断点的,发现共有两个断点,但这个断点断在验证之后,不好单步往前追。
也有说用“GetWindowsText”下断点的,但这个断点只要鼠标一移到程序窗口就断了,根本点不中按钮,单步跟了半天也没找到有用的信息。最后,通过按钮的特征码“FF 55 FC 5F 5E”,查找字符串“FF 55 FC 5F 5E”设置断点,共有两处。先禁用断点,运行,出现界面后,再启用断点,输入帐号、密码后,点击登录,然后断在下图处:


1.png (29.91 KB, 下载次数: 0)
下载附件
2021-6-22 00:19 上传

F7单步步入(这里不能F8),然后按F8单步执行,一直到这个长跳转位置


2.png (33.11 KB, 下载次数: 0)
下载附件
2021-6-22 00:19 上传

这是一个可疑位置,做个标记,然后再继续F8单步执行,在长跳转完成后6步时,寄存器出现“未注册版本”字符串,说明此处验证已经完成,因此前面的长跳转前的比较指令很有可能验证的关键,将4022C2的跳转指令NOP掉,保存测试,通过。


3.png (60.16 KB, 下载次数: 0)
下载附件
2021-6-22 00:19 上传



4.png (16.17 KB, 下载次数: 0)
下载附件
2021-6-22 00:19 上传

Rain_Mountain   

第二个完成 在SetWindowsTextA断点
tianpeng117   

说下“提示未注册的坑”,如果我们按照最常规最简单的,00401000的然后再搜索“未注册版本”,我们确实能搜索得到,不过我们往上翻会发现


37W0`Y7L8QR@E~ZWCO409.png (995.83 KB, 下载次数: 0)
下载附件
2021-7-12 22:21 上传

这个子程序根本没有被调用
也就是说这个未注册版本虽然存在,但是并未使用,换句话理解就是内存虽然存在但并未使用,躲避了这个坑从结果尾来找跳转是不可能实现的(在我这个菜鸟看来),那么从结果头开始实现的话无非就是函数断点,我使用的是GetWindowTextA,为什么不用SetWindowTextA,因为当时并不知道有这个断点函数,我本人是个做java web的,对C方面的函数真的不是很熟悉(本人表达能力不是很强,希望别喷)
大兵马元帅   

我成功了,成功的下载了软件!!!!哈哈
pizazzboy   

大佬写得好!字符串比较迷惑人,用其它方法成功了。


QQ图片20210130125802.png (294.56 KB, 下载次数: 0)
下载附件
2021-1-30 13:01 上传

yujang123   

第一个CM
push 0x10001搜窗体id,给前面的跳打上断点,随便输入一个账号假码F8调试,可以看到假码与真码的比对校验,由此可以看到账户真码是52POJIE(注意全大写)
然后换上真码账号后重新调试,会发现账号校验正确,进入到密码的假码与真码比对校验,由此可以看到密码的真码为5211314
输入真码,登录成功
不知道是不是瞎猫碰上死耗子
第二个CM
bp SetWindowTextA,断点后随便输入一个用户名和密码点击登录,程序被断下,alt+F9跳至程序领空,F8追踪,发现比对校验,往上查看发现je大跳,尝试修改为jne,成功.
跟了几次call,对比了一下,发现密码就是账户+808+账户位数
Casuwin   


liangge929 发表于 2021-3-22 09:01
非常感谢!!!
之前只知道判断值是为1还是0,然后跳转,原来就是判断的ZF的值啊。我这样理解是对的吗: ...

如果只是想要执行跳转,这么改没什么问题。但是如果自己编程,就得理解jz和jnz的区别。
举个栗子:
cmp eax, eax
jz/jnz  Address
cmp这句对eax值进行比较,若想在eax - eax = 0即两值相等时跳转,cmp指令修改ZF标志位为1,这时候需要用jz(jump if zero)或者je(jump if equal)指令执行跳转;若eax - eax != 0时跳转,cmp指令仍然修改标志位为1,但需要用jnz(jump if not zero)或者jnz(jump if not equal)指令执行跳转。
当然,如果只是逆向,那直接修改标志位结果不会有问题,但是最好还是明白理解jz和jnz的区别。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部