遠端注入小記

2021-07-23 04:51:07 字數 3545 閱讀 6681

原作者連線

提權方法

64位的一定要生成64的,網上說32和64記憶體隔開的。

//注入程式

#include "stdafx.h"

#include "remote injection.h"

#include "tlhelp32.h"

using

namespace

std;

extern

int listprocess();

extern

int enabledebugpriv(const wchar *);

int _tmain(int argc, tchar *argv, tchar *env)

//呼叫openprocess()獲得控制代碼

handle hremoteprocess;

if ((hremoteprocess = openprocess(process_all_access, false, dwremoteprocessid)) == null)

//在遠端程序中分配記憶體,準備拷入dll路徑字串

//取得當前dll路徑

char dllpath[260]; //windows路徑最大為

getcurrentdirectorya(260, dllpath); //獲取當前程序執行目錄

printf("proces***e directory is %s\n", dllpath);

strcat(dllpath, "\\..\\debug\\mydll.dll"); //鏈結到dll路徑

lpvoid premotedllpath = virtualallocex(hremoteprocess, null, strlen(dllpath) + 1, mem_commit, page_readwrite);

if (premotedllpath == null)

//向遠端程序空間中寫入dll路徑字串

printf("dllpath is %s\n", dllpath);

dword size;

if (writeprocessmemory(hremoteprocess, premotedllpath, dllpath, strlen(dllpath) + 1, &size) == null)

printf("writerrmoyrprocess size is %d\n\n", size);

//獲得遠端程序中loadlibrary()的位址

lpthread_start_routine ploadlibrary = (lpthread_start_routine)getprocaddress(getmodulehandle(text("kernel32.dll")), "loadlibrarya");

if (ploadlibrary == null)

else

//啟動遠端執行緒

dword dwthreadid;

handle hthread;

hthread = createremotethread(hremoteprocess, null, 0, ploadlibrary, premotedllpath, 0, &dwthreadid);

if (hthread == null)

else

//釋放分配記憶體

if (virtualfreeex(hremoteprocess, premotedllpath, 0, mem_release) == 0)

//釋放控制代碼

if (hthread != null) closehandle(hthread);

if (hremoteprocess != null) closehandle(hremoteprocess);

system("pause");

return0;}

int listprocess()

//建立單個程序快照結構體,初始化大小

processentry32 pe32;

pe32.dwsize = sizeof(processentry32); //務必提前初始化,否則預設的大小不一定滿足要求

//初始化緩衝區

wchar buff[1024] = ; //processentry32中的szexefile為wchar型別陣列,此處應一致,使用unicode碼

//列舉系統快照鍊錶中的第乙個程序專案

bool bprocess = process32first(hprocesssnap, &pe32);

while (bprocess)

closehandle(hprocesssnap);

return0;}

int enabledebugpriv(const wchar *name)

//獲得本地程序name所代表的許可權型別的區域性唯一id

if (!lookupprivilegevalue(null, name, &luid))

tp.privilegecount = 1; //許可權陣列中只有乙個「元素」

tp.privileges[0].attributes = se_privilege_enabled; //許可權操作

tp.privileges[0].luid = luid; //許可權型別

//調整程序許可權

if (!adjusttokenprivileges(htoken, 0, &tp, sizeof(token_privileges), null, null))

return

0;}

//dll

// mydll.cpp : 定義 dll 的初始化例程。

//#include

"stdafx.h"

#include

"mydll.h"

#ifdef _debug

#define

new debug_new

#endif

////todo: 如果此 dll 相對於 mfc dll 是動態鏈結的,

// 則從此 dll 匯出的任何調入

// mfc 的函式必須將 afx_manage_state 巨集新增到

// 該函式的最前面。

//// 例如:

//// extern "c" bool pascal export exportedfunction()

//

//// 此巨集先於任何 mfc 呼叫

// 出現在每個函式中十分重要。 這意味著

// 它必須作為函式中的第乙個語句

// 出現,甚至先於所有物件變數宣告,

// 這是因為它們的建構函式可能生成 mfc

// dll 呼叫。

//// 有關其他詳細資訊,

// 請參閱 mfc 技術說明 33 和 58。

//end_message_map()

void test(cstring text);

void test(cstring text)

注入系列 遠端執行緒注入

1.使用程序pid開啟程序,獲得控制代碼 2.使用程序控制代碼申請記憶體空間 3.把dll路徑寫入記憶體 4.建立遠端執行緒,呼叫loadlibrary 5.釋放收尾工作或者解除安裝dll 實現 bool cinjectdlg zwcreatethreadexinjectdll dword dwpr...

執行緒遠端注入

執行緒遠端注入的技術並不複雜,主要用到createremotethread這個api。難點有個地方,由於要注入其他程序的空間,因此,注入用的那個執行緒中的 必須使用和被注入程序的記憶體空間一致。換句話講,就是需要找到執行緒中使用的函式在遠端程序中的位址。明白這個,問題就沒有了。下面是乙個完整的執行緒...

遠端注入DLL

ool cinject injectdll char m path,dword m id 如果開啟程序成功,則在該程序中開闢記憶體空間 this m baseaddress virtualallocex m handle,null,1024,mem commit,page execute readw...