Сейчас на форуме: _MBK_, user99, ManHunter (+8 невидимых)

 eXeL@B —› Основной форум —› Вызов API-функций из OllyScript
Посл.ответ Сообщение

Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 15 ноября 2005 06:33
· Личное сообщение · #1

Мне нужно получить при выполнении скрипта хэндл текущего процесса. Пробывал через последовательность FindWindow, GetWindowProcessID, OpenProcess, но возникает проблема с параметрами FindWindow: нет ни класса, ни имени окна. OllyDbd предоставляет данные об ИД потока (вкладка Thread), но это значение почему-то не правильное (PE-редактор указывает на другое значение).
Если ли какие-нибудь другие варианты получения хэндла?



Ранг: 160.9 (ветеран), 1thx
Активность: 0.050
Статус: Участник

Создано: 15 ноября 2005 15:08
· Личное сообщение · #2

А ты попробуй через (GetModuleHandleA,NULL)




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 16 ноября 2005 00:53
· Личное сообщение · #3

tar4 пишет:
Мне нужно получить при выполнении скрипта хэндл текущего процесса.

ты лучше напиши зачем это надо ;) я много скриптов писал к олли, но получать идентификатор процесса через апи как-то надобности небыло =), единтственно в скрипте для армы надо было что-то подобное (идентификатор второго процесса, но там его можно получить перехватив скриптом оригинальную функцию)



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 16 ноября 2005 05:56
· Личное сообщение · #4

Mario555 пишет:
ты лучше напиши зачем это надо

Хочу просканировать виртуальные области, созданные протектором. В последнем аспре их много. Эти области чередуются с участками невыделенной памяти. При использовании функций find и fingop, при обращении к невыделенным участкам памяти, возникает ошибка. Чтобы этого не происходило, решил для проверки сначало использовать ReadProcessMemory, которая возвращает 0, если память не выделена. Ну а для ее использования, нужен хэндл процесса. Впрочем, может как-то иначе можно решить этот вопрос.



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 16 ноября 2005 06:30
· Личное сообщение · #5

Ты же перехватываеш VirtualAlloc, так используй его.



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 16 ноября 2005 08:27
· Личное сообщение · #6

SergSh пишет:
Ты же перехватываеш VirtualAlloc, так используй его

Нет, я хочу сканировать эти участки, стоя на ОЕР (ну или на секции кода), в статическом режиме не запуская прогу.




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 16 ноября 2005 15:58
· Личное сообщение · #7

с глючным файндом оллискрипта такое точно не сделаешь ;) и вообще это будет работать _очень_ долго... лучше получай адреса страниц динамически ;)



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 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, ...

приаттачил.

eb74_OM_0.20.RAR



Ранг: 192.3 (ветеран), 18thx
Активность: 0.120
Статус: Участник
stoned machine-gunner

Создано: 17 ноября 2005 01:43
· Личное сообщение · #9

arnix
да, это уже круче =) спасибо за новость

-----
once you have tried it, you will never want anything else




Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 17 ноября 2005 05:49
· Личное сообщение · #10

Mario555 пишет:
глючным файндом оллискрипта такое точно не сделаешь ;

Да, я то же убедился, что он сильно глючит. Но сейчас новый автор вроде взялся за его сопровождение,
что внушает некоторый оптимизм.
В принципе, скрипт я написал. Единственное, что мне не нравится, так это то, что нужно после его выполнения прогу перегружать и править значение PID (OpenProcess). А это очень неудобно. Поэтому сейчас актуально автоматическое получение ID процесса. Заметил, что при разных PID хэндл процесса
почему-то остается одним и тем же для одной проги.
Что касается OllyMachine, я его видел, по моему была только одна версия, обновления не было.
И все равно, это не решает моего вопроса. Как получить ID процесса при выполнении скрипта?




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 17 ноября 2005 11:15
· Личное сообщение · #11

ну дык GetCurrentProcessId получаешь PID дальше OpenProcess и получаешь Handle ;)

PS всё таки твой способ изврат ибо динамически получается проще и быстрее.
PPS саму GetCurrentProcessId вызывать необязательно, проще взять значение PID оттуда откуда она его берёт, ведь например в XPSP2 весь её код это:
7C80994E MOV EAX,DWORD PTR FS:[18]
7C809954 MOV EAX,DWORD PTR [EAX+20]
7C809957 RETN




Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 17 ноября 2005 12:28
· Личное сообщение · #12

Mario555 пишет:
GetCurrentProcessId получаешь PID дальше

Господи, так просто. Я же работал с этой функцией. Спасибо за подсказку. Сейчас вроде все работает.
А насчет того, что проще динамически получать нужную информацию - возможно.
Но я написал так и он получился совсем простой. Весь смысл: просканировать все области, созданные
протектором и вывести в лог адреса входов в ВМ для последующего анализа (типа в области 00d40000-00d41000 присутствует 10 вызовов типа Call 01200000, а в следующей области - столько то и т.д.).




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 19 ноября 2005 12:42
· Личное сообщение · #13

tar4 пишет:
Но я написал так и он получился совсем простой. Весь смысл: просканировать все области, созданные
протектором и вывести в лог адреса входов в ВМ для последующего анализа (типа в области 00d40000-00d41000 присутствует 10 вызовов типа Call 01200000, а в следующей области - столько то и т.д.).

гы, ну сам подумай, память в которой находится вход в ВМ аллоченная, следовательно проту полюбому надо прописывать эти "call VM" во _все_ места где они должны быть. И делает он это в одном небольшом цикле, вклиниваешься в этот цикл и получаешь все адреса входов в ВМ без всяких поисков сигнатур и т.п. (можно тут сразу и фиксить код). Также можно получить адреса всех вызовов call aspr_import ;)



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 20 ноября 2005 13:38
· Личное сообщение · #14

Mario555 пишет:
делает он это в одном небольшом цикле

Интересная мысль, я как-то с этой стороны не подходил к распаковки. Просто, тот путь, по которому я иду - уже мной апробирован и я знаю, как распаковать прогу с ВМ . Но там слишком много ручной работы, вот и пытаюсь с помощью скриптов хоть как-то ее автоматизировать. Нет достойных инструментов: OllyScript - интересный плугин, но еще много глюков и недостаточно возможностей. Самому писать плагин - можно, но есть неудобства в отладке и т.д.
Кстати, может будет интересно. Просканировав с помощью скрипта одну прогу с ВМ, упакованную аспром, я обнаружил более 10 зааллоченных секций, в которых находилось от 10 до 100 вызовов типа Call VM !!!Вручную это не осилишь.
Так может немного подробнее скажешь, где искать этот "заветный" цикл?



Ранг: 31.0 (посетитель), 1thx
Активность: 0.040
Статус: Участник

Создано: 20 ноября 2005 16:23
· Личное сообщение · #15

tar4 пишет:
где искать этот "заветный" цикл?

брякайся на VirtualAlloc и смотри, когда пойдут адреса по к-рым будет спёртый код лежать



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 20 ноября 2005 19:36
· Личное сообщение · #16

tar4 пишет:
Самому писать плагин - можно, но есть неудобства в отладке и т.д.


какие такие неудобства в отладке? ;)



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 21 ноября 2005 05:35
· Личное сообщение · #17

Asterix пишет:
какие такие неудобства в отладке

Ну а как трассировать пошагово код Dll во время ее работы?
sanniassin пишет:
брякайся на VirtualAlloc и смотри, когда пойдут адреса

Ты имеешь ввиду процесс создания заалоченных областей? Во время работы протектора, их может создаваться достаточно много. Не совсем понимаю, как может помочь использование VirtualAlloc. Разве только для получения списка заалоченных областей.



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 21 ноября 2005 06:12
· Личное сообщение · #18

tar4 пишет:
Ну а как трассировать пошагово код Dll во время ее работы?


нормально так трассировать, как и обычный exe
можно ставить проверочные бряки
можно юзать дебажные макросы для вывода дебажной инфы



Ранг: 31.0 (посетитель), 1thx
Активность: 0.040
Статус: Участник

Создано: 21 ноября 2005 07:48
· Личное сообщение · #19

tar4 пишет:
Во время работы протектора, их может создаваться достаточно много.

дык, найди цикл выделения памяти специально под спёртый код с помощью бряков на VirtualAlloc, и уже цикл копай



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 21 ноября 2005 15:17
· Личное сообщение · #20

Asterix пишет:
можно ставить проверочные бряки

Спасибо, я понял как это делать. Как-то раньше до отладки Dll руки не доходили.
sanniassin пишет:
найди цикл выделения памяти специально под спёртый код

Поискал, не нашел. Вернее, место, где выделяется память под секцию, из которой, в свою очередь,
осуществляются вызовы ВМ - я, конечно, нашел. Но что потом делать, я пока не знаю.




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 22 ноября 2005 21:09
· Личное сообщение · #21

tar4 пишет:
Поискал, не нашел. Вернее, место, где выделяется память под секцию, из которой, в свою очередь,
осуществляются вызовы ВМ - я, конечно, нашел. Но что потом делать, я пока не знаю.

бряк на запись поставить на место где будет любой из call VM ;)


 eXeL@B —› Основной форум —› Вызов API-функций из OllyScript
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати