Dll実行可能ファイルの解放
3650 ワード
Dllリリース実行可能ファイルは広く使用されています.木馬注入を実現する方法の1つは、dllをあるプロセスのアドレス空間にロードした後に木馬を解放することである.次の
以下の詳細な手順を紹介し、後者に参考を提供します.
解放する必要があるファイルは、まずdllにリソースとして格納する必要があります.そして、ファイルの読み取り、書き込み等が行われる.dllを作成する手順は説明しません.いいえ
私のブログ「windowsコアプログラミングシリーズ」を参考にdllについて話してください.http://blog.csdn.net/ithzhang/article/details/7021274または
は、vcを使用してdllを作成するWeb上の投稿を参照します.
Dllプロジェクトが完成したら、リソースを追加する必要があります.アセットビューの右クリックでアセットの追加--』をインポートします.次に、追加するファイルを選択します.例えばcalc.exe.を選択します.
リソースはEXEなどのタイプを指定します.リソースが追加されました.EXEリソースを展開します.次に、そのリソースのID、例えばID_EXE1.これは後で使います.
着きます.
まずDllMain関数に注目します.この関数は、dllがアプリケーションアドレス空間にロードされた後、プロセスアドレス空間からアンインストールされたときに呼び出されます.さらに
この関数も呼び出される場合があります.ul_reason_for_callは、この関数が呼び出された理由を識別します.私たちが注目しているのは
DLL_PROCESS_ATTACH.dllがプロセスアドレス空間にロードされるとDllMainが呼び出され、ul_reason_for_callが割り当てられています
DLL_PROCESS_ATTACH.ここではすべての動作を実行します.私の博文《windowsコアプログラミングシリーズ》はdllの高級技術について話します
http://blog.csdn.net/ithzhang/article/details/7051558
HINSTANCEhIns=GetModuleHandle("AudioEngine.dll");このdllのインスタンスハンドルは、この文で取得されます.
FindResourceは指定したアドレス空間内で検索します.解放するファイルをdllに格納するため、そのハンドルはhInsであるべきです.
exeの場合、最初のパラメータはデフォルトの現在のプロセスアドレス空間を省略できます.詳細は、「http://blog.csdn.net/ithzhang/article/details/7995102」を参照してください.
コードを見てください:
この例の最後のステップでは、CreateProcessを呼び出して実行可能ファイルを実行します.
dllにリソースを追加するのはよくあります.ダイアログボックス、ビットマップなどです.これはdllがexeファイルを解放する原理と似ています.
以下の詳細な手順を紹介し、後者に参考を提供します.
解放する必要があるファイルは、まずdllにリソースとして格納する必要があります.そして、ファイルの読み取り、書き込み等が行われる.dllを作成する手順は説明しません.いいえ
私のブログ「windowsコアプログラミングシリーズ」を参考にdllについて話してください.http://blog.csdn.net/ithzhang/article/details/7021274または
は、vcを使用してdllを作成するWeb上の投稿を参照します.
Dllプロジェクトが完成したら、リソースを追加する必要があります.アセットビューの右クリックでアセットの追加--』をインポートします.次に、追加するファイルを選択します.例えばcalc.exe.を選択します.
リソースはEXEなどのタイプを指定します.リソースが追加されました.EXEリソースを展開します.次に、そのリソースのID、例えばID_EXE1.これは後で使います.
着きます.
まずDllMain関数に注目します.この関数は、dllがアプリケーションアドレス空間にロードされた後、プロセスアドレス空間からアンインストールされたときに呼び出されます.さらに
この関数も呼び出される場合があります.ul_reason_for_callは、この関数が呼び出された理由を識別します.私たちが注目しているのは
DLL_PROCESS_ATTACH.dllがプロセスアドレス空間にロードされるとDllMainが呼び出され、ul_reason_for_callが割り当てられています
DLL_PROCESS_ATTACH.ここではすべての動作を実行します.私の博文《windowsコアプログラミングシリーズ》はdllの高級技術について話します
http://blog.csdn.net/ithzhang/article/details/7051558
HINSTANCEhIns=GetModuleHandle("AudioEngine.dll");このdllのインスタンスハンドルは、この文で取得されます.
FindResourceは指定したアドレス空間内で検索します.解放するファイルをdllに格納するため、そのハンドルはhInsであるべきです.
exeの場合、最初のパラメータはデフォルトの現在のプロセスアドレス空間を省略できます.詳細は、「http://blog.csdn.net/ithzhang/article/details/7995102」を参照してください.
コードを見てください:
case DLL_PROCESS_ATTACH:
{
HINSTANCE hIns=GetModuleHandle("AudioEngine.dll");
HRSRC hRsrc =::FindResource(hIns, MAKEINTRESOURCE(IDR_EXE1), "exe");//IDR_XXXXXX a.exe b.dll ID
if (NULL == hRsrc)
{
MessageBox(NULL,TEXT(" !!!"),TEXT(" !!"),MB_OK);
return FALSE;
}
DWORD dwSize = SizeofResource(hIns, hRsrc);
if (0 == dwSize)
{
MessageBox(NULL,TEXT(" !!!"),TEXT(" !!"),MB_OK);
return FALSE;
}
//
HGLOBAL gl = LoadResource(hIns, hRsrc);
if (NULL == gl)
{
MessageBox(NULL,TEXT(" !!!"),TEXT(" !!"),MB_OK);
return FALSE;
}
//
LPVOID lp = LockResource(gl);
if (NULL == lp)
{
MessageBox(NULL,TEXT(" !!!"),TEXT(" !!"),MB_OK);
return FALSE;
}
TCHAR filename[256]=TEXT("calc1111.exe");//
// CREATE_ALWAYS 。
STARTUPINFO si={0};
PROCESS_INFORMATION pi;
DWORD a;
HANDLE fp= CreateFile(filename ,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
if((fp==INVALID_HANDLE_VALUE))
{
MessageBox(NULL,TEXT(" !!!"),TEXT(" !!"),MB_OK);
return 0;
}
if (!WriteFile (fp,lp,dwSize,&a,NULL))
{
MessageBox(NULL,TEXT(" !!!"),TEXT(" !!"),MB_OK);
return false;
}
FreeResource (gl);//
CloseHandle (fp);//
bool ret=CreateProcess(NULL,filename,NULL,NULL,false,0,NULL,NULL,&si,&pi);
if(!ret)
{
int r=GetLastError();
char buff[256];
sprintf(buff," !! :%d",r);
MessageBox(NULL,buff,TEXT(" !!"),MB_OK);
return 0;
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
この例の最後のステップでは、CreateProcessを呼び出して実行可能ファイルを実行します.
dllにリソースを追加するのはよくあります.ダイアログボックス、ビットマップなどです.これはdllがexeファイルを解放する原理と似ています.