首页
社区
课程
招聘
[看雪CTF2016]第二十题分析
发表于: 2016-12-10 15:32 2467

[看雪CTF2016]第二十题分析

2016-12-10 15:32
2467
sn长度为10
.text:004021A1                 cmp     eax, 0Ah


成功条件flag >= 0
.data:00412280 g_flag
.text:004021C4                 jns     short loc_4021E4


函数数组
.text:00402024                 mov     fn_array_412250, offset new_thread_flag_dec_20
.text:0040202E                 mov     fn_array_412250+4, offset new_thread_flag_set_0
.text:00402038                 mov     fn_array_412250+8, offset new_thread_flag_set_minus_3
.text:00402042                 mov     fn_array_412250+0Ch, offset new_thread_flag_dec_2
.text:0040204C                 mov     fn_array_412250+10h, offset new_thread_flag_ok
.text:00402056                 mov     fn_array_412250+14h, offset new_thread_flag_dec_3
.text:00402060                 mov     fn_array_412250+18h, offset new_thread_flag_set_minus_3
.text:0040206A                 mov     fn_array_412250+1Ch, offset new_thread_flag_set_minus_1
.text:00402074                 mov     fn_array_412250+20h, offset sub_4011E0
.text:0040207E                 mov     fn_array_412250+24h, offset ok_401500
.text:00402088                 mov     fn_array_412250+28h, offset sub_401820
.text:00402092                 mov     fn_array_412250+2Ch, offset sub_401B40


fn_array_412250+20开始的4个函数都是用来验证sn的, 只有一个函数能成功(好像只有初始化部分有差别)
.text:00401F36                 int     3

.text:00401F73                 mov     ecx, [ebp+var_20]
.text:00401F76                 mov     edx, (fn_array_412250+20h)[ecx*4]
.text:00401F7D                 call    edx


设置flag, 成功时index=4
.text:004017F4                 mov     eax, [ebp+index]
.text:004017F7                 mov     ecx, fn_array_412250[eax*4]
.text:004017FE                 push    0
.text:00401800                 call    ecx ; fn_array_412250


用sn来初始化数组DWORD k[11][11], 只有斜线部分跟sn有关
验证方法: 每行的和都相等==第4列的和==斜线部分
最后一行k[11]跟sn没有关系, 计算该行的和, 直接可以算出每行的sn
.text:00401500 ok_401500

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

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