Cập nhật
Tôi đã thấy rằng ForceBindIp trên thực tế đang truyền tham số cho các tệp thực thi được gọi. Nó chỉ bỏ qua tham số đầu tiên . Vì vậy, tôi đã sửa đổi tập lệnh của mình để sử dụng ForceBindIp.exe
thay vì trình tạo tùy chỉnh và bây giờ có vẻ như tất cả các vấn đề với injectory
ngoại lệ đã biến mất và mọi thứ đều hoạt động.
Dưới đây là các bước và BindIp.cmd
kịch bản sửa đổi :
Cài đặt ForceBindIp như bình thường
Đặt BindIp.cmd
bất cứ nơi nào trên ổ đĩa của bạn (ví dụ C:\BindIp\BindIp.cmd
)
BindIp.cmd
kịch bản:
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
Sau đó làm theo các bước 2-6 từ bên dưới.
Giới thiệu
ForceBindIp không thể tự động tiêm BindIp.dll
vào các tiến trình con và không truyền tham số cho các tệp thực thi được gọi . Nhưng tôi đã có thể phá vỡ điều này bằng cách sử dụng Tùy chọn thực thi tệp hình ảnh trong sổ đăng ký , tập lệnh bó và trình tiêm dll của bên thứ ba . Chi tiết bên dưới.
Học thuyết
Để sử dụng BindIp.dll
mà không cần ForceBindIp.exe
chúng tôi cần tìm hiểu cách họ giao tiếp ( ForceBindIp.exe
phải truyền địa chỉ IP cho dll bằng cách nào đó).
Tôi đã sử dụng IDA miễn phí và thấy rằng ForceBindIp.exe
tạo biến môi trường với tên FORCEDIP
chứa địa chỉ IP và BindIp.dll
đọc địa chỉ IP từ biến này khi nó được tiêm và thực thi trong quy trình đích.
Để phát hiện khởi chạy ứng dụng đích, chúng ta có thể thêm một Debugger
khóa trong Tùy chọn thực thi tệp hình ảnh trong sổ đăng ký để thực thi này:
Kernel32! CreatProcess khi được gọi mà không có cờ tạo DEBUG_PROCESS hoặc DEBUG_ONLY_THIS_PROCESS, kiểm tra sổ đăng ký để xem liệu IFEO đã được thiết lập trên tệp thực thi mà nó đang khởi chạy chưa. Nếu có, thì nó chỉ đơn giản là chuẩn bị đường dẫn trình gỡ lỗi đến tên thực thi, có hiệu quả để thực thi được khởi chạy theo trình gỡ lỗi.
"Trình gỡ lỗi" trong trường hợp của chúng tôi, sẽ là một tập lệnh bó, sẽ đặt FORCEDIP
biến và khởi chạy trình tiêm dll-kim phun. In phun sau đó sẽ bắt đầu quá trình, vượt qua các đối số dòng lệnh và tiêm BindIp.dll
.
Thực hành
Tạo thư mục ở đâu đó ( C:\BindIp
ví dụ) và đặt ba tệp đó vào đó:
BindIp.cmd
kịch bản:
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
- Tạo khóa đăng ký (ví dụ
LolClient.exe
) để thực thi mục tiêu trongHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
Thêm giá trị chuỗi vào khóa này:
- Tên:
Debugger
- Giá trị:
C:\BindIp\BindIp.cmd
Cấp Users
quyền đầy đủ cho khóa này (tập lệnh sẽ phải sửa đổi nó mỗi lần khởi chạy). Nó sẽ giống như thế này:
Đặt địa chỉ IP được yêu cầu trong BindIp.cmd
Lặp lại các bước 3 và 4 cho mỗi thực thi bạn muốn bind ( rad_user_kernel.exe
, LolLauncher.exe
, LolPatcher.exe
, vv).
Bây giờ, mỗi khi bạn khởi chạy thực thi có mục đăng ký tương ứng, BindIp.cmd
tập lệnh sẽ khởi chạy thay thế và liên kết chương trình này với địa chỉ IP mong muốn.
Phần kết luận
Tôi đã thử nghiệm điều này trên máy tính xách tay chạy Windows 8.1 x64 và có thể liên kết thành công các chương trình khác nhau ( AIMP 2 , BersIRC , Opera 12.4 ) với bộ điều hợp Ethernet hoặc WiFi bằng kỹ thuật này. Thật không may BindIp.dll
là 32 bit, vì vậy nó sẽ không hoạt động với các quy trình 64 bit.
LolClient.exe
không? LàLolClient.exe
mộtx86
hoặcx64
exe? Tôi đang chơi với người tiêm dll của bên thứ ba và có lẽ tôi có thể giúp bạn, nhưng tôi cần thêm thông tin.