参照 加密与解密 第三版,5.1.3、5.1.4节;
序列号明码比较的反汇编代码形式如下;
形式1:寄存器直接比较
mov eax []
mov ebx []
cmp eax, ebx
jz(jnz) xxxx
eax,ebx,放的是直接比较的两个数;
形式2:函数比较1
mov eax []
mov ebx []
call xxxxxxxx ;比较函数,可以是API函数,或自己写的函数;
test eax eax
jz(jnz)
形式3:函数比较2
push xxxx
push xxxx
call xxxxxxxx ;比较函数
test eax eax
jz(jnz)
形式4:串比较
lea edi [] ;edi指向字符串a
lea esi [] ;esi指向字符串b
repz cmpsd ;比较
jz(jnz)
keymake软件,它拦截程序指令并将出现的明码以某种方式直接显示出来;
由keymake软件生成注册机;
运行时,注册机装载目标程序,在指定地址处插入一个INT 3指令,目标程序会在此中断,然后注册机将内存或寄存器值读出,再恢复原程序指令;
TraceMe的反汇编代码如下;
此处,keymake需要拦截TraceMe两次;第一次是4011E5h的call;然后是40138Dh地址,以便查看EBP指向的字符串;
此处序列号保存在ebp指向的内存地址;
下载keymake;
从菜单选择 其它/内存注册机;
浏览打开TraceMe.exe;如图添加要拦截的地址;选中 内存方式,寄存器,EBP;
点 生成 按钮;让你选择生成的注册机外观;
选择生成的注册机保存的地址;默认和要装载的程序同一目录;
生成一个注册机zc1.exe;
运行zc1.exe;果然装载运行了TraceMe.exe;
注册机装载TraceMe,输入用户名,单击Check按钮,注册机拦截到以后,会弹出一个窗口告知正确的序列号;
但是操作到此;注册机并未如原书所说,弹出窗口告知正确的序列号;
估计是Windows版本不同;TraceMe反汇编出来的代码地址并不一致;
就是keymake设置时,输入的中断地址不对;
没有时间了,下回再搞;