首页
社区
课程
招聘
[看雪CTF2016]第十八题分析
发表于: 2016-12-6 14:40 2459

[看雪CTF2016]第十八题分析

2016-12-6 14:40
2459
sn至少有13位
.text:00401210                 cmp     [ebp+var_4C], 0Dh


sn第14位开始必须是数字
.text:00401241                 movsx   edx, byte ptr [ecx]
.text:00401244                 cmp     edx, 30h
.text:00401247                 jl      short loc_401257
.text:00401249                 mov     eax, [ebp+sn]
.text:0040124C                 add     eax, [ebp+var_50]
.text:0040124F                 movsx   ecx, byte ptr [eax]
.text:00401252                 cmp     ecx, 39h
.text:00401255                 jle     short loc_401260


除0异常才能触发后面的流程, 前9位处理后相乘必须等于223092870
223092870 = 2 * 3 * 5 * 7 * 11 * 13 * 17 * 19 * 23
据此得到前9位: pediy2016
.text:00401318                 mov     ecx, 223092870
.text:0040131D                 sub     ecx, [ebp+var_58]
.text:00401320                 mov     eax, 64h
.text:00401325                 cdq
.text:00401326                 idiv    ecx
.text:00401328                 mov     [ebp+var_58], eax


验证后面11位, 这个vm应该是最良心的了
strlen(sn)==20
sn[9]='c';
sn[10]='o';
sn[11]='o';
sn[12]='l';
sn[13]='1';

BYTE key=0xD0;
BYTE k1=sn[13]+key;
BYTE k2=sn[14]+key;
BYTE k3=sn[15]+key;
k1^3 + k2^3 + k3^3 == k1 * 0x64 + k2 * 0x0A + k3;

BYTE r1 = (sn[16] + key) * 0x0A + (sn[17] + key);
BYTE r2 = (sn[18] + key) * 0x0A + (sn[19] + key);
r1 + r2 == 0x23
r1 * 4 + r2 * 2 == 0x5E

得到后面11位: cool1531223
.text:00401341                 mov     edx, [ebp+sn]
.text:00401344                 push    edx             ; char *
.text:00401345                 mov     eax, [ebp+hWnd]
.text:00401348                 push    eax             ; hWnd
.text:00401349                 call    xx_4013B0

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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