Сейчас на форуме: laslo, UniSoft, bartolomeo (+6 невидимых) |
eXeL@B —› Программирование —› Delphi, получить значение EAX |
Посл.ответ | Сообщение |
|
Создано: 02 декабря 2011 21:22 · Личное сообщение · #1 |
|
Создано: 02 декабря 2011 21:33 · Личное сообщение · #2 |
|
Создано: 02 декабря 2011 21:34 · Личное сообщение · #3 Сначала нужно получить само значение регистра EAX. Код примерно следующий: Code:
|
|
Создано: 02 декабря 2011 22:51 · Личное сообщение · #4 Code:
Получилось так, но EAX в в чужой запущенной программе, как мне теперь подвязать это к чужой программе? |
|
Создано: 02 декабря 2011 23:08 · Личное сообщение · #5 |
|
Создано: 02 декабря 2011 23:21 · Личное сообщение · #6 |
|
Создано: 02 декабря 2011 23:42 · Личное сообщение · #7 |
|
Создано: 02 декабря 2011 23:51 · Личное сообщение · #8 |
|
Создано: 03 декабря 2011 00:19 · Личное сообщение · #9 |
|
Создано: 03 декабря 2011 00:32 · Личное сообщение · #10 |
|
Создано: 03 декабря 2011 02:42 · Личное сообщение · #11 Terminate я думаю не приват: Code:
|
|
Создано: 03 декабря 2011 05:42 · Личное сообщение · #12 yanus0 вся работа ведется с одним потоком, поэтому нужно смотреть основной ли поток мы хотим обрабатывать, иначе добавить функционал слежения за потоками. >> function MemFind(ProcessHandle: Thandle; Addr: Cardinal; Value: array of byte; var RetAdr: Cardinal): boolean; Очень опасно так писать. При таком подходе компилятор генерирует код, который копирует массив на стек и передает в качестве параметра весь массив на стеке, у меня были случаи переполнения стека из за этого. Лучше так: function MemFind(ProcessHandle: Thandle; Addr: Cardinal; Value: PByteArray; var RetAdr: Cardinal): boolean; *** if byte(Buf[I]) = (Value^[J]) then ----- Yann Tiersen best and do not fuck |
|
Создано: 03 декабря 2011 14:02 · Личное сообщение · #13 Terminate пишет: Чужая программа запущенна и работает, нужно написать код, чтобы изменить значение в её адресном пространстве, а чтобы найти адрес значения в памяти нужно брякнуть 0045AB38 PUSH DWORD PTR DS:[EAX+60] и по адресу EAX+60, будет значение, но EAX динамичен и адреса в памяти разные. а лодырь не канает ? |
|
Создано: 03 декабря 2011 15:41 · Личное сообщение · #14 yanus0 Спасибо за исходник. Из всего кода достаточно procedure btnSniffClick и function SniffSerial, но это при использовании как лоадера, а вот как подключится к существующему процессу без CreateProcess и без Аттача, вот это вопрос. Я так понимаю нужно получить ID главного треда, только пока неясно как. |
|
Создано: 03 декабря 2011 15:51 · Личное сообщение · #15 |
|
Создано: 03 декабря 2011 15:56 · Личное сообщение · #16 Terminate Если используется аттач, то нужно делать, как в дебаггерах - DebugActiveProcess, перечислили все потоки в отлаживаемом приложении через те же Tool help, OpenThread для каждого потока, а на интересующее место CC (int3). Когда WaitForDebugEvent будет сигнализировать о срабатывании бряка, смотрим, наш ли бряк, GetThreadContext + ReadProcessMemory, декремент EIP, восстанавливаем затёртый байт, SetThreadContext, FlushInstructionCache, а в конце - DebugActiveProcessStop. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 03 декабря 2011 16:06 · Личное сообщение · #17 |
|
Создано: 03 декабря 2011 16:14 · Личное сообщение · #18 |
|
Создано: 03 декабря 2011 16:16 · Поправил: ARCHANGEL · Личное сообщение · #19 Terminate Да ну - всё гораздо проще. Если зациклили, то читайте контексты всех потоков и сравнивайте EIP с адресом, на котором зациклили. Если нашлось совпадение, то берёте из считанного контекста значение еах, читаете память, снимаете зацикливание и всё. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 03 декабря 2011 17:38 · Личное сообщение · #20 Terminate пишет: В данном случае, значение EAX постоянно изменяется и чтобы получить правильные данные, нужно после определённых действий читать EAX. Оно же не берется от балды, Nightshade всё правильно написал, только видимо ты не понимаешь сути, а реализовать пытаешься тупо по тому что в отладчике видел, в этом и проблема. ----- Yann Tiersen best and do not fuck |
|
Создано: 03 декабря 2011 18:24 · Личное сообщение · #21 |
|
Создано: 03 декабря 2011 18:36 · Личное сообщение · #22 |
|
Создано: 03 декабря 2011 19:58 · Личное сообщение · #23 На основе вышеизложенного исходника, получился код: Code:
но он отрабатывает не правильно, программу он вроде зацикливает но EIP не находит. |
|
Создано: 03 декабря 2011 20:34 · Личное сообщение · #24 |
|
Создано: 03 декабря 2011 20:48 · Личное сообщение · #25 |
|
Создано: 03 декабря 2011 21:09 · Личное сообщение · #26 +1, снапшот открывает Елы палы, апи же в мсдн описаны, как такую хуйню можно написать? ----- Yann Tiersen best and do not fuck | Сообщение посчитали полезным: SReg |
|
Создано: 03 декабря 2011 21:19 · Поправил: Terminate · Личное сообщение · #27 |
|
Создано: 03 декабря 2011 21:53 · Личное сообщение · #28 |
|
Создано: 03 декабря 2011 22:10 · Личное сообщение · #29 Code:
ARCHANGEL как использовать результат от OpenThread? в SuspendThread(?); Результат от OpenThread почему-то равен хендлу снапшота. |
|
Создано: 03 декабря 2011 22:42 · Личное сообщение · #30 |
eXeL@B —› Программирование —› Delphi, получить значение EAX |