yyhd 发表于 2021-1-28 21:49

玩玩破解,写给新人看(第十集)

本帖最后由 yyhd 于 2021-10-16 00:20 编辑

第十二课进一步品尝“成功”的味道


回顾上一集的内容,我们学习了如何对付“明明有错误提示,但是OD搜不到”这样的软件的方法,您学会了吗?当然,这种方法并不是可以“通杀”的,因为软件作者对敏感的字符串会采取多种加密的方法进行保护,其目的是路人皆知的,就是增加我们查找这些字符串的难度,所谓“魔高一尺 道高一丈”,软件的安全保护和破解这两类技术是在一直进行激烈的斗争。

所以,当你用教程中的方法无法破解现实中的软件的时候,你不要气馁,不要觉得现在学的东西太基础,不实用。你之所以破解不了,只能说明软件作者的防破解技术比你现有的破解技术要高,你再想想,我们还只是破解的新手,很多人连编程都不会,你凭什么就能破解人家写好的软件,毕竟人家对于程序的认识和理解要高于你,所以,我们要在学习中放平心态,始终以“玩破解”的目的去学破解,别给自己压力,把破解当成是自己的业余爱好,只是玩玩而已。

下面,我们继续本集的课程。

今天,我们要对付的软件的类型是什么呢?

就是输入账号和密码登录后,没有出现错误提示信息,就像没有发生任何事情一样。

我们今天使用的软件的名称是:CM(登录后,无错误提示)

打开这个软件以后,你输入账号和密码,点登录按钮后无任何提示。




然后,你直接把CM拖到OD里用搜索引擎查查字符串,结果还是没有敏感字符串。




最后,你不死心,用我们上节课的内存断点的方法在内存里搜,晕了,该搜什么关键词呢? 你暂时处在彷徨无助之中。

放弃吗?不,既然要玩,就玩到底!

怎么玩呢?

我们先冷静思考一下,这个软件的验证机制是什么?

我们现在看到的就是,当我们的账号和密码不正确的时候,无任何反应。那么,如果我们的账号和密码正确的时候,程序总该有反应了吧。当然,如果我们的账号和密码都正确,程序如果还没有反应,那不是玩人吗?

呵呵,我们一向喜欢玩人,不喜欢被玩的感觉。

于是,我们总结出一个规律,就是“当一个人软件摆在我们的面前,如果我们用错误的账号和密码登录以后无任何提示和反应,那么当我们用正确的账号和密码登录时就一定会有所反应,否则这个软件就是垃圾”。

呵呵,这还算是总结出的规律吗?所有正常的软件都会如此。

既然我们知道这条规律,那么我们就再想想看,既然没有搜索到“失败”或者“成功”之类的字符串,也没有弹出信息框,那还能是什么反应?

有一种反应,就是如果账号和密码正确会弹出新的窗口。

我们有些朋友想使用外挂,当你打开外挂软件的时候,你能看到那些外挂功能吗?看不到吧,只有当你的账号和密码都正确了,然后登录窗口消失,外挂功能窗口才会显示出来。

提前剧透一下,我们如果输入了正确的账号和密码,我们这个软件就会出现下图:




红色箭头指的就是弹出了一个新的功能窗口,呵呵,植物大战僵尸的辅助,这只是演示窗口,我没有添加具体的功能,因为我们的目标在玩破解,不在于玩这个外挂。

我们分析到这,你对这个软件的验证机制清楚了吧,归纳为一句话,就是“账号密码错误,程序不做反应;账号密码正确,弹出新窗口”。

问题现在还摆在眼前,我们怎么破解呢?

我们在第一集就给大家说过软件的验证流程,还记的吗?就是分为验证前、验证中、验证后,我们最常用的破解方法是根据验证后的结果来反查逆向到验证中的关键代码位置。

还讲了一条破解法则就是“两头突破,中间破解”,意思就是说破解的突破口要么是验证后,如果验证后不好找,就到验证前找突破口,最终的目标是一致的,就是要到中间的验证关键代码处。

那好,根据我们的破解法则,我们现在遇到的这个软件在验证后有突破口吗?没有任何提示,不好找线索吧。

有朋友可能会说,不是还有成功后会弹出新窗口吗?这是不是可以当线索?

呵呵,这个想法不错,这就是逆向思维,既然失败时没有线索,那么我们就找成功后的线索。

怎么找呢?我们最熟悉的当然是字符串,我们假定看到过成功后弹出的功能窗口,我们是不是可以搜上面的字符串,比如窗口标题,窗口内的文字。

好,我们就这么办。我们把软件拖进OD,没有壳,直接搜索字符串,我们欣喜的发现了下图:




红色箭头指的字符串就是新功能窗口的标题,呵呵,一阵狂喜。我们双击这一行代码,就到了下图:




看红色方框里,第一行代码的地址是0040345F ,代码是 PUSHEBP,在代码的左边还能看到一个白色线条的括号,好像是把这一部分给括起来了,没错,括号上面的语句是RETN,就说明0040345F是当前子程序的首地址,就是这个子程序的第一句代码。

但是令人遗憾的是,从这个首地址往下看,并没有能够跳过“植物大战僵尸”这行字符串的跳转,那么,我们就只能往上一层调用这个子程序的代码段去看是否有跳转。

思路是对的,但是问题也来了,我们怎么才能到上一层代码的位置呢?

我们以前的做法是程序断在字符串这个位置,然后F8一步步跟就能到上一层,对吧。

但是现在我们只是知道字符串的代码在这个位置,但是我们的程序并没有断在这里,所以我们也就无法F8去回溯了。那怎么办呢?

我们还可以这样试一下,把鼠标点一下首地址0040345F,看看信息框里有没有“本次调用来自某某地址”这样的信息,可惜,还是没有,结果这种方法也让我们空欢喜一场。

别郁闷,对于这个软件,这种从成功的结果进行破解不可行,但是,这种破解思路对于其他的软件可能是个好方法,比如我们如果遇到一些软件带有“已注册”这样的关键词的重启验证的软件,你就可以尝试用这种方法破解。

我带着大家一起分析这种思路,目的是希望大家通过这个软件的破解学到更多的知识。

到现在为止,我们只能放弃从验证后的结果做为破解的突破口了。

那么,按照我们的破解大法,我们就从验证前入手。

晕了,验证前的代码这么多,我们把代码暂停在哪个位置呢?

呵呵,别着急,我们再分析一下软件验证流程。

我们输入登录账号和密码以后,然后我们点登录按钮,结果没有任何反应,是这样的吧。

那么,我们再深入思考一下,我们点了登录按钮以后到没有任何反应之间还会发生些什么?难道在这个时间段里程序没有执行任何代码吗?

当然不是,这个时间段里发生了很多事情,我们程序整个验证过程都在这里发生。我们猜想一下,是不是发生了这样一些事情。

我们点了登录按钮,然后程序会通过一个系统提供的函数读取我们输入的账号和密码,然后会调用一个软件作者自写的算法CALL根据我们输入的账号计算出真码,然后会调用一个验证CALL对真码和假码进行对比,如果对比的结果是假,就什么都不做,如果对比的结果是真,就弹出新窗口。

好了,我们脑子里有这样的验证流程以后,我们就思考一下在验证CALL前有什么位置很接近,而且我们也有办法找到让程序暂停。

有三个位置,第一个位置是点击登录按钮的时刻,第二个位置是读取输入的账号和密码的时刻,第三个位置是算法CALL。

我们今天不讲其他的位置,我们找最常用的断点位置,就是读取输入的账号和密码的代码位置。

程序在运行时怎么才能读取我们输入的账号和密码呢?通常会用操作系统提供的函数,最常用是一个函数是GetwindowsTextA,这个函数和以前我们说的弹出信息框的函数MessageBoxA一样,都是系统提供的功能函数,一个功能是取窗口内的输入文本,一个是弹出信息框。

我们在OD里下GetwindowsTextA函数断点。然后就到了这个图:




我们一直按F8,经历了几次返回到上一层,然后我们就来到了这里。




红色箭头就是我们当前代码走到的位置,然后我们往下找可疑的跳转。

有些朋友可能要问了,这次怎么和以前不一样了,以前不是往上找跳转吗?

我们往上找跳转的目的是想找能够跳过结果字符串的代码位置,因为我们的结果在后,所以要在结果发生前找跳转。

现在不一样了,我们这次是在读取输入的账号和密码的位置停下来的,我们的代码位置是在验证CALL执行前,我们往上找跳转有意义吗?难道我们想找有什么跳转可以跳过读取输入的账号和密码吗?

呵呵,真跳过了,那更是破解不了,等于没有输入账号和密码。所以,我们现在按照软件执行的验证流程继续一步步往下找,你F8往下走走,见下图:




这个跳转就是关键的跳转,红色箭头指的位置就是弹出新窗口的CALL,呵呵,我怎么知道的呢?

这个需要一点经验,因为我看到这个CALL上面的参数我就知道是一个窗口的特征代码,看到004012AC这句代码 PUSH5201008了吗?

5201008就是易语言编写的程序的窗口ID,就是一个窗口的身份标号。当然如果是其他语言,就不是这样的特征了。


分析至此,我们就把0040126D处的代码改成NOP,呵呵,快试试看,成功了!

所以,我们通过这个软件的分析来对比看,为什么我说从验证后的结果做为破解的突破口最常用,也最方便,因为从验证前入手往下追代码会比较难,往往需要一些经验。

所以,我们在迫不得已的情况下才会选择在验证前入手。

呵呵,这节课的破解是不容易的,也让我们通过分析对软件的验证流程有了更为清晰的认识,这就达到我们学习的目的了。

当然,对于这个程序,其实还有非常简单的破解方法,下一节课再讲。


我的心里话:


其实对于本次写课程一直是非常犹豫的。之所以想写,是因为我也是从新手一路走来,充分体验了一个新人在学习过程中的困惑、艰辛和无助。之所以一直没写,是担心自己讲的不好,最后落个“出力不讨好”的结局。
我曾经:
特别希望能遇到一个技术高超的老师,能够快速解决我所有的学习问题。
但是现实是残酷的,一些技术高超的人根本没有时间,也不会理会你的问题,因为你的问题对于他们而言不值一提,他们心中的“小问题”其实恰恰是新人的“大问题”。
网上有很多学习资料,但是花了精力和时间,感觉越看越乱。
我当时就非常希望能遇到一个能够站到新人的角度,能够“深入浅出、思路清晰、简明扼要、一针见血”的辅导老师,可惜,这样的老师太少了,既有技术、讲课又好的老师都去挣钱了。因为学破解完全是个人兴趣,不想多花钱,那么自然就遇不到好老师,没有办法,只能继续苦闷无助,过去如此,现在如此,将来还会如此,这就是现实。
俗话说“天下没有免费的午餐”。没有人会选择一直付出、不求回报,而且无怨无悔。
我为什么这次要写教程呢,还在这两天推出了十集?说心里话,我根本没有计划,我前几天在论坛上只是一时“心血来潮”,写了第一集,在第一集里面我也说了,如果大家反应不好我就不继续写了。没有想到,第一集获得了这么多朋友的鼓励和支持,瞬间让我有了一种受宠若惊的感受,也增加了我继续写下去的信心和动力,于是我在这两天的业余之间里构思教学内容、编写教学软件、斟酌教学语言,希望尽快满足大家的需要,害怕辜负了大家的期待,目前出了十集,每一个字都是键盘敲上去的,不适合新人理解的话就修改、再修改。
说了这么多心里话,为什么?
我只有一个期望,就是如果朋友们觉得我写的教程对您确实有帮助的话,您就继续给予我支持,看完每一集,回复一下,给个免费的评分,如果给热心值和吾爱币那就更让我有动力了。
最新的几集,我看到人气明显降低,现在心里有些打鼓了,不知道是不是自己写的不好,还是大家觉得没必要继续写下去了?所以才有以上的心里话。
我这个人喜欢直来直去,心里想什么就直接说出来了。
如果继续写下去没有人看,看过的人还觉得是浪费时间,那就完全没有必要再继续下去了。
写了十集,顺便和朋友们说说心里话,祝晚安!

如果您觉得我发的内容确实对您有所帮助,请麻烦您支持一个热心值,进行精神鼓励,也是我继续写下去的动力!

玩玩破解,写给新人看(第一集)
玩玩破解,写给新人看(第二集)
玩玩破解,写给新人看(第三集)
玩玩破解,写给新人看(第四集)
玩玩破解,写个新人看(第五集)
玩玩破解,写给新人看(第六集)
玩玩破解,写给新人看(第七集)
玩玩破解,写给新人看(第八集)
玩玩破解,写给新人看(第九集)
玩玩破解,写给新人看(第十集)
玩玩破解,写给新人看(第十一集)
玩玩破解,写给新人看(第十二集)
玩玩破解,写给新人看(阶段练习1)
玩玩破解,写给新人看(第十三集)
玩玩破解,写给新人看(第十四集)
玩玩破解,写给新人看(第十五集)
玩玩破解,写给新人看(第十六集)
玩玩破解,写给新人看(第十七集)
玩玩破解,写给新人看(第十八集)
玩玩破解,写给新人看(第十九集)
玩玩破解,写给新人看(第二十集)
玩玩破解,写给新人看(第二十一集)
玩玩破解,写给新人看(第二十二集)
玩玩破解,写给新人看(第二十三集)
玩玩破解,写给新人看(第二十四集)
闲谈如何破解软件?
玩玩破解——小白实战1,你也行!
玩玩破解——小白实战2,巧搜字符串
玩玩破解——小白实战3,易语言字符串比较通杀
玩玩破解——小白实战4,冰火两重天
对新人们学习《玩玩破解》系列教程的集中解答
玩玩破解—加点油,再前行!

yyhd 发表于 2021-1-29 07:32

liujg 发表于 2021-1-29 00:22
还是太粗糙,比如说给某函数下断点,具体如何操作,并没有说,这样的文章对初学者毫无用处,提高不了动手能 ...

我在每一集都想尽可能做到详细,但是毕竟篇幅有限,有很多知识点不可能一次都说完,即使说完,也说不透,不如放在该说的时候说,关于如何下断点,有好几种方法,每种方法都有差异,我会专门讲,一次讲清楚。至于你说的文章对于初学者毫无用处,我想你可能已经过了新手这个阶段了。我只想对看过文章的朋友说,当你说毫无用处的时候,你反过来思考一下在浏览文章的时候,你有没有获得什么新的知识,新的思路。如果有,哪怕有一点,就不要这么绝对的评价,否定一个人的付出,这样的评价会让人很失望。

halou 发表于 2021-6-8 12:25

首先感谢大佬这么好的教程!小白我也是每节课认真的学习!感谢!受益匪浅!

但是这节课,每次GetwindowsTextA函数断点就卡死!无法输入账号密码,不知道什么原因!



tangyi606 发表于 2021-1-29 09:45

本帖最后由 tangyi606 于 2021-1-29 10:07 编辑

大大您好
一、水平和呼吁!首先从水平来看您写得真的非常好,首先我在论坛快2年,注册不到一年说实话还没入门,但是你这个帖子一出就像是福音,我有一种“卧槽,我终于等到这辆车可以上车的感觉”了!而且大家都看到了,人气来看,你的所有帖子每出一个都是在首页,而且还出现了一些现象:很多小伙伴都开了学习贴,专门针对你的某一课来进行讨论,学习,和继续分解步骤,这完全就是现象级的帖子!所以一来大家都很感激您,二来完全没有你说的热度退减的意思。但是我也想在这里呼吁一下,写作不易,而且特别这种不求回报的大大希望大家珍惜,看帖必回,有分一定要评。
二、一点建议;学习是需要一个过程的,说说我的心里过程,前面的4集我是有跟的,用的是下班很晚的时间。但是由于基础不是很够遇到很多障碍。所以我想应该也有很多小伙伴遇到这样的问题。所以我建议如下,看看我们能否所有人一起来。
1、建议大大的更新时间变为周更,为什么呢,因为学习速度真的可能没那么快。虽然您每个贴我都回复,但是真的很多来不及学。需要一点时间消化,或者等周末补上。但是可能有很多没来得及,或者学习心存畏惧,在前几贴就倒了。另外我们也看到了,您更新很给力也确实辛苦了,有时候一天3更,而且写得非常晚。(感恩,辛苦了)。但这样没有得到大家的即使反馈的话,确实会有一点心理落差非常能理解,这是辛辛苦苦写出来的,不图什么回报,就希望大家能更支持。如果一天N更的话确实不好坚持,而且因为学习进度等热度就会被那么多贴平均掉。同时这样你会非常累。
2、我们可以在贴里多讨论、消化,更进一步可以建个群,大家讨论。像B站我们都可以有UP有粉丝,我想我能代表很多小白,我非常愿意成为你的粉丝多交流和促进。一般UP也有粉丝群,发帖、直播前一吼,大家都非常乐意关注和支持。关于学习很重要的就是资源、氛围、和圈子。要想走得远我们需要一群人。(论坛虽好,但是形式来看毕竟是松散型,还是很人自己闭门自修苦练的,但是往往自己很久的顿悟只是别人的基本功,有好导师指路+交流在学习中效率和效果占比70%以上),所以我们可以继续以论坛发帖互动+群进一步交流的方式。
三、对其他小伙伴的呼吁
只有写过内容的人才知道多不容易,希望大家真的有意见能给一些正面、明确的意见,不要动不动就“浅”、“粗”、“我看不懂……”,这样很容寒心,换谁都不愿意继续产出了。请大家包容一下,谁第一次做这个事就可以尽善尽美,100%无敌。是有一些细节一定会遗漏的,比如我弱智得刚开始就找不到哪里查找字符串,后来我看了另外一个伙伴另开的学习实践贴GIF我才焕然大悟。但是这也是学习的一种快乐啊,进一寸有一寸的惊喜不是?学习本来就是有门槛的,耐心一点,不懂多问啊。我们要给大大一点时间接收信息,迭代帖子,改善细节。如果我是作者好不容易写了那么多东西,看到那么多负面信息。那写个锤子。我们不要一起断送了那么好的学习机会。

再次感谢大大!希望大伙把我顶上去,让大家看到,如果支持请把“支持”打在公屏上!{:1_886:}我们来见证一下对这个系列的支持热度和感激之情。您看看是不是有建群的必要!

konosubaakua 发表于 2021-2-10 15:21

交作业


















yyhd 发表于 2021-2-2 12:47

17306326970 发表于 2021-2-1 18:30
首先感谢大佬的付出,既然你说了几句真心话,那我也说一下一个完全小白的读者的看法吧!
第九集开始F8往 ...

你的困惑我完全能够理解。有时候一个别人看起来太寻常的问题,可能在具体的某个新人面前就是一个一直难以解决的问题。首先我想告诉你,每个新人在学习过程中都会有各种各样的问题,非常正常,没有谁可以随随便便成功,所以,一定要坚持。至于你说的具体的F8的问题,其实我的课程上有说明,在此我再补充一下。当我们的程序在OD里暂停下来后,如果你按F8,程序就会一句一句代码的执行,而不是一下子就运行了很多句代码。你可以这么理解,首先我们如何才能破解软件,当然一定要先分析软件的运行流程,那么如何才能对软件的运行流程进行分析呢?当然必须要我们通过一句一句代码的执行才能了解清楚。再打个比喻,我们把小明同学上学这件事看成是一个程序,这个程序的结果就是小明走到学校,程序的执行流程就是小明从家到学校期间如何行走的,走了什么样的路线。现在假定小明从家到学校有三条路,也就是有三种可能执行的流程,如果我们现在站到学校门口,我们只能看到小明是不是到了学校,也就是只能看到程序执行的结果,小明到底选择了哪条路我们根本看不到。我们怎么才能看到小明到底选择的是哪条路呢?当然,一种笨办法是我们从小明离开家的第一步就跟着看,怎么才能一步一步的看呢,我们最好的办法就是把我们和小明用绳子绑在一起,他走一步,我们看一步,这样下来,小明到底走哪条路,怎么走的我们会非常清楚。这个绑绳子的动作,就类似与我们OD里的F8命令,当你的程序载入OD后会在程序执行的第一句代码处暂停下来,你按F8就相当于告诉程序,“我现在把你绑住了,你必须一步步的执行”。但是问题来了,成千上万句代码,你如果从程序执行的一开始就按F8,你要按到什么时候。所以,按F8是要选择时机,这个时机是什么?就是一定要在这个程序的真假码验证环节的前后,这样才最有效率,也最有意义。通过下断点我们才可以让程序暂停,然后找到距离真假码的验证环节附近的位置,可以是验证之前或者验证之后。代码停下来以后,我们就可以通过按F8让程序一句一句的执行代码,在按F8进行跟踪的时候,你的眼睛不能闲着,要留意在OD的代码区、信息区、寄存器区、堆栈区有没有出现可疑的字符串,比如假码,或者“成功”“失败”这样的字符串,按到什么时候为止,就是当你发现有关键跳转的位置,你就可以停下来了。这个关键跳转有什么特点呢?第一,当你看到有敏感字符串时,就距离关键跳转很近了。第二、关键跳转一般是大跳转,就是如果跳,就会跳过很多行代码。第三、关键跳转一定不可能是JMP无条件跳转,一定是JZ、JE等无条件跳转。第四、如果这个条件跳转是个大跳转,而且跳到的位置是在一个JMP下一句就更可疑。以上是我对你问题的解释,除了以上的基本判断,还有就是要靠经验了,祝你成功!

第四个字符 发表于 2021-2-1 14:48

真的想说一下,关于作者
首先,表示好评。但是似乎作者对于人气的降低有些疑惑和苦恼,我想说一下:这种长篇连载文,在数据上是会表现为热度降低,但其实并不是。一开始给予好评的人大多数是出于对论坛新事物的热情和激励,其中大多数是不会对内容长期关注的。其次,52论坛并不是reddit或者微博,大多数可能不会每天都上线,作者这个系列连载从开始到今天都没到一星期,很多人可能期间只上过一次论坛。总结来说,一开始作者看到的是大于核心读者数量的数据,而现在作者看到的是小于核心读者的数据。但是这种优质文章,会随着时间不断积累新读者的

pwzx 发表于 2021-1-29 08:25

不是教程不好,而是很大一批人看不懂了,所以越往后越少人

无闻无问 发表于 2021-1-29 12:35

看到易语言,不谈ff55fc5f5e,我就顶你…

FishHT 发表于 2021-1-29 00:45

之前没接触过这个,看了楼主的第一集,感觉很有意思,自己也动手试了试,先是工具和系统不兼容问题,搞了大半天,差点放弃了,自己又在论坛和网上查了好多资料,才明白一些东西,又重新装了虚拟机,加了工具包,从第一个无壳的到加壳的,一个一个来搞,特别是自从楼主发了好几集开始,也看到了别的帖子来讲解练习中的问题,感觉这样的氛围,太适合我这种初学者了,顶楼主

飘零星夜 发表于 2021-2-24 10:59

我们在OD里下GetwindowsTextA函数断点。//我的是win7 64位系统, 在这里断了很多次,最后才像大佬一样跟踪到破解位置。
1,用OD打开 CM.exe
2,命令行 BP GetWindowTextA
3,点击运行多次,然后能输入账号,
4,点击运行多次,才能输入密码。
5,输完密码后 点 登陆,然后F8,还进入2次断点,然后才回到 4010BD 这个大佬说的关键位置。

mensun2003 发表于 2021-1-28 21:54

十全十美了,沙发

冯古屋 发表于 2021-1-28 21:55

大佬,提一个建议,能不能在你后发的帖子里面插一个之前教程的链接,可以查看之前的帖子,方便学习和阅读

0adsl 发表于 2021-1-28 21:57

感谢老师又发新作   

JetJerry 发表于 2021-1-28 22:12

感谢大佬分享{:301_1003:}

wink223 发表于 2021-1-28 22:14

谢谢楼主

cxliuping 发表于 2021-1-28 22:16

了不起的教程。。

lishu44275 发表于 2021-1-28 22:32

继续学习,这两天我进步很大。

wapjwsy 发表于 2021-1-28 22:47

感谢大佬分享,啥时能出个带壳的破解,,,,,,,,,,

cookielb 发表于 2021-1-28 22:48

我们在OD里下GetwindowsTextA函数断点。然后就到了这个图:
没看懂,这个GetwindowsTextA函数断点是通过搜索找到的吗?谁给解答一下?
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 玩玩破解,写给新人看(第十集)