首页
社区
课程
招聘
[原创]第二题 ctf2017_Fpc
2017-10-27 23:24 2758

[原创]第二题 ctf2017_Fpc

2017-10-27 23:24
2758
1. 清晰的程序结构

2. 得出等式:
5(x-y)+x= 0x8F503A42
13(x-y)+y= 0xEF503A42
17(x-y)+x=0xF3A94883
7(x-y)+y= 0x33A94883 
3. 正常解解不开,就想到溢出,通过猜测高位的方式去遍历,10分钟内就能遍历完,发现无解。。。
4. 重新分析程序,发现存储缓存区溢出漏洞,可以自己调节堆栈,跳转到特定地址0x413131
因为这个地址只能是数字字母的ASCII十六进制数值,而且通过静态分析,看出0x413131这段代码开始出现了猫腻。。。

5. 然后程序就会跳转到0x413131执行,来到一片新“ 天地 ”

6. 这段代码开始就是真正的代码,但是加了花指令,好在不是很影响,直接单步分析即可
7. 单步分析,提取有用的代码
x = ecx = 38373635
y = ebx = 34333231
z = edx = 64636261

00413150    33C0            xor eax,eax				eax="56781234abcd11A."
00413184    A3 34B04100     mov dword ptr ds:[0x41B034]			eax	标志位清0
004131BA    58              pop eax			38373635
004131EB    8BC8            mov ecx,eax			ecx = 38373635
0041321F    58              pop eax					eax = 34333231
00413254    8BD8            mov ebx,eax			ebx = 34333231
00413289    58              pop eax         eax = 64636261
004132B5    8BD0            mov edx,eax			edx = 64636261
004132AD    8BD0            mov edx,eax	
004132E2    8BC1            mov eax,ecx			38373635 
00413316    2BC3            sub eax,ebx			04040404
00413349    C1E0 02         shl eax,0x2			10101010
00413380    03C1            add eax,ecx			48474645
004133B5    03C2            add eax,edx			ACAAA8A6
004133E9    2D E217F9EA     sub eax,0xEAF917E2		判断1

、、、判断1如果不符合的话
00413B1E    58              pop eax       00413131
00413B4E    35 0E210100     xor eax,0x1210E		0040103F  回到bad 提示
00413B83    3305 34B04100   xor eax,dword ptr ds:[0x41B034]
00413BBB  ^\FFE0            jmp eax                                                      ; ctf2017_.0040103F

、、、强制修改eax = EAF917E2,继续执行
00413455    03C1            add eax,ecx			38373635
00413489    2BC3            sub eax,ebx			04040404
004134BF    8BD8            mov ebx,eax			04040404
004134F3    D1E0            shl eax,1				08080808
00413525    03C3            add eax,ebx			0C0C0C0C
00413559    03C1            add eax,ecx			44434241
0041358F    8BC8            mov ecx,eax			44434241
004135C3    03C2            add eax,edx			A8A6A4A2
004135F7    2D C808F5E8     sub eax,0xE8F508C8		判断2

、、、判断2如果不符合的话,(如果小于这个数字)
00413B1E    58              pop eax                                  00413131
00413B4E    35 0E210100     xor eax,0x1210E
00413B83    3305 34B04100   xor eax,dword ptr ds:[0x41B034]
00413BBB  ^\FFE0            jmp eax                                  ; ctf2017_.0040103F

、、、强制修改 eax = E8F508C8,继续执行
00413665    8BC1            mov eax,ecx			44434241
0041365D    8BC1            mov eax,ecx
004136A7    2BC2            sub eax,edx			- 64636261=DFDFDFE0
004136D8    2D 683C0A0C     sub eax,0xC0A3C68			判断3

、、、判断3如果不等的话
00413B1E    58              pop eax                                  ; ctf2017_.00413131

、、、判断3强制修改后,继续执行
00413747    58              pop eax                                 ; ctf2017_.00413131
00413777    35 01810000     xor eax,0x8101			0041B030
004137A9    8BF8            mov edi,eax                             ; ctf2017_.0041B030
004137E2    33C0            xor eax,eax                             ; ctf2017_.0041B030
00413817    AB              stos dword ptr es:[edi]
00413830    E8 0C000000     call ctf2017_.00413841
0041385C    58              pop eax                                 ; ctf2017_.00413835	、、、这个地址就是call 00413841下面的call
0041388E    50              push eax                                ; ctf2017_.00413835
004138BA    8BF8            mov edi,eax                             ; ctf2017_.00413835
004138B2    8BF8            mov edi,eax                             ; ctf2017_.00413835
004138E6    68 6909004E     push 0x4E000969
0041391F    58              pop eax                             4E000969
00413950    33C2            xor eax,edx			xor 64636261 = 2A636B08,
00413983    AB              stos dword ptr es:[edi]	,将eax中的4字节数据,写入到 413835地址中,
004139B5    35 3E0A0100     xor eax,0x10A3E		2A626136
004139EB    AB              stos dword ptr es:[edi]	,将eax中的4字节数据,写入到 413839中,
00413A1C    33C3            xor eax,ebx		xor 04040404 = 2E666532
00413A4D    35 141E5122     xor eax,0x22511E14				——22706A16

、、、、强制让eax = 22511E14
00413A82    AB              stos dword ptr es:[edi],将eax中的4字节数据,写入到 41383D中,
00413AB6    35 2D646100     xor eax,0x61642D	 判断4		——217402
00413BBB  - FFE0            jmp eax

最终结果,要让eax = 0040102F (因为这里是跳转到成功提示的push)      

8. 根据判断2和判断3得出等式:
(x-y)<<1+(x-y)+x+z=E8F508C8
(x-y)<<1+(x-y)+x-z = C0A3C68
然后就能推倒出z=0x6E756630
9. 因为最终eax=0x40102F,所以带入z进行反推,得出x-y=0x2040F71
10. 得出下列等式:
z=0x6E756630
(x-y)<<2+x+z=EAF917E2
(x-y)<<1+(x-y)+x+z=E8F508C8
推导出:
x=0x7473754A
y=0x726F6630
11. 结合第7步中定义的x、y、z定义,还有用来调节堆栈的“11A”
得出结果Just0for0fun11A









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

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