-
-
[原创]2021 KCTF 春季赛 第八题 众叛亲离 wp
-
发表于: 2021-5-23 18:16 3874
-
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 | 00000000000000000000000000000000 85A4A5E55B399224E3F9715B80BA999C 11111111111111111111111111111111 94B5B4F44A288335F2E8604A91AB888D 22222222222222222222222222222222 A78687C7791BB006C1DB5379A298BBBE 33333333333333333333333333333333 B69796D6680AA117D0CA4268B389AAAF 44444444444444444444444444444444 C1E0E1A11F7DD660A7BD351FC4FEDDD8 55555555555555555555555555555555 D0F1F0B00E6CC771B6AC240ED5EFCCC9 66666666666666666666666666666666 E3C2C3833D5FF442859F173DE6DCFFFA 77777777777777777777777777777777 F2D3D2922C4EE553948E062CF7CDEEEB 88888888888888888888888888888888 0D2C2D6DD3B11AAC6B71F9D308321114 99999999999999999999999999999999 1C3D3C7CC2A00BBD7A60E8C219230005 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 2F0E0F4FF193388E4953DBF12A103336 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB 3E1F1E5EE082299F5842CAE03B012227 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 4968692997F55EE82F35BD974C765550 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 5879783886E44FF93E24AC865D674441 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 6B4A4B0BB5D77CCA0D179FB56E547772 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 7A5B5A1AA4C66DDB1C068EA47F456663 |
写代码查表计算出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
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2021-5-23 18:31
被KuCha128编辑
,原因:
赞赏
他的文章
看原图
赞赏
雪币:
留言: