-
-
[原创]【小花小花】helloctf-writeup
-
发表于: 2018-6-16 14:28 1893
-
拿到题目之后测试这个程序的平台/功能
平台win32
功能分析:
1.输入一个字符串/纯数字
2.返回的结果可能就是我成功/失败。
我的分析:
1.可能是success之后会给出flag
2.可能就是要我提交让他success的注册码
针对我的第一种想法,我在OD里面找到wrong!\n:
找到上面的判断下段:
然后跳到0x004010E7的时候:
修改ZF=1,让跳转不实现:
打印出了success,没有什么flag或者暗示。
针对我的第二种想法,我打开IDA之前的分析是:
我输入的字符串经过一系列的算法,然后进行比较,相等则返回success,不相等则wrong。这种思路我需要的是一个成功的字符串,我们来看看能不能找到进行比较的那个值。
以下是我的分析:
最后要strcmp的是v10和v13,而v13是一个固定值:437261636b4d654a757374466f7246756
所以我逆推需要让v10和v13相等,strcmp之后为0,则success。
v10来自于上面的循环中v8一个一个strcat进去的。
v8又是在循坏中v4以%x一个一个sprntf进去的。
v9是我们在命令行输入的字符串。v3是v9[]的计数器。
所以我们得知:
1.我们输入的字符串需要长度小于0x11
2.v9的每一位都不能为0,不然就跳出do...while循环。
3.循环会遍历v9的第0位到第18位,除非上一条。
等等...没有把我们输入的值进行变化就直接拿去和v13比较的话,那么v9 == v13,我们只需要输入v13(hex)的字符串了呀。
Python启动:
拿出字符串:CrackMeJustForFun
测试:
我们需要提交的注册码/序列号就是这个字符串了!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
看原图
赞赏
雪币:
留言: