黑客最简单的软件破解方法:反汇编nop指令覆盖

文章下方附学习资源,自助领取

1. 背景

群里有个小伙伴学习设计加密方法,如同某商用软件输入注册码后就能使用扩展功能。设计时,他很自然地想着所写的加密措施是否足够健壮安全,是否有什么方法可以绕过加密检查,也就是破解。

权限管理仅在启动后检查一次注册码是否有效——一个if判断,他也认定,若反汇编软件只要 欺骗过这条判断加密措施荡然无存。

群里我给他一个破解设计思想:利用NOP指令覆盖相关代码绕开鉴权

黑客最简单的软件破解方法:反汇编nop指令覆盖插图1

嵌入式物联网需要学的东西真的非常多,不少人因为学的路线不对、内容不对头而和高薪offer插肩而过,甚至有些老铁压根都不知道要学什么……让人捉急……分享一波自己整理的学习资源吧,基本上要学的内容都有,150多G。无偿。

黑客最简单的软件破解方法:反汇编nop指令覆盖插图3
黑客最简单的软件破解方法:反汇编nop指令覆盖插图5

2. 演示

下面是我做的一个例子演示运用NOP指令破解:软件a.out在破解前不是vip,直接修改二进制文件后拥有了vip权限

黑客最简单的软件破解方法:反汇编nop指令覆盖插图7

它是怎么实现的呢?先看看源码,源码逻辑很简单,仅仅判断用户有没有money,没有钱当然没权限。

为了便于阐述原理,我编译源码带上调试选项:-g,生成的可执行文件a.out反汇编后就能同时看到源码和汇编内容。

    void main()

    a.dis 是反汇编文件,138行是vip=0的汇编代码movl $0x0,-0x4(%rbp), 对应机器码为c7 45 fc 00 00 00 00, 左侧窗口内容是a.out二进制文件,文件第1168字节位置找到相应机器码。

    黑客最简单的软件破解方法:反汇编nop指令覆盖插图9

    3. 开始破解

    接下来怎么修改呢?轮到主角nop指令登场。

    据我所知,每种处理器都会有一条瞎忙活空指令nop(No Operation)。CPU遇到nop指令仅空转,浪费你的电费,不干实际有意义的事情(其实空转也是为了更有意义的发挥效能,上班摸鱼是不是能更有活力!

    黑客最简单的软件破解方法:反汇编nop指令覆盖插图11
    黑客最简单的软件破解方法:反汇编nop指令覆盖插图11
    黑客最简单的软件破解方法:反汇编nop指令覆盖插图11

    ), 那么想办法把vip=0这条语句生成7字节机器码c7 45 fc 00 00 00 00,替换成nop指令的机器码,是不是就破解了呢?如果nop机器码是2字节,我的还需考虑指令完整性对齐,覆盖机器码长度必须是nop机器码整数倍。

    那么问题来了:x86的nop指令对应的机器码是什么呢?习惯性百度搜索 x86 nop 机器码。我这里介绍更简洁直接的方法,需要查询什么反汇编指令,问问反汇编工具objdump。

    有没有注意到源码里我写了若干行指令 ‘asm(nop)’,c语言可以嵌入汇编,查看反汇编文件a.dis告诉我nop指令最终编译得到的机器码是什么。

    反汇编后nop的机器码是0x90。谢天谢地,芯片工程师设计指令操作码时只给它一个字符。任何正整数都是1的整数倍,不用考虑指令完整性对齐。

    顺带留给读者一个思考题:对于x86这种 CISC 复杂指令集,把nop指令的机器码设计成只有一个字节,有什么好处?

    替换后的源码 vip = 0 这行如同被注释掉一样。

    黑客最简单的软件破解方法:反汇编nop指令覆盖插图13

    保存修改,再次执行,看到了吗!已经得到了VIP权限。

    黑客最简单的软件破解方法:反汇编nop指令覆盖插图15

    END

    作者:吴解君来源:程序员写个解本文转载自嵌入式微处理器,如有侵权,请联系删除原文链接:黑客最简单的软件破解方法:反汇编nop指令覆盖

    版权声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

    原创文章 黑客最简单的软件破解方法:反汇编nop指令覆盖,版权所有
    如若转载,请注明出处:https://www.itxiaozhan.cn/202211119.html

    发表评论

    您的电子邮箱地址不会被公开。 必填项已用*标注