Тема: AHK: Передать структуру
Здравствуйте! Пишу свой инжектор на ahk. Т.е. для этого нужно отправить структуру в dll файл. На C++ получилось заинжектить, также все работает в Autoit. Переношу на ahk, и не инжектит. Dll'ки и примеры инжекта в исходниках ниже.
global File := "test_.dll"
hModule := DllCall("LoadLibrary", "Str", "gh_injector.dll")
funcA := DllCall("GetProcAddress","Ptr", hModule, "Astr","InjectA")
msgbox % funcA
StructLen := 12 + StrLen(File) + 1
VarSetCapacity(ParamStruct, StructLen, 0)
INJ_ERASE_HEADER := 0x0001
INJ_SHIFT_MODULE := 0x0008
INJ_UNLINK_FROM_PEB := 0x0004
uFlags := INJ_ERASE_HEADER | INJ_SHIFT_MODULE | INJ_UNLINK_FROM_PEB
NumPut(2, ParamStruct, 0, "Uint") ; 2 - метод инжекта ManualMap
NumPut(0, ParamStruct, 4, "Uint") ; 0 - NtCreateThreadEx
NumPut(uFlags, ParamStruct, 8, "UInt") ; на ++ инжектится без флагов
NumPut(6304, ParamStruct, 12, "Uint") ; id куда инжектить
StrPut(File, &ParamStruct+4)
msgbox % StrGet(&ParamStruct+4, "cp0")
Ptr := A_PtrSize ? "Ptr" : "UInt"
DllCall(funcA, Ptr, &ParamStruct)
StrPutt(Str, @) {
Return DllCall("RtlMoveMemory", UInt,@, UInt,&Str, UInt,StrLen(Str))
}
StrGett(@) {
Return DllCall("MulDiv", int,@, int,1, int,1, "Str")
}
P.S. Для теста можно использовать файл test.exe, который находится в исходниках. Подскажите, как нужно изменить код, чтобы заинжектилось. Спасибо!