更新
ForceBindIpが実際に呼び出された実行可能ファイルにパラメーターを渡していることがわかりました。それはちょうど最初のパラメータを省略しています。そのためForceBindIp.exe
、カスタムインジェクターの代わりに使用するようにスクリプトを変更しましたが、injectory
例外の問題はすべてなくなり、すべてが機能するようになりました。
変更されたステップとBindIp.cmd
スクリプトは次のとおりです。
通常どおりForceBindIpをインストールします
BindIp.cmd
ドライブのどこにでも置く(例C:\BindIp\BindIp.cmd
)
BindIp.cmd
脚本:
setlocal
:: IP to bind to
set IP=192.168.128.85
:: Common variables
set RegIFEO=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\%~nx1
set Injector=ForceBindIp.exe
:: ForceBindIp swallows first parameter passed to target exe,
:: so we inject dummy parameter just before it
set AllParams=%*
set FirstParam=%1
call set TargetParams=%%AllParams:*%FirstParam%=%FirstParam% Dummy%%
:: Delete debugger for the target exe in registry,
:: or we'll end in an endless loop of the batch files
reg delete "%RegIFEO%%" /v Debugger /f
:: Start target exe via ForceBindIp
%Injector% %IP% %TargetParams%
:: Restore this script as debugger for the target exe in registry
reg add "%RegIFEO%" /v Debugger /t REG_SZ /d "%~dpnx0" /f
:: Debug, uncomment if needed
rem pause
endlocal
次に、以下の手順2〜6を実行します。
前書き
ForceBindIpはBindIp.dll
、子プロセスに自動的に挿入できず、呼び出された実行可能ファイルにパラメーターを渡しません。しかし、レジストリ、バッチスクリプト、およびサードパーティのdllインジェクターでイメージファイル実行オプションを使用することで、これを回避できました。詳細は以下です。
理論
使用BindIp.dll
せずForceBindIp.exe
に通信する方法を見つける必要があります(ForceBindIp.exe
IPアドレスを何らかの方法でdllに渡す必要があります)。
IDAを無料で使用して、IPアドレスを保持ForceBindIp.exe
する名前の環境変数を作成し、ターゲット変数を挿入して実行したときにこの変数からIP FORCEDIP
アドレスをBindIp.dll
読み取ることがわかりました。
ターゲットアプリケーションの起動を検出するDebugger
ために、この実行可能ファイルのレジストリのイメージファイル実行オプションにキーを追加できます。
Kernel32!CreateProcessは、DEBUG_PROCESSまたはDEBUG_ONLY_THIS_PROCESS作成フラグなしで呼び出された場合、レジストリをチェックして、起動する実行可能ファイルにIFEOが設定されているかどうかを確認します。「はい」の場合、デバッガーパスを実行可能ファイル名の前に追加するだけで、実行可能ファイルをデバッガーの下で効果的に起動できます。
私たちの場合は、「デバッガ」、設定するバッチスクリプトになりますFORCEDIP
変数と起動injectory DLLインジェクターを。その後、Injectoryはプロセスを開始し、コマンドライン引数を渡してinjectしBindIp.dll
ます。
練習
フォルダーを作成し(C:\BindIp
たとえば)、次の3つのファイルを入れます:
BindIp.cmd
脚本:
setlocal
:: IP to bind to. This env.var is used by BindIp.dll
set FORCEDIP=192.168.1.23
:: Common variables
set RegIFEO=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\%~nx1
set Injector=%~dp0injectory.x86.exe
set BindIpDll=%~dp0BindIp.dll
:: Extract target's parameters, if any
set AllParams=%*
set FirstParam=%1
call set TargetParams=%%AllParams:*%FirstParam% =%%
:: Delete debugger for the target exe in registry,
:: or we'll end in an endless loop of the batch files
reg delete "%RegIFEO%%" /v Debugger /f
:: Start target exe and inject BindIp.dll
if not [%2] == [] (
:: If there were parameters for target exe, pass them on
"%Injector%" --launch %1 --inject "%BindIpDll%" --args "%TargetParams%"
) else (
:: No parameters were specified
"%Injector%" --launch %1 --inject "%BindIpDll%"
)
:: Restore this script as debugger for the target exe in registry
reg add "%RegIFEO%" /v Debugger /t REG_SZ /d "%~dpnx0" /f
:: Debug, uncomment if needed
rem pause
endlocal
LolClient.exe
ターゲットの実行可能ファイルのレジストリキー(例)を作成しますHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
このキーに文字列値を追加します。
- 名前:
Debugger
- 値:
C:\BindIp\BindIp.cmd
グラントUsers
このキーの完全なアクセス権(スクリプトは、すべての起動時にそれを変更する必要があります)。次のようになります。
に必要なIPアドレスを設定します BindIp.cmd
繰り返します(バインドしたいすべての実行のために手順3と4 rad_user_kernel.exe
、LolLauncher.exe
、LolPatcher.exe
、など)。
現在、対応するレジストリエントリを持つ実行可能ファイルを起動するたびに、BindIp.cmd
代わりにスクリプトが起動し、このプログラムを目的のIPアドレスにバインドします。
結論
Windows 8.1 x64を実行しているラップトップでこれをテストし、この手法を使用してさまざまなプログラム(AIMP 2、BersIRC、Opera 12.4)をイーサネットまたはWiFiアダプターに正常にバインドできました。残念ながらBindIp.dll
32ビットなので、64ビットプロセスでは機能しません。
LolClient.exe
ますか?である か、exeファイルは?私はサードパーティのdllインジェクターをいじっています。多分私はあなたを助けることができますが、もっと情報が必要です。LolClient.exe
x86
x64