首页
社区
课程
招聘
[原创]第二题解题过程
2017-10-27 21:22 2460

[原创]第二题解题过程

2017-10-27 21:22
2460
1.正常流程跟踪,发现有个全局变量置为2,然后后面有两个函数,每个符合下面的条件的话,就能每次减1;


5 * (v1 - v0) + v1 == 0x8F503A42 3 

13 * (v1 - v0) + v0 == 0xEF503A42 4


17 * (v1 - v0) + v1 == 0xF3A94883 1

 7 * (v1 - v0) + v0 == 0x33A94883 2





4-3得到 

 7 * (v1 - v0) = 0x60000000 

带入计算发现低3个字节必须相等为 503A42

 1-2得到 

11 * (v1 - v0) = 0xC0000000 

 0xB * (v1 - v0) = 0x2C0 00 00 00


带入计算发现低3个字节必须相等为 50 A94883


因此,暴力神马的对于此题无效。这是一条思路。

测试的时候我们发现输入比较长的字符串会死掉,od跟了下就会发现有堆栈溢出,我们可以控制返回地址。

那么直接调用下面的地址( 0040102F )就可以了。

0040102F 68 5CB04100 push 0041B05C ; you get it!\n 

00401034 E8 092D0100 call 00413D42 ;

00401039 83C4 04 add esp, 4 

0040103C 33C0 xor eax, eax


由于没有仔细看说明,陷入了一个误区,第一题太简单了,没把第二题想复杂。

于是输入 "111122223333/^P@", /P 是0x10,(覆盖了返回地址为0x40101F),就能在输入框成功得到正确提示。(然而无法正确提交,还发了个求助帖,进群了才看到要求,哎!!!)

小插曲,接下来就来到一个特殊的返回地址了。


最后么,抱着试一试的态度,

修改返回地址到0x413130处,"11112222333301A",(返回地址 0x413130),没用,

侥幸试了0x413131,"11112222333311A",此时,就然没有奔溃,并且屏幕返回了

bad register-code, keep trying.”这个结果,一看戏来了。

然后输入"11112222333311A",多次跟踪花代码,发现和之前分析过的函数基本一个流程。

几次跟踪下来,需要满足如下条件:


4 * (x - y) + x + z = 0xEAF917E2 

3 * (x - y) + x + z = 0xE8F508C8 

3 * (x - y) + x - z = 0x0C0A3C68 

 z -> 6E756630 nuf0 "0fun" 

 4 * (x - y) + x = 0xEAF917E2 - z = 7C83B1B2; 

3 * (x - y) + x = 0xE8F508C8 - z = 7A7FA298;

 3 * (x - y) + x = 0x0C0A3C68 + z = 7A7FA298; 

 ( x - y) = 2040F1A

 (x - y)*4 = 8103C68 

 x = 7473754A tsuJ "Just"

 y = 726F6630 rof0 "0for" 


 Just0for0fun11A

计算完了,带入测试,和预期一样,正常显示“you get it!”,重新跟了一遍,发现是动态释放的,然后才显示的。


那么问题来了,假如不是“11A”,

那么这个题能有人搞定么。


为什么选择“01A”,因为一大片0区域,这是一片新天地。







[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回