![]() |
eXeL@B —› Программирование —› Как програмно прочитать последнее значение в стеке у чужого процесса? |
Посл.ответ | Сообщение |
|
Создано: 01 февраля 2009 07:38 · Личное сообщение · #1 |
|
Создано: 01 февраля 2009 07:43 · Личное сообщение · #2 |
|
Создано: 01 февраля 2009 08:19 · Личное сообщение · #3 |
|
Создано: 01 февраля 2009 08:36 · Личное сообщение · #4 |
|
Создано: 01 февраля 2009 09:18 · Личное сообщение · #5 > NtSuspendthread > NtGetContextThread - получаем Ss, Esp > NtQueryInformationThread(ThreadDescriptorTableEntry) - получаем базу и лимит сегмента. > CurrntStack = Selector.Base + Esp > CurrentStack < SYSTEM_BASIC_INFORMATION.HighestUserAddress > OldProtect = NtProtectVirtualMemory(CurrntStack, PAGE_READWRITE) > NtReadVirtualMemory(CurrntStack) > NtProtectVirtualMemory(CurrntStack, OldProtect) > NtResumeThread Получать базу сегмента обязательно(не всюду по дефолту база нулевая, поток может защищаться используя к примеру LDT). ![]() |
|
Создано: 15 февраля 2009 07:33 · Личное сообщение · #6 |
|
Создано: 15 февраля 2009 09:19 · Личное сообщение · #7 |
|
Создано: 15 февраля 2009 12:09 · Личное сообщение · #8 |
|
Создано: 15 февраля 2009 12:38 · Личное сообщение · #9 Bonez92 пишет: сначала CreateProcess, потрассируем до нужного места и берем значение в стеке. Но я не знаю как реализовать последнее. Если это программный трэйс, то прсто прочитать контекст жертвы на нужном месте. А если иначе, то реадпроцесмемори. Но что-то мне подсказыват, что даже идею ты представляешь себе не оч.хорошо. ----- Я медленно снимаю с неё UPX... *FF_User* ![]() |
|
Создано: 15 февраля 2009 13:14 · Поправил: Модератор · Личное сообщение · #10 |
![]() |
eXeL@B —› Программирование —› Как програмно прочитать последнее значение в стеке у чужого процесса? |