-
-
[原创]第二题 ctf2017_Fpc
-
发表于: 2017-10-27 03:58 3155
-
1. 用IDA看到这个二元一次方程式的时候觉得该不会又和第一题一样是送分题吧,解这个方程式发现并没有整形可以满足这两个条件,才知道没那么简单。
2. 想了会应该可以从输入的地方着手,输入字符串的地方可以通过构造字符串修改getcode的返回值,而比赛又要求注册码只能是英文和数字,所以真正的检测代码地址应当大于0x410000,IDA跳转到0x410000,果然发现了一段诡异的add esp,-10代码。
3. 输入注册码1112222333311A修改getcode的返回值,使程序在输入完注册码后,跳转到0x413131,OD跟踪发现代码被混淆过,平常也不了解什么反混淆的插件,所以只能一步步跟踪,看到指令是跳转指令就忽略,其他指令就记录下来,如下图所示,但是最终还是跳转到了keep trying。
4. 0x4133e9指令和0x413b1e指令跨度很大,说明这中间还有其他代码,而0x4133e9为sub指令,很可能这里要求eax等于0xeaf917e2,重新调试后修改eax的值,然后继续跟踪,遇到类似sub eax,XXXX的就修改eax的值,发现了更多的代码如下图所示。
5. 前三段代码可以求出三个三元一次方程式,很简单就可以算出三个整数值,最后一段代码根据前面的值算出最终跳转的地址0x40102f,不过最后一段代码貌似记录的时候遗漏或者记录错了某些指令,算出来的值不是0x40102f,但这不影响获得注册码,最后一段代码只是再校验而已。
6. 将最终得到的值转换为字符串即Just0for0fun11A,测试成功!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
看原图
赞赏
雪币:
留言: