本节书摘来自异步社区出版社《c++ 黑客编程揭秘与防范(第2版)》一书中的第6章,第6.8节,作者:冀云,更多章节内容可以访问云栖社区“异步社区”公众号查看。
c++ 黑客编程揭秘与防范(第2版)
本章介绍了pe结构和调试原理,此外还介绍了文件补丁和内存补丁方面的知识。在此顺便介绍一款制作注册机的工具——keymake(《黑客帝国》第二部中的“关键人物”就是keymake,用来配钥匙的那个老头)。keymake的界面如图6-77所示。
图6-77 keymake工具界面
keymake的功能非常多,这里主要介绍“其他”菜单下的功能,如图6-78所示。
图6-78 “其他”菜单下的功能
keymake菜单有3个主要功能,分别是“内存注册机”、“制作文件补丁”和“制作内存补丁”。分别以前面的程序例子来制作3个补丁程序。
首先来制作“内存注册机”。在keymake的“其他”菜单下选择“内存注册机”,出现“设置注册机信息”界面,如图6-79所示。
图6-79 “设置注册机信息”界面
在图6-79中的“程序名称”处选择前面写的crackme程序,然后单击“添加”按钮,出现“添加数据”界面,添加相应的数据,如图6-80所示。
图6-80 “添加数据”界面
在图6-80中,首先要添加中断地址,在“中断地址”处输入“00401e9e”,在“中断次数”处输入“1”,在“第一字节”处输入“e8”,在“指令长度”处输入“5”。为什么这么填写呢?对于“中断地址”、“第一字节”和“指令长度”的填写方法,参考图6-75就能够明
白。“中断次数”是指在中断地址被断下第几次后去读取数据。由于正确“密码”在内存中,因此在“保存下列信息为注册码”窗口中选择“内存方式”,选择“寄存器”为“edx”。这里也对照图6-75就可以明白。填写完上面的内容后,单击“添加”按钮则返回“设置注册机信息”界面,然后单击“生成”按钮,将“内存注册机”放在与crackme相同的目录下即可。然后运行生成的注册机,会出现crackme程序界面,随便输入一个“账号”和“密码”,单击“确定”按钮即可出现正确的注册码,如图6-81所示。
图6-81 “内存注册机”提示正确的注册码
制作“文件补丁”相对于“内存注册机”要简单很多。制作“文件补丁”的keymake界面如图6-82所示。
图6-82 “制作文件补丁”界面
在图6-82中,在“原始的文件”处选择破解前的文件,在“已破解文件”处选择已经破解后的文件,然后单击“制作”按钮即可生成一个文件补丁程序。这里需要说明的是,之所以选择“原始的文件”,是因为生成的文件补丁在对没有破解的文件进行打补丁前需要对文件的crc校验和进行计算,以防止由于文件版本的不同而导致文件破坏。
最后介绍一下“内存补丁”。“内存补丁”的制作也是比较容易的,打开“内存补丁”的制作界面,然后依照图6-83所示进行设置。
图6-83 “制作内存补丁”界面
“制作内存补丁”界面中的“添加数据”窗口中的相应设置,请参考图6-57进行设置。
本章的程序中给出了keymake中的“文件补丁”、“内存补丁”和“内存注册机”的编写方式,请读者参照keymake软件再次体会前面的例子。