黑客最简单的软件破解方法,反汇编nop指令覆盖
扫描二维码
随时随地手机看文章
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\r\n", money, vip);
if (vip == 1) {
printf("授权成功\r\n");
}
else {
printf("未授权\r\n");
}
}
a.dis 是反汇编文件,138行是vip=0的汇编代码 “movl $0x0,-0x4(%rbp)”, 对应机器码为 “c7 45 fc 00 00 00 00” , 左侧窗口内容是a.out二进制文件,文件第1168字节位置找到相应机器码。