![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос к ASMатикам ;) [D6, Win95/98]
Fellomena © (2002-03-05 16:07:00)Всем привет ! Есть такой вопрос: есть у меня dll-ка, когда я её подключаю к своей программой и пытаюсь вызвать любую из экспортируемых ф-ий на экран вылезает мессага о том, что dll не зарегестрированная (регестрация не дорогая, но дело в том, что контакт с производителем безвозвратно утерян, а dll уникальна в своём роде).
До сих пор я просто с помощью API все эти появляющиеся окошки просто "убивала", но мне стало интересно, насколько сложно сделать так, что бы, зная о существовании некой процедуры в dll из всех точек её вызова сразу же делать jmp назад, т.е. как бы она уже выполнилась ?
Проблема в том, что определённого адреса эта процедура не имеет (пока dll не загрузилась в АП какого-то процесса) - так ?
Сделав дамп, нашла процедуру, отвечающую за регестрацию (параметры её тоже известны).
Наверняка сочетание Name и Code проверяется на соответствие некой check сумме.
Не подскажите - в какую сторону копать ?
(приходилось пару раз в SoftICE работать - правда на уровне обезьяны выполняя предписания по отладке)
Уровень знания asm-а стремится по экспоненте к 0 ;\
Не подумайте, что я от хорошей жизни такими делами занимаюсь - мне 12$ за хорошую прогу не жалко, но некому их давать 8(
Просить знакомых сделать за меня - не хотса, самой интересно :)
Disclamer:
вопрос задаётся чисто из познавательных целей.
Автор не намерен нарушать копирайт.
=)
VuDZ (2002-03-15 16:17:00) [1]IDA Pro - rulez
но более-менее солжную прогу не сломаешь статическим анализом, так как там могут стречаться такие вещи
call [eax + ecx]
push eax
....
pop edi
call edi
;entry point.....
ret 16 <- new value of IP, not a return adress
ну и прочее в таком духе.
Особенно табличная обработка хороша в этом плане
paul_shmakov (2002-03-15 12:44:00) [2]а я от себя еще посоветую. не всегда удобно ломать в softice. в некоторых случаях лучше воспользоваться W32Dasm (у меня версия 8.93) - это дизассемблер и дебагер в одном лице. попробуйте, в некоторых случаях гораздо проще в нем (особенно, если ваша dll всегда одну и ту же строку выдает, то w32dasm скорее всего поможет все отыскать минут за 5).
а в некоторых в softice. и еще обязательно скачайте и поставьте себе hiew (hex-редактор с дизассемблером и кучей всего). это та программа, за которую не жалко отдать денег.
http://sen.host.kemtel.ru/indexr.html#hiew
эти средства нужно совмещать и тогда все будет достаточно просто :)
но ассемблер нужно немного выучить, хотя его незнание можно частично компенсировать работая с дебагером.
Fellomena (2002-03-06 10:37:00) [3]Спасибо VuDZ за науку...
Проблема, правда, чисто теоритического характера. Win32API: WS_HIDE + WM_CLOSE победа в жизни ;)
Я тебе после праздников отпишу, если что ;)
Dimaond Cat (2002-03-05 23:32:00) [4]А не проще если известна процедура отвечающая за аутонтификацию (во слово-то какое) найти ее IF и поменять его с 0 на 1 или наоборот зависит от...
VuDZ (2002-03-05 21:19:00) [5]Нет, AIK
Sasha9 (2002-03-05 19:53:00) [6]а во встроенном дельфийском дебаггере можно изменить jmp на nop?
Sasha9 (2002-03-05 19:33:00) [7]10ks
Bachin (2002-03-05 19:22:00) [8]2Sasha9:
все правильно написал. просто начни с асма :)
после команты процессора jmp идет адрес перехода и лучше править уже там, т.к. некоторые любят из нескольких точек входить в процедуру проверки :)))
GPF = General Protection Fault с вероятностью 98% т.к. ты можешь попытаться полезть неизвестно куда, но вероятность, что куда-то попадешь, и этот адрес будет доступен процессу (надеюсь jmp по смещению :) и это будет исполняемый кусок а не данные и ....
Ну надеюсь примерно понятно :)))
Sasha9 (2002-03-05 18:56:00) [9]
> ясно что вместо
по-моему ты что-то недописал; что такое local GPF
VuDZ (2002-03-05 18:19:00) [10]ясно что вместо, а то ты получишь local GPF.
Sasha9 (2002-03-05 18:06:00) [11]2VuDZ
я немного не понял: 90 нужно ставить вместо самой команды jmp или вместо её "параметров"(не знаю как это называется не самом деле)
VuDZ (2002-03-05 17:01:00) [12]1. SoftICE
делается всё очень просто если хочешь сломать - bpm adress RW, adress - адрес строки с паролем который ты ввела. В конце концов, софт прочитает эти данные и будет сверять их. Что бы их найти - s 0 L ffffffff "your_pass", по-моему так
2. Если всплывает обычное диалоговое окно MessageBox"ом, то тогда в SI: bpx MessageBoxA - когда дебагер сработает - shift-f11 и ты окажешся в софте после вызова call"a MessageBox.
Или ставишь бряк на начало процедуры сверки и смотришь, что происходит. Смотри куда ведут все jmp - если они выводят окошка "your money, please", запминай адрес и последовательность байт до, внутри jmp и после
3. я исользую или VS или HexEdit - находишь нужный jmp и забываешь его 0x90 (hex)
4. наверное save :>
PS это - не руководство ко взлому другого софта, а просто я показываю, как обычно тупо за"shit"та сделана. Не делайте так
PPS надеюсь вы в это поверили :>
Fellomena - лучше шли мне мыло, а то ведь забан%@$#!#%*..... connction lost :>
Fellomena (2002-03-05 16:31:00) [13]Теперь на огурцах и по пунктам:
1). Какой debuger проще ?
2). Алгоритм поиска.
3). Процес забивания.
4). Как сохранить отредактированный экземпляр ?
Я один раз по туториулу с помощью SoftICE Win32 прогу "отучила" пароли спрашивать, но я SoftICE дольше настраивала, чем прогу "приручала".
=)
VuDZ (2002-03-05 16:25:00) [14]как я делаю в подобных случаях (случаи разные бывают (С)Ржевский) - ищю call .... на эту ф-ию. забиваю nop"ами.
Иногда в процедуре аутонтификации происходит установка по некоторому флажку, скажем, вот такой вот код:
mov registred, 0;
....
mov eax, res;
test eax, eax;
jz _notreg;
mov registred, 1;
ret 8;
.....
_notreg:
push mb_flags;
push title_ptr
push msg
push hwnd
call MessageBoxA;
ret 8;
В таком случае, надо забить jz nop"ами, что бы ничего не происходило, или попытаться выудить нужный код, обычно - это увлекательнй охоты :>