0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用NOP指令覆盖相关代码绕开鉴权

Linux阅码场 来源:写个解 作者:吴解君 2021-09-24 10:37 次阅读

1. 背景

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

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

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

2. 演示

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

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

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

void main(){ int money = 0; int vip = 1;

asm(“nop”); asm(“nop”); asm(“nop”); asm(“nop”); asm(“nop”); asm(“nop”); asm(“nop”); // 无效指令 if (money == 0) { vip = 0; }

printf(“money %d vip %d

”, money, vip); if (vip == 1) { printf(“授权成功

”); } else { printf(“未授权

”); }}

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

3. 开始破解

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

据我所知,每种处理器都会有一条瞎忙活的空指令nop(No Operation)。CPU遇到nop指令仅空转,浪费你的电费,不干实际有意义的事情(其实空转也是为了更有意义的发挥效能,上班摸鱼是不是能更有活力!), 那么想办法把“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” 这行如同被注释掉一样。

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

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 软件
    +关注

    关注

    67

    文章

    4336

    浏览量

    85575
  • 指令
    +关注

    关注

    1

    文章

    577

    浏览量

    35367

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

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM8S的NOP指令一个周期是多少?

    大家好,STM8S的NOP指令一个周期是多少?现在外部晶振16MHZ,CPU不分频,请问NOP的周期是多少?因为想用NOP做延时,谢谢!
    发表于 04-09 07:54

    蔚来全域领航辅助NOP+已覆盖全国99%城市,验证里程超

    据悉,目前蔚来全域领航辅助NOP+已经覆盖我国内地99%的地级市和县级市,总计达到了726个城市。相比于2月份,智能驾驶方面新增的汇路成网城市数量为120个,累计道路验证里程超过100万公里。
    的头像 发表于 03-08 13:57 163次阅读

    devicestates指令故障代码基本概念

    “devicestates”指令故障代码是指在设备管理系统中发生错误或故障时,系统生成的特定代码或消息。这些代码和消息旨在为用户或技术支持人员提供有关设备故障的信息和诊断。通过检查和解
    的头像 发表于 12-08 14:19 562次阅读

    代码覆盖率记录

    为确保具体的产品(例如,医疗或航空电子市场)质量合格, 通常需要提供语句覆盖与判定覆盖认证证明。对于各种嵌 入式系统,规范要求高度优化的代码需要实时测试。禁止 代码插装和运行时篡
    发表于 11-03 11:02 0次下载
    <b class='flag-5'>代码</b><b class='flag-5'>覆盖</b>率记录

    用户大会丨四维图新发布NOP Lite,助力车企快速赢得先机

    · · · · · · · · · · 10月10日,四维图新用户大会在上海成功举办。此次大会上,四维图新重点发布了轻量版领航辅助驾驶系统NOP Lite。NOP Lite定位于入门级行泊一体
    的头像 发表于 10-12 18:05 210次阅读
    用户大会丨四维图新发布<b class='flag-5'>NOP</b> Lite,助力车企快速赢得先机

    ARM汇编指令:异常产生指令和伪代码

    。 2、【BKPT指令】 BKPT 16 位的立即数 BKPT指令产生软件断点中断,可用于程序的调试。 伪代码 1.【AREA】 一个汇编程序至少要包含一个段,当程序太长时,也可以将程序分为多个
    的头像 发表于 10-07 14:29 517次阅读

    制作1.5公里覆盖的对讲机

    制作简易的对讲机,覆盖范围1.5公里,无噪音,声音清晰!包含相关物料表+线路图+代码文件
    发表于 09-25 08:11

    软件代码结构化覆盖测试-分支覆盖

    本篇我们介绍分支覆盖,从测试技术对代码的测试程度上来说,在复杂代码中,分支覆盖比语句覆盖效果要好。
    的头像 发表于 09-01 11:34 391次阅读
    软件<b class='flag-5'>代码</b>结构化<b class='flag-5'>覆盖</b>测试-分支<b class='flag-5'>覆盖</b>

    何用协处理器拓展指令实现更高级运算呢?

    按照这句话的意思,协处理器拓展指令只能实现读写操作吗,官方的案例貌似也只是读写指令。那如何用协处理器拓展指令实现更高级运算呢,用内联汇编吗
    发表于 08-16 07:41

    使用NOP912/NOP914达到精密测量应用

    使用NOP912/NOP914达到精密测量应用
    的头像 发表于 08-10 11:07 279次阅读

    #define NOP() _nop_() /* 定义空指令 */这个空指令怎么用的啊?

    #defineNOP() _nop_()/* 定义空指令 */ 这个空指令怎么用的啊?
    发表于 06-19 07:47

    代码覆盖检测

    1 代码覆盖率概述 覆盖率(code coverage rate)是反映测试用例对被测软件覆盖程度的重要指标,也是衡量测试工作进展情况的重要指标。在
    的头像 发表于 05-12 22:26 2475次阅读
    <b class='flag-5'>代码</b><b class='flag-5'>覆盖</b>检测

    如何在s32k中添加NOP指令

    所以我需要生成一些等待延迟几微秒,我需要在延迟循环中添加 NOP 指令,我找不到 s32k146 的 NOP 指令。 我在用 ARM 的 S32 设计工作室 版本:2018.R1 内
    发表于 04-28 07:12

    异或门相器具有何种相特性呢?

    异或门相器具有何种相特性呢?
    发表于 04-24 11:39

    测量嵌入式系统中的代码覆盖

    许多 软件 开发 人员 测量 嵌入式 系统 中 的 代码 覆盖 率 使用 的 测试系统 与 其 原始 设计 非常 不同。工程师知道这是一种糟糕的方法,但它很容易发生。就像沸腾的青蛙寓言一样,不被注意的增量温度变化会导致可怜的青蛙死亡......
    的头像 发表于 04-23 10:50 614次阅读