今天所用到的示例程序仍然是《Shark恒零基础百集VIP破解教程》中的示例程序:
运行程序,发现程序打开就关闭了,并生成一个空文件夹:
先查一下壳:
VB的无壳程序,接着载入OD,因为是vb的程序,所以不能用OD的插件来设置程序退出的断点,所以在反汇编窗口右键-查看-所有模块间调用:
向下翻阅,查找vb程序的退出函数(end),vb程序调用的函数都是简写:
找到后右键-在每个调用到_vbaEnd上设置断点:
接着直接来到断点窗口,查看每一个断点处是否有跳转跳过:
第一个断点(0x0054613f):
到段首都没有发现可以跳过这个call的跳转,删除这个断点,接着看下一个断点(0x0059035f):
这一个断点也是如此,接着看下一个,如此往复直至最后一个断点。
在断点(0x0059a16f)处发现有跳转可以跳过,在跳转下断,接着删除call处的断点:
所有断点都看了后,重新对以下地址(跳转处)下断:
接着重新F9运行程序,在每一个断点处修改Z标志位改变原有的跳转实现状态:
第一个修改后F9运行程序,来到第二个,同样的操作,直至所有跳转都修修改完,接着出现提示框:
接着,软件成功打开:
这时,发现新生成了一个批处理文件,用记事本打开有一个关机命令:
这是一个倒计时自动关机的指令(设置为300秒后自动关机),这里需要取消自动关机,Windows+r输入命令“shutdown -a”即可取消:
输入后回车,发现提示关机的提示框关闭。
接下来先将之前的断点处跳转都修改(因为都是让跳转实现,所以将所有跳转修改为jmp),然后保存:
修改完后,右键-复制到可执行文件-所有修改,选择全部修改,然后保存文件:
但我们并不想打开这个修改后的软件后,电脑自动关机,接着对修改的文件再一次修改。
发现运行程序后生成的批处理文件名为:register
将第一次修改的程序载入OD,搜索字符串“register”:
发现有这个字符串,转到反汇编窗口:
向上溯源,没有发现跳转可以跳过,那么在段首处下断:
运行程序,在此处断下:
寄存器窗口出现批处理指令的字符串,说明这一断是程序生成关机命令的批处理文件的那一部分,因为之前转入时发现没有跳转可以跳过这个,所以直接运行到retn,出这个call(ctrl+F9):
发现此处弹出自动关机提示框,不予理会,取消自动关机即可,继续单步向下出这个call:
来到关键call处,发现一个跳转刚好跳过这个call,接下来就是修改,保存:
目的达到。