Сейчас на форуме: Slinger (+6 невидимых) |
eXeL@B —› Основной форум —› Помогите разобраться с Delphi. |
Посл.ответ | Сообщение |
|
Создано: 10 января 2007 18:31 · Личное сообщение · #1 Я новичок. Почитал статьи и топики, но нужной информации не нашел. Хотелось бы разобраться с кодом который генерирует Delphi. Я декомпильнул экзешник с помощью DeDe. Нашел в нем ButtonClick. А дальше в этой процедуре вызывается другая следующим способом call dword ptr [ecx+$34]. Я так понимаю это озночает, что либо она виртуальная, либо её адрес определяется серийником. Целиком выглядит так
Кроме того, хотелось бы понять как мне декомпильнуть уже эту процедуру с помощью DeDe. Почему-то мне её не найти (Я делаю это поиском по сгенерированым с помощью DeDe файлам адреса процедуры или редкой инструкции в ней). P.S. Дело в том, что процедура достаточно навороченная и я почти уверен, что программа неважно работает именно из-за нее. По-этому хотелось бы видеть её в более приятном виде... Большое спасибо. Ссылки на статьи по работе с кодом Delphi (в том числе английские) тоже привествуются. |
|
Создано: 10 января 2007 18:47 · Поправил: 1nn0cent · Личное сообщение · #2 tarakan, эта процедура -- метод какого-то класса. Соответственно в ECX указатель на класс, а ECX+$34 -- указатель на процедуру. Судя по tarakan пишет: <UnknownType>, класс самописный. Как вариант, можно брякнуться на 0050BD3F и войти в эту процедуру. Посмотреть адрес начала. И его уже искать в DeDe. ----- Blame the victim! |
|
Создано: 10 января 2007 20:32 · Личное сообщение · #3 |
|
Создано: 10 января 2007 22:35 · Личное сообщение · #4 |
|
Создано: 11 января 2007 02:24 · Личное сообщение · #5 Спасибо. за ответы. То, что адрес находится трейсом это понятно. Я этот адрес знаю. Проблема в том, что мне хочется посмотреть на эту процедуру через DeDe. То есть у меня адрес процедуры есть, и судя по софтайсу и IDA сама процедура тоже есть, но почему то DeDe её не дампит. P.S. Хочу посмотреть в DeDe потому, что в этом классе скорей всего используются всякие дельфийские вызовы (типа те которые DeDe возможно сможит зарезолвить). |
|
Создано: 11 января 2007 02:55 · Личное сообщение · #6 |
|
Создано: 11 января 2007 03:00 · Личное сообщение · #7 |
|
Создано: 11 января 2007 03:08 · Поправил: PE_Kill · Личное сообщение · #8 |
|
Создано: 11 января 2007 04:18 · Личное сообщение · #9 |
|
Создано: 11 января 2007 04:25 · Личное сообщение · #10 |
|
Создано: 11 января 2007 07:14 · Личное сообщение · #11 |
|
Создано: 11 января 2007 07:32 · Поправил: tarakan · Личное сообщение · #12 HoBleen Большое спасибо. сегодня попробую. Только не понимаю, почему, если он знает о существовании данного кода, он не хочет его дампить. Из-за того, что не указывается явный адрес функции и типа соответственно нет на него референса? Тогда если я заменю вызов call dword ptr [ecx+$34] на что-нить типа call $00474634 он сможет его определить? P.S. Дело в том, что процедура располагающаяся по данному адресу содержит ещё кучу разных вызывов и вообще сложную логику. Глупо задавать вопрос, что мне делать. Но может быть есть какие-нибудь способы как-нибудь облегчить себе жизнь. Судя по тому, что вызывается эта функция методом описанным выше, то это целый класс, занимающийся проверкой валидности серийного номера. Кроме того, даже если я узнаю алгоритм проверки, мне ещё придется вычислить обратныю функцию. Мне страшно. Скажите что-нибудь воодушевляющее. |
|
Создано: 11 января 2007 07:47 · Личное сообщение · #13 tarakan пишет: Тогда если я заменю вызов call dword ptr [ecx+$34] на что-нить типа call $00474634 он сможет его определить? Конечно. Просто дело в том что метод - виртуальный, до его вызова неизвестно на какой адрес будет указывать указатель (простите за тавтологию =) ). tarakan пишет: Дело в том, что процедура располагающаяся по данному адресу содержит ещё кучу разных вызывов и вообще сложную логику. Дизассемблер предназначен для анализа кода, а отладчик - для того, чтобы узнавать значение регистров и переменных в конкретный момент времени имхо. Одним деде не обойдешься =) tarakan пишет: Кроме того, даже если я узнаю алгоритм проверки, мне ещё придется вычислить обратныю функцию. Если это самопальная проверка - сделать кейген не составит труда =). Если используется криптография, причем руки у разработчиков не кривые, и ключ довольно длинный - мб даже и не удастся. tarakan пишет: Скажите что-нибудь воодушевляющее. Удачи в начинании! |
|
Создано: 11 января 2007 08:10 · Личное сообщение · #14 |
|
Создано: 11 января 2007 09:13 · Личное сообщение · #15 tarakan пишет: А если я заменю в инструкции call dword ptr [ecx+$34] адрес на фактический и сделаю в DeDe дамп процесса, то он сможет найти эту функцию? Трассируешь в отладчике до твоей процедуры, смотришь на каком адресе она начинается и ищешь этот адрес а дизассемблере. ----- Я медленно снимаю с неё UPX... *FF_User* |
|
Создано: 11 января 2007 09:57 · Личное сообщение · #16 Забей. Это не то, что тебе надо. Это может быть все, что угодно, но не проверка ключа. И еще, посмотри в ольке лэйбы в файле. Правой крысой, view all name in current module. Олька тебе выдаст список всех названий и меток. Далее ставиш бряк на call dword ptr [ecx+$34], смотришь - твой колл или нет. Если твой, то как его олька обзывает. Для этого в настройках ставишь галку ... Упс, забыл какую. Может кто напомнит, чота там аргументы или типа этого. Кароч, пощелкай в настройках разные галки, чтоб олька показывала не call 473526, a call System@CreteTread@CreateTreadWrapper.Типа этого. Потом смотриш название своей call dword ptr [ecx+$34] и ищешь ее в ДеДе. Дерзай. |
|
Создано: 11 января 2007 10:01 · Личное сообщение · #17 stahh пишет: Забей. Это не то, что тебе надо. Это может быть все, что угодно, но не проверка ключа. А вот здесь ты не прав - это называется защита от дизассемблера виртуальными функциями. Встречается редко, свою силу еще не набрала. Кста, гдето в спец хакере помоему была статейка на эту тему. stahh пишет: Кароч, пощелкай в настройках разные галки, чтоб олька показывала не call 473526, a call System@CreteTread@CreateTreadWrapper.Типа этого. Эээ.. мб сигнатуры? =) stahh пишет: Потом смотриш название своей call dword ptr [ecx+$34] и ищешь ее в ДеДе. Это виртуальный метод, ни в каком дизассемблере адрес не показывается. |
|
Создано: 11 января 2007 10:23 · Поправил: =Usacha= · Личное сообщение · #18 |
|
Создано: 12 января 2007 14:52 · Личное сообщение · #19 |
eXeL@B —› Основной форум —› Помогите разобраться с Delphi. |