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

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

    关注

    69

    文章

    4945

    浏览量

    87505
  • 指令
    +关注

    关注

    1

    文章

    607

    浏览量

    35716

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

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

收藏 人收藏

    评论

    相关推荐

    LMX2595相频率和电荷泵电流关系如何评估,以及对杂散相噪的相关评估?

    请问相频率和电荷泵电流关系如何评估,以及对杂散相噪的相关评估?
    发表于 11-11 06:58

    什么是相器?

    相器是一种重要的电子元件,广泛应用于信号处理、通信系统和测量仪器中。它的主要功能是比较两个信号的相位差,并输出与相位差相关的信号。本文将详细介绍相器的基本概念、工作原理、类型、威廉希尔官方网站 参数及其应用领域,帮助您更好地理解这一关键组
    的头像 发表于 10-05 13:38 1138次阅读

    上汽通用汽车NOP智慧领航辅助驾驶系统重磅上线

    7月15日;上汽通用汽车NOP智慧领航辅助驾驶系统重磅上线。能够实现L2+级高阶辅助驾驶能力,目前适用范围已覆盖国内城市348个,可用里程超40万公里。上汽通用汽车成为国内率先推出的高速领航辅助功能
    的头像 发表于 07-15 17:00 1258次阅读

    RV32I 基本整数指令集(2.0版本)简介

    、逻辑右移、算术右移,被移位的操作数是寄存器rs1,移位次数是寄存器rs2的低5位。 NOP指令 NOP指令并不改变任何用户可见的状态,除
    发表于 06-24 17:27

    数控车床m99指令的用法

    数控车床是一种高度自动化的机床,广泛应用于机械加工领域。在数控车床的编程中,M代码(辅助功能代码)起着非常重要的作用。M99指令是数控车床编程中的一种辅助功能代码,用于实现程序的循环调
    的头像 发表于 06-14 15:52 4776次阅读

    何用代码在运行的时候设置程序防止被读出?

    何用代码在运行的时候设置程序防止被读出
    发表于 06-03 07:24

    科技 Keysight World 2024

    。君科技作为是德科技连续4年首选租赁合作伙伴,也携多项完整测试应用解决方案参展。作为国内领先的测试仪器综合服务商,君科技为现场观众展示了数字通信接口测试系统、功
    的头像 发表于 05-30 08:28 416次阅读
    君<b class='flag-5'>鉴</b>科技  Keysight World 2024

    STM32如何用HAL库进行内核复位?

    STM32如何用HAL库进行内核复位 普通的系统复位函数如下: / ** 简短的系统重置 详细信息发起系统重置请求以重置MCU。 * / __STATIC_INLINE void
    发表于 04-11 06:49

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

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

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

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

    loop指令的用法及功能

    循环指令是计算机编程中的一种基本控制结构,用于重复执行特定的代码块,以实现重复操作、批处理和自动化等功能。循环指令在编程中具有广泛的应用场景,并且使用循环可以大大提高代码效率和减少冗余
    的头像 发表于 02-14 16:12 2207次阅读

    循环指令loop规定循环次数

    循环指令是计算机编程中非常重要的概念,它允许程序重复执行一段代码块,使得程序可以更有效地处理大量数据和重复性任务。在本文中,我们将详尽、详实、细致地介绍循环指令相关概念、语法和应用场
    的头像 发表于 02-14 16:10 1675次阅读

    数控编程的g功能代码是什么

    数控编程中,G代码(也称为指令代码)是一种用于控制数控机床运动、辅助功能和工作过程的指令。在数控编程中,通过一系列的G代码
    的头像 发表于 02-14 15:51 4030次阅读

    g代码和m代码表示什么功能

    G代码和M代码是数控机床程序中常用的两种指令代码,用于控制数控机床的工作动作和运动方式。 G代码是指控制机床工作动作的
    的头像 发表于 02-14 15:49 4364次阅读

    怎么用Vivado做覆盖率分析

    在做仿真的时候往往会去做代码覆盖率和功能覆盖率的分析,来保证仿真是做的比较充分完备的。
    的头像 发表于 01-03 12:34 1721次阅读
    怎么用Vivado做<b class='flag-5'>覆盖</b>率分析