將二進制文件加入VC資源後釋放執行


    標題不知道這麼說好不好,感覺很亂。

    我以前就很納悶,爲什麼我一個木馬的客戶端,能配置好各種選項以後生成一個服務端。一個exe文件怎麼生出另一個exe文件?

    一般的木馬生成、木馬釋放都使用的這個方法,dll也可以加到資源中,這樣我們的程序就可以免去包含很多亂七八糟的二進制文件,一個exe就夠了,執行的時候再釋放。

    其實原理很簡單,把二進制文件導入到資源中。我們就以vs2010爲例:

    0x01    在VC的資源視圖中選擇添加資源 - 導入,選擇你要包含的exe

    001.jpg


    0x02    包含以後,會看到你選擇的文件已經以二進制的形式展現在你面前:

    002.jpg


    0x03    來到代碼編輯區,我們在需要使用這個exe文件的時候,從資源裏拿出這段二進制代碼,寫入內存或一個磁盤文件就行了。首先定位我們的資源文件,其中IDR_RCEXE即爲資源文件的ID:

HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCEA(IDR_RCEXE), TEXT("RCEXE"));
    0x04    獲得資源文件大小,這個大小之後我們如果要提取出來會用到的:
DWORD dwSize = SizeofResource(NULL, hRsrc); 
    0x05    加載資源,使用之前獲得的資源文件句柄hRsrc:
HGLOBAL hGlobal = LoadResource(NULL, hRsrc); 
    0x06    在內存中鎖定資源,其返回值即爲一個指向資源第一個字節的指針:
LPVOID pBuffer = LockResource(hGlobal); 
    0x07    已經獲得了指針了,再怎麼做就看你自己的了。比如我這裏就是簡單地將這個exe文件釋放到硬盤的臨時目錄下 C:\Users\Phtih0n\AppData\Local\Temp,其中dwSize就是之前獲得的資源文件大小:
FILE* fp = fopen("C:\Users\Phtih0n\AppData\Local\Temp\tmp100.exe", "wb");
		if (fp != NULL)
		{
			fwrite(pBuffer, sizeof(char), dwSize, fp)
			fclose(fp);
		}
    這樣,下次就能直接調用C:\Users\Phtih0n\AppData\Local\Temp\tmp100.exe了。

    如果是dll,也是一樣的,釋放出來以後就能LoadLibrary調用它了。


    0x08    總結

    其實這一套過程和代碼基本上就是固定的,獲得資源句柄 - 獲得資源文件大小 - 加載資源文件 - 鎖定資源並獲得其指針。

    以後寫代碼的時候就直接複製這一端,改一下就能爲己用。


轉自:https://www.leavesongs.com/C/vc-resource-exe.html

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