天天看点

一个简单的逆向

首先运行程序观察程序的提示信息 可以看到程序首先

一个简单的逆向

一个字符串提示 随便输一个 ,出现另一个字符串u r wrong

然后

OD载入程序,字符串查找

一个简单的逆向

看到提示的字符串,单击进入f2 下段点,运行程序,断在

单步 跟下来

一个简单的逆向

读取字符函数getch() 随便输入一个假码,

一个简单的逆向

eax 的值正是输入的假码ascii的码,可以看出这是一个存储的过程

一个简单的逆向

继续单步向下

一个简单的逆向

输出函数printf

一个简单的逆向

向上 跳了回去 这是一个输入的过程 没有不是关键的比较算法,直接在下一句,下断直接 运行过去

一个简单的逆向

这个比较 多次调试,可以发现这是一个字符长度的比较 然后 看来这个注册码的长度是17位

一个简单的逆向

这块就能看出这个程序的算法,很简单就是在12feb4地址开始每个四个字节,读取一个数,在后面字符串swfxc{gdv}fwfctslydRddoepsckaNDMSRITPNsmr1_=2cdsef66246087138

中以上面地址的数为下标检索字符串

剩下的写python脚本

一个简单的逆向

跑出来感觉有点不对,放到程序里运行一个果然不对 ,

重新载入OD ,运行,之前的算法确实是的

一个简单的逆向

向后才发现还有比较 跟踪一下地址发现这个字符是在我们输入的字符之后

看来这后面还有一些字符,

一个简单的逆向

根据比较,可以看出来剩下的几个字符就是那几个ascii码,就是1024}

到此就搞定了

一个简单的逆向

继续阅读