Господа кодеры дайте плиз пример. суть траблы Есть прога, под протом, при запуске загружаются длл. Нужно - запускается что то типа трейнера - разово поправить код. - в дальнейшем при запуске трейнера внедрить длл с обработкой. поделитесь инфой пжл. спс ЗЫ Рихтера читал там про апи функции. а нужна правка экспорта длл в памяти другого процесса. ЗЫЫ а в чем разница между апи функциями и функциями в подгружаемых длл? кроме привилегий?
Хм, есть прога, под фимой. запускаю ее, запускаю другую, вторая правит несколько байт в длл первой. нужна статья с примером.
tiranosaur разница тут в том что в первом случае длл грузятся по фиксированому адресу вбитому в PE хедере (ImageBase) а во втором варианте длл-ку подгружаем мы сами потому она оказывается не по тем адресам и нам приходится вручную править reloc-и.. но еще небольшая разница в том что если ты первый раз грузишь длл в память то тебе там ничего непонятно и править релоки приходится загрузчику. а чтобы поменять пару байт в чужой длл ничего не требуется особого, практически оно выглядит так mov byte ptr [PathAddr1], BYTE1 mov byte ptr [PathAddr2], BYTE2 главное быть в адресном пространстве нужного процесса и чтобы память была разрешена на запись.
ASMatic Как получить доступ к памяти? не собираюсь пока подгружать длл. желательно пример на с++ или асме. спасибо[ b]ASMatic[/b]
Существует для решения этой проблемы мегафункция WriteProcessMemory http://msdn.microsoft.com/en-us/library/windows/desktop/ms681674%28v=vs.85%29.aspx. Вот простейший исходник инжекта http://tuts4you.com/download.php?view.2140.
(((( написал не пашет. подскажите пжл где не прав в говнокоде??? #include "stdafx.h" #include <windows.h> #include "iostream" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { DWORD processID; DWORD address = 0x01002394; int value=0; //DWORD lpflOldProtect; HWND gameHwnd = FindWindowA( NULL, "Сапер" ); GetWindowThreadProcessId( gameHwnd, &processID ); HANDLE gameProcess; gameProcess = OpenProcess( PROCESS_ALL_ACCESS, false, processID ); ReadProcessMemory(gameProcess, (void*)address, &value, 1, NULL); cout << value; cin.get(); return 0; }
В оле call TranslateMessage 01002394 |. FF15 4C110001 |CALL DWORD PTR DS:[<&USER32.TranslateMe>; \TranslateMessage
tiranosaur И в чем проблема? У меня нормально ваш исходник работает. Выдает 255. Для 2395 - 21 И т.д. А вам советую олли применить по назначению - посмотреть, что у вас не так. Или хотя бы поставить анализ кодов возврата. Правда единственно, где может не сработать - это поиск окна.
tiranosaur Так пора бы уже знать, что многое на 7-ке по-другому пишется. И не пытатся там запустить то, что на ХП работало.