171106 逆向-SWPU(Re300-初窥)

1625-5 王子昂 总结《2017年11月6日》 【连续第402天总结】
A. 08067CTF-re300
B.
首先查壳,发现似乎有点段的问题,但是没识别到壳
拖入OD和IDA尝试,都能正常反编译

于是运行查看可能的突破点:
171106 逆向-SWPU(Re300-初窥)_第1张图片
这个确认按钮会不停的动,点不到

文本框输入无反应

在OD中对GetWindowTextA下断,尝试输入发现无反应,说明程序不是随时都在接收输入的,必须要点到这个确定按钮
IDA查找GetWindowTextA的交叉引用,发现有数十个,无从下手

于是只好先搞定确定按钮乱飞的问题啦:
百度一下查找改变控件的实现,发现是通过SetWindowPos来做的,IDA中的交叉引用仍然有数十个,没法定位准确的调用位置

于是在OD中对该API下断,鼠标放到按钮上果然断到,查看调用堆栈后锁定sub_41451E
再向上交叉引用找到改变位置的地方:
171106 逆向-SWPU(Re300-初窥)_第2张图片
Rect结构体就是MFC中描述矩形规格的,OD中把这个函数NOP掉
(直接搞会报错,猜测是修改不完全造成堆栈不平衡,__security_check_cookie这个函数检查时抛出异常导致终止,因此还要在上级函数将它NOP掉)

搞定以后就能断到GetWindowTexaA了:
171106 逆向-SWPU(Re300-初窥)_第3张图片

向上溯源找到核心算法:
171106 逆向-SWPU(Re300-初窥)_第4张图片
于是变换的算法就在sub_401b20里了,进去看看:
171106 逆向-SWPU(Re300-初窥)_第5张图片
嗯……………………
无能为了了,这个复杂的算法凭自己是看不出来干啥的,逐步还原的话似乎可能性也不高(:з」∠)
只好等WriteUp了

C. 明日计划
参照WriteUp解决re300

你可能感兴趣的:(CTF)