yyhd 发表于 2021-1-27 10:59

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

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

第八课快速学会使用OD工具


讲课之前,回答朋友们两件事,一件事是有些朋友需要提供PEID、DIE64、OD这三个工具,这三个工具在吾爱论坛里就有,另外百度一下也有各种版本。我之所以没有提供,一是很容易找到,二是每个人的使用习惯不同,所以使用的版本也有区别。另外一件事是每个人的基础都不同,起点不同,困惑点也不同,相应的关注点也不同,比如有些人使用工具没有问题,有些人还不会使用工具。有些人的关注点在如何脱壳,有些人还困惑当字符串搜不到怎么办。所以我不能面面俱到,解决每个人当下的问题,我还是要按照本课程的教学目标,就是新手扫盲,就是以轻松快乐的心态去玩破解进行课程安排,所以请一些朋友体谅。今天我们的目标就是学会使用OD。

上集我们给大家看了一下OD的样子,还记得吗?“OD分为5个区”,分别是代码区、信息区、数据区、寄存器区、堆栈区。代码区的用处——分析代码;信息区的用处——了解信息;数据区的用处——查看数据;寄存器区的用处——查看寄存器的值,尤其是EAX;堆栈区的用处——查看CALL的参数、变量和返回值,以及程序调用不同的CALL的先后顺序关系。




当程序在执行过程中暂停的时候,大家看一下OD右下角的“堆栈区”,里面会有三个返回到,这个很重要,我分别用黄色、蓝色、绿色的箭头进行标记。为什么说它重要呢?我们前面说过,在堆栈区存放的数据是和子程序(CALL)相关的数据,还记得吗?会存放CALL的参数、调用CALL的下一行语句的地址、CALL里面的变量值。这三个返回到表示调用了三个子程序(CALL),调用的先后顺序是我标记的从下往上的1、2、3,也就是说当一个当程序暂停的时候,我们观察堆栈区,每个返回到都表示执行了一个子程序(CALL),最下面的是先执行的CALL,这样你就明白CALL的调用顺序了吧。知道调用顺序有什么用呢?当然有用,因为我们玩破解,方法不就是根据验证结果进行反查吗?既然是反查,当然要找上一次执行了哪个CALL,就是要在堆栈区往下找“返回到”。这样解释你明白了吗?我再举个例子说明,看下图:




因为这个软件点登陆后,如果账号和密码不对,会提示“登录失败,再来”,你可以搜索字符串,也可以用弹出信息框的命令MessageBoxA来下断点,当你输入账号密码,点登陆,等程序断下来后,你看右下角的堆栈区,用刚才我们讲的知识来看看,第一行是CALL到MessageBoxA,意思是马上要执行的就是弹出对话框,再看绿色箭头指的“返回到”,最下面的是最早执行的CALL,最上面的返回到是刚执行过的CALL,那么我们进行反查,就要先从最上方那个刚执行过的CALL来进行。我们怎么做呢?就是在第一个返回到那一行点鼠标右键,在提示菜单里选择“反汇编窗口跟随”,就会出现下面的图示:




红色箭头指的是第一个返回到,左上方的代码区里面的蓝色方框内的CALL就是我们最新执行过的子程序,它下面的一行地址看到了吗?就是0040129E,就是我们堆栈区返回到的地址,也就是我们以前说的堆栈区会存放CALL的下一句的代码地址,我们也称为返回地址。而我们堆栈区最上面的CALL到MessageBoxA弹出信息框命令的代码就在蓝色方框内的CALL里面,那么我们想一想,如果上面有跳转能够跳过蓝色方框内的CALL,是不是程序就不会执行MessageBoxA弹出信息框这个命令了,我们是不是就成功破解了?是的,就是如此。我们现在欣喜的发现上面正好有一个JMP可以跳过,但是别高兴,在JMP下面一行语句前有一个白色向右的小箭头,表示上面还有一个跳转会跳到这里,所以,我们只要往上找这个跳转,不让这个跳转实现就成功破解了。呵呵,会了吗?你可能还会提出,如果我没有发现有跳转能跳过蓝色方框里的CALL怎么办?很简单,那你就在堆栈区从上往下找“返回到”,看看哪个返回到的CALL上面有跳转能跳过,就可以了。

我们继续来分析一下堆栈区。

里面会有三列数据,最左边的一列是堆栈里的地址编号,比如最上面一行是0012EF30,这个数字就是一个地址,这个地址里存放的数据是什么呢?就是第二列显示的数据,是005E8E88,大家要记住,在OD里显示的数据是十六进制的。那么第三列的数据是什么呢?是对第二列数据的进一步解释。你可以把鼠标放在第一行的位置,然后右键,从弹出的菜单里选择“数据窗口跟随”,然后你看OD窗口左下角的数据区的第一行。看下图:




数据窗口的第一列就是刚才我们要查看的数据005E8E88,第三列ASCII里面显示的就是堆栈区的第三列显示的字符串“NA8210”。那么这是什么意思呢?就是说现在在堆栈区的0012EF30这个地址里面存放了一个数据是005E8E88,这个数据还是一个地址(地址是8个数字组成),这个地址里面存放的是一些十六进制的数字,这些数字就是第二列HEX里面的内容,转换成ASCII字符就是“NA8210”。看下图:




因为计算机只能识别0和1这两个数字,不认识我们键盘上的各种字符,所以我们输入的字符会先按照上面的表的规定转换为对应的十六进制数字,大家看第一个红色的方框里的“A”就被转换为十六进制的41,第二个红色方框里的“N”就被转换为十六进制的4E,“NA8210”里面的8210现在是看成字符,也会相应进行字符到数字的转换,“8”转换为十六进制的“38”,这下明白了吗?你可能会问,8不是数字吗?怎么是字符了?这要看编程的时候程序员是怎么定义的,他定义是字符就是字符,他定义为数字就是数字,计算机要听程序员,按照程序员的定义进行数据类型的显示。

顺便再讲8个常用的命令,会这8个命令你就可以正常使用OD了。

第一个是F9,就是当你把要破解的软件拖到OD里面,你按F9程序就会运行,F9就叫做运行命令。

第二个是F8,这个命令的作用就是你可以一句一句的执行代码,而不是让程序一下子就执行,我们定位到关键代码的时候,是不是需要通过一句一句的代码执行后看看程序有什么变化,会提示关键字符吗?会弹出对话框吗?会跳转吗?只有这样你才能知道破解的关键位置在哪里?

第三个是F7,这个命令的作用和F8类似,也是一句一句代码的执行,但是它有个特殊功能是F8不具备的,就是当你遇到CALL语句的时候,你只有按F7才能进入CALL里面,然后一步一步的执行分析CALL里面的代码,而如果你按F8,那么就不会进入CALL,而是一下子就执行完整个CALL,你只能看到CALL执行的结果。所以我们一般会常用F8单步执行看代码,遇到可疑的CALL就按F7进入执行和观察。

今天内容已经不少了,就先讲到这里,剩下的下次讲,谢谢朋友们的支持。


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

andyzgs 发表于 2021-1-27 14:52

大佬开个直播课吧,或者录个视频。文字对于小白来说还是有点不容易理解。特别是OD各区域内显示的的内容的关联性,一边看文字还得再去对比软件窗口,有时候容易弄乱。如果视频的话可以一直看着软件窗口,通过鼠标有指向性的解说更容易理解。

YMYS 发表于 2021-1-31 19:44

需要多次“返回到”的破解:
1.首先APIMessageBoxA断点设置,运行程序到窗口弹出前一步:

C:\Users\Win10\Desktop
2.找到弹窗之前的第一个“返回到”跟随定位到call,往上找je跳转改为jmp跳转,跳过第一个错误提示:

C:\Users\Win10\Desktop
3.再一次运行程序,此时错误提示为“登陆失败”,相同方法找到第一个“返回到”定位到call,上面紧接着有jmp跳转但是接下来的mov是其他跳转语句跳转过来的,找到此跳转语句je将其nop填充即可执行“登陆成功”:

YMYS 发表于 2021-3-3 21:51

a244 发表于 2021-3-3 21:37
大佬 这个没看懂 什么是API断点设置

弹出“登陆失败”信息框可以使用MessageBoxA函数下断点使在信息框弹出之前断下;
具体操作是:插件-->API断点设置工具-->常用断点设置-->勾选MessageBoxA;
设置完之后先运行输入账号密码点击登录就到第一步了。

weixu 发表于 2021-9-1 20:53

作业:多次返回破解。本人使用的是虚拟机XP系统完成破解流程点。
1、首先打开OD ,运行,按f3打开 CM(多次返回到).exe 文件。
2、按f9随意输入账户和密码,弹出“请输入七位有效数字”。
3、在OD界面点鼠标右键“中文搜索引擎”选择1 搜索ASCII,拉界面置顶,双击“请输入七位有效数字”。
4、在子程序入口CALL上面发现一个跳转指令JE,在信息框显示:跳转已实现。双击该指令修改为“jne 0040113F”使用NOP填充前打✔,点汇编。
5、再次按f9运行程序,随意输入账户密码,之前弹出点“请输入七位有效数字”变成了“登录失败”,同理。在中文搜索界面双击“登录失败”,界面自动切换为OD“登录失败”界面。
6、在子程序入口CALL上面发现JMP无条件跳转指令,无视它,在call和jmp之间有个地址:004015e8 mov ebx,0x6,这个地址信息来自ebx=00000000跳转来自 004015A9,004015A9 显示跳转已实现 004015E8=CM(多次.004015E8,这个je 指令意思是等于则跳转je CM(多次.004015E8,下面就是“恭喜你,登陆成功”,你跳转里还怎么成功。所以必须更改这个指令。
6、双击这个指令,更改为jne 004015E8,也就是在je字母中间加一个N,填充后再填写账户密码。显示:“恭喜你,登陆成功”。
7、别开心的太早,还没完,低于1-6位数字都会显示“恭喜你,登陆成功”,超过七位就会弹出“登录账号不能超过6位字符”。
8、同理,找到“登录账号不能超过6位字符”地址0040108E,发现上面子程序call上面地址0040106B 跳转指令 jle CM(多次.004010AA信息栏显示“跳转未实现004010AA=CM(多次.004010AA”。修改jie为jmp指令帮它实现。此时对话款填写什么数字都显示“恭喜你,登陆成功”。唯独空格时候显示:“请输入登录账号和密码”,既然是学习,也把它和谐里吧。
9、地址0040152A 处将指令je修改jne,填充之。至此,关于所有“返回到”全部搞定。
本人纯小白一个,不知道有没有叙述错点地方,望指正。

无爱灬殇 发表于 2022-2-11 10:51

本帖最后由 无爱灬殇 于 2022-2-11 10:52 编辑

翻遍了评论,没找到更深的真码和算法,来抛砖引玉。
-----------------------------------
来交作业2:《CM6-多次返回到》的真码和算法
一、先做各种尝试,得出:
      1.账号长度不超过6位。
      2.密码长度为7位数字。
二、拖入OD,Ctrl+G定位到00401000地址,F9运行,然后中文字符串搜索。
三、大佬做了注释,可以看到关键的字符串信息。

四、做分析可以得出大致流程:
      1.输入不超过5位字符的账号,通过运算CALL后,与字符hello52pojie比对。
      2.输入固定长度7位数字的密码后,通过算法CALL后,与数字5211314比对。
      3.比对结果,决定关键跳转。

五、通过下断点的方式,输入简单字符账号:1,密码:1111111,在寄存器区和堆栈区可得到运算后结果为:
      账号:152pojie,密码:1112425.
六、可推出算法为:(输入账号)+52pojie,与hello52pojie比对。
                (输入密码)+后四位输入加上1314,与5211314比对。
                所以,真码是:账号:hello,
                            密码:5210000.
七、验证。




展大锤 发表于 2021-4-26 11:45

多次返回破解。
1、首先打开OD ,运行,拉到最顶看到。jle 跳转指令,这个指令是判断跳转指令,他是跳到“登录账号不能超过6位字符 ”信息后面的。
想法: 修改 jle 的跳转指令改成jmp并直接跳转至破解成功;

2、打开中文搜索,到置顶,直接看到了破解成功 字符。双击点进去

3、拿到左侧的地址,复制。把我们最开始第一步找到的jle 跳转修改成jmp 破解成功的地址

4、
5、

dierrenc 发表于 2022-12-11 17:43

新人路过签到:
第一个CM(无壳)的之前已经玩过了。
直接看需要多次返回到的
老样子先运行一遍程序,随便输入看下提示信息,然后用od打开进行搜索:(其实不运行程序也可以,一般都是在最上面)

如果我们将登录成功前面的跳转语句用nop填充,发现不行,第一次判断没有跳过,
所以我们可以一一找到那些提示语句,不过这里不能用nop直接填充这些语句前面的,因为那样相当于不跳过,就一直弹出那些提示、
而我们需要的是登录成功这个提示,所以可以将除了登录成功这条语句外的语句前面的跳转语句改为无条件跳转
要想一劳永逸的话,我们直接来到第一个弹出的提示框“请输入七位有效数字”的汇编代码处,将前面的跳转语句改为无条件跳转语句,跳转的地址改为登录成功那里的跳转语句的下一条地址


保存之后点开保存后的程序运行:

四处为家 发表于 2021-1-27 11:02

前排!!!!!!!!!!!!!!!!

我没有失眠啊i 发表于 2021-1-27 11:02

感谢大佬 {:301_987:}

s8750623 发表于 2021-1-27 11:02

袁煜914 发表于 2021-1-27 11:07

kongkong1900 发表于 2021-1-27 11:08

课程写的不错,比较详细。如果可以出视频会更直观些

eternalguardian 发表于 2021-1-27 11:12

我是当小说看过来的

铭子真难娶 发表于 2021-1-27 11:12

这速度是真的快 - -

huyifan311 发表于 2021-1-27 11:13

感谢楼主分享

夜半歌声 发表于 2021-1-27 11:14

楼主辛苦了 你是真的猛{:301_1003:}
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 玩玩破解,写给新人看(第六集)