打开后也是输入账号和序列号来进行判断的。
在弹框处设置断点,打开堆栈
从msvbm50可知,这是一个vb写的程序。右键显示调用
调用为加断点的那一行,上边有一个jmp的跳转。,应该是无条件跳转到注册正确的call那里。那么推测会有一个判断并跳转到jmp的下一行的指令。向上找果然找到了。
这有一个je指令,当ZF为1时跳转。即和上边的test有关。
单步测试,果然过了test以后ZF变成了1。test为与运算。
在je之前将ZF改成0,测试成功。
因此把je 这一行NOP掉就可以了。
注册算法的话,向上找到这段程序的开头开始逐步分析。
上边乘了0x17CFB,在这里有一个溢出跳转
经过上边的call以后,出现了“585235”
此时已经出来了输入的654321.
先得到注册码的长度, 然后取出注册码第一个字符的ANSI值cName, 让后计算长度*0x17CFB+cName,将计算的值转换为10进制文本,前面加上”AKA-”组成最后的注册码。