Форум: "WinAPI";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];
ВнизВопрос к ASMатикам ;) Найти похожие ветки
← →
Fellomena (2002-03-05 16:07) [0]Всем привет ! Есть такой вопрос: есть у меня dll-ка, когда я её подключаю к своей программой и пытаюсь вызвать любую из экспортируемых ф-ий на экран вылезает мессага о том, что dll не зарегестрированная (регестрация не дорогая, но дело в том, что контакт с производителем безвозвратно утерян, а dll уникальна в своём роде).
До сих пор я просто с помощью API все эти появляющиеся окошки просто "убивала", но мне стало интересно, насколько сложно сделать так, что бы, зная о существовании некой процедуры в dll из всех точек её вызова сразу же делать jmp назад, т.е. как бы она уже выполнилась ?
Проблема в том, что определённого адреса эта процедура не имеет (пока dll не загрузилась в АП какого-то процесса) - так ?
Сделав дамп, нашла процедуру, отвечающую за регестрацию (параметры её тоже известны).
Наверняка сочетание Name и Code проверяется на соответствие некой check сумме.
Не подскажите - в какую сторону копать ?
(приходилось пару раз в SoftICE работать - правда на уровне обезьяны выполняя предписания по отладке)
Уровень знания asm-а стремится по экспоненте к 0 ;\
Не подумайте, что я от хорошей жизни такими делами занимаюсь - мне 12$ за хорошую прогу не жалко, но некому их давать 8(
Просить знакомых сделать за меня - не хотса, самой интересно :)
Disclamer:
вопрос задаётся чисто из познавательных целей.
Автор не намерен нарушать копирайт.
=)
← →
VuDZ (2002-03-05 16:25) [1]как я делаю в подобных случаях (случаи разные бывают (С)Ржевский) - ищю 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"ами, что бы ничего не происходило, или попытаться выудить нужный код, обычно - это увлекательнй охоты :>
← →
Fellomena (2002-03-05 16:31) [2]Теперь на огурцах и по пунктам:
1). Какой debuger проще ?
2). Алгоритм поиска.
3). Процес забивания.
4). Как сохранить отредактированный экземпляр ?
Я один раз по туториулу с помощью SoftICE Win32 прогу "отучила" пароли спрашивать, но я SoftICE дольше настраивала, чем прогу "приручала".
=)
← →
VuDZ (2002-03-05 17:01) [3]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 :>
← →
Sasha9 (2002-03-05 18:06) [4]2VuDZ
я немного не понял: 90 нужно ставить вместо самой команды jmp или вместо её "параметров"(не знаю как это называется не самом деле)
← →
VuDZ (2002-03-05 18:19) [5]ясно что вместо, а то ты получишь local GPF.
← →
Sasha9 (2002-03-05 18:56) [6]
> ясно что вместо
по-моему ты что-то недописал; что такое local GPF
← →
Bachin (2002-03-05 19:22) [7]2Sasha9:
все правильно написал. просто начни с асма :)
после команты процессора jmp идет адрес перехода и лучше править уже там, т.к. некоторые любят из нескольких точек входить в процедуру проверки :)))
GPF = General Protection Fault с вероятностью 98% т.к. ты можешь попытаться полезть неизвестно куда, но вероятность, что куда-то попадешь, и этот адрес будет доступен процессу (надеюсь jmp по смещению :) и это будет исполняемый кусок а не данные и ....
Ну надеюсь примерно понятно :)))
← →
Sasha9 (2002-03-05 19:33) [8]10ks
← →
Sasha9 (2002-03-05 19:53) [9]а во встроенном дельфийском дебаггере можно изменить jmp на nop?
← →
VuDZ (2002-03-05 21:19) [10]Нет, AIK
← →
Dimaond Cat (2002-03-05 23:32) [11]А не проще если известна процедура отвечающая за аутонтификацию (во слово-то какое) найти ее IF и поменять его с 0 на 1 или наоборот зависит от...
← →
Fellomena (2002-03-06 10:37) [12]Спасибо VuDZ за науку...
Проблема, правда, чисто теоритического характера. Win32API: WS_HIDE + WM_CLOSE победа в жизни ;)
Я тебе после праздников отпишу, если что ;)
← →
paul_shmakov (2002-03-15 12:44) [13]а я от себя еще посоветую. не всегда удобно ломать в softice. в некоторых случаях лучше воспользоваться W32Dasm (у меня версия 8.93) - это дизассемблер и дебагер в одном лице. попробуйте, в некоторых случаях гораздо проще в нем (особенно, если ваша dll всегда одну и ту же строку выдает, то w32dasm скорее всего поможет все отыскать минут за 5).
а в некоторых в softice. и еще обязательно скачайте и поставьте себе hiew (hex-редактор с дизассемблером и кучей всего). это та программа, за которую не жалко отдать денег.
http://sen.host.kemtel.ru/indexr.html#hiew
эти средства нужно совмещать и тогда все будет достаточно просто :)
но ассемблер нужно немного выучить, хотя его незнание можно частично компенсировать работая с дебагером.
← →
VuDZ (2002-03-15 16:17) [14]IDA Pro - rulez
но более-менее солжную прогу не сломаешь статическим анализом, так как там могут стречаться такие вещи
call [eax + ecx]
push eax
....
pop edi
call edi
;entry point.....
ret 16 <- new value of IP, not a return adress
ну и прочее в таком духе.
Особенно табличная обработка хороша в этом плане
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c