步骤如下
1.破解样本 链接为 http://pan.baidu.com/s/1o8lwLiq
2.首先打开样本程序,得到关键字符串“try again”,如下
3.打开IDA加载该样本程序。打开View->Open Subviws->Strings 字符串窗口,搜索关键字符串。
双击字符串,进入IDA-View 窗口,按table键转换为Pseudocode 窗口,这是反编译过来的c代码,观察它的逻辑。找到判断,跳转的位置。如图 可以看出调用了istrcmpA函数,比较输入字符串和要找的字符串,然后跳转。在这一行 代码处按table键切换窗口找到反汇编位置,如图是代码段0x00401094 的位置。
4.打开OD找到这个位置。
此时我们在这个位置下断点可以看到,堆栈区显示两个字符串,一个是我们输入的字符串,而另一个就是实际的序列号。
有两种方法可以破解,第一种方法是直接输入这个序列号就行了,另一种是我们找到跳转到显示“try again ”的位置,修改跳转指令,步骤如下:
方法1:输入“`mddggzdl” ,显示"very good".
方法2:分析断点附近的指令,单步调试发现跳转指令在指令“0040109A”处 当跳转实现时,跳转到"success" ,当跳转没有实现时,跳转到“fail” 。我们只需要修改这个跳转条件,让它的跳转调到"success"即可。分析指令我们知道把JE 改为“JNE”即可。如图:右键汇编,改JE为JNE,然后汇编,右键复制到可执行文件-所有修改-全部复制,在弹框中右键保存文件,输入保存的文件名,保存即可。