きっかけ
c言語でDLLInjectionの記事があったので、それを元にpythonで実行できるものを作ろうとした。
既にあった
こちらhttps://github.com/psychomario/pyinject
使ってみる
環境
windows7 pro service pack 1 (64bit)
python2.7
notepad(64bit)
gcc 4.8.3
dir dllInjection
dllinject.py//gitのからDLしたもの
use.py//下記で作成
spy.dll//後に説明
spy.dll
こちらの記事のものを流用
http://inaz2.hatenablog.com/entry/2015/08/08/223643
spy.c
# include <windows.h>
# pragma comment(lib, "user32")
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
char filename[MAX_PATH];
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
GetModuleFileName(NULL, filename, sizeof(filename));
MessageBox(NULL, filename, "Hello from", MB_SYSTEMMODAL);
break;
}
return TRUE;
}
このdllを作る。
gcc -c spy.c //spy.o
gcc -shared -o spy.dll spy.o //spy.dll
use.py
次にgitからDLしたdllinject.pyを使うためのコードを書く。(consoleでもいいレベル...)
use.py
import sys
import dllinject
pid = int(sys.argv[1])
proc=dllinject.Process(pid=pid)
proc.inject("C:\\Users\\'hoge'\\Desktop\\dllInjection\\spy.dll")
proc.terminate()
実行
>C:¥Windows¥notepad.exe
>tasklist
...
notepad.exe 1988 Console 1 9,384K
...
>python use.py 1988
注意点
DLLInjectionを成立させるためには、起動プロセスとDLLの種類が一致しないと成立しないです。
私の環境だとwow64+32bit dllでもだめでした。
http://furuya02.hatenablog.com/entry/20120114/1326484897
プロセス | DLLの種類 | 結果 |
---|---|---|
32bit | 32bit | ◯ |
32bit | 64bit | ERROR_BAD_EXE_FORMAT |
64bit | 32bit | ERROR_BAD_EXE_FORMAT |
64bit | 64bit | ◯ |