文章目录

一个ctf的逆向题


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

一个字符串提示 随便输一个 ,出现另一个字符串u r wrong
然后
OD载入程序,字符串查找

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

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

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

继续单步向下

输出函数printf

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

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

这块就能看出这个程序的算法,很简单就是在12feb4地址开始每个四个字节,读取一个数,在后面字符串swfxc{gdv}fwfctslydRddoepsckaNDMSRITPNsmr1_=2cdsef66246087138
中以上面地址的数为下标检索字符串
剩下的写python脚本

跑出来感觉有点不对,放到程序里运行一个果然不对 ,
重新载入OD ,运行,之前的算法确实是的

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

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

文章目录