Сейчас на форуме: kris_sexy, ==DJ==[ZLO], Wenzel (+4 невидимых) |
![]() |
eXeL@B —› Крэки, обсуждения —› Взлом Delphi компонентов |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 20 марта 2006 17:53 · Поправил: Модератор · Личное сообщение · #1 Всем Привет! народ, кто-нить ломал shareware компоненты для Delphi ?? Если да, то счего начинать? Или быть может кто бы глянул да посоветовал, был бы очень благодарен!! [url=http://delphi.icm.edu.pl/ftp/d60share/ASCryptoKit6.zip ]http://delphi.icm.edu.pl/ftp/d60share/ASCryptoKit6.zip [/url] Думаю многим может пригодится, готовые компоненты для криптования! ![]() |
|
Создано: 20 марта 2006 18:16 · Личное сообщение · #2 |
|
Создано: 20 марта 2006 18:49 · Личное сообщение · #3 |
|
Создано: 20 марта 2006 19:23 · Личное сообщение · #4 Я так понял, что потом скомпиленный ехе не запускается без Дельфы? Тогда компилим проект, находим код типа
и меняем условный переход на безусловный. Потом выделяем сигнатуру 8B 45 FC F6 40 1C 10 75 05 и ищем ее в ASCryptoComp.dcu, меняем 75 на ЕВ. Вроде все, на первый взгляд работает. А компонент неплохой, будем юзать. ![]() ![]() |
|
Создано: 20 марта 2006 19:35 · Личное сообщение · #5 |
|
Создано: 20 марта 2006 19:39 · Личное сообщение · #6 |
|
Создано: 20 марта 2006 19:57 · Личное сообщение · #7 |
|
Создано: 21 марта 2006 14:24 · Личное сообщение · #8 |
|
Создано: 22 марта 2006 08:48 · Личное сообщение · #9 Есть такой классный компонент для скинования прог как ipSkin Library for Delphi 4-2005. Ну и как обычно триал ![]() Решил посмотреть чего там за защита. Собрал тестовый проектик в дельфе, закрыл дельфу. Запустил мой тестовик. Тут меня ждала мелкая пакость от разрабтчиков, прога выбросила не мессагу, а окно. Открыл олю и начал смотреть какую функцию зовет функция при старте для создания окна. Оказалось CreateWinndowEx. Адрес я вычислил, но занопить его не удалось. Прога начала орать на access violation. Кто может подсказать дальнейший путь? ![]() |
|
Создано: 22 марта 2006 09:26 · Личное сообщение · #10 |
|
Создано: 22 марта 2006 10:33 · Личное сообщение · #11 www.rhostyle.com/Files/ipSkinD.zip ~ 2,87 Мб - для дельфы, но на сайте есть еще для билдера. Ну а что особо описывать. при помощи dcu2pas нашел место проверки в файле ipSkinReg.dcu: asm @@0: sub dword ptr [_DOT_1],1 @@7: jnc @@23 @@9: call IsDelphiRunning @@14: test al,al @@16: jne @@23 @@18: call ShowAboutBox end; Открыл hview и нашел последовательность E9 00 00 00 00 EB F8 5D C3 (подсказала dcu2pas). Нашел эти 6 строк 730E E80000 0000 84С0 7505 E80000 Попытался забить нопами E80000 -> 90 90 90 Пересобрал пакет и скопмилил программу. В результате прога начала бросаться runtime error. ![]() |
|
Создано: 22 марта 2006 12:37 · Личное сообщение · #12 |
|
Создано: 22 марта 2006 13:01 · Личное сообщение · #13 TeruS Да, есть: asm @@0: push ebx @@1: push offset @@0 @@6: push offset @@0 @@11: call FindWindow @@16: mov ebx,eax @@18: push +0 @@20: push offset @@0 @@25: call FindWindow @@30: test ebx,ebx @@32: je @@38 @@34: test eax,eax @@36: jne @@42 @@38: xor eax,eax @@40: pop ebx { 0: B0 01 5B C3 °.[Г } end; Можешь подробнее плиз, я еще только начинаю разбираться в крекинге. ![]() |
|
Создано: 22 марта 2006 13:39 · Личное сообщение · #14 Объясняю: Когда вызывается процедура, у неё есть параметры. Параметры передаются в основном через стек. При этом при вызове процедур текущее положение тоже сохраняется в стек и при выходе из процедуры(ret) возвращает в исходную точку. Тыким образом если ты занопил вызов процедуры, а пуши оставил, то при выходе из текущей процедуры будет выход по последней записи в стеке, а ето - неиспользованный параметр процедуры. Так что надо нопить не только процедуру, но и предшествующие нопы.. Понял? ![]() |
|
Создано: 22 марта 2006 14:33 · Личное сообщение · #15 |
|
Создано: 22 марта 2006 16:45 · Личное сообщение · #16 Не получается и вот почему. В самой процедуре IsDelphiRunning есть пуши, но их ИМХО забивать не зачем (хотя я попробовал, прога начяла вылелать с ошибкой). А в инициализации пушей нет. Приложил на всяк случай этот файлик. ![]() ![]() |
|
Создано: 22 марта 2006 20:41 · Личное сообщение · #17 |
|
Создано: 22 марта 2006 20:57 · Личное сообщение · #18 |
|
Создано: 22 марта 2006 21:27 · Поправил: Hellspawn · Личное сообщение · #19 эх... скачал посмотрел, значит:
ну не запуская ничего, просто предположу... (посмотрим комманду test)
скорее всего:
пропатчить можно разными способами... но я бы сделал так:
всё должно работать.... ----- [nice coder and reverser] ![]() |
|
Создано: 23 марта 2006 08:37 · Личное сообщение · #20 |
|
Создано: 23 марта 2006 09:05 · Личное сообщение · #21 |
|
Создано: 23 марта 2006 09:56 · Личное сообщение · #22 |
|
Создано: 23 марта 2006 10:07 · Личное сообщение · #23 |
|
Создано: 23 марта 2006 13:07 · Личное сообщение · #24 Hellspawn пишет: попробовал? если не пашет, скажи, хотя всё должно пахать... Попробовал, начала ругаться при сборке компилятор. (внутренняя ошибка). И еще, у меня на месте 00000026 : 33 C0 есть только 32 00. Может в этом проблема? Hellspawn пишет: я в шоке всё людям распишешь, так они не хотят никакую умственную работу делать Ну как я могу прийти к решению не зная полностью основ крекинга? Что я могу, я уже попробовал, поэтому за советом я обратился сюда. И сообщение мое было не "есть супер компонент, хочу его взломать, скажите как сделать". Ведь так? Я хочу разобраться, только и всего, но учитывая уровень моих знаний я просто прошу некоторые места описывать подробнее. Сразу хочу сказать всем, кто хочет помочь или еще что. Я программист, дельфой занимаюсь уже более 3 лет, есть ряд успешных и продаваемых проектов, в которых я принимал самое непосредственное участие. Около года занимаюсь php, javascript и немного perl. И вот решил заняться крекингом, так как понадобились некоторые компоненты, но покупать их не хочется. AngelDance пишет: надо еще и за них сделать. Покажи мне пальцем сообщение где я прошу сделать что-то за меня? ![]() |
|
Создано: 23 марта 2006 13:30 · Личное сообщение · #25 Storm пишет: 00000026 : 33 C0 есть только 32 00. Может в этом проблема? че за бред? я ломал 51df_ipSkinReg.dcu.zip - тот что ты приатачил.... хахаха... я понял в чём проблема.... ![]() 00000026 <-- это смещение, не относительно начала файла, а относительно начала процедуры! а в файле, пропатч по адрессу 00000846: 33 С0 поменяй на B0 01 ----- [nice coder and reverser] ![]() |
|
Создано: 23 марта 2006 13:40 · Личное сообщение · #26 |
|
Создано: 23 марта 2006 14:14 · Личное сообщение · #27 Hellspawn пишет: а в файле, пропатч по адрессу 00000846: 33 С0 поменяй на B0 01 Да, точно. Все заработало! AngelDance пишет: Я же в шутку! Ты что смайлика не видел? Видел, но все равно, не люблю, когда меня за полного ламера считают. Спасибо большой всем, кто помогал и наставлял в процессе взлома! Но особенно Hellspawn. Собственно он этот компонент и взломал! Спасибо большое! Только у меня пара чисто познавательских вопроса. 1) Какая утилита так обрабатывает код: function IsDelphiRunning: System.Boolean; ... begin 00000000 : // -- Line #62 -- 00000000 : 53 PUSH EBX 00000000 : // -- Line #70 -- 2) Почему именно 33 С0 на B0 01? Хотя нет, лучше поставлю вопрос по другому, где можно разжиться материалом по асму, но только не для чайников. И собственно вопрос к народу: "А как Вы познавали искусство крекинга?" Спасибо. ![]() |
|
Создано: 23 марта 2006 14:20 · Личное сообщение · #28 |
|
Создано: 23 марта 2006 14:49 · Поправил: Hellspawn · Личное сообщение · #29 PE_Kill пишет: По моему это Dede. да ты прав ![]() ![]() щас тока скачал dcu2pas 1.3, не плохая штучка... Storm пишет: Почему именно 33 С0 на B0 01? я же чуть выше писал, лан щас разжую...
теперь смотри... вызывается функция function IsDelphiRunning: System.Boolean; (Она вернёт 1=true или 0=false) и вернёт она значение в регистре AL это понятно по коду:
значит нам надо сделать, чтобы ф-ия в любом случае возвращала не 0 ![]() ну а тут, как фантазии хватит.. я решил пропатчить так: 00000026 : B0 01 MOV AL,1 <-- заносим 1 в регистр AL теперь надеюсь всё понятно? ----- [nice coder and reverser] ![]() |
|
Создано: 23 марта 2006 17:17 · Личное сообщение · #30 Hellspawn пишет: 00000026 : B0 01 MOV AL,1 <-- заносим 1 в регистр AL теперь надеюсь всё понятно? Да, ход мыслей понятен, я вообщем-то и так понимал, хотя некоторые вещи после твоего объяснения я понял. Меня интересует конкретно почему именно B0 01. 01 - это как я понимаю значение, которое мы заносим. Но почему B0? ![]() |
. 1 . 2 . >> |
![]() |
eXeL@B —› Крэки, обсуждения —› Взлом Delphi компонентов |