加殼與脫殼理論詳解

加殼與脫殼理論詳解

  在自然界中,我想大家對殼這東西應該都不會陌生了,由上述故事,我們也可見一斑。自然界中植物用它來保護種子,動物用它來保護身體等等。同樣,在一些計算機軟件裏也有一段專門負責保護軟件不被非法修改或反編譯的程序。它們一般都是先於程序運行,拿到控制權,然後完成它們保護軟件的任務。就像動植物的殼一般都是在身體外面一樣理所當然(但後來也出現了所謂的 “ 殼中帶籽 ” 的殼)。由於這段程序和自然界的殼在功能上有很多相同的地方,基於命名的規則,大家就把這樣的程序稱爲 “ 殼 ” 了。就像計算機病毒和自然界的病毒一樣,其實都是命名上的方法罷了。   從功能上抽象,軟件的殼和自然界中的殼相差無幾。無非是保護、隱蔽殼內的東西。而從技術的角度出發,殼是一段執行於原始程序前的代碼。原始程序的代碼在加殼的過程中可能被壓縮、加密 …… 。當加殼後的文件執行時,殼-這段代碼先於原始程序運行,他把壓縮、加密後的代碼還原成原始程序代碼,然後再把執行權交還給原始代碼。   軟件的殼分爲加密殼、壓縮殼、僞裝殼、多層殼等類,目的都是爲了隱藏程序真正的 OEP (入口點,防止被破解)。關於 “ 殼 ” 以及相關軟件的發展歷史請參閱吳先生的《一切從 “ 殼 ” 開始》。  

(一)殼的概念  

        作者編好軟件後,編譯成 exe 可執行文件。
       1. 有一些版權信息需要保護起來,不想讓別人隨便改動,如作者的姓名,即爲了保護軟件不被破解,通常都是採用加殼來進行保護。
       2. 需要把程序搞的小一點,從而方便使用。於是,需要用到一些軟件,它們能將 exe 可執行文件壓縮,  
       3. 在黑客界給木馬等軟件加殼脫殼以躲避殺毒軟件。實現上述功能,這些軟件稱爲加殼軟件。  

(二)加殼軟件最常見的加殼軟件

        ASPACK,UPX, PEcompact 不常用的加殼軟件 WWPACK32 ;PE-PACK; PETITE NEOLITE

(三)偵測殼和軟件所用編寫語言的軟件

        因爲脫殼之前要查他的殼的類型。  
       1. 偵測殼的軟件 fileinfo.exe  簡稱 fi.exe (偵測殼的能力極強)。  
       2. 偵測殼和軟件所用編寫語言的軟件 language.exe (兩個功能合爲一體,很棒),推薦 language2000 中文版(專門檢測加殼類型)。  
       3. 軟件常用編寫語言 Delphi , VisualBasic ( VB ) --- 最難破, VisualC ( VC )。  

(四)脫殼軟件  

        軟件加殼是作者寫完軟件後,爲了保護自己的代碼或維護軟件產權等利益所常用到的手段。目前有很多加殼工具,當然有盾,自然就有矛,只要我們收集全常用脫殼工具,那就不怕他加殼了。軟件脫殼有手動脫和自動脫殼之分,下面我們先介紹自動脫殼,因爲手動脫殼需要運用匯編語言,要跟蹤斷點等,不適合初學者,但我們在後邊將稍作介紹。  

        加殼一般屬於軟件加密,現在越來越多的軟件經過壓縮處理,給漢化帶來許多不便,軟件漢化愛好者也不得不學習掌握這種技能。現在脫殼一般分手動和自動兩種,手動就是用 TRW2000 、 TR 、 SOFTICE 等調試工具對付,對脫殼者有一定水平要求,涉及到很多彙編語言和軟件調試方面的知識。而自動就是用專門的脫殼工具來脫,最常用某種壓縮軟件都有他人寫的反壓縮工具對應,有些壓縮工具自身能解壓,如 UPX ;有些不提供這功能,如: ASPACK ,就需要 UNASPACK 對付,好處是簡單,缺點是版本更新了就沒用了。另外脫殼就是用專門的脫殼工具來對付,最流行的是 PROCDUMP v1.62  ,可對付目前各種壓縮軟件的壓縮檔。在這裏介紹的是一些通用的方法和工具,希望對大家有幫助。我們知道文件的加密方式,就可以使用不同的工具、不同的方法進行脫殼。下面是我們常常會碰到的加殼方式及簡單的脫殼措施,供大家參考:   脫殼的基本原則就是單步跟蹤,只能往前,不能往後。脫殼的一般流程是:查殼 -> 尋找 OEP->Dump-> 修復   找 OEP 的一般思路如下:   先看殼是加密殼還是壓縮殼,壓縮殼相對來說容易些,一般是沒有異常,找到對應的 popad 後就能到入口,跳到入口的方式一般爲。   我們知道文件被一些壓縮加殼軟件加密,下一步我們就要分析加密軟件的名稱、版本。因爲不同軟件甚至不同版本加的殼,脫殼處理的方法都不相同。  

常用脫殼工具

       1. 文件分析工具(偵測殼的類型): Fi , GetTyp , peid , pe-scan ,  
       2.OEP 入口查找工具: SoftICE , TRW , ollydbg , loader , peid
       3.dump 工具: IceDump , TRW , PEditor , ProcDump32 , LordPE
       4.PE 文件編輯工具 PEditor , ProcDump32 , LordPE
       5. 重建 Import Table 工具: ImportREC , ReVirgin
       6.ASProtect 脫殼專用工具: Caspr ( ASPr V1.1-V1.2 有效), Rad (只對 ASPr V1.1 有效), loader , peid

        ( 1 ) Aspack :   用的最多,但只要用 UNASPACK 或 PEDUMP32 脫殼就行了  

        ( 2 ) ASProtect+aspack :次之,國外的軟件多用它加殼,脫殼時需要用到 SOFTICE+ICEDUMP ,需要一定的專業知識,但最新版現在暫時沒有辦法。  

        ( 3 ) Upx :   可以用 UPX 本身來脫殼,但要注意版本是否一致,用 -D  參數  

        ( 4 ) Armadill :   可以用 SOFTICE+ICEDUMP 脫殼,比較煩  

        ( 5 ) Dbpe :   國內比較好的加密軟件,新版本暫時不能脫,但可以破解  

        ( 6 ) NeoLite :   可以用自己來脫殼  

        ( 7 ) Pcguard :   可以用 SOFTICE+ICEDUMP+FROGICE 來脫殼  

        ( 8 ) Pecompat :   用 SOFTICE 配合 PEDUMP32 來脫殼,但不要專業知識  

        ( 9 ) Petite :   有一部分的老版本可以用 PEDUMP32 直接脫殼,新版本脫殼時需要用到 SOFTICE+ICEDUMP ,需要一定的專業知識   。

         (10) WWpack32 :   和 PECOMPACT 一樣其實有一部分的老版本可以用 PEDUMP32 直接脫殼,不過有時候資源無法修改,也就無法漢化,所以最好還是用 SOFTICE 配合  PEDUMP32 脫殼

           我們通常都會使用 Procdump32 這個通用脫殼軟件,它是一個強大的脫殼軟件,他可以解開絕大部分的加密外殼,還有腳本功能可以使用腳本輕鬆解開特定外殼的加密文件。另外很多時候我們要用到 exe 可執行文件編輯軟件 ultraedit 。我們可以下載它的漢化註冊版本,它的註冊機可從網上搜到。 ultraedit 打開一箇中文軟件,若加殼,許多漢字不能被認出  ultraedit 打開一箇中文軟件,若未加殼或已經脫殼,許多漢字能被認出  ultraedit 可用來檢驗殼是否脫掉,以後它的用處還很多,請熟練掌握例如,可用它的替換功能替換作者的姓名爲你的姓名注意字節必須相等,兩個漢字替兩個,三個替三個,不足處在 ultraedit 編輯器左邊用 00 補。  

常見的殼脫法:

        1.aspack 殼   脫殼可用 unaspack 或 caspr 1.unaspack  ,使用方法類似 lanuage ,傻瓜式軟件,運行後選取待脫殼的軟件即可 .  缺點:只能脫 aspack 早些時候版本的殼,不能脫高版本的殼  2.caspr 第一種:待脫殼的軟件(如 aa.exe )和 caspr.exe 位於同一目錄下,執行 windows 起始菜單的運行,鍵入  caspr aa.exe 脫殼後的文件爲 aa.ex_ ,刪掉原來的 aa.exe ,將 aa.ex_ 改名爲 aa.exe 即可。使用方法類似 fi  優點:可以脫 aspack 任何版本的殼,脫殼能力極強缺點: Dos 界面。第二種:將 aa.exe 的圖標拖到 caspr.exe 的圖標上 *** 若已偵測出是 aspack 殼,用 unaspack 脫殼出錯,說明是 aspack 高版本的殼,用 caspr 脫即可。  

       2.upx 殼   脫殼可用 upx 待脫殼的軟件(如 aa.exe )和 upx.exe 位於同一目錄下,執行 windows 起始菜單的運行,鍵入 upx -d aa.exe 。  

       3.PEcompact 殼   脫殼用 unpecompact  使用方法類似 lanuage 傻瓜式軟件,運行後選取待脫殼的軟件即可。  

       4.procdump  萬能脫殼但不精,一般不要用   使用方法:運行後,先指定殼的名稱,再選定欲脫殼軟件,確定即可脫殼後的文件大於原文件由於脫殼軟件很成熟,手動脫殼一般用不到。一 . 關於免殺的來源
爲了讓我們的木馬在各種殺毒軟件的威脅下活的更久 .

什麼叫免殺和查殺

可分爲二類 :
1. 文件免殺和查殺 : 不運行程序用殺毒軟件進行對該程序的掃描,所得結果。
2. 內存的免殺和查殺 : 判斷的方法 1> 運行後 , 用殺毒軟件的內存查殺功能 .
                    2> 用 OD 載入 , 用殺毒軟件的內存查殺功能 .

什麼叫特徵碼

1. 含意 : 能識別一個程序是一個病毒的一段不大於 64 字節的特徵串 .
2. 爲了減少誤報率 , 一般殺毒軟件會提取多段特徵串 , 這時 , 我們往往改一處就可達到
免殺效果 , 當然有些殺毒軟件要同時改幾處才能免殺 .( 這些方法以後詳細介紹 )
3. 下面用一個示意圖來具體來了解一下特徵碼的具體概念

特徵碼的定位與原理

1. 特徵碼的查找方法 : 文件中的特徵碼被我們填入的數據(比如 0 )替換了,那殺毒軟
件就不會報警,以此確定特徵碼的位置

2. 特徵碼定位器的工作原理 : 原文件中部分字節替換爲 0 ,然後生成新文件,再根據殺
毒軟件來檢測這些文件的結果判斷特徵碼的位置

 認識特徵碼定位與修改的工具

1.CCL( 特徵碼定位器 )
2.OOydbg ( 特徵碼的修改 )
3.OC 用於計算從文件地址到內存地址的小工具 .
4.UltaEdit-32( 十六進制編輯器 , 用於特徵碼的手工準確定位或修改 )

特徵碼修改方法

特徵碼修改包括文件特徵碼修改和內存特徵碼修改,因爲這二種特徵碼的修改方法
是通用的。所以就對目前流行的特徵碼修改方法作個總節。

方法一 : 直接修改特徵碼的十六進制法
1. 修改方法 : 把特徵碼所對應的十六進制改成數字差 1 或差不多的十六進制 .

2. 適用範圍 : 一定要精確定位特徵碼所對應的十六進制 , 修改後一定要測試一下能
否正常使用 .

方法二 : 修改字符串大小寫法
1. 修改方法 : 把特徵碼所對應的內容是字符串的 , 只要把大小字互換一下就可以了 .
2. 適用範圍 : 特徵碼所對應的內容必需是字符串 , 否則不能成功 .

方法三 : 等價替換法
1. 修改方法 : 把特徵碼所對應的彙編指令命令中替換成功能類擬的指令 .
2. 適用範圍 : 特徵碼中必需有可以替換的彙編指令 . 比如 JN,JNE  換成 JMP 等 .
如果和我一樣對彙編不懂的可以去查查 8080 彙編手冊 .             

方法四 : 指令順序調換法
1. 修改方法 : 把具有特徵碼的代碼順序互換一下 .
2. 適用範圍 : 具有一定的侷限性 , 代碼互換後要不能影響程序的正常執行

方法五 : 通用跳轉法
1. 修改方法 : 把特徵碼移到零區域 ( 指代碼的空隙處 ), 然後一個 JMP 又跳回來執行 .
2. 適用範圍 : 沒有什麼條件 , 是通用的改法 , 強烈建議大家要掌握這種改法 .

木馬免殺的綜合修改方法

文件免殺方法:

1. 加冷門殼
2. 加花指令
3. 改程序入口點
4. 改木馬文件特徵碼的 5 種常用方法
5. 還有其它的幾種免殺修改技巧  

內存免殺方法:

修改內存特徵碼:
方法 1> 直接修改特徵碼的十六進制法
方法 2> 修改字符串大小寫法
方法 3> 等價替換法
方法 4> 指令順序調換法
方法 5> 通用跳轉法
木馬的免殺 [ 學用 CLL 定位文件和內存特怔碼 ]

1. 首先我們來看下什麼叫文件特徵碼 .
一般我們可以這樣認爲,一個木馬程序在不運行的情況下,用殺毒軟件查殺,若報警爲病毒,說明存在該查毒軟件的文件特徵碼的。
2. 特徵碼的二種定位方法 .
手動定位和自動定位
3. 文件特徵碼的定位技巧 .
通常用手動確定大範圍,用自動精確定位小範圍 .
下面分別用瑞星和卡巴爲例,實例演示並結合手動定位和自動定位二種方法來準確定位文件特徵碼。要定位的對像以下載者爲例。

用卡巴來定位文件特徵碼

⑴ . 手動定位:
1 打開 CLL
2 選擇設置中的   總體參數   ,,,,,選中文件特徵碼手動定位,,,,以及路徑

3 選中設置中的   手動參數,,,,,選擇替換方式   選中,,,總共生成規定個數的文件,,,生成個數爲 1000

4 選擇文件中的   特徵碼檢測,,文件特徵碼檢測,,,打開程序(要定位特證碼的程序)
5 在彈出的 PE 窗口中   直接點確定   ,之後彈出的窗口在點確定
6 然後等 CLL 生成完畢之後用殺毒軟件進行查殺
7 在 CLL 中選   操作,結果定位,選中剛剛用來存放檢測結果的文件夾
8 在 CLL 中選

文件免殺之加花指令法

. 花指令相關知識:  

 其實是一段垃圾代碼,和一些亂跳轉,但並不影響程序的正常運行。加了花指令後,使一些殺毒軟件無法正確識別木馬程序,從而達到免殺的效果。

. 加花指令使木馬免殺製作過程詳解:

  第一步:配置一個不加殼的木馬程序。
  第二步: OD 載入這個木馬程序,同時記下入口點的內存地址。
  第三步:向下拉滾動條,找到零區域(也就是可以插入代碼的都是 0 的空白地方)。並記下零區域的起始內存地址。
  第四步:從這個零區域的起始地址開始一句一句的寫入我們準備好的花指令代碼。
  第五步:花指令寫完後,在花指令的結束位置加一句: JMP  剛纔 OD 載入時的入口點內存地址。
  第六步:保存修改結果後,最後用 PEditor 這款工具打開這個改過後的木馬程序。在入口點處把原來的入口地址改成剛纔記下的零區域的起始內存地址,並按應用更改。使更改生效。

. 加花指令免殺技術總節:

  1. 優點:通用性非常不錯,一般一個木馬程序加入花指令後,就可以躲大部分的殺毒軟件,不像改特徵碼,只能躲過某一種殺毒軟件。
  2. 缺點:這種方法還是不能過具有內存查殺的殺毒軟件,比如瑞星內存查殺等。
  3. 以後將加花指令與改入口點,加殼,改特徵碼這幾種方法結合起來混合使用效果將非常不錯。

. 加花指令免殺要點:

由於黑客網站公佈的花指令過不了一段時間就會被殺軟辨認出來,所以需要你自己去搜集一些不常用的花指令,另外目前還有幾款軟件可以自動幫你加花,方便一些不熟悉的朋友,例如花指令添加器等。

. 常見花指令代碼

1 . VC++ 5.0

PUSH EBP              
MOV EBP,ESP            
PUSH -1              
push 515448        
PUSH 6021A8        
MOV EAX,DWORD PTR FS:[0]      
PUSH EAX              
MOV DWORD PTR FS:[0],ESP      
ADD ESP,-6C            
PUSH EBX              
PUSH ESI              
PUSH EDI  

jmp  跳轉到程序原來的入口點

2 .c ++

push ebp
mov ebp,esp
push -1
push 111111
push 222222
mov eax,fs:[0]
push eax
mov fs:[0],esp
pop eax
mov fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax

jmp  跳轉到程序原來的入口點

3 .跳轉

somewhere:        
   nop          /" 胡亂 " 跳轉的開始 ...
    jmp  下一個 jmp 的地址      / 在附近隨意跳
    jmp ...        /...
   jmp  原入口的地址      / 跳到原始 oep
--------------------------------------------------
新入口 : push ebp
   mov ebp,esp
   inc ecx
   push edx
   nop
   pop edx
   dec ecx
   pop ebp
   inc ecx
   loop somewhere    / 跳轉到上面那段代碼地址去!

4 . Microsoft Visual C++ 6.0

push ebp
mov ebp,esp
PUSH -1
PUSH 0
PUSH 0
MOV EAX,DWORD PTR FS:[0]
PUSH EAX
MOV DWORD PTR FS:[0],ESP
SUB ESP,68
PUSH EBX
PUSH ESI
PUSH EDI
POP EAX
POP EAX
POP EAX
ADD ESP,68
POP EAX
MOV DWORD PTR FS:[0],EAX
POP EAX
POP EAX
POP EAX
POP EAX
MOV EBP,EAX
JMP  原入口

在 mov ebp,eax
後面加上
PUSH EAX
POP EAX

6.

push ebp
mov ebp,esp
add esp,-0C
add esp,0C
mov eax,403D7D
push eax
retn
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
push ebp
mov ebp,esp
push -1
push 00411222
push 00411544
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
add esp,-6C
push ebx
push esi
push edi
add byte ptr ds:[eax],al
jo  入口
jno  入口
call  下一地址

7.

push ebp
nop
nop
mov ebp,esp
inc ecx
nop
push edx
nop
nop
pop edx
nop
pop ebp
inc ecx
loop  任意地址
nop
nop
———————————————
nop
nop
jmp  下一個 jmp 的地址      / 在附近隨意跳
nop
jmp  下一個 jmp 的地址      / 在附近隨意跳
nop
jmp  下一個 jmp 的地址      / 在附近隨意跳
jmp  入口

文件免殺之加殼與改入口點法

. 殼的相關知識:

1. 殼的分類:壓縮殼和加密殼
2. 殼的作用:保護和文件免殺  

. 加殼免殺的幾個弱點

1. 不能躲過像瑞星這類具有內存查殺功能的殺毒軟件。
2. 一般不能躲過卡巴的查殺
因爲卡巴採用了一種叫虛擬機技術。首先把加了多層殼的木馬程序在虛擬機環境下運行一下,這樣木馬程序就會現出本來面目,這樣無論你加了多少層殼,在運行後程序還是要暴露自已的。所以大家在加殼測試過程中也會發現,能過其它的多種殺毒軟件,但卡巴始終很難過,其原因就是卡巴的虛擬技術在作怪。

. 是不是現在的加殼免殺已失去意義

每種免殺技術都有他的缺點和優點,比如加殼,首先要找到比較生僻的殼 , 而且可能以後很快被查殺 . 同時也不能過內存查殺 , 也很難過卡巴 . 但它操作方便 , 通用性好加一個殼 , 可能過好幾個殺毒軟件 . 又比如修改特徵碼 . 首先操作比較煩 , 要定位 , 要修改 , 改好後還要測試是否能正常使用 . 同時針對性非常強 . 只能針對某一種殺毒軟件的免殺 , 各種殺毒軟件的特徵碼都不一樣 , 所以要躲過多種殺毒軟件查殺 , 就要分別定位 , 修改每種殺毒軟件的特徵碼 . 這樣是相當麻煩的 . 但它可以通過修改特徵碼來躲過瑞星內存和卡巴的查殺 .
所以以後免殺技術會把加殼 , 加花指令 , 改入口點 , 改特徵碼這幾種方法結合起來使用 . 對付瑞星的內存查殺 , 我們可以修改內存特徵碼 , 對付卡巴的虛擬機技術 . 我們可以修改卡巴的特徵碼 . 在加上加冷門殼 , 加花指令 , 改入口點 . 綜合這些方法就可以打造金鋼不死之身 !

. 加殼免殺實例演示部分 

1. 加生僻殼免殺 : 實例演示
2. 加僞裝殼免殺 : 實例演示
3. 多重加殼免殺 : (用木馬綵衣進行多重加殼)

. 改入口點免殺法 :

1. 改入口點免殺原理 : 殺毒軟件一般都檢測病毒還原之後的代碼 , 而且一般都把代碼段開始的前 40 個字節作爲特徵值 . 入口點改變了 , 說明也就破壞了特徵碼 , 這樣就達到免殺的效果 .
2. 改入口點免殺方法一 : 入口地址加 1 法 .
操作步驟 :
第一步 : 配置一個無殼的木馬服務端 .
第二步 : 用 PEditor 打開木馬程序服務端 . 在入口點處的地址加 1. 然後點應用更改就可以了 .
評論 : 該方法對不同木馬程序 , 有不同的效果 , 其它殺毒軟件一般都可以躲過 , 但有些程序改過後還是被卡巴查殺 . 同時也不能過內存查殺 , 但以後結合加花指令 , 加殼等等方法 , 效果將非常不錯 .

3. 改入口點免殺方法二 : 變換入口地址法 .
操作步驟 :
第一步 : 用 OD 載入無殼木馬程序服務端 .
第二步 : 把入口點的開始二句代碼 ( 大都爲 push ebp    mov ebp,esp). 移到零區域也是就空白區域地方 . 並記下零區域的內存地址 . 同時在後面加一句跳轉命令 :JMP  到第三條指令的地址 .
第三步 : 然後修正並保存 , 最後用 PEditor 打開該程序 . 把入口點改成剛纔在零區域記下的內存地址 .
評論 : 該方法效果比方法一要好 . 經測試 , 用方法一改過後被卡巴查出來 , 用方法二就查不出來 .  以後可以結合加花指令 , 加殼 , 改特徵碼 , 打造金鋼不死之身 !

採用以上的方法可以躲過不少殺毒軟件的追殺,並且方便快速,又很簡單,所以是免殺裏非常主要的手段,但是一定要檢查文件是不是能夠正常運行。

免殺新技術[ 虛擬機加密免殺 ] 和 [ 殼中改籽 ]

  、虛擬機加密免殺

最新免殺技術 —— 虛擬機加密代碼應用並非傳統的修改特徵碼,也不是修改入口點 + 花指令,更不是
加殼壓縮!是最新的一種免殺技術!借於這種技術你可以千變萬化,是免殺對新手來說更爲簡單!
大家對虛擬機 vmprotect 是否有所瞭解,這個是最新的加密工具!可以加密 PE 文件中任何一句或一段代碼
自然可以給我們用來免殺了!
免殺工具: vmprotect1.07 或 1.06 PEID UPX
免殺步驟:原理說明:加密區段代碼使殺毒軟件無法識別!你可以找特徵碼,找到後加密特徵碼的代碼!
PEID 查看入口點:假如這裏的入口點是 0007DB74  基址是  00400000
3. 用虛擬機 vmprotect 打開要免殺的文件,添加地址 0047DB74=00400000+0007DB74  基址 + 入口點  
4. 選代碼區域 -> 轉存 ->F9 保存
5. 測試運行 -> 可以成功運行
6. 用 UPX 壓縮一下,縮小體積, OK  免殺成功  
總結:虛擬機加密代碼是比較新的免殺技術,可以和其他免殺技術有機的集合在一起,讓你的木馬變成金剛不壞 . 大家要多多掌握。

 、殼中改籽技術免殺

這種免殺很少有人用,所以免殺效果非常好,各大黑客網站也很少見到介紹,這裏我把別人做黑洞免殺的文章發到這裏,供大家研究 . 估計是浩天寫的文章
先講一下爲什麼這種技術叫 “ 殼中改籽 ” 。配置一個黑洞的服務端,然後用 PEiD.exe 來查看它是用什麼加的殼,查到是 UPX 加的變態殼,程序的區段都給隱藏了,那麼先得給黑洞服務端脫殼。用  upxfix.exe 打開它,然後在 Decompress method 裏面選擇 5 ,點擊 fix ,這樣就修復了。再用 PEiD.exe 查一下,看現在可以看到區段了吧。
爲什麼我一再提到這個區段呢?其實它就是文章的重點,也就是殼裏面的籽。繼續脫殼,用 UPXShell 打開修復好的黑洞服務端,點擊解壓縮,完成後我們可以看到程序由原來的 201 kb 變成了 506 KB  ,大了一倍多。
有人可能要問爲什麼一定要給它脫殼呢?直接修改不可以嗎?其實主要是因爲黑洞的服務端裏還有一個用做鍵盤記錄的 dll 文件,它也要做免殺處理。用  Resscope1.92 打開黑洞的服務端,這個可是絕好的 exe 資源編輯器啊,先選擇 dllfile 裏面的 getkey ,然後點擊文件 → 導出資源,這樣 dll 文件就導出來了。它也是用 upx 加的變態殼,因爲區段被加密了,所以我們也要給它脫殼,再加殼。脫殼的過程和先前脫黑洞服務端一樣先用 upxfix.exe 打開它,但是這裏注意在 Decompress method 裏面,不要選擇 5 ,而是選擇 2 修復,不然的話就脫不了殼了。
接着用 UPXShell 解壓縮,現在 dll 文件的大小由原來的 11 kb 變成了 18.5 kb ,然後再用 UPXShell 重新給它加上殼。

三、修改 upx 殼裏面的籽

UPX 加過殼的 dll 文件,用 PEiD.exe 打開查看,這裏有幾個數據需要我們記錄,等下和修改後的文件做比較用。
先分別把程序入口點: 000C220 、文件偏移量: 00002620  ,記錄下來,然後點擊查看 EP 區段,在區段查看上面再點右鍵選擇 cave 查找器,把 upx 殼區段 upx1 的 RVA : 0000C3B5 、   偏移: 000027B5 等參數也記錄下來。

關鍵的時刻到了, reloc.exe 閃亮登場。因爲 reloc  是一款命令下的工具,所以爲了操作方便,我建議大家寫一個 bat 文件和 reloc 放在同一目錄。我們開始記錄的數據現在派上用場了,編輯 bat 文件格式如下:
reloc  待修改程序  $ 程序入口  $ 文件偏移量  $ 殼的區段入口  $ 區段偏移   參數
那麼對應我們的黑洞鍵盤記錄 dll 文件所記錄的數據,這個 bat 就應該這樣寫:
reloc  鍵盤記錄 .dll $C220 $2620 $C3B5 $27B5 5
數據前面的零不要寫到 bat 裏面,另外最後面的這個參數大家注意,其實它是設置修改時的偏移量的,一般 dll 文件選擇 5 , exe 文件選擇 5-9 之間的數,一般選擇 6 就好了。
設置完了,我們運行這個 bat 文件,開始修改。完畢之後我分別用國內和國外最強的殺毒軟件江民、諾盾和卡巴斯基對鍵盤記錄 .dll 進行掃描,它們均未發現病毒,我們的木馬成功躲了過去。用 PEiD.exe 重新打開,可以發現 PEiD 已經無法分別鍵盤記錄 .dll 是什麼殼了,把原來記錄的幾個數據和現在對比一下發現程序入口和文件偏移量沒有,而殼區段入口和區段偏移卻改變。
飄舞的風在上一期的文章裏面說道: “ peidv0.92 是通過每個程序的開頭幾十個字節來比較是那種殼。 ” ,看來不僅僅如此, peidv0.92 還把殼的區段入口開頭的幾十個字節也作爲了用來判斷殼的類型的特徵代碼,殺毒軟件也是如此,這樣簡單修改一下我們的木馬就免殺了。
着把這個已經修改好的 dll 文件,導回到黑洞的服務端 , 方法和導出 dll 是一樣的,我就不再講述了,然後把它用 UPXShell 再次加殼,加殼後的大小爲 200 kb 。
現在可以開始我們的第二次免殺之旅了,同樣用 PEiD.exe 把程序入口、文件偏移量、殼的區段入口、區段偏移,等數據記錄下來,寫入 bat 文件。
我的 bat 是這樣寫的:
reloc 1.exe $88620 $30A20 $887A3 $30BA3 6
我前面已經講過了,修改 exe 文件的時候,參數選擇 5-9 之間的數,一般選擇 6 就好了。現在運行 bat 文件,黑洞服務端的免殺就全部完成了。用 PEiD.exe 查看,顯示的是 “ Nothing found ”看來 PEiD 已經不認識它了,再用江民、諾盾和卡巴斯基查殺,均顯示無病毒,呵呵,欺騙成功。

四、結語

經過這麼簡單的修改以後效果是非常好的,相信以後這樣的免殺技術將會成爲主流技術,因爲它簡單實用。
分析它實現免殺的原理,不難看出換一個角度思考問題的重要性,從殼的修改轉到殼中籽的修改,不能不說這是一種創新,
它使木馬的免殺之路變寬了。最後謝謝   “朋友的家 ” 提供一款這樣優秀的工具。如果大家能夠把這種技術和我前面提到的另外三種結合起來使用,相信它將是無懈可擊的免殺新技術之 OD 一半定位法

不知道是那位牛人想出來把這方法用到木馬免殺上,這個方法讓很多不會用偏移定位特怔碼的朋友也能夠很容易掌握到特怔碼的位置,實在是很高明又很簡單的免殺好方法 . 這裏我就根據他的方法詳細介紹 OD 一半定位法  
    所謂 OD 一半定位法很簡單,就是用 OD 載入需要做免殺處理的文件,用 NOP 填充一半的代碼然後保存,接着用殺毒軟件查毒,如果有毒就在把另外一半用 NOP 填充,如果沒報毒就證明特怔碼就在剛剛填充的那一半,然後又對那一半進行 1/2 的 NOP 填充,這樣不斷縮小範圍,很容易就找到需要修改的代碼部分。如果是做內存免殺就把 NOP 填充好的文件用 OD 打開進行內存殺毒。怎麼樣?是不是很容易掌握的方法?
     不過需要注意的是新手用這個方法最好每做一步都把 NOP 填充的開頭和結局部分的地址用紀事本保存,免得一旦忘記又從頭來 .
     如果特怔碼不止一處,你就要大致定位到有特怔碼這一大段,然後把這一段的一半用 NOP 填充並且保存,接着打開保存的文件對另外一半繼續剛剛開始的步驟,這樣很快就能夠定位出幾處特證碼所在的位置 .
還是那句話,熟練就好,另外需要注意填充後查出的病毒名字有沒有改變,如果改變就證明你填充的那段存在特怔碼,這樣可以省掉不少時間。

文件免殺之文件特徵碼修改五大法寶

方法一 : 修改字符串大小寫法  

1. 修改方法 : 把特徵碼所對應的內容是字符串的 , 只要把大小字互換一下就可以了 .
2. 適用範圍 : 特徵碼所對應的內容必需是字符串 , 否則不能成功 .

方法二 : 直接修改特徵碼的十六進制法
1. 修改方法 : 把特徵碼所對應的十六進制改成數字差 1 或差不多的十六進制 .
2. 適用範圍 : 一定要精確定位特徵碼所對應的十六進制 , 修改後一定要測試一下能否正常使用 .

方法三 : 指令順序調換法
1. 修改方法 : 把具有特徵碼的代碼順序互換一下 .
2. 適用範圍 : 具有一定的侷限性 , 代碼互換後要不能影響程序的正常執行。

方法四 : 通用跳轉法
1. 修改方法 : 把特徵碼移到零區域 ( 指代碼的空隙處 ), 然後一個 JMP 又跳回來執行 .
2. 適用範圍 : 沒有什麼條件 , 是通用的改法 , 強烈建議大家要掌握這種改法 .

方法五 : 等價替換法
1. 修改方法 : 把特徵碼所對應的彙編指令命令中替換成功能類似的指令 .
2. 適用範圍 : 特徵碼中必需有可以替換的彙編指令 . 替換後指令功能要不變比如 JN,JNE  換成 JMP ,這裏要對彙編要比較熟悉,讀懂指令後可以替換功能相同的指令。也可以去查 8080 彙編手冊 [ 計算機專欄裏有 ]

實戰特怔碼免殺

第一步:首先用內存定位法來準確定位瑞星內存特徵碼的具體位置
  第一階段:自動參數中,生成文件間隔秒數設爲 4 ,最小替換字節數設爲 100 字節。(主要用於大體定位內存特徵碼)
    第二階段:自動參數中,生成文件間隔秒數設爲 4. 最小替換字節數設爲 4 字節。(主要用於準確定位內存特徵碼)
第二步:修改特徵碼
  用 OD 打開文件,找到特怔碼所在位置,並且判斷適合用那種方法修改,如果對方法不太熟悉,並且特怔碼不止一處,那就需要你改一處就保存並且在虛擬機裏試驗能否正常運行 [ 虛擬機可是做免殺的必備工具,強烈建議你安裝,因爲你不可能就在自己的機器上運行木馬吧?在說也不可能在你機器上同時安裝 N 種殺軟,那你機器不慢死,更重要還可以用來試驗別人提供的軟件有沒有木馬 ]
木馬免殺技術之獨門絕技

絕技一:快速搞定瑞星文件查殺  
操作步驟:
 第一步:用 OD 載入,來到程序的入口點。
 第二步:把入口點的第一句 PUSH   EBP  改成 POP   EBP  然後保存就可以躲過瑞星的表面查殺。

絕技二:快速定位與修改瑞星內存特徵碼
原理:因爲目前的內存查殺殺毒軟件,只有瑞星才能威脅到我們的木馬。也就是說只要搞定瑞星的內存查殺,那我們的木馬在內存就暢通無阻了 .  但由於技術原因 , 目前瑞星的內存特徵碼在 90% 以上把字符串作爲病毒特徵碼 ,
這樣對我們的定位和修改帶來了方便 .

操作步驟 :
第一步 : 首先用特徵碼定位器大致定位出瑞星內存特徵碼位置 .
第二步 : 然後用 UE 打開 , 找到這個大致位置 , 看看 , 哪些方面對應的是字符串 , 用 0 替換後再用內存查殺進行查殺 . 直到找到內存特徵碼後 , 只要把字符串的大小寫互換就能達到內存免殺效果 .

絕技三 : 如何快速躲過諾頓的查殺
諾頓的查殺特點 : 大家有時候會發現 , 通過改特徵碼 , 加花指令 , 改內存特徵碼 , 等等 , 卡巴 , 江民 , 金山 , 瑞星都過了 , 但無論如何都過不了諾頓 , 這時候是不是感到很納悶 . 其實諾頓特徵碼的定義和其它殺毒軟件不一樣 , 其它殺毒軟件的特徵碼都在代碼段而只有它把特徵碼定義在 PE 頭文件裏面 . 而在頭文件裏面 , 一般都用字符串作爲病
毒特徵碼 , 知道了原理 , 就有下面的二種方法來應付 .

方法一 : 只要把頭文件的字符串的大小字互換一下就可以搞定了 .
方法二 : 有二款壓縮軟件 WinUpack 和北斗星 , 經過他們的壓縮 , 會把我們的木馬程序的頭文件改的面目全非 . 所以把我們的木馬做好其它的殺毒軟件的免殺後 , 再用這二款壓縮軟件的壓縮就可以躲過諾頓的查殺 .

絕技四 : 一個不太通用的免殺方法
免殺方法一 : 把入口點第三句開始的幾行 (20 字節內 ) 彙編代碼移到零區域去執行 , 也達到一定的免殺效果 .

絕技五 : 用 VC++ 加了花指令後入口點下移法
操作過程 : 加花指令後 , 可以把入口點下移好一位 , 這樣可以進一步達到免殺效果 .

. 木馬免殺綜合方案

修改內存特徵碼 --->

              1> 入口點加 1 免殺法  1> 加壓縮殼 1>---> 再加殼或多重加殼
              2> 變化入口地址免殺法  2> 加生僻殼 --->2> 加殼的僞裝 .
              3> 加花指令法免殺法  3> 加壓縮殼 3>---> 打亂殼的頭文件
              4> 修改文件特徵碼免殺法
以上免殺方法可以自由組合成多種不同的免殺方案。

. 常用免殺方案

1. 實例完全免殺方案一:
內存特徵碼修改+加 UPX 殼+祕密行動打亂殼的頭文件。
所需工具: UPX 加殼工具,祕密行動
2. 完全免殺方案二:
內存特徵碼修改+加花指令+加壓縮殼
3. 完全免殺方案三:
內存特徵碼修改+加壓縮殼+加殼的僞裝或多重加殼
4. 完全免殺方案四:
內存特徵碼修改+去頭變換入口點地址+壓縮殼
5. 完全免殺方案五:
內存特徵碼修改+修改各種殺毒軟件特徵碼+壓縮殼
6. 完全變態免殺方案六:
內存特徵碼修改+加花指令+去頭變換入口點+加 UPX 殼+用祕密行動打亂殼的頭
文件

. 解決加花指令後運行出錯問題

分析其原因:我們加花指令時,一般都找代碼段最後面的空白代碼地方也就是所謂的零區域,然後把我們準備好的花指令填進去,然後一個跳轉跳到入口點。但是我們木馬的體積比較大,從入口點到最後面零區域的間隔比較遠,所以從低部跳到頭部由於間隔較遠就非常容易出錯。

新研究的免殺方法完美的解決了該問題:我把它取名爲:中間過渡跳轉法

實例演示:中間過渡跳轉法來修改灰鴿子 V1.22 版或 VIP2.0 版。

中間過渡中轉法實現原理:首先我們在代碼段的中間位置 , 備份部分代碼 , 然後把我們要添加的花指令寫進去 , 寫完後 , 再跳到零區域 , 在這個零區域填入剛纔我們備份好的代碼 . 填完後又要跳回填入花指令的生面 . 總之一句話 : 把花指令填在代碼中間 , 被花指令覆蓋的代碼移到零區域去執行 , 然後又要跳回來 . 最後把入口點改成花指令的首地址 . 這樣就算完事了。

該新的免殺技術優點 : 以前的花指令只能填到零區域 , 也就是說入口點一般都比較後面 , 所以有時會被卡巴查殺 , 但有了這種新方法後 , 程序入口點就變的非常靈活 , 可以定位在代碼段的任何位置 , 每定位一個新的入口點就是一種新的免殺方案 . 而且這種方法對付卡巴也很有效 . 把入口點放到代碼段的中間 , 是殺毒軟件萬萬想不到的 , 所以免殺效果是最好的 . 同時他解決了由於跳轉太遠使程序無法運行的缺點。

push ebp
nop
nop
mov ebp,esp
inc ecx
nop
push edx
nop
nop
pop edx
nop
pop ebp
inc ecx
loop  任意地址
nop
nop
———————————————
nop
nop
jmp  下一個 jmp 的地址      / 在附近隨意跳
nop
jmp  下一個 jmp 的地址      / 在附近隨意跳
nop
jmp  下一個 jmp 的地址      / 在附近隨意跳
jmp  入口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章