先给一段代码
#include <stdio.h>
int main()
{
int i=1;
if(i!=2)
{
printf("您购买的是盗版!!!\n");
return;
}
printf("您购买的是正版!!!\n");
return 1;
}
这段代码用户是看不到的
但是用户能看大这段代码的可执行文件 a.out
运行这个a.out得到如下图所示的结果
我们想要输出“您购买的是正版!!!”
这段代码的意思是i不等于2的时候,输出 您购买的是盗版!!!
当i等于2的时候,输出 您购买的是正版!!!
这就相当于我们用的软件或者我们用的微软系统
当我们用的是盗版的时候,显示的就是有效期为30天
当我们用的是正版的时候,显示的就是正版
首先对这段c代码进行gcc Amendexe.c
得到a.out可执行文件
对可执行文件进行反汇编
在<main>中可以看到
804842e: 83 7c 24 1c 02 cmpl $0x2,0x1c(%esp)
这条语句是对i和2进行比较
为了输出正确的结果,我们把i和1进行比较
所以就把
804842e: 83 7c 24 1c 02 cmpl $0x2,0x1c(%esp)
使用hexedit 改成
804842e: 83 7c 24 1c 01 cmpl $0x2,0x1c(%esp)
再进行./a.out得到
得到我们想要的“您购买的是正版!!!”
也可以把
8048433: 74 0f je 8048444 <main+0x27>(意思是,i=!2就跳转,由于我们的i等于1的,所以就跳转了,为了不跳转,那么这里的机器码74就要
改为75(jne))
改成
8048433: 75 0f jne 8048444 <main+0x27>