首先这个程序是我之前写的一个非常简单的命令行程序,只有一个判断输入的字符串是否和指定的字符串相等,相等输出密码正确,否则显示密码错误
#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快捷键都不会用的人,通过修改汇编代码成功修改了程序功能,这对我是非常大的鼓励!值得发一篇文章来纪念一下!