-
-
[原创]2021 KCTF 春季赛 第八题 众叛亲离 wp
-
发表于: 2021-5-23 18:16 4157
-
0x00 初步分析
windows32位应用程序.
看入口像是VC6.0编译的.
定位到main函数, 0x401000.
ida载入, 发现main函数体积庞大, 并且有控制流平坦混淆.

0x01 发生甚么事了
丢ida瞅了两眼, 看到main函数体量如此之大, 就先去吃饭了.
刚把筷子放下, 我靠, 一血就出了...
不到1小时出一血, 看来肯定不是正经方法研究混淆流程.
肯定是算法部分设计有漏洞, 而且是大漏洞可以很快推算出序列号.
这时候想到, 是否是使用明码比较..
0x02 寻找捷径
搜索字符串, 找到输入成功的地方.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 0041A99C | xor eax,eax 0041A99E | lea ecx,dword ptr ds:[edi+0x2011] 0041A9A4 | pop ebp 0041A9A5 | xor edx,edx 0041A9A7 | mov dh,byte ptr ds:[ecx-0x1] 0041A9AA | mov word ptr ds:[0x42803E],dx 0041A9B1 | movzx si,byte ptr ds:[ecx] 0041A9B5 | or dx,si 0041A9B8 | mov word ptr ds:[0x42803C],ax 0041A9BE | cmp dx,ax 0041A9C1 | mov word ptr ds:[0x42803E],dx 0041A9C8 | jne 蓝色窗帘.41AA04 0041A9CA | inc eax 0041A9CB | add ecx,0x2 0041A9CE | cmp eax,0x8 0041A9D1 | jl 蓝色窗帘.41A9A5 0041A9D3 | push 蓝色窗帘.425030 | 425030:"\n right \n"0041A9D8 | call 蓝色窗帘.41C33F ... 0041AA04 | push 蓝色窗帘.4253B4 | 4253B4:"\n error\n"0041AA09 | call 蓝色窗帘.41C33F ... |
验证通过的要求是, 0x41A99E处[edi+0x2010]地址的数值为:
1 | 00898030 00 00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 ................ |
分别尝试修改用户名的一个字符和序列号的一个字符, 发现只影响修改了的那个位的结果, 说明可以一个字符一个字符爆破.
0x03 做表爆破
以"KCTF"为用户名, 输入序列号32个"0"一直到32个"F", 记录下每次到最后的[edi+0x2010]地址处数值.
得到对应关系:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 0000000000000000000000000000000085A4A5E55B399224E3F9715B80BA999C1111111111111111111111111111111194B5B4F44A288335F2E8604A91AB888D22222222222222222222222222222222A78687C7791BB006C1DB5379A298BBBE33333333333333333333333333333333B69796D6680AA117D0CA4268B389AAAF44444444444444444444444444444444C1E0E1A11F7DD660A7BD351FC4FEDDD855555555555555555555555555555555D0F1F0B00E6CC771B6AC240ED5EFCCC966666666666666666666666666666666E3C2C3833D5FF442859F173DE6DCFFFA77777777777777777777777777777777F2D3D2922C4EE553948E062CF7CDEEEB888888888888888888888888888888880D2C2D6DD3B11AAC6B71F9D308321114999999999999999999999999999999991C3D3C7CC2A00BBD7A60E8C219230005AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2F0E0F4FF193388E4953DBF12A103336BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB3E1F1E5EE082299F5842CAE03B012227CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC4968692997F55EE82F35BD974C765550DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD5879783886E44FF93E24AC865D674441EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE6B4A4B0BB5D77CCA0D179FB56E547772FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A5B5A1AA4C66DDB1C068EA47F456663 |
写代码查表计算出KCTF的序列号.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | int main(int argc, const char** argv, const char** envp){ const char* a[] = { "85A4A5E55B399224E3F9715B80BA999C", "94B5B4F44A288335F2E8604A91AB888D", "A78687C7791BB006C1DB5379A298BBBE", "B69796D6680AA117D0CA4268B389AAAF", "C1E0E1A11F7DD660A7BD351FC4FEDDD8", "D0F1F0B00E6CC771B6AC240ED5EFCCC9", "E3C2C3833D5FF442859F173DE6DCFFFA", "F2D3D2922C4EE553948E062CF7CDEEEB", "0D2C2D6DD3B11AAC6B71F9D308321114", "1C3D3C7CC2A00BBD7A60E8C219230005", "2F0E0F4FF193388E4953DBF12A103336", "3E1F1E5EE082299F5842CAE03B012227", "4968692997F55EE82F35BD974C765550", "5879783886E44FF93E24AC865D674441", "6B4A4B0BB5D77CCA0D179FB56E547772", "7A5B5A1AA4C66DDB1C068EA47F456663", }; const char* aa = "00000001000200030004000500060007"; for (int i = 0; i < 32; i++) { for (int j = 0; j < 16; j++) { if (a[j][i] == aa[i]) { printf("%X", j); break; } } } return 0;} |
85A4A5E45B3B9227E3FD715E80BC999B
[培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!
最后于 2021-5-23 18:31
被KuCha128编辑
,原因:
赞赏
他的文章
赞赏
雪币:
留言: