先用VC6写一个简单程序;
如果在输入框输入 ABCdef ,单击按钮则弹出“密码正确”,否则弹出“密码错误”;
用IDAPro打开此exe;打开时有一些打开选项,例如选择处理器类型,因为不同的处理器指令集不同,按二进制打开文件时选择不同的指令集识别出的内容会不一样;先都默认;
进到反汇编窗口,可以在文本模式和图形模式之间切换;
切到文本模式;
从选项菜单调出如下对话框;把线框处改为16,这样会显示指令的机器码;
看一下机器码显示了;
jnz指令的机器码为75,如果改为74,就变为jz指令;
jnz,结果不为零(或不相等)则转移; jz即零标志为1就跳转;
这是最基本的破解原理,可以学习一下;干坏事是不好的;把75改为74,看一下是否产生输入任何内容都弹出 密码正确 的效果;
用文本搜索功能,搜到一个 75 ;
选择如下菜单,Edit - Patch program - Change byte...;
在弹出对话框把75改为74;
看一下改了;
然后选择如下菜单,应用改变到输入文件;
OK,保存;
然后运行程序;并没有改过来,还是要输入正确的密码才弹出 密码正确;
改的可能不是地方;
看一下IDA Pro的函数窗口;这是识别出的MFC函数;双击AfxMessageBox,
定位到对应反汇编代码处;看一下,这个if-else,应该是编译为jmp,并没有编译为jnz;下回继续;