![]() |
eXeL@B —› Основной форум —› Вызов API-функций из OllyScript |
Посл.ответ | Сообщение |
|
Создано: 15 ноября 2005 06:33 · Личное сообщение · #1 Мне нужно получить при выполнении скрипта хэндл текущего процесса. Пробывал через последовательность FindWindow, GetWindowProcessID, OpenProcess, но возникает проблема с параметрами FindWindow: нет ни класса, ни имени окна. OllyDbd предоставляет данные об ИД потока (вкладка Thread), но это значение почему-то не правильное (PE-редактор указывает на другое значение). Если ли какие-нибудь другие варианты получения хэндла? ![]() |
|
Создано: 15 ноября 2005 15:08 · Личное сообщение · #2 |
|
Создано: 16 ноября 2005 00:53 · Личное сообщение · #3 tar4 пишет: Мне нужно получить при выполнении скрипта хэндл текущего процесса. ты лучше напиши зачем это надо ;) я много скриптов писал к олли, но получать идентификатор процесса через апи как-то надобности небыло =), единтственно в скрипте для армы надо было что-то подобное (идентификатор второго процесса, но там его можно получить перехватив скриптом оригинальную функцию) ![]() |
|
Создано: 16 ноября 2005 05:56 · Личное сообщение · #4 Mario555 пишет: ты лучше напиши зачем это надо Хочу просканировать виртуальные области, созданные протектором. В последнем аспре их много. Эти области чередуются с участками невыделенной памяти. При использовании функций find и fingop, при обращении к невыделенным участкам памяти, возникает ошибка. Чтобы этого не происходило, решил для проверки сначало использовать ReadProcessMemory, которая возвращает 0, если память не выделена. Ну а для ее использования, нужен хэндл процесса. Впрочем, может как-то иначе можно решить этот вопрос. ![]() |
|
Создано: 16 ноября 2005 06:30 · Личное сообщение · #5 |
|
Создано: 16 ноября 2005 08:27 · Личное сообщение · #6 |
|
Создано: 16 ноября 2005 15:58 · Личное сообщение · #7 |
|
Создано: 16 ноября 2005 17:35 · Поправил: arnix · Личное сообщение · #8 tar4 пишет: Хочу просканировать виртуальные области, созданные протектором. В последнем аспре их много. Эти области чередуются с участками невыделенной памяти. При использовании функций find и fingop, при обращении к невыделенным участкам памяти, возникает ошибка. Чтобы этого не происходило, решил для проверки сначало использовать ReadProcessMemory, которая возвращает 0, если память не выделена. Ну а для ее использования, нужен хэндл процесса. Впрочем, может как-то иначе можно решить этот вопрос. Вместа OllyScript используй плагин OllyMachine (аналог OllyScript), там можно сделать например так (из дока): __asm { mov eax, 1 push 0 call ExitProcess } Поправка: Я еще посмотрел в доке, можно и так: INVOKE Api_Name, parameter1, parameter2, ... приаттачил. ![]() ![]() |
|
Создано: 17 ноября 2005 01:43 · Личное сообщение · #9 |
|
Создано: 17 ноября 2005 05:49 · Личное сообщение · #10 Mario555 пишет: глючным файндом оллискрипта такое точно не сделаешь ; Да, я то же убедился, что он сильно глючит. Но сейчас новый автор вроде взялся за его сопровождение, что внушает некоторый оптимизм. В принципе, скрипт я написал. Единственное, что мне не нравится, так это то, что нужно после его выполнения прогу перегружать и править значение PID (OpenProcess). А это очень неудобно. Поэтому сейчас актуально автоматическое получение ID процесса. Заметил, что при разных PID хэндл процесса почему-то остается одним и тем же для одной проги. Что касается OllyMachine, я его видел, по моему была только одна версия, обновления не было. И все равно, это не решает моего вопроса. Как получить ID процесса при выполнении скрипта? ![]() |
|
Создано: 17 ноября 2005 11:15 · Личное сообщение · #11 ну дык GetCurrentProcessId получаешь PID дальше OpenProcess и получаешь Handle ;) PS всё таки твой способ изврат ибо динамически получается проще и быстрее. PPS саму GetCurrentProcessId вызывать необязательно, проще взять значение PID оттуда откуда она его берёт, ведь например в XPSP2 весь её код это: 7C80994E MOV EAX,DWORD PTR FS:[18]
![]() |
|
Создано: 17 ноября 2005 12:28 · Личное сообщение · #12 Mario555 пишет: GetCurrentProcessId получаешь PID дальше Господи, так просто. Я же работал с этой функцией. Спасибо за подсказку. Сейчас вроде все работает. А насчет того, что проще динамически получать нужную информацию - возможно. Но я написал так и он получился совсем простой. Весь смысл: просканировать все области, созданные протектором и вывести в лог адреса входов в ВМ для последующего анализа (типа в области 00d40000-00d41000 присутствует 10 вызовов типа Call 01200000, а в следующей области - столько то и т.д.). ![]() |
|
Создано: 19 ноября 2005 12:42 · Личное сообщение · #13 tar4 пишет: Но я написал так и он получился совсем простой. Весь смысл: просканировать все области, созданные протектором и вывести в лог адреса входов в ВМ для последующего анализа (типа в области 00d40000-00d41000 присутствует 10 вызовов типа Call 01200000, а в следующей области - столько то и т.д.). гы, ну сам подумай, память в которой находится вход в ВМ аллоченная, следовательно проту полюбому надо прописывать эти "call VM" во _все_ места где они должны быть. И делает он это в одном небольшом цикле, вклиниваешься в этот цикл и получаешь все адреса входов в ВМ без всяких поисков сигнатур и т.п. (можно тут сразу и фиксить код). Также можно получить адреса всех вызовов call aspr_import ;) ![]() |
|
Создано: 20 ноября 2005 13:38 · Личное сообщение · #14 Mario555 пишет: делает он это в одном небольшом цикле Интересная мысль, я как-то с этой стороны не подходил к распаковки. Просто, тот путь, по которому я иду - уже мной апробирован и я знаю, как распаковать прогу с ВМ . Но там слишком много ручной работы, вот и пытаюсь с помощью скриптов хоть как-то ее автоматизировать. Нет достойных инструментов: OllyScript - интересный плугин, но еще много глюков и недостаточно возможностей. Самому писать плагин - можно, но есть неудобства в отладке и т.д. Кстати, может будет интересно. Просканировав с помощью скрипта одну прогу с ВМ, упакованную аспром, я обнаружил более 10 зааллоченных секций, в которых находилось от 10 до 100 вызовов типа Call VM !!!Вручную это не осилишь. Так может немного подробнее скажешь, где искать этот "заветный" цикл? ![]() |
|
Создано: 20 ноября 2005 16:23 · Личное сообщение · #15 |
|
Создано: 20 ноября 2005 19:36 · Личное сообщение · #16 |
|
Создано: 21 ноября 2005 05:35 · Личное сообщение · #17 Asterix пишет: какие такие неудобства в отладке Ну а как трассировать пошагово код Dll во время ее работы? sanniassin пишет: брякайся на VirtualAlloc и смотри, когда пойдут адреса Ты имеешь ввиду процесс создания заалоченных областей? Во время работы протектора, их может создаваться достаточно много. Не совсем понимаю, как может помочь использование VirtualAlloc. Разве только для получения списка заалоченных областей. ![]() |
|
Создано: 21 ноября 2005 06:12 · Личное сообщение · #18 |
|
Создано: 21 ноября 2005 07:48 · Личное сообщение · #19 |
|
Создано: 21 ноября 2005 15:17 · Личное сообщение · #20 Asterix пишет: можно ставить проверочные бряки Спасибо, я понял как это делать. Как-то раньше до отладки Dll руки не доходили. sanniassin пишет: найди цикл выделения памяти специально под спёртый код Поискал, не нашел. Вернее, место, где выделяется память под секцию, из которой, в свою очередь, осуществляются вызовы ВМ - я, конечно, нашел. Но что потом делать, я пока не знаю. ![]() |
|
Создано: 22 ноября 2005 21:09 · Личное сообщение · #21 |
![]() |
eXeL@B —› Основной форум —› Вызов API-функций из OllyScript |