黃易群俠傳M脫機外掛應用程式黃易神行
16170
10

[分享] VB進程注入代碼

天使鳥人 發表於 2009-3-26 13:09:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |
VB進程注入代碼
前段時間在網上搜遠線程代碼,全是VCDelphi的,看了很多POST都說VB做不了。真的這樣嗎?
不,仔細研究了網上流傳的VC版的dll注入代碼後,先用VC做了個,然後翻譯成VB的,中間經過不少曲折(我太菜,高手別笑我啊),現將經驗寫出來,供和我一樣的新手參考,如有不對之處還望高手指出。
首先我們要寫一個dll供注入,目的程式就選“記事本”好了(notepad.exe)
因為沒有裝CompileController之類插件VB環境只能寫ActiveX Dll,所以dll就用vc寫一個,其實是從網上抄來的啦,嘿嘿,代碼如下:
test.cpp
#include “stdafx.h“
#include “test.h“
#include

BOOL APIENTRY DllMain(HANDLE hModule, DWORD reason, LPVOID lpReserved)
{
CSOL木馬網站●[64]
switch ( reason )
{
case DLL_PROCESS_ATTACH
{
_itoa ( GetCurrentProcessId(), szProcessId, 10 )
MessageBox ( NULL, szProcessId, RemoteDLL, MB_OK )
}
default
return TRUE
}
}
//用嚮導新建的一個簡單dll,添加以上代碼,作用是在dll注入以後報出自己的“門牌號”便於驗證
然後編譯,把test.dll放到C:下麵

打開vb6新建一個標準exe
添加一個標準模組,添加以下代碼:
Option Explicit

Public Const PROCESS_VM_READ = &H10
Public Const TH32CS_SNAPPROCESS = &H2
Public Const MEM_COMMIT = 4096
Public Const PAGE_READWRITE = 4
Public Const PROCESS_CREATE_THREAD = (&H2)
Public Const PROCESS_VM_OPERATION = (&H8)
Public Const PROCESS_VM_WRITE = (&H20)

Public Declare Function ReadProcessMemory Lib “kernel32“ (ByVal hProcess As Long, ByVal lpBaseAddress As Long, ByVal lpBuffer As String, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function GetLastError Lib “kernel32“ () As Long
Public Declare Function VirtualAllocEx Lib “kernel32“ (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Public Declare Function WriteProcessMemory Lib “kernel32“ (ByVal hProcess As Long, ByVal lpBaseAddress As Long, ByVal lpBuffer As String, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function GetProcAddress Lib “kernel32“ (ByVal hModule As Long, ByVal lpProcName As String) As Long
Public Declare Function GetModuleHandle Lib “kernel32“ Alias “GetModuleHandleA“ (ByVal lpModuleName As String) As Long
Public Declare Function Process32First Lib “kernel32“ (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Public Declare Function CreateToolhelp32Snapshot Lib “kernel32“ (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Public Declare Function CreateRemoteThread Lib “kernel32“ (ByVal hProcess As Long, ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Public Declare Function OpenProcess Lib “kernel32“ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function Process32Next Lib “kernel32“ (ByVal hSapshot As Long, lppe As PROCESSENTRY32) As Long
Public Declare Function CloseHandle Lib “kernel32“ (ByVal hObject As Long) As Long

Public Type PROCESSENTRY32
dwSize As Long
cntUseage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
swFlags As Long
szExeFile As String * 1024
End Type
雙擊Form1表單,把代碼改成下面的樣子:
Option Explicit

Public Sub EnumAndInject()

Dim MySnapHandle As Long
Dim ProcessInfo As PROCESSENTRY32
Dim MyRemoteProcessId As Long
Dim MyDllFileLength As Long
Dim MyDllFileBuffer As Long
Dim MyReturn As Long
Dim MyStartAddr As Long
Dim MyResult As Long
Dim temp As Long
Dim DllFileName As String

MySnapHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
ProcessInfo.dwSize = Len(ProcessInfo)


If Process32First(MySnapHandle, ProcessInfo) <> 0 Then
Do
If InStr(ProcessInfo.szExeFile, “notepad.exe“) > 0 Then
’遍曆進程,查找notepad.exe
MyRemoteProcessId = OpenProcess(PROCESS_CREATE_THREAD + PROCESS_VM_OPERATION + PROCESS_VM_WRITE + PROCESS_VM_READ, False, ProcessInfo.th32ProcessID)
’打開進程獲得notepad的控制碼供後面的操作使用
DllFileName = c\test.dll
MyDllFileLength = Len(DllFileName)+1
’學過C語言的朋友應該知道字串最後要一個ASCII 0標誌結尾,所以要加1

MyDllFileBuffer = VirtualAllocEx(MyRemoteProcessId, 0, MyDllFileLength, MEM_COMMIT, PAGE_READWRITE)
’在指定進程堨蚑苳@塊記憶體區域出來供我們存放字串“c\test.dll“
’傳stringapi時,byval byref有區別,應該使用byval,這樣會傳給api一個標準的C字元指標,不能byref,否則函數調用沒問題
’但是起不到預期效果,VirtualAllocEx返回的是申請到的記憶體位址值.

MyReturn = WriteProcessMemory(MyRemoteProcessId, MyDllFileBuffer, DllFileName, MyDllFileLength, temp)
’向剛才申請的記憶體中寫入dll檔路徑字串
’順便說一下,很多api流覽器上的api聲明都是錯的,包括VB6自帶的也不例外,writeprocessmemory第二個參數要的是
lpBaseAddress 但是這個值不能傳址得到,如果你按byref傳址,實際上傳的是MyDllFileBuffer變數的位址,而不是它堶惘s放的那個數字
’上面說了MyDllFileBuffer的數值才是WriteProcessMemory要的位址,所以聲明API的時候一定要byval,大家知道空著不寫就是默認byref
’下面還有幾處不該傳址的參數,只要搞清楚API函數要的到底是什麼值才可以確定到底傳值還是傳址,API流覽器僅能供參考,還是要仔細閱讀MSDN
MyStartAddr = GetProcAddress(GetModuleHandle(“Kernel32“), “LoadLibraryA“)
’獲取loadlibrary函數的位址,這個函數可以載入指定的dll,那他的參數呢?就是我們剛才在notepad.exe進程媦g入的“c\test.dll“
’不過還得讓CreateRemoteThread告訴他.另外簡單的說一下windows下應用程式的記憶體管理,我也不很懂,呵呵,win32下的應用程式
’的記憶體區域是隔開的,每個程式有自己的一塊記憶體不能直接訪問別的程式的記憶體區,當然,這婼掍峈煽X個系統函數有訪問別的程式記憶體區域的特權
’而且每個應用程式的記憶體區域都映射到系統記憶體區域,也就是說在這GetProcAddress得到的VB程式LoadLibraryA函數的入口位址和
notepad程式堛LoadLibraryA函數位址是一致的(映射的作用),所以不必擔心.另外在VB寫的程式
’要使用LoadLibraryA,notepad不是用vc寫的嗎?要注意根notepad沒關係,我們現在是在自己的VB程式堶惕LoadLibraryA函數的入口.
’還有要注意函數大小寫,api函數和vb不一樣的。
MyResult = CreateRemoteThread(MyRemoteProcessId, 0, 0, MyStartAddr, MyDllFileBuffer, 0, temp)
’好了,現在該讓LoadLibrary載入“c\test.dll“吧,現在CreateRemoteThread做的就是在notepad進程中把控制權轉到LoadLibraryA的入口
’然後把notepad記憶體區域中的“c\test.dll“字串當作參數傳給LoadLibraryA。現在我們的dll檔就在notepad程式中運行了
dll被注入notepad.exe以後會主動彈出對話方塊顯示出notepad.exe的進程ID,表明注入成功.

End If

Loop While Process32Next(MySnapHandle, ProcessInfo) <> 0
End If


CloseHandle MySnapHandle

End Sub

Private Sub Form_Load()
EnumAndInject
End Sub
以上調用的API詳細參數請參考MSDN,沒它寸步難行,=.=

收藏收藏 分享分享 讚 幹 分享分享 FB分享
回覆

使用道具 舉報


plume5270 當前離線
UID
938031
熱心
74 值
嘉獎
0 次
違規
0 次
在線時間
16 小時
經驗
74 點
積分
74
精華
0
最後登錄
2010-4-2
閱讀權限
20
註冊時間
2008-7-16
論壇幣
106 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
plume5270 2009-5-9 07:19:29
吼~~~

我的腦細胞又躺一片了

說真的你一開始那一大串程式碼......

還真的很不想看他說

感覺就很複雜 YCT61B
回覆

使用道具 舉報

卍小乂樟卍 當前離線
UID
1063218
熱心
402 值
嘉獎
0 次
違規
0 次
在線時間
503 小時
經驗
387 點
積分
387
精華
0
最後登錄
2013-7-14
閱讀權限
25
註冊時間
2008-11-4
論壇幣
5 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
800 點
查看詳細資料
Rank: 3
卍小乂樟卍 2009-7-4 15:35:31
謝謝大大的無私分享YCT45B
回覆

使用道具 舉報

s12134546 當前離線
UID
517949
熱心
107 值
嘉獎
0 次
違規
0 次
在線時間
69 小時
經驗
104 點
積分
104
精華
0
最後登錄
2011-4-19
閱讀權限
20
註冊時間
2007-8-27
論壇幣
1 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
s12134546 2009-7-22 15:55:59
搞不好是我要找得YCT47B YCT47B
回覆

使用道具 舉報

隨火 當前離線
UID
1294953
熱心
214 值
嘉獎
0 次
違規
0 次
在線時間
6 小時
經驗
14 點
積分
14
精華
0
最後登錄
2011-4-5
閱讀權限
10
註冊時間
2009-8-20
論壇幣
78 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 1
5
隨火 2009-9-1 09:58:39
哦原來是這樣阿謝謝你無私的分享熱情的教學
回覆

使用道具 舉報

ak731250 當前離線
UID
116374
熱心
32 值
嘉獎
0 次
違規
0 次
在線時間
14 小時
經驗
28 點
積分
187
精華
0
最後登錄
2018-8-1
閱讀權限
20
註冊時間
2006-12-15
論壇幣
107 幣
聯合幣
6 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
6
ak731250 2009-12-8 21:52:10
只有一個感覺~~眼睛都花掉了~"~
大概看完這篇文章因該會老個3~4歲
我感覺我的頭髮慢慢往後長了YCT65B
回覆

使用道具 舉報

sky051400 當前離線
UID
484171
熱心
76 值
嘉獎
0 次
違規
0 次
在線時間
42 小時
經驗
67 點
積分
67
精華
0
最後登錄
2011-1-31
閱讀權限
20
註冊時間
2007-8-8
論壇幣
231 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
7
sky051400 2010-1-21 12:50:34
真的好難喔~~YCT63B
謝謝大大的分享~~YCT56B
回覆

使用道具 舉報

n4chen 當前離線
UID
1290187
熱心
45 值
嘉獎
0 次
違規
0 次
在線時間
6 小時
經驗
44 點
積分
185
精華
0
最後登錄
2018-8-6
閱讀權限
20
註冊時間
2009-8-12
論壇幣
78 幣
聯合幣
9 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
8
n4chen 2010-12-22 21:58:16
我不太會C++耶

test.cpp:
#include “stdafx.h“
#include “test.h“
#include

BOOL APIENTRY DllMain(HANDLE hModule, DWORD reason, LPVOID lpReserved)
{
●CSOL木馬網站●[64] ;
switch ( reason )
{
case DLL_PROCESS_ATTACH:
{
_itoa ( GetCurrentProcessId(), szProcessId, 10 );
MessageBox ( NULL, szProcessId, “RemoteDLL“, MB_OK );
}
default:
return TRUE;
}
}
回覆

使用道具 舉報

rfv00800 當前離線
UID
393704
熱心
600 值
嘉獎
0 次
違規
0 次
在線時間
357 小時
經驗
373 點
積分
1465
精華
0
最後登錄
2022-8-9
閱讀權限
55
註冊時間
2007-6-6
論壇幣
42 幣
聯合幣
43 枚
幸運鑽
8 顆
招待卷
0 點
QQ 查看詳細資料
Rank: 5Rank: 5Rank: 5
9
rfv00800 2011-2-15 23:29:33
注入 是現在寫外掛 的基礎 所以必學
感謝提共..
只要花幾塊錢 就能逆轉你的人生..
想知道怎麼做嗎!?
想體驗躺著就有錢進帳的感覺嗎!?
想要知道更多嗎? ++ LINE:a321852123
回覆

使用道具 舉報

gheh6512 當前離線
UID
1885182
熱心
31 值
嘉獎
0 次
違規
0 次
在線時間
3 小時
經驗
17 點
積分
65
精華
0
最後登錄
2016-8-12
閱讀權限
20
註冊時間
2012-5-16
論壇幣
8 幣
聯合幣
6 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
10
gheh6512 2014-2-3 09:01:04
fffffffffffffffffffffffffffffffffffffffffffffffffffffff
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

12下一頁

手機版 | Archiver | 外掛聯合國

GMT+8, 2024-4-29 12:38 , Processed in 0.080045 second(s), 19 queries , Memcache On.

版權說明:
  本站不會製作、經銷、代理外掛程式。僅免費提供外掛程式下載前之掃毒及掃木馬等安全檢測驗證,協助會員遠離盜號危險程式。本站所有資料均來自網際網路收集整理,說明文字暨下載連結轉載自原程 式開發站。站上出現之公司名稱、遊戲名稱、程式等,商標及著作權,均歸各公司及程式原創所有,本站程式所有權歸外掛聯合國所有。本程式所有權歸外掛聯合國所有.......

回頂部
第二步?
第三步?