yyhd 发表于 2021-1-27 15:17

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

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

第九课 OD学习的最后一课


回顾一下上一集的内容,最主要有两点。

一是了解堆栈区里面的“返回到”的重要作用,要清楚最下方的返回到是最先执行的CALL,我们断下程序,要从最上面的“返回到”一步步反查程序的执行流程。
二是OD里面的F9、F8、F7的功能,F9是运行程序,F8是一步步执行程序代码,F7是进入CALL的钥匙。

本集我们继续再讲几个OD使用的关键指令。

一、CTRL+F9


这个指令我们破解常用。它的作用是什么呢?就是当你断下程序以后,按一下CTRL+F9就可以让程序快速执行到你现在运行的子程序代码的结尾处。好处就是当你不想具体看这个子程序的每一句代码执行的情况了,你就可以按键盘上的CTRL+F9直接运行到子程序的结尾的位置停下来,如果再按一次F8,你就到了调用这个CALL的下一句代码。我举个例子,如果我们要破解的软件是有错误提示的信息框。那么我们常用的方法就是在MessageBoxA这个函数上下一个断点,那么当你运行程序,输入账号密码点登陆后,程序会停到什么代码的位置?会停在MessageBoxA这个函数的第一句代码,函数也是子程序,不过是计算机的操作系统提供的面向所有运行在操作系统之上的软件的固定的子程序,这个函数(子程序)的代码是微软事先就写好了的,我们程序员在编写软件的时候,不管是用C语言、VB还是易语言,我们都不需要重新来写一些系统已经写好的函数,我们只需要给操作系统一个调用这个函数的命令就可以了。如果是易语言编程,看下图:




红色箭头指的地方,就是我们用易语言编程写的代码,我们编程很简单,只需要打上信息框()这几个字就可以了,我们程序在运行的时候,会自动调用操作系统为我们已经编好的弹出信息框的子程序,你想想看,弹出信息框如果要我们自己编写代码,是不是要写很多代码,你要画窗口,还有按钮等等。讲这些的意义在哪呢?你想想看,当我们把要破解的程序拖到OD里面运行,我们在代码区看到的这么多代码都是我们的软件作者写出来的吗?当然不是,有很多代码其实是类似于信息框这个函数一样,是操作系统已经写好的代码,我们调用什么函数,这些代码会出现在OD的代码区。那么,你可能要问,那我们怎么分辨是软件作者自写的代码还是操作系统提供的代码呢?简单说,软件作者自写的代码基本上都是小地址,操作系统的函数代码都是大地址。看下图:




看红色方框内的代码地址,都是004.....,这些就叫做小地址。我们再看黄色箭头指的位置,上面写着CM3,就是我们要破解的软件的名字,就更加证实我们目前程序暂停在作者自写的代码上,也可以形象的说“我们现在处在程序领空”。
我们再来看一张图,对比一下:




现在红色方框内的地址都是7开头的,这就是大地址。我们再看黄色箭头指的位置显示USER32,不再是我们要破解的软件的名字CM3,这就说明目前程序暂停的代码位置不是作者自写的代码内,而是在操作系统提供的函数(子程序)代码内,我们也可以形象的说“我们目前处在系统领空”。

我们知道程序此刻停在程序领空还是系统领空对于我们破解有什么用处呢?大家想想,我们要实现破解一个软件,如果是爆破就是修改一些跳转指令或者是EAX的值,如果是追码和研究算法,我们就要进入到验证CALL里面,那么我们要修改的代码或者是验证CALL,是作者自写的代码还是操作系统提供好的代码?答案只能是一个,就是一定是软件作者自写的代码,因为每个不同的软件的登录账号和密码都不同,说明验证算法是不同的,而验证算法是每个作者自己去写的,或者是复制了别人已经写好的算法代码,但绝不是操作系统提供的。


分析至此,我们可以得到一个非常重要的结论,就是“破解软件只需要关注软件作者自写的代码!”,换个词就是“我们要时常注意把自己停留在程序领空”。好了,说了这么多,和我们要讲的CTRL+F9有什么关系,关系就是当我们发现此刻程序停留在系统领空以后,我们就赶快按CTRL+F9执行到系统函数的结尾处,因为你花时间看系统函数内部的代码完全是浪费时间,明白了吗?

可能有些朋友会问,那我按一次CTRL+F9到函数结尾处,再按一次F8是不是就到了程序领空?未必,有可能你还是处在系统领空,你必须再按CTRL+F9,如果还没有到,再继续,你可能说,那不累死了吗?有什么好办法,能够一下子就从系统领空回到程序领空?有,必须有。就是下面要说的一个指令。

二、ALT+F9


这个指令就厉害了,作用就是当程序暂停在系统领空的时候,你按一下ALT+F9,程序就一下子就执行完当前系统领空的代码回到了程序领空。这样就省事了吧。所以我们破解的时候,经常用的手法就是在诸如MessageBoxA这样的操作系统提供的函数下断点,程序断下来后,就按一下ALT+F9从系统领空返回到程序领空,再分析代码。提醒一下,如果是MessageBoxA函数,你按完ALT+F9后你会发现并没有返回到程序领空,怎么回事?很简单,你需要把错误提示信息框关闭,然后程序就自动返回到程序领空了,因为错误信息框在等待用户操作,你不操作,程序就一直停留在等待操作的状态中。


三、F4


F4的作用,就是你需要程序代码停在哪里,你就在这行代码上按键盘上的F4,然后按F9运行,程序就停在这行代码上了,你可以把F4比做出租车,招手就行,随时随地都可,当然,现实中出租车司机都是守规矩的,不能乱停,呵呵。

四、F2


这个是我们在OD里最常用的。我们经常说给程序下断,怎么下断呢?就是在你要断的代码的位置上按一下F2就可以了,程序执行到这里就会停止待命,然后你就可以按F8一句一句代码往下运行,遇到可疑的CALL就按F7进去看看,不想看了就按CTRL+F9返回到CALL的结尾处,如果是系统领空,就直接按ALT+F9一步返回到程序领空。学会了以上的指令,你基本上就可以用OD破解软件了,还有一些其他的使用方法,我会放在以后的课程中穿插讲解。

如果您觉得我发的内容确实对您有所帮助,请麻烦您支持一个热心值,进行精神鼓励,也是我继续写下去的动力!
玩玩破解,写给新人看(第一集)
玩玩破解,写给新人看(第二集)
玩玩破解,写给新人看(第三集)
玩玩破解,写给新人看(第四集)
玩玩破解,写个新人看(第五集)
玩玩破解,写给新人看(第六集)
玩玩破解,写给新人看(第七集)
玩玩破解,写给新人看(第八集)
玩玩破解,写给新人看(第九集)
玩玩破解,写给新人看(第十集)
玩玩破解,写给新人看(第十一集)
玩玩破解,写给新人看(第十二集)
玩玩破解,写给新人看(阶段练习1)
玩玩破解,写给新人看(第十三集)
玩玩破解,写给新人看(第十四集)
玩玩破解,写给新人看(第十五集)
玩玩破解,写给新人看(第十六集)
玩玩破解,写给新人看(第十七集)
玩玩破解,写给新人看(第十八集)
玩玩破解,写给新人看(第十九集)
玩玩破解,写给新人看(第二十集)
玩玩破解,写给新人看(第二十一集)
玩玩破解,写给新人看(第二十二集)
玩玩破解,写给新人看(第二十三集)
玩玩破解,写给新人看(第二十四集)
闲谈如何破解软件?
玩玩破解——小白实战1,你也行!
玩玩破解——小白实战2,巧搜字符串
玩玩破解——小白实战3,易语言字符串比较通杀
玩玩破解——小白实战4,冰火两重天
对新人们学习《玩玩破解》系列教程的集中解答
玩玩破解—加点油,再前行!

dtl521 发表于 2021-1-27 23:13

7集已经全部看完。怪自己真没能力,看懂了大半。今天终于用了吾爱的OD专用软件。尝试了第三集中最简单的那个。第二个就已经不会了。还得继续揣摩+学习。
yyhd大哥,是真的很辛苦,更了那么多,真的很浅显,但是我还是有好多好多不懂的地方啊。
不过让我提起来学习的兴趣。
不知道该怎么表达,反正文章是好的文章,就看个人是否愿意去学,不懂的地方有人相互探讨就更好了。

lvbuqing 发表于 2021-2-1 17:44

断桥隔爱 发表于 2021-1-28 09:22
大神,能否请教一个问题,还望不吝赐教,给我等讲讲。就是:一个软件,他分客户端和服务端,客户端在登录的 ...

服务端无法分析的哦,你只能分析客户端代码,楼主不是说了嘛:服务器会把验证后的结果再传给我们的程序,只要我们能够找到返回值这句代码的位置,然后修改返回值就可以破解

张哥哥 发表于 2021-1-27 19:39

终于有大佬出这种教程了,能看懂了一次- -

hack78 发表于 2021-1-27 15:19

感谢大佬的持续更新,一直在追{:1_921:}{:1_921:}

lxs1314 发表于 2021-1-27 15:19

一楼 膜拜

tangyi606 发表于 2021-1-27 15:30

这比追番都精彩,大大辛苦了,多更一点

0adsl 发表于 2021-1-27 15:31

老师辛苦了   老师真棒

liuchenxii 发表于 2021-1-27 15:34

谢谢大佬{:301_997:}

moonalong8 发表于 2021-1-27 15:36

继续支持大佬。。。贡献我的分~

sutramusic 发表于 2021-1-27 15:39

我正在收藏,还没来得及看,大神发得太快了。{:1_921:}

刀大喵 发表于 2021-1-27 15:39

满满干货 通俗易懂 学到了

wgc3306 发表于 2021-1-27 15:45

楼主威武霸气
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 玩玩破解,写给新人看(第七集)