自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PinDemonium通用動(dòng)態(tài)脫殼工具

安全 數(shù)據(jù)安全
本文是對(duì)16年的blackhat大會(huì)上PinDemonium通用動(dòng)態(tài)脫殼工具介紹。

一、簡(jiǎn)介

本文是對(duì)16年的blackhat大會(huì)上PinDemonium通用動(dòng)態(tài)脫殼工具介紹。

1. 通用脫殼工具簡(jiǎn)介

通用脫殼工具可以通過以下方法實(shí)現(xiàn):

  • -debuggers
  • -kernel modules
  • -hypervisor modules
  • -Dynamic Binary Instrumentation (DBI) frameworks

其中PinDemonium采用的就是DB的方法。

采用DBI主要原因是:

  • DBI 提供了對(duì)待分析二進(jìn)制文件非常細(xì)粒度的控制,可以全面控制程序執(zhí)行的代碼,深入分析程序做了什么
  • 對(duì)反調(diào)試和反匯編技術(shù)免疫
  • 有豐富且文檔完備的API集合用于從運(yùn)行的程序中提取出信息,能改變程序運(yùn)行時(shí)的行為

2. PinDemonium原理

通常,程序的一個(gè)內(nèi)存地址要么可寫,要么可執(zhí)行,滿足Write xor Execution (WxorX)規(guī)則。但是加了殼的軟件會(huì)違反這條規(guī)則。

通用脫殼工具原理:加殼的可執(zhí)行文件必需在運(yùn)行時(shí)脫殼。脫殼過程中會(huì)向內(nèi)存中寫入新的代碼,然后執(zhí)行寫入的代碼。利用上述特性來構(gòu)建通用脫殼工具。

通用脫殼工具必須解決的兩個(gè)問題:

  • 找到Original Entry Point(OEP);
  • 修復(fù)Import Directory來重構(gòu)可執(zhí)行的版本。

***個(gè)問題只能通過啟發(fā)式的方法解決,因?yàn)槊摎み^程什么時(shí)候結(jié)束是不可判定的。PinDemonium 綜合多個(gè)文獻(xiàn)中提出的啟發(fā)式方法來增加找到OEP的可能性,并且重新構(gòu)建一個(gè)可執(zhí)行的版本。

第二個(gè)問題要找到Import Address Table(IAT),從而找到相關(guān)的API。

PinDemonium 也是利用通用脫殼工具的原理。記錄被寫過的地址來發(fā)現(xiàn)寫后執(zhí)行的內(nèi)存區(qū)域,當(dāng)被寫過的內(nèi)存區(qū)域要被執(zhí)行時(shí)觸發(fā)轉(zhuǎn)儲(chǔ)和分析功能,然后嘗試找到程序所有的導(dǎo)入函數(shù)來重構(gòu)一個(gè)可執(zhí)行的程序。

3. PinDemonium特點(diǎn)

PinDemonium 先進(jìn)性:

  • 考慮了堆上的代碼;
  • 解決一些IAT混淆技術(shù);
  • 綜合多種OEP檢測(cè)啟發(fā)式方法來找到***的可執(zhí)行的去混淆后的程序。

PinDemonium 主要特點(diǎn):

(1) PinDemonium 的核心模塊記錄寫過的地址(包括對(duì)遠(yuǎn)程進(jìn)程的寫),當(dāng)發(fā)現(xiàn)寫后執(zhí)行的情況,就用 Scylla 對(duì)程序進(jìn)行dump。

(2) 對(duì) Scylla 進(jìn)行了改進(jìn):

  • PE重構(gòu)模塊:增加了對(duì)動(dòng)態(tài)內(nèi)存區(qū)域(例如堆)的考慮
  • IAT搜索和重構(gòu)模塊:允許分析人員編寫自己的去混淆代碼并集成到 PinDemonium 中

(3) 為了保持性能和簡(jiǎn)化識(shí)別寫后執(zhí)行代碼的過程,忽略和脫殼無關(guān)的指令,如寫棧和寫Process Environment Block(PEB)

(4) 通過設(shè)置 PinDemonium 的一些標(biāo)志可以開啟 PinDemonium 相應(yīng)的功能來對(duì)付某些殼所使用的技巧

二、構(gòu)成

PinDemonium 使用了兩個(gè)第三方工具:插樁工具Intel PIN和Scylla。

1. Intel PIN

PinDemonium 選擇插樁來實(shí)現(xiàn)通用脫殼工具, 因?yàn)椋?/p>

  • 插樁提供了對(duì)待分析二進(jìn)制文件非常細(xì)粒度的控制,可以全面控制程序執(zhí)行的代碼,深入分析程序做了什么;
  • 插樁對(duì)反調(diào)試和反匯編技術(shù)免疫;
  • 插樁有豐富且文檔完備的API集合用于從運(yùn)行的程序中提取出信息,能改變程序運(yùn)行時(shí)的行為。

選擇Intel PIN,因?yàn)镻IN功能全面,文檔豐富。

PIN 插樁的粒度可以是:

  • Instruction:一條匯編指令;
  • Basic blocks:以條件跳轉(zhuǎn)結(jié)尾的指令序列;
  • Trace:以無條件跳轉(zhuǎn)結(jié)尾的基本塊序列。

PIN插樁粒度如圖1所示

PIN插樁粒度

圖1

利用插樁可以實(shí)現(xiàn)多種功能,如圖2所示,一個(gè)利用插樁計(jì)算程序指令數(shù)的例子。

利用插樁計(jì)算程序指令數(shù)

圖2

pintool是用戶開發(fā)的dll來實(shí)現(xiàn)想要的功能。pintool 必須包含兩個(gè)部分:

  • Instrumentation routines:代碼收集完畢后執(zhí)行的回調(diào)函數(shù),可以用于分析代碼屬性和在適當(dāng)位置插入Analysis routines。
  • Analysis routines:可以在當(dāng)前指令執(zhí)行前或執(zhí)行后執(zhí)行的函數(shù)。

如圖3所示,顯示了PIN的流程。

PIN的流程

圖3

2. Scylla

Scylla的兩個(gè)主要功能是IAT搜索和Import Directory重構(gòu)。其中,IAT搜索部分,Scylla使用兩種技術(shù)搜索IAT:基本IAT搜索和高級(jí)IAT搜索。

(1)基本IAT搜索

  • Scylla 接受一個(gè)開始地址作為輸入,從開始地址開始搜索IAT;
  • 掃描包含開始地址的可執(zhí)行頁(yè)面中的call和jump指令,這些指令的每個(gè)目標(biāo)地址作為可能的IAT入口指針;
  • 目標(biāo)地址中的值和所有導(dǎo)入函數(shù)地址進(jìn)行比較,如果沒有一致的,目標(biāo)地址就被淘汰;
  • 從上述步驟找到的IAT入口地址開始掃描內(nèi)存,直到遇到4個(gè)0字節(jié),這樣就找到 IAT 的結(jié)束地址。同樣,反向掃描就可以找到開始地址。

(2)高級(jí)IAT搜索

對(duì)所有可執(zhí)行頁(yè)面而不是僅僅對(duì)包含開始地址的可執(zhí)行頁(yè)面來搜索IAT。

三、系統(tǒng)結(jié)構(gòu)

PinDemonium系統(tǒng)結(jié)構(gòu)如圖4所示:

PinDemonium系統(tǒng)結(jié)構(gòu)

圖4

從圖中可以看出,PinDemonium主要包括5個(gè)模塊:

  • WxorX handler module
  • Hooking Module
  • Dumping module
  • IAT search and reconstruction Module
  • IAT Fixing and Import Directory Reconstruction

1. WxorX handler module

WxorX handler module是PinDemonium的核心模塊。WxorX handler module記錄寫過的地址(包括對(duì)遠(yuǎn)程進(jìn)程的寫),當(dāng)發(fā)現(xiàn)寫后執(zhí)行的情況,就用Scylla對(duì)程序進(jìn)行轉(zhuǎn)儲(chǔ)。

為了檢測(cè)寫后執(zhí)行,實(shí)現(xiàn)的兩個(gè)重要功能:

(1) Written addresses tracking:記錄被寫過的每個(gè)內(nèi)存地址來創(chuàng)建 Write Interval(WI)。WI 是一個(gè)結(jié)構(gòu)體,記錄一片被寫過的連續(xù)內(nèi)存,包含以下信息:開始地址,結(jié)束地址,是否已分析的布爾標(biāo)志,對(duì) WI 所有啟發(fā)式方法的結(jié)果。圖5顯示了對(duì)2個(gè)WI進(jìn)行合并的三種情況。為了保持性能和簡(jiǎn)化識(shí)別寫后執(zhí)行代碼的過程,忽略和脫殼無關(guān)的指令,如寫棧和寫Process Environment Block(PEB)。

對(duì)2個(gè)WI進(jìn)行合并的三種情況

圖5

(2) Write xor Execution (WxorX) addresses notifier:檢查現(xiàn)在執(zhí)行的指令是否在WI中,如果是,執(zhí)行以下分析:

  • Dump 違反 WxorX 規(guī)則的內(nèi)存區(qū)域。內(nèi)存區(qū)域的位置包含3種情況:PE 文件主模塊,堆上的內(nèi)存,其他程序的內(nèi)存中;
  • 重構(gòu) IAT 并生成正確的 Import Directory;
  • 運(yùn)用一系列啟發(fā)式方法(熵,長(zhǎng)跳轉(zhuǎn)等)來評(píng)估目前的指令是否是 OEP。

WxorX addresses notifier 用于觸發(fā)轉(zhuǎn)儲(chǔ)功能,當(dāng)某個(gè)WI***次被違反WxorX規(guī)則進(jìn)行轉(zhuǎn)儲(chǔ)。為了解決圖6的情況,當(dāng)同一個(gè)WI中的跳轉(zhuǎn)大于閾值時(shí)也會(huì)進(jìn)行轉(zhuǎn)儲(chǔ)。

WxorX addresses notifier

圖6

PinDemonium hook系統(tǒng)調(diào)用來發(fā)現(xiàn)對(duì)遠(yuǎn)程進(jìn)程的寫,用hashmap將pid映射為WI,監(jiān)控用于執(zhí)行注入載荷的相關(guān)函數(shù),當(dāng)發(fā)現(xiàn)對(duì)遠(yuǎn)程線程的寫后執(zhí)行時(shí),PinDemonium轉(zhuǎn)儲(chǔ)遠(yuǎn)程進(jìn)程被寫過的內(nèi)存并調(diào)用啟發(fā)式方法對(duì)轉(zhuǎn)儲(chǔ)結(jié)果進(jìn)行評(píng)價(jià)。

2. Hooking Module

Hooking Module 利用 Intel PIN 的功能對(duì)API和系統(tǒng)調(diào)用進(jìn)行hook以達(dá)到跟蹤程序行為的目的。圖7顯示的是對(duì)API的hook。

對(duì)API的hook

圖7

圖8顯示的是對(duì)系統(tǒng)調(diào)用的hook。

對(duì)系統(tǒng)調(diào)用的hook

圖8

3. Dumping module

許多內(nèi)存轉(zhuǎn)儲(chǔ)工具,只會(huì)轉(zhuǎn)儲(chǔ)目標(biāo)程序的主模塊,遺漏了動(dòng)態(tài)內(nèi)存區(qū)域(例如堆)上的代碼,如圖9所示。

Dumping module

圖9

Dumping Module依賴于 Scylla。PinDemonium對(duì) Scylla 進(jìn)行了改進(jìn):將Scylla的PE重構(gòu)模塊增加了對(duì)動(dòng)態(tài)內(nèi)存區(qū)域(例如堆)的考慮。PinDemonium將堆上的WI標(biāo)記為heap write interval,當(dāng)heap write interval違反WxorX規(guī)則,不僅轉(zhuǎn)儲(chǔ)程序主模塊,還向轉(zhuǎn)儲(chǔ)中添加新的節(jié)來包含heap write interval的內(nèi)容并將Entry Point設(shè)在這個(gè)節(jié)內(nèi),如圖10所示。

Dumping Module依賴于 Scylla

圖10

圖11顯示的是利用Scylla來轉(zhuǎn)儲(chǔ)。

利用Scylla來轉(zhuǎn)儲(chǔ)

圖11

4. IAT search and reconstruction Module

為了獲得更好的結(jié)果,PinDemonium綜合運(yùn)用Scylla的基本IAT搜索和高級(jí)IAT搜索功能,如圖12所示。

IAT search and reconstruction Module

圖12

5. IAT Fixing and Import Directory Reconstruction

沒有能解決IAT混淆的通用技術(shù),所以PinDemonium對(duì)Scylla進(jìn)行改進(jìn),讓分析人員能自己編寫去混淆代碼并集成到 PinDemonium 中。PinDemonium 實(shí)現(xiàn)了一種能夠解決圖13所使用的IAT混淆技術(shù)的算法。

IAT混淆技術(shù)的算法

圖13

6. Heuristics implementation

PinDemonium 使用啟發(fā)式方法對(duì)獲得的轉(zhuǎn)儲(chǔ)進(jìn)行評(píng)估,每個(gè)啟發(fā)式方法可以在最終生成的報(bào)告中設(shè)置一個(gè)標(biāo)志位,所有的的標(biāo)志位幫助識(shí)別***的轉(zhuǎn)儲(chǔ)。有4種啟發(fā)式方法:

(1) 熵:圖14顯示了加殼前后MessageBox程序的熵的情況。加殼后熵明顯增加。所以可以對(duì)比脫殼前后熵的變化大小是否超過閾值來對(duì)脫殼結(jié)果進(jìn)行判定。

加殼前后MessageBox程序的熵的情況

圖14

(2) 跳到節(jié)外:程序脫殼完畢后,調(diào)到OEP執(zhí)行時(shí)通常會(huì)從一個(gè)節(jié)跳到另一個(gè)節(jié),利用這一特點(diǎn)來對(duì)脫殼結(jié)果進(jìn)行判定。

(3) 長(zhǎng)跳轉(zhuǎn):如圖15,程序脫殼完畢后,跳到原始代碼去執(zhí)行的情況通常不是(a)和(b)那種短跳轉(zhuǎn)而是(c)那種長(zhǎng)跳轉(zhuǎn),利用這一特點(diǎn)來對(duì)脫殼結(jié)果進(jìn)行判定。

對(duì)脫殼結(jié)果進(jìn)行判定

圖15

(4) pushad popad:脫殼的過程中是否出現(xiàn)了pushad和popad這兩條指令,如果都出現(xiàn)了就在報(bào)告中設(shè)置對(duì)應(yīng)的標(biāo)志位。

四、實(shí)驗(yàn)效果

實(shí)驗(yàn)一,已知加殼類型的實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如圖16:

已知加殼類型的實(shí)驗(yàn)

圖16

實(shí)驗(yàn)二,未知加殼類型,樣本來源于virustotal,實(shí)驗(yàn)結(jié)果如圖17:

未知加殼類型,樣本來源于virustotal

圖17

五、使用

本人由于實(shí)驗(yàn)需求,利用vmware搭建了PinDemonium環(huán)境,實(shí)現(xiàn)批量脫殼。

 

  1. pin -t PINdemonium.dll -- path-of-smaples\name-malwr.exe 

通過這個(gè)指令可以實(shí)現(xiàn)樣本的脫殼,脫殼結(jié)果截圖如圖18:

實(shí)現(xiàn)樣本的脫殼

圖18

設(shè)置 PinDemonium 的一些命令行參數(shù)可以開啟PinDemonium相應(yīng)的功能來對(duì)付某些殼所使用的技巧。

責(zé)任編輯:趙寧寧 來源: FreeBuf
相關(guān)推薦

2015-10-10 16:31:58

2012-12-03 11:59:31

2012-12-03 13:30:19

脫殼OEP

2012-12-03 13:17:04

脫殼DUMP

2011-05-31 18:09:05

動(dòng)態(tài)測(cè)試

2014-04-10 09:56:05

JavaScriptJS工具

2015-06-30 13:06:00

ShellterShellcode注入

2015-09-09 09:38:40

脫殼手工脫殼軟件逆向

2022-08-28 10:36:53

調(diào)試工具通用

2021-09-17 13:27:09

勒索病毒

2021-05-10 15:08:37

Java工具編碼

2010-05-17 09:34:46

LINQAjax

2025-01-03 10:30:00

2021-04-01 10:40:22

網(wǎng)絡(luò)安全軟件

2018-10-25 15:13:23

APP脫殼工具

2013-06-09 11:11:54

歐朋瀏覽器

2016-03-12 21:46:56

Inspeckage應(yīng)用程序動(dòng)態(tài)分析

2012-05-18 13:03:21

HTC

2017-07-28 09:19:17

深度學(xué)習(xí)機(jī)器學(xué)習(xí)人工智能

2017-07-28 09:50:15

機(jī)器學(xué)習(xí)數(shù)據(jù)科學(xué)工具和語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)