首页
社区
课程
招聘
[原创]KCTF 2023 第六题 WP 中午吃什么
2023-9-14 12:12 8917

[原创]KCTF 2023 第六题 WP 中午吃什么

2023-9-14 12:12
8917

1、过反调试

1298处是发现调试器的处理函数,注入DLL,直接写入C3过掉反调试

1
2
3
4
DWORD dwOldFlag;
VirtualProtect((void*)(ullModule + 0x1298), 1, PAGE_EXECUTE_READWRITE, &dwOldFlag);
*(char*)(ullModule + 0x1298) = (char)0xC3;
VirtualProtect((void*)(ullModule + 0x1298), 1, dwOldFlag, &dwOldFlag);

2、分析

2-1、发现几处字符串解密,同样注入DLL,Hook之,拿到解密后的字符串

方便理解在IDA重命名函数为g_DecodeString

1
2
3
4
g_DecodeString(v0, Format.nSize, (__int64)"&x+^x", 5);// Please enter your key:
g_DecodeString(v15, v50.nSize, (__int64)"*s>0?", 5);// kctf
g_DecodeString(v19, lpModuleName.nSize, (__int64)"!?>d*", 5);// kernel32.dll
g_DecodeString(v21, lpProcName.nSize, (__int64)"?x)da", v20);// RtlFillMemory

分析后发现程序将输入字符串拼接后丢给140001450函数处理

1
2
3
3201382652D139C0E22132DF1BC2212EA0991650A229B36436823D0B13D51E6
+ input +
677116575313142309154604431859253431473963507533496829080645035455771774602058076430276921790210013736267644383505517280

2-2、分析调用链140001450-->sub_140002A10-->sub_1400029C4

图片描述

重点分析这个函数sub_140002818,用于保存Ntdll.dll的ZW系列函数地址,自己写代码验证了下,Zw系列函数的数量是0x1D9,与猜想一致。

2-3、提取hash函数,建立hash反查函数名的表

2-4、 Hook函数sub_1400029C4,根据上面的反查表打印出函数名

2-5、分析sub_140001450逻辑,发现创建一个线程并调用2347次RtlFillMemory,将shellcode写入内存

3、分析shellcode逻辑

3-1、shellcode主函数

3-2、shellcode关键逻辑函数


3-3、shellcode逻辑解析

将3201382652D139C0E22132DF1BC2212EA0991650A229B36436823D0B13D51E6拆分成21组3字节的十六进制,并转成10进制整数,如(320,138,265,2D1,...)。
转成十进制后(800 312 613 721,...), 表示0列0行是8,1列2行是3,1列3行是6,......

将677116575313142309154604431859253431473963507533496829080645035455771774602058076430276921790210013736267644383505517280转成60组2字节的整数,如(67,71,16,57,...),表示传入的60个数字的顺序

4、 将数独提取出来,使用在线网址求解

5、 将数独和行数、列数组合起来,并按照顺序打印



获得flag:11230A2CD3C31CA32E0D707D38E0743531F80F726C1D133B3A914E2F034B1D63BB17F34428E2A31B038C25E0FA2BF2301053752062AA16E20A2FC1971730E90823D01A724B0CA19B0652811541480B80943AE27E13122C30C120

6、多解分析

分析shellcode逻辑时发现十六进制转整数过程中允许'+','-'符号的存在,感觉可以将3位数的首位的'0'换成'+', 如"0D7"和"+D7"转出来的整数是相等的。
构造出几组多解:
11230A2CD3C31CA32E+D707D38E0743531F80F726C1D133B3A914E2F034B1D63BB17F34428E2A31B038C25E0FA2BF2301053752062AA16E20A2FC1971730E90823D01A724B0CA19B0652811541480B80943AE27E13122C30C120
11230A2CD3C31CA32E+D7+7D38E0743531F80F726C1D133B3A914E2F034B1D63BB17F34428E2A31B038C25E0FA2BF2301053752062AA16E20A2FC1971730E90823D01A724B0CA19B0652811541480B80943AE27E13122C30C120
11230A2CD3C31CA32E+D7+7D38E+743531F8+F726C1D133B3A914E2F034B1D63BB17F34428E2A31B038C25E+FA2BF2301053752062AA16E20A2FC197173+E9+823D01A724B+CA19B+65281154148+B8+943AE27E13122C30C120
整串中有11处'0'可以换成'+',理论上可以构成2^11 == 2048组多解


[培训]科锐软件逆向50期预科班报名即将截止,速来!!! 50期正式班报名火爆招生中!!!

最后于 2023-9-15 15:00 被wx_孤城编辑 ,原因:
收藏
免费 1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回