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

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

#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章 第一个C程序第2章 C语言基础第3章 变量和数据类型第4章 顺序结构程序设计第5章 条件结构程序设计第6章...
    小狮子365阅读 10,735评论 3 71
  • 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称...
    朱森阅读 4,024评论 2 13
  • 程序的基本概念1.1. 程序和编程语言程序(Program)告诉计算机应如何完成一个计算任务,这里的计算可以是数学...
    光剑书架上的书阅读 1,340评论 0 4
  • 唔,要写东西来说自己错了还是更加艰难一点。 但是还是要说…… 对不起 。 唔写的有点银镯,突然发现你默默做的一些事...
    卮言_阅读 194评论 0 1
  • 媳妇儿啊,老公想你,你干什么去了,也不理老公,老公好伤心。天天都想媳妇儿是不是没出息啊,这可怎么办。
    b8130e46c9e2阅读 301评论 0 1