【爆破核心理论:跳过断点call】
本帖最后由 书香 于 2024-2-14 14:00 编辑逆向图文资料链接:Shark恒零基础逆向教程之图文版(共28课)
总系列链接:【书香编程系列教程】从零开始学编程语言
本系列上一级链接: 【易语言od联动学习系列简介】 (不是从上一级来的先返回上一级链接看大纲)
在很多教程中,都提到过一句话,那就是要找到跳过当前call的跳转(jmp等),这就像一条公式一样,为什么要跳过去,跳过去为什么软件就破解了?本节我们来分析理论基础
我们先以jmp为例子讲解:
本节课也是逆向中爆破的理论基础,懂原理了,才能不断进步,看人家的教程照葫芦画瓢,大概率就是学了后面的方法就忘记前面的
这个断点call就是错误提示的call(或其外层的call),你可以使用信息框等断点,就像shark恒老师的教程同样一直强调我们想办法去跳过这个错误call(断点call)
因为在实际程序中,软件验证身份信息后,会生成两个领域代码
①:验证没通过,进入错误领域
②:验证通过,进入正确领域
上图中的jmp跳过断点call说明什么?说明这个jmp跳过了错误领域,这说明jmp上面的领域和断点call的领域肯定相反,我们暂且叫正确领域,为什么使用暂且?因为有一种情况就是多重错误选择(提示不同的错误),这个问题文章结尾讲
重点:图中标注的正确领域并不是说验证成功后执行的代码都在这里面,而是说jmp上面的一些代码验证没通过肯定是不会执行的,我们暂时不用去考虑验证成功后执行了哪些汇编代码
重点来了,这个jmp不是关键,不是要改这个jmp,我们要思考为什么这个jmp没执行,要是执行了就不会执行断点call了,那原因就是这个jmp上面的某个跳转肯定跳到了jmp下方错误领域的第一句代码
那么我们只要把这个je给nop掉,就会向下执行到这个jmp,然后跳过了错误领域,走的就是正确领域的路线了
补充难点:
上面我们提到了一个问题
我们暂且叫正确领域,为什么使用暂且?因为有一种情况就是多重错误选择(提示不同的错误),这个问题文章结尾讲
见易语言代码:
也就是软件还对错误类型做了判断,那我们上面说的jmp指的也就是代码中箭头指向的位置,这个时候,我们改了后发现提示的是其他类型的错误,我们只需要将这个整体看成一个错误call即可(不一定非要返回外层call)
方法:
①:将下图的结构看成一个大的错误call
②:用上面的方法再测试一次即可,一般只会存在2层结构
________________________________________________________________________________________
拓展:je为例子讲解
那假如断点call上面的不是jmp,是je(一般情况je不会跳过call都是执行je的下一行汇编代码也就是进入错误领域),这个时候你将je改成jmp即可,一句话,jmp处必须跳过断点call
(jmp类型才需要找jmp下一行代码定位上方的je,je类型直接je改成jmp)
jmp类型对应的代码
je类型对应的代码
重点:请大家带着这个思路前往shark恒老师的教程中进一步巩固学习
【S02E01】Shark恒 零基础逆向教程之图文版【深入爆破】
重点:学习本节内容要看方法,不要看帖子中的内存地址,系统不一样,你显示的内存地址和shark恒老师教学显示的不一定相同
本系列上一级链接: 【易语言od联动学习系列简介】
谢谢教程! 书香真的很用心!不过我觉得应该使用你写的代码生成exe后分析,汇编与源码对比进行讲解会更直观。但前提是能看懂易语言的情况下。 Shark恒 发表于 2024-2-14 14:08
书香真的很用心!不过我觉得应该使用你写的代码生成exe后分析,汇编与源码对比进行讲解会更直观。但前提是 ...
{:5_116:}谢谢大哥的肯定,哈哈哈哈哈哈 书香 发表于 2024-2-14 14:18
谢谢大哥的肯定,哈哈哈哈哈哈
书香大佬
页:
[1]