Нужно сделать чтоб exe запускался только от определенной программы (launcher) Над исходным exe уже кто-то поработал и внем есть места куда можно вставить код (entrypoint начинается с джампа который перепрыгивает кучу nop) Так вот как определить какой процесс запустил этот ехе Из него самого
"Нужно сделать чтоб exe запускался только от определенной программы" Я бы сделал так: затер бы адрес OEP в нужном экзешнике, а потм launcher'ом подправил бы в памяти на оригинальный.
mr_death Да я впринципе уж почти сделал через ToolHelpAPI - т.к. нужно чтоб это работало и в 98 и в XP, НО всетаки каков алгоритм пропачивания в памяти? Надо CreateProcess с CREATE_SUSPENDED, а потом как-то поучить доступ к памяти процесса и там править или как?
НО всетаки каков алгоритм пропачивания в памяти? Вот пример лоадера к одной из прог Здесь как раз и происходит процесс патчинга. Код (Text): .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib .data AppName db "Loader", 0 Proga db "yourproga.exe", 0 Error db "File yourproga.exe not found!", 0 buf1 DWORD 0Fh buf2 DWORD 084h buf3 DWORD 074h addr1 DWORD 431B0Bh addr1_1 DWORD 431B0Ch addr2 DWORD 431B15h addr2_2 DWORD 431B16h addr3 DWORD 431B1Fh addr3_3 DWORD 431B20h addr4 DWORD 431B29h addr4_4 DWORD 431B2Ah addr5 DWORD 431B51h addr6 DWORD 431BACh .data? bufr dw ? pInfo PROCESS_INFORMATION <> sInfo STARTUPINFO <> Count DWORD ? .code start: invoke CreateProcess, ADDR Proga, NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, ADDR sInfo, ADDR pInfo .IF eax == 0 invoke MessageBox, NULL, addr Error, addr AppName, MB_OK+MB_ICONERROR invoke ExitProcess, NULL .ENDIF .WHILE TRUE invoke ReadProcessMemory, pInfo.hProcess, addr1, addr bufr, 1, Count .IF eax != 0 .IF bufr != 00h invoke SuspendThread, addr pInfo.hThread ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« ««« invoke WriteProcessMemory, pInfo.hProcess, addr1, addr buf1, 1, Count invoke WriteProcessMemory, pInfo.hProcess, addr1_1, addr buf2, 1, Count invoke WriteProcessMemory, pInfo.hProcess, addr2, addr buf1, 1, Count invoke WriteProcessMemory, pInfo.hProcess, addr2_2, addr buf2, 1, Count invoke WriteProcessMemory, pInfo.hProcess, addr3, addr buf1, 1, Count invoke WriteProcessMemory, pInfo.hProcess, addr3_3, addr buf2, 1, Count invoke WriteProcessMemory, pInfo.hProcess, addr4, addr buf1, 1, Count invoke WriteProcessMemory, pInfo.hProcess, addr4_4, addr buf2, 1, Count invoke WriteProcessMemory, pInfo.hProcess, addr5, addr buf3, 1, Count invoke WriteProcessMemory, pInfo.hProcess, addr6, addr buf3, 1, Count ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« ««« invoke ResumeThread, addr pInfo.hThread invoke CloseHandle, pInfo.hThread invoke ExitProcess, NULL .ENDIF .ENDIF .ENDW end start