Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Точка входа в процедуру... ..обработки к.-л. события в пр. или сис. 
:(
    Опции темы
kdaemonv
Дата 4.2.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 21.10.2005

Репутация: нет
Всего: нет



Вопрос в следующем:
имеется какая либо программа (к примеру виндовый сапер), и необходимо найти точку входа в процедуру обработки какого-либо события (к примеру, нажатие на кнопку начала игры, или выбор пункта меню, или срабатывание таймера, или ...).
С помощью каких утилит можно выцепить эту инфу?
И, насколько я понимаю, возможны варианты когда эту инфу можно выцепить напрямую из экзешника, а возможно придется и запускать экзешник (может некоторые объекты будут созданы динамически).

Здесь http://forum.vingrad.ru/index.php?showtopic=82319 я начал этот вопрос, но вразумительного ответа не получил. Я прошу не говорить, что мне нужно дизассемблировать программку. Я смотрел такие утилиты как WinSight32 из Дельфи и Spy++ из С++, но то ли я не догнал, где там можно найти инфу такого рода, то ли ее там нет.
Насколько я понимаю в винде все является окнами: form, button, label - это все графические объекты (а значит - окно, со своими событиями и свойствами; я конечно же могу быть ой как не прав - ну извините, можете по-ходу объяснить и этот вопрос). А значит когда приложение создает какой-то графический объект (окно, кнопку, надпись), оно должно где-то в системе регистрировать этот объект (наверное номер регистрации - хэндл smile) и адреса процедур отвечающих за обработку тех или иных событий. Вот эти адреса мне и нужны. А уж потом с помощью дизассемблеров и отладчиков я узнаю больше.
И еще: таймер в приложении ведь не графический объект (да и он не один такой). Как узнать адрес процедуры обработки срабатывания таймера или других событий неграфических объектов???
PM MAIL   Вверх
rsm
Дата 4.2.2006, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: нет
Всего: 62



Цитата(kdaemonv @ 4.2.2006, 18:24 Найти цитируемый пост)
то ли ее там нет

Угадал.

Цитата(kdaemonv @ 4.2.2006, 18:24 Найти цитируемый пост)
Вот эти адреса мне и нужны

Пожалуйста, сколько угодно - перехватывай отладчиком вызов функций CreateWindowEx, DialogBox (и т.д.), а потом перехватывай вызовы оконных функций (см. MSDN). И будешь ты ловить все сообщения от всех контролов всех окон (включая диалоговые). Будет ли от этого польза - тебе виднее (раз уж ты так увлекся именно вызовами). Про таймеры - см. MSDN по SetTimer, SetWaitableTimer, ну и пожалуй плюс еще Sleep.
Для программ на Дельфи, которые по сути представляют собой интепретатор + скрипт формы, хорошо помогают проги типа Source Rescuer и DeDe - обычно, там можно сразу подсмотреть адрес функции, отвечающей за обработку какого-либо события.

PM MAIL   Вверх
kdaemonv
Дата 11.2.2006, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 21.10.2005

Репутация: нет
Всего: нет



Спасибо rsm! Ты меня направил на путь истинный ;)

Хоть я и не матерый хакер, но пожалуй имею право тебя немного поправить (тем более, может кому-то понадобится такая же информация - не стоит заставлять его повторять мои поиски).
Я тут почитал установленные с Delphi файлы помощи MS SDK (я бы их не читал, не зная какую функцию мне искать) и выяснил что сначала в приложении заполняется структура WNDCLASS*.
Затем она регистрируется в системе функцией RegisterClass*. И лишь затем создается окно функцией CreateWindow*.
Так вот нужные мне данные это lpfnWndProc в классах WNDCLASS (если искать в стеке - второе двойное слово, начиная с адреса переданного процедуре RegisterClass* - то есть точки останова более результативно и логично ставить на процедуру RegisterClass) и WNDCLASSEX (третье двойное слово).

И пару ласковых относительно Delphi - ну они и намудровали smile.
Немного потанцевав с бубном вокруг простейшего приложения на Delphi (сильно не вникая - ну их), сделал следующее заключение:
при создании любого окна/контрола параметру lpfnWndProc присваивается ссылка на одну и ту же функцию InitWndProc (из модуля VCL/Controls), которая получая управление меняет этот параметр у уже созданного окна при помощи функции SetWindowLong* с параметром nIndex = GWL_WNDPROC. Так что, при отладке приложений, написанных на Delphi, стоит ставить точки останова и на процедуру SetWindowLong*.

Если кто-то хочет что-то уточнить - пишите, с удовольствием почитаю. А относительно таймеров еще не разбирался - скоро разберусь. Еще возникли вопросы вокруг DialogBox и MessageBox - но попробую сам разобраться - теперь хоть знаю в какую сторону рыть.

* - значит что я имею ввиду и родственные структуры и процедуры (WNDCLASSEX, CreateWindowsEx etc.)
PM MAIL   Вверх
rsm
Дата 12.2.2006, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: нет
Всего: 62



Цитата(kdaemonv @ 11.2.2006, 07:46 Найти цитируемый пост)
сначала в приложении заполняется структура WNDCLASS

Не всегда smile Для окон стандартных классов ("static", "button" и т.д.) регистрация класса не требуется.

Цитата(kdaemonv @ 11.2.2006, 07:46 Найти цитируемый пост)
стоит ставить точки останова и на процедуру SetWindowLong

Ставить можно, но только с умом, т.е. с фильтрацией нужных окон и посылаемых им сообщений. В противном случае отладчик просто утонет в вызовах - окон много и каждому посылается куча сообщений.
PM MAIL   Вверх
Maha
  Дата 8.3.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 8.3.2006

Репутация: нет
Всего: нет



pohojay problema nahoju proceduri kotorie otve4ayt sa kakoeto deistvie w 4yjom processe i ho4y ih udaleno wisiwaty tak wot injecty etot process dopisiway tyda swoi code no wot wiswaty mne te proceduri ne udaetza proishodit ckrashe proceduri wot code:

Код

.386
.model flat,stdcall
option casemap:none

find_PID PROTO
myInject PROTO

include \masm32\include\windows.inc

include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib

include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

.const

.data?
hSnapshot dd ?
hProcess HANDLE ?
lpMemory HANDLE ?
dwTid HANDLE ?
need_memory dd ?


.data
pid HANDLE 0
szProcessName db "calc.exe",0
p_entry PROCESSENTRY32 <>


.code
start:
invoke find_PID
.if pid==0

.else
invoke myInject
.endif
invoke ExitProcess,0
find_PID proc
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
inc eax
test eax,eax
jz exit
dec eax
mov hSnapshot,eax
mov p_entry.dwSize,sizeof PROCESSENTRY32
invoke Process32First,hSnapshot,addr p_entry

test eax,eax
jz exit
jmp cmp__ 
p_next__:
mov p_entry.dwSize,sizeof PROCESSENTRY32
invoke Process32Next,hSnapshot,addr p_entry
test eax,eax
jz exit
cmp__:
invoke lstrcmp,addr szProcessName,addr p_entry.szExeFile 
test eax,eax
jz find_it__
jmp p_next__
find_it__:
mov eax,p_entry.th32ProcessID
mov pid,eax
invoke CloseHandle,hSnapshot
exit: 
ret
find_PID endp
myInject proc
jmp backdoor_code_end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
backdoor_code:
pushad


lea eax,dword ptr [0101247Ch]
call eax



popad
xor eax,eax
ret
backdoor_code_end:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lea eax,backdoor_code_end
lea ecx,backdoor_code
sub eax,ecx
mov need_memory,eax

invoke OpenProcess,PROCESS_ALL_ACCESS or PROCESS_VM_WRITE or PROCESS_CREATE_THREAD or PROCESS_CREATE_PROCESS,FALSE,pid
test eax,eax
jz exit__
mov hProcess,eax
invoke VirtualAllocEx,hProcess,0,need_memory,MEM_COMMIT,PAGE_EXECUTE
test eax,eax
jz exit__
mov lpMemory,eax

invoke WriteProcessMemory,hProcess,lpMemory,addr backdoor_code,need_memory,0
dec eax
test eax,eax
jnz exit__
inc eax


invoke CreateRemoteThread,hProcess,0,0,lpMemory,lpMemory,0,0
exit__:
invoke CloseHandle,hProcess
ret
myInject endp
End start



4ital 4to mojno eshe DLL , no kakto prosto tupo wresaty w virtualku swoi code mne bolshe nrawitza

problema w tom kak prawelno wisiwaty eti proceduri smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.0746 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.