windows黑客編程系列(二):DLL延遲加載和資源釋放

windows黑客編程系列

對VS及windows編程太生硬了,每一步操作都得找好久。

資源釋放

病毒木馬之所以會廣泛使用資源釋放技術,是因爲它可以使程序變得更簡潔。

  • 如果程序需要額外加載一些第三方DLL文件,文本文件,圖片文件,或者其他的音視頻文件等,可以把它們作爲資源插入到程序裏。
  • 等待程序運行後,再把它們釋放至本地。

這樣做的好處是編譯出來的程序只有一個exe文件,而不需要附帶其他文件,因而使程序變得很簡潔,降低了被發現的風險。

資源插入

環境:VS2019

新建控制檯程序即可。

  1. 右鍵資源文件->添加->資源
  2. 選擇自定義,輸入你想填寫的資源類型,我填的是MYTYPES。
  3. 選擇MYTEPES類型,點擊導入
  4. 然後將想插入的文件插入進來。
  5. 插入完成後,我們查看資源文件是否插入成功。視圖->其他窗口->資源視圖

進行資源提取

// ConsoleApplication1.cpp : 此文件包含 "main" 函數。程序執行將在此處開始並結束。
//
#undef UNICODE
#include <Windows.h>
#include <stdio.h>
#include "resource.h"


// 提取資源
BOOL FreeMyResourse(UINT uiResouceName, char *lpszResourceType, char* lpszSaveFileName)
{
	HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(uiResouceName), lpszResourceType);
	if (hRsrc == NULL)
	{
		printf("can't find the resource!\n");
		return FALSE;
	}
	DWORD dwSize = SizeofResource(NULL, hRsrc);
	if (dwSize <= 0)
	{
		printf("the resource's size is error!\n");
		return FALSE;
	}
	HGLOBAL hGlobal = LoadResource(NULL, hRsrc);
	if(hGlobal == NULL)
	{
		printf("load resource error!\n");
		return FALSE;
	}
	LPVOID lpVoid = LockResource(hGlobal);
	if (lpVoid == NULL)
	{
		printf("lock resource error!\n");
		return FALSE;
	}
	FILE* fp = NULL;
	fopen_s(&fp, lpszSaveFileName, "wb+");
	if (fp == NULL)
	{
		printf("open file error!\n");
		return FALSE;
	}
	fwrite(lpVoid, sizeof(char), dwSize, fp);
	fclose(fp);
	return TRUE;
}

int main()
{
	char lpszResourceType[20] = "MYTYPES";
	char szSaveFileName[20] = "555.txt";
	BOOL flag = FreeMyResourse(IDR_MYTYPES2, lpszResourceType, szSaveFileName);
	if (flag == TRUE)
	{
		printf("the resource is free!\n");
	}
	return 0;
}

可以看到555.txt已經提取成功了。

期間遇到的小問題

  1. “char *” 類型的實參與 “LPCWSTR” 類型的形參不兼容
  2. 未定義標識符 “IDR_MYTYPES2”

第一個問題:

#undef UNICODE

在頭文件之前加入此行即可。

第二個問題:

#include "resource.h"

該標識符在上文中插入資源的最後部分展示過了,但程序出現未定義該標識符問題,原因爲沒有引入resource.h的頭文件。

DLL延遲加載

在開發程序的時候,通常會使用第三方庫。但是並不是所有的第三方庫都會提供靜態文件,大多數會提供DLL文件,這樣,程序需要相應的DLL文件才能加載啓動。

DLL延遲加載技術是一種使用延遲加載方式編譯鏈接可執行文件。這樣可執行程序就可以先加載執行,所依賴的DLL在正式調用時再加載進來。

該技術可以跟資源釋放技術結合使用,即將DLL文件加載入exe文件的資源節中,然後通過釋放資源+DLL延遲加載來減小被發現的概率,只需一個exe文件,不需附加額外的DLL文件,也不擔心程序會丟失DLL文件。

如何進行DLL文件的延遲加載

  • 右鍵項目->屬性->鏈接器->輸入->延遲加載的DLL

  • 將需要延遲加載的DLL文件輸入點擊確定即可
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章