发表于 2020-5-22 15:32

申 请 I D :nopeslkg


1、申 请 I D :nopeslkg
2、个人邮箱:3158907782@qq.com
3、原创技术文章:基础知识:破解一个c语言程序
C语言程序代码:
https://common.cnblogs.com/images/copycode.gif 1 #include <STDIO.H> 2 3 int main(){ 4   int age; 5   age=10; 6   if (age==10){ 7         printf("Successful\n"); 8   }else{ 9         printf("No Access\n");10   }11   getchar();12 13   return 0;14 }
https://common.cnblogs.com/images/copycode.gif这个程序编译后,正常运行输出的是"Successful",而现在的目的是采用反汇编让该程序输出"NO Access"。只是个示范{:301_1009:}我们先在VC6中分析一下这个程序反汇编(Disassembly)之后的结果:https://img2018.cnblogs.com/blog/1326234/201908/1326234-20190831163341936-1686581853.pngAlt+8出现反汇编窗口,或者如图所示点击按钮查看-->提示窗口-->Disassembly:https://img2018.cnblogs.com/blog/1233571/201903/1233571-20190312110352916-254740780.png简单分析之后,可以看出"if (age==10)"被编译为:CMP DWORD PTR ,0AHJNE main+34H 分析一下这两条汇编指令:CMP用于将SS:内存单元中(这个内存单元保存的就是变量age的值)数据与0AH做减法运算,但是不保存结果,只影响标志位,由于被减数和减数都是0AH,所以相减为0,标志位ZF=1。JNE全称为Jump if Not Equal,它与JNZ(Jump if Not Zero)指令等价(为什么要说到JNZ呢,因为在OD软件中是JNZ而不是JNE),JNE/JNZ判断标志位ZF是否为1,如果为1则不跳转,显然此时的ZF=1,那就是不跳转了,将继续执行下面的指令,就输出了"Successful"了。而我们需要输出"No Access",就需要让它跳转,那怎么让它跳转呢,很简单,只需要将JNE修改为JE就行了,JE就是如果ZF=1则跳转。知道了突破口,用OD打开这个程序,找到00401033H行(由于编译环境不同,读者可能不是此行,建议使用ASCII字符串搜索"Successful"进行跳转,此方法自行百度)。https://img2018.cnblogs.com/blog/1326234/201908/1326234-20190831165429117-63882573.png双击选中的行,将jnz改写为jz,然后单击“汇编”按钮即可。https://img2018.cnblogs.com/blog/1326234/201908/1326234-20190831165540696-1326063196.png 在修改的行右键,选择“复制到可执行文件”->“所有修改”,在跳出的对话框中选择“全部复制”。https://img2018.cnblogs.com/blog/1326234/201908/1326234-20190831165712728-1837241485.png在跳出的新窗口中右键选择“保存文件”即可保存修改之后的程序。https://img2018.cnblogs.com/blog/1326234/201908/1326234-20190831165934333-1074708623.png然后运行修改之后的程序,显示的就是"No Access"啦!https://img2018.cnblogs.com/blog/1326234/201908/1326234-20190831170047006-585786307.png
这个可能达不到要求,可我花了很长时间去搞这个,希望管理能尽早申请通过,谢谢{:301_999:}

Hmily 发表于 2020-5-25 11:10

抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
页: [1]
查看完整版本: 申 请 I D :nopeslkg