Собственно сабж: надо изменить запущенный процес без выделения нового сегмента, нпример, поменять один оператор на другой =)
Если разделяемая то да. Если имеется ввиду сервис NtAllocateVirtualMemory, то есть есчо NtMapUserPhysicalPages и NtMapViewOfSection.
имеется в виду, что есть сегмент кода ... работающий ... и надо изменить его, модифицировать уже заполненный сегмент - поменять там операторы, как в отладчике, а не добавлять новый сегмент там, где позволит процесс =)
Sol_Ksacap а какова методика ?? Код (Text): 00041030 push eax 00041031 insd 00041032 fidiv word ptr [edi-48h] 00041032 ; CODE XREF: spiderui.exe:00041055j 00041035 00041035 loc_41035: ; CODE XREF: spiderui.exe:00041067j 00041035 jl short near ptr loc_41013+1 00041037 ja short near ptr unk_40FD9 00041037 ; CODE XREF: spiderui.exe:00041059j 00041039 jnb short near ptr loc_41017+1 0004103B ja short near ptr loc_4104C+2 0004103D dec esp 0004103E fidiv word ptr [edi+5] 00041041 dec ebx 00041042 fidiv word ptr [edi+2Dh] 00041042 ; CODE XREF: spiderui.exe:000410A3j 00041045 dec ebx как мне например по адресу 0004103D написать к примеру "JMP bla-bla-bla" ??? Очень выручишь... =)
Сначала один должен овладевать численным значением кода операции 'Jmp xxx'. Заклинание кода. (Один должен учитывать, что длина инструкций 'Jmp xxx' составляет 2 или 5 байт, а длина 'dec esp' — один байт. Т.е. придётся перезаписать и следующую инструкцию. Можно включить отображение опкодов в листингах (options - general - disassembly - number of opcode bytes). Разобравшись с этим, можно вызывать WriteProcessMemory: Код (Text): ; нотация fasm NewOpcodes: db $EB, $20, $90, $90 ; jmp $+20 ; nop ; nop NewOpcodesSize = 4 ; количество байт для записи ... invoke OpenProcess, ProcessID invoke WriteProcessMemory, eax, $04103D, NewOpcodes, NewOpcodesSize, 0 Результат: Код (Text): 0004103B ja short near ptr loc_4104C+2 0004103D jmp short near 4105F ; 4103f+$20 0004103F nop 00041040 nop 00041041 dec ebx 00041042 fidiv word ptr [edi+2Dh] 00041045 dec ebx
Что-то я мало что понял, но я так делал. Писал некоторый код на ассемблере. Открываю в OllyDbg KERNEL32.DLL Ищу там одни ноли. Тут осторожно надо действовать. Пусть это будет массив где-нибудь в конце секции кода. Пишу в OllyDbg туда код, написанный на ассемблере. Делаю дамп этого участка памяти И WriteProcessMemory по нужному адресу нужного процессса Ну, теперь можно этот код исполнить. Можно на него прыгнуть (jmp, тут о некоторых тонкостях надо позаботиться, как-то: прописывание jmp в нужное место и прочее) Можно создать поток в отдалённом процессе. ...Если не помог, так, может, натолкнул на некоторые мысли.
amvoz мне вообщем-то не имеет значения когда выполнится код и выполнится ли....мне интересен сам факт измениния кода запущенного процесса