初学几天汇编的我把自己的程序给破解了

首先这个程序是我之前写的一个非常简单的命令行程序,只有一个判断输入的字符串是否和指定的字符串相等,相等输出密码正确,否则显示密码错误

#include

#include

int main(void){

while(1){

char a[100]={};

char b[100]={"hello world"};

int c = 0;

printf("请输入密码: ");

while((a[c]=getch())!=13){

if(a[c]=='\n' && a[c]=='\r')

a[c]='\0';

putchar('*');

c++;

}

a[c]='\0';

if(strcmp(a,b)==0){

printf("\n密码正确\n");

break;

}else{

printf("\n密码错误,密码是 'hello world'\n");

}

c=0;

}

getchar();

return 0;

}

首先打开OD,从为数不多认识的几个指令中找了很久,终于被我发现啦

TEST EAX,EAX

JNZ 00401448

这两行汇编代码,根据之前学的用 nop 替换 jnz 这行代码,保存程序后,发现不管输入什么字符串都提示密码正确

虽然这只是最简单的 nop 替换,但是对于我来说意义重大啊,毕竟才刚学汇编,许多指令都不懂,连OD快捷键都不会用的人,通过修改汇编代码成功修改了程序功能,这对我是非常大的鼓励!值得发一篇文章来纪念一下!

初学几天汇编的我把自己的程序给破解了_第1张图片

你可能感兴趣的:(初学几天汇编的我把自己的程序给破解了)