**链接:https://www.52pojie.cn/thread-264605-1-1.html
http://www.52pojie.cn/thread-612982-1-1.html
http://www.cnblogs.com/bbdxf/p/3780187.html**
1、去除neg窗口后,用堆栈平衡法,到达程序的关键跳转处,直接nop即可爆破。然后找出算法,在该段程序的开始处下断,F8单步跟
2、首先找到出现name的位置
3、继续F8跟,发现第一次用浮点运算的位置
4、继续F8跟,发现第二次用浮点运算的位置
5、继续F8跟,发现第三次用浮点运算的位置
6、继续F8跟,发现出现序列号的位置,但是我没法分析
7、试试序列号“1333486”吧!
所以算法是,首先计算name的长度*0x15b38+首字母的ascii,并将其转为10进制;其次将其转为浮点数并+2.0;再次,将结果*3.0 - 2.0;最后-(-15.0)即得到结果。
备注:有关浮点数的命令
https://blog.csdn.net/qq_22642239/article/details/51097733
https://bbs.csdn.net/topics/10037155
这些指令都是80387的浮点指令
80387指令都是用栈顶作为操作数,ST即栈顶,ST(i)表示距栈顶的第i个元素,ST=ST(0)
- fld 将浮点数据压入协处理器的堆栈中
- fdiv 浮点数除
- fadd 浮点数加
- fmul 浮点数乘
- fsub 浮点数减
- fstp 将栈顶数据送入到目标操作数中
- fstsw 将状态寄存器送入到内存变量中
如果后面加了p,如faddp表示执行完操作后,还要进行一次堆栈弹出工作