首页
社区
课程
招聘
[原创]CTF2017秋季赛第二题解法
发表于: 2017-10-27 23:26 2855

[原创]CTF2017秋季赛第二题解法

2017-10-27 23:26
2855

这题主要是巧妙在思路上,正常流程是,提供的8字节的缓冲区,然后满足两个函数(每个函数里标志减1,为0跳转成功),共4个二元一次方程组即成功.由于题目要求必须是字母+数字,所以穷举有3C^8次方种可能.但是出题者的本意并不是让我们这样做,不然就太low了.所以暴力搜索保存成功标志的地址,定位到乱码中,由于乱码处于代码区,所以猜测是加花了,又因为缓冲区存在溢出漏洞,移动到乱码的起始端,发现地址是0x00413131,也就是"11A",满足输入,所以真正的算法在乱码区.注册码形式是xxxxyyyyzzzz11A.还原花指令可以借助脚本,不过为了一个crackme写个脚本开销太大,所以直接动态跟就可以了

vaild_1:
00413131    83C4 F0         add esp,-0x10
00413150    33C0            xor eax,eax
00413184    A3 34B04100     mov dword ptr ds:[0x41B034],eax
004131BA    58              pop eax
004131EB    8BC8            mov ecx,eax                     		
0041321F    58              pop eax
00413254    8BD8            mov ebx,eax					
00413289    58              pop eax
004132B5    8BD0            mov edx,eax						
004132AD    8BD0            mov edx,eax
004132E2    8BC1            mov eax,ecx
00413316    2BC3            sub eax,ebx					
00413349    C1E0 02         shl eax,0x2
00413380    03C1            add eax,ecx
004133B5    03C2            add eax,edx
004133E9    2D E217F9EA     sub eax,0xEAF917E2
00413420   /0F85 DD060000   jnz ctf2017_.00413B03(fail)

vaild_2:					
00413455    03C1            add eax,ecx									
00413489    2BC3            sub eax,ebx					
004134BF    8BD8            mov ebx,eax					
004134F3    D1E0            shl eax,1				        
00413525    03C3            add eax,ebx					
00413559    03C1            add eax,ecx					
0041358F    8BC8            mov ecx,eax					
004135C3    03C2            add eax,edx					
004135F7    2D C808F5E8     sub eax,0xE8F508C8
0041362E   /0F85 CF040000   jnz ctf2017_.00413B03(fail)

vaild_3
00413665    8BC1            mov eax,ecx					
0041365D    8BC1            mov eax,ecx
004136A7    2BC2            sub eax,edx					
004136D8    2D 683C0A0C     sub eax,0xC0A3C68
00413703   /75 04           jnz short ctf2017_.00413709(fail)

三层验证就是一个三元一次方程组

(v0-v1)*4+v0+v2-EAF917E2 =0 

(v0-v1)*3+v0+v2-E8F508C8 =0 

(v0-v1)*3+v0-v2-C0A3C68 =0

对其求解:

v0 = 7473754A = tsuJ 

v1 = 726F6630 = rof0 

v2 = 6E756630 = nuf0 

连接起来就是'Just0for0fun11A'



(v0-v1)*4+v0+v2-EAF917E2 =0 

(v0-v1)*3+v0+v2-E8F508C8 =0 

(v0-v1)*3+v0-v2-C0A3C68 =0

v0 = 7473754A = tsuJ 

v1 = 726F6630 = rof0 


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//