Делаю inject в процесс IE. Код уже большой и хз как его отлаживать. Влится всё время в разных местах и не всегда. Запись лога действий в файл уже не помогает OllyDebug как-то не выходит ибо не умею её пользовать. Подскажите как отлаживать такой код.
ну если ты не умеешь пользоваться отладчиком, то как ты хочешь отлаживать код? вообще, попробуй сделать так: открыть в ольке (да, отладчик знать надо) IE, потом своим софтом сделать внедрение. В начале своего кода можно даже поставить инт3. Если отладчик категорически не рассматривается, то только вести лог событий. Иначе, что еще ты ожидаешь услышать на свой вопрос?
Я все таки не пойму что за таинственные силы мешают использовать VS я так делаю, я там даже асма не вижу )
SPA Это как ? После завершения моего процесса из студии отлаживать его уже не получается. После приатачивания к процессу эксплора никакой символьной информации не видать. Вот код инджекта. Код (Text): #define BASEADR 0x13110000 bool WINAPI InjectAndRun(HANDLE HProcess, void* hook){ SetPrivilege("SeDebugPrivilege",true); HMODULE me=(HMODULE)BASEADR; VirtualFreeEx(HProcess,me,0,MEM_RELEASE); DWORD dwSize=((PIMAGE_OPTIONAL_HEADER)((LPVOID)((BYTE*)(me)+((PIMAGE_DOS_HEADER)(me))->e_lfanew+sizeof(DWORD)+sizeof(IMAGE_FILE_HEADER))))->SizeOfImage; char *pMem=(char *)VirtualAllocEx(HProcess,me,dwSize,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); if(pMem==NULL) return false; DWORD dwOld,dwNumBytes,i; MEMORY_BASIC_INFORMATION mbi; VirtualQueryEx(HProcess,pMem,&mbi,sizeof(MEMORY_BASIC_INFORMATION)); while(mbi.Protect!=PAGE_NOACCESS && mbi.RegionSize!=0){ if(!(mbi.Protect&PAGE_GUARD)){ for (i=0;i<mbi.RegionSize;i+=0x1000){ VirtualProtectEx(HProcess,pMem+i,0x1000,PAGE_EXECUTE_READWRITE,&dwOld); WriteProcessMemory(HProcess,pMem+i,pMem+i,0x1000,&dwNumBytes); } } pMem+=mbi.RegionSize; VirtualQueryEx(HProcess,pMem,&mbi,sizeof(MEMORY_BASIC_INFORMATION)); } DWORD dwRmtThdID; HANDLE hRmThd = CreateRemoteThread(HProcess,NULL,NULL,(LPTHREAD_START_ROUTINE)hook,(LPVOID)me,NULL,&dwRmtThdID); if (hRmThd==NULL) return false; SetPrivilege("SeDebugPrivilege",false); return true; }
Тоесть релоки вы не используете. Если этот адрес будет занят проекцией, то этой функцией она не будет освобождена. Предложу настроить загрузчик, чтобы он подгрузил модуль корректно с релоками из памяти, затем записать в процесс этот код с образом модуля и выполнить его там.
Ты не поверишь. Отладчик и третье прерывание - это все, что надо для отладки. Тебе уже все написали. Что еще ты ожидаешь услышать?
некропост. хотелось с символьной информацией отлаживать но т.к. не выходит, то DbgPrint ну и int 3 для крайних случаев. Clerk уже переписано - экзешник собран с релоками. релоки фиксяться, импорт тоже. на момент написание способ инжекта был второстепенным - весь упор был на отладке payload.
еще можна сделать инжект в свою прогу(в ту которой из которой делаеться инжек) (как в примере Рихтера про инжект)