
DLL sideloading/proxying with Nim!
このリポジトリを使用すると、サイドローディング/プロキシローディングに利用できる Nim DLL を簡単に生成できます。 DLL サイドローディングに詳しくない場合は、こちらのブログ記事をご覧ください。
プロキシしたい正規の DLL(または複数の DLL)をこのリポジトリの build ディレクトリに置き、make を実行してください。
これにより、out ディレクトリに2つの .dll が生成されます。
サイドローディングが成功すると、メッセージボックスのポップアップと/またはデスクトップへのファイル書き込みが確認できるはずです。
実際にペイロードを「兵器化」するには、OffensiveNim リポジトリを見て、アイデアやそのまま使えるコードスニペットを参考にしてください :)。
dllproxy.nim は、ペイロードを実行し、正規の関数呼び出しを元の DLL にプロキシするプロキシ DLL です。gen_def.py は元の DLL のエクスポートテーブルを解析し、モジュール定義 (.def) ファイルを生成します。その後、コンパイル時にリンカーに .def ファイルが渡され、正規の関数呼び出しがプロキシされます。
NimMain を隠すこのMicrosoft の記事を参照してください。
この .def ファイルの最後の行に注目してください:
EXPORTS
GetFileVersionInfoA=ZCnerzNI.GetFileVersionInfoA @1
GetFileVersionInfoByHandle=ZCnerzNI.GetFileVersionInfoByHandle @2
GetFileVersionInfoExA=ZCnerzNI.GetFileVersionInfoExA @3
GetFileVersionInfoExW=ZCnerzNI.GetFileVersionInfoExW @4
GetFileVersionInfoSizeA=ZCnerzNI.GetFileVersionInfoSizeA @5
GetFileVersionInfoSizeExA=ZCnerzNI.GetFileVersionInfoSizeExA @6
GetFileVersionInfoSizeExW=ZCnerzNI.GetFileVersionInfoSizeExW @7
GetFileVersionInfoSizeW=ZCnerzNI.GetFileVersionInfoSizeW @8
GetFileVersionInfoW=ZCnerzNI.GetFileVersionInfoW @9
VerFindFileA=ZCnerzNI.VerFindFileA @10
VerFindFileW=ZCnerzNI.VerFindFileW @11
VerInstallFileA=ZCnerzNI.VerInstallFileA @12
VerInstallFileW=ZCnerzNI.VerInstallFileW @13
VerLanguageNameA=ZCnerzNI.VerLanguageNameA @14
VerLanguageNameW=ZCnerzNI.VerLanguageNameW @15
VerQueryValueA=ZCnerzNI.VerQueryValueA @16
VerQueryValueW=ZCnerzNI.VerQueryValueW @17
NimMain @19 NONAME PRIVATE
この最後の行は、リンカーに NimMain 関数の名前を削除するよう指示します。上記の .def ファイルをリンカーに渡して DLL をコンパイルすると、.dll のエクスポートテーブルを見たときに次のエントリが得られます:
