n0name А я уже целую картину представил, как потом надо будет еще ThreadHandle копировать и т.д. )) cc 0x87C - не похоже на адрес. Запости дамп RtlUserProcParams
n0name Дааааа.... Хорошо что не я сейчас эту программу пишу. Апшипки бы потом полгода отлавливал )) Где 2 байта, там и все 4
n0name: GetLastError возвращает ошибку 299 ("Запрос ReadProcessMemory или WriteProcessMemory был выполнен только частично.") Нет, описание UNICODE_STRING у меня вот какое: Код (Text): typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } UNICODE_STRING, *PUNICODE_STRING; Это правильное описание?
Короче вот мой код на Delphi. pbi - адрес PEB. Код (Text): if not ReadProcessMemory(hProc, Pointer(pbi[1] + $10), @pProcParams, 4, br) then goto err; if not ReadProcessMemory(hProc, Pointer(pProcParams + $38), @wImgNameLen, 2, br) then goto err; if not ReadProcessMemory(hProc, Pointer(pProcParams + $3C), @pImgName, 4, br) then goto err; result := GetMemory(wImgNameLen); if result = nil then goto err; if not ReadProcessMemory(hProc, Pointer(pImgName), result, wImgNameLen, br) then begin FreeMemory(result); result := nil; end;
Чё то до меня только доперло что можно и не через ReadProcessMemory, а напрямую =) Код (Text): function GetImagePath: Pointer; assembler; asm mov eax, fs: [18h] mov eax, [eax+30h] mov eax, [eax+10h] lea eax, [eax+38h] mov eax, [eax+4h] end;
gilg В смысле? Не совсем понял n0name Ну посмотрел я твой код, по сути у меня тоже самое, однако все равно не работает. Еще предложения будут?
RTL_USER_PROCESS_PARAMETERS is located at address 0x20000 (for all processes created by call WIN32 API CreateProcess).
n0name Хм, а разве в этом коде чтение идет из памяти именно создаваемого процесса? По-моему нет. fr0b-p Хе, что-то я не понял, каким образом это знание мне поможет . Ты имеешь в виду что считывать RTL_USER_PROCESS_PARAMETERS с адреса 0x20000? То бишь что-то типа этого? Код (Text): RTL_USER_PROCESS_PARAMETERS RtlUserProcParams; DWORD BytesCount; ReadProcessMemory(ProcessHandle, (PVOID) 0x20000, &RtlUserProcParams, sizeof(RTL_USER_PROCESS_PARAMETERS), &BytesCount); Или я что-то неправильно понимаю? =)
Урра, товарищи, заработало! Наконец-то... Всем огромное спасибо за помощь! fr0b-p А тебе особое спасибо . Именно твой пост решил мою проблему!