-
-
[原创]H&NCTF RE 部分题解
-
发表于:
2024-5-16 19:31
12982
-
H&NCTF RE部分题解
打了一下这个比赛,发现有两道比较有意思的题目,和传统的re题不太一样,特此记录一下
RWhackA
本质上就是一个恶意程序,运行时在别的进程注入shellcode,flag就藏在shellcode里面
题目分析
首先用分析工具发现存在enigma virtual box,相当于把多个可执行文件或者链接库给一块打包了,用解包工具尝试解包发现失败,那就只能先硬着分析

静态分析发现有很多內存访问异常点,均出自函数调用上,可能是程序重定位时产生的错误,没办法只能动态调试了。
在main函数的初始地址处下断点,发现函数名正常恢复了:

题目附件里没有给出mydll1.dll文件,侧面也验证了这个链接库被一起打包进了这个exe里面。
程序逻辑还原
调用myDLL1.dll的LocalHide函数

这个函数的逻辑就是在c盘的用户目录下的视频文件夹中创建了一个和源程序一模一样的副本并启动它,具体的逻辑如下:
- 原程序打开txt文件失败,复制其本身到视频文件夹下的svchsst.exe副本中,并启动它,完成后将自身路径写入txt文件中并结束自身运行
- 副本启动后检测到了txt文件,删除掉了txt文件和原文件,并继续后面的执行过程
获取系统信息

一开始我在虚拟机里面跑这个程序,发现调用完后v5一直小于5,这里面v47存储的是system_info结构体的内容,我怀疑v48和虚拟机配置有关,因为sub_140001070函数就是结束函数了(后面会分析),并没有flag的逻辑,最后考虑在实体机里面跑一下,发现实体机里面v48的值等于16
检测是否开启虚拟机

这部分代码就是在枚举当前计算机运行的进程,看有没有上面6个进程存在,有的话就进入结束函数,这部分功能实际上就是在检测VMWare tools和virtualbox Guests Additions的运行情况,如果在运行该进程就会退出
寻找加载模块

程序加载的模块链表(LDR)本质上是一个双向链表,因此一直索引下一个结点一定会定位到链表头,这里的v17[6].Flink索引到的是模块名,每一个字符占两个字节,另外一个补0,如下图:
![]()

最后检测到的程序名的形式如上图,根据v22的值就是程序名生成的对应hash值的结果,最后可以确定是kernel32
检测系统版本和杀毒软件
基本方式也是调用kernel32库里面的函数,检测杀毒软件的原理和检测虚拟机服务的原理一致,也是打进程快照然后再遍历。
shellcode分析
主逻辑在sub_140001320函数中,基本思路是将shellcode自解密然后注入另外一个进程中。
这里待注入的进程名是exp10rer.exe,但是我看这个程序本身并没有启动过名为exp10rer.exe的进程,这个地方最开始以为自己哪个地方的代码分析出错了,只能先尝试分析一下shellcode本身
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
48
49
50
51
52
53
54
55
56
57
58
|
v4 = &unk_140003450;
v5 = 7i64 ;
do
{
v3 + = 32 ;
v6 = * v4;
v7 = v4[ 1 ];
v4 + = 8 ;
* (v3 - 8 ) = v6;
v8 = * (v4 - 6 );
* (v3 - 7 ) = v7;
v9 = * (v4 - 5 );
* (v3 - 6 ) = v8;
v10 = * (v4 - 4 );
* (v3 - 5 ) = v9;
v11 = * (v4 - 3 );
* (v3 - 4 ) = v10;
v12 = * (v4 - 2 );
* (v3 - 3 ) = v11;
v13 = * (v4 - 1 );
* (v3 - 2 ) = v12;
* (v3 - 1 ) = v13;
- - v5;
}
while ( v5 );
v14 = * (v4 + 4 );
v15 = 6 ;
v16 = - 1162190778i64 ;
v17 = 1i64 ;
* v3 = * v4;
v3[ 4 ] = v14;
do
{
v18 = 227i64 ;
v19 = &v45;
v20 = 227 ;
v21 = &v44;
do
{
v22 = * v21;
v21 - = 4 ;
v19 - = 4 ;
v23 = * (&v41 + (v20 + 1 ) % 0xBu );
v24 = v17 ^ v18 - - & 3 ;
* (v19 + 1 ) - = ((v23 ^ v16) + (si128.m128i_i32[v24] ^ v22)) ^ (((v22 >> 6 ) ^ ( 4 * v23)) + (( 16 * v22) ^ (v23 >> 3 )));
- - v20;
}
while ( v20 );
v25 = v42 ^ v16;
v16 - = 1953785185i64 ;
v41 - = (v25 + (si128.m128i_i32[v17] ^ v43)) ^ (((v43 >> 6 ) ^ ( 4 * v42)) + (( 16 * v43) ^ (v42 >> 3 )));
v17 = (v16 >> 2 ) & 3 ;
- - v15;
}
while ( v15 );
v26 = &v41;
for ( i = 0 ; i < 0x393 ; + + i )
sub_140001010( "%c " , * v26 + + );
|
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2024-5-16 22:29
被ccccl1180编辑
,原因: