Сейчас на форуме: (+4 невидимых) |
eXeL@B —› Вопросы новичков —› Помогите разобраться |
Посл.ответ | Сообщение |
|
Создано: 10 мая 2006 20:49 · Личное сообщение · #1 Эта прога "ОГНИ" используется мной по прямому назначению. Это бухгалтерская программа, куда как легде и проще 1с. И это находка для того, кто не имеет бухгалтерии, а сам выступает во всех качествах. Но надоело, что не выходит так как она не зарегистрирована сохранять деклорации на магнитных носителях. Исполняемыз файл был упакован UPX. Я его распаковал, правда не стал выкидывать мусор. Он теперь открывается на всех машинах. В Дасме отлично видно место, где прога проверяет рег.данные: :004EA228 33D2 xor edx, edx :004EA22A 8B4050 mov eax, dword ptr [eax+50] :004EA22D E87630F7FF cal1 0045D2A8 - процедура сравнения :004EA232 6AOO push 00000000 :004EA234 668BOD48A24EOO mov cx, word ptr [004EA248] :004EA23B B201 mov d1, 01 * Possible StringData Ref from Data 0bj ->"Bвeдитe пapoль" (при неудачной регистрации) I :004EA23D B854A24EOO mov eax, 004EA254 :004EA242 E88D67F7FF cal1 004609D4 :004EA247 C3 ret Если войти в процедуру проверки 004EA22D CALL 0045D2A8, то мы имеем вот это: * Referenced by a CALL at Addresses: |:00487A97 , :00488096 , :00488A87 , :004893B3 , :004893CA |:0048941A , :004BED3F , :004BEE1F , :004BF247 , :004BF65E |:004EA22D , :005566BC , :005568AB , :005E4FFD , :005E54EO |:005E57AF , :005E5894 , :005E59B6 , :005E5ADA , :005E5BFE |:005E5D3A , :005E5E79 , :005E5FE5 , :005E6148 , :005E630E |:005E6376 , :005FA96E , :005FAD69 , :005FAF36 , :005FAF70 |:00607ADB , :00607CCE , :0060D5A2 , :0062C5FB I :0045D2A8 3A5038 cmp d1, byte ptr [eax+38] :0045D2AB 7408 je 0045D2B5 - на выход если ничего не ввел :0045D2AD 885038 mov byte ptr [eax+38], dl :0045D2BO E867FFFFFF cal1 0045D21C - перед выполнением этой процедуры "d edx" (виден введенный мной но видоизмененный рег.код, а под ним, после прочей рег.информации сгенерированный код. * Referenced by a (U)nconditional or (C)onditiona1 Jump at Address: |:0045D2AB(C) I :0045D2B5 C3 ret Код всякий раз генерится новый и не понял я где он именно генерится. А если не видеть алгоритма генерации. то он всякий раз генерится не верно. Я не прошу взломать за меня прогу, но подскажите, где механизм генерации (с какого адреса) ну и разъяснить по возможности. почему так - где я прошляпил. Саму прогу можно взять здесь:www.bonusMe.ru\DEMO_GEN.HTM То. что я распаковал здесь:http://www.lombuh.narod.ru |
|
Создано: 11 мая 2006 10:40 · Личное сообщение · #2 |
|
Создано: 11 мая 2006 15:27 · Личное сообщение · #3 |
|
Создано: 11 мая 2006 15:46 · Личное сообщение · #4 |
|
Создано: 11 мая 2006 17:10 · Личное сообщение · #5 |
|
Создано: 11 мая 2006 19:31 · Личное сообщение · #6 Может я конечно что проглядел или защита сработала, но никаких кодов кроме адреса 16BC10 я не вижу. Точнее видел по другим адресам, если точки останова ставить. Т.к. в проге есть еще thread и вызов KillTimer, то ясно что поймать программу анализа будет не просто. Пока ясно ,что введенный код хранится по адресу 16BC10, пока не нажмем кнопку регистрации. После нажатия кнопки он видимо переносится по адресу 16BC80 и скорее всего анализируется еще до останова по 45D2A8 ( она вызывается из 0060D5A2, а не там где пароль), т.к. на стеке лежат все данные регистрации. На сегодня все! Да - прога написана на Дельфи, но DeDe мало что выдает - жаль. Надо бы ее дизассемблировать, чем-то, где сигнатуры Дельфи - завтра IDA попробую. К сожалению я краклабом слишком сильно увлекся - придется тормозить и основной деятельностью заняться. |
|
Создано: 11 мая 2006 23:59 · Личное сообщение · #7 |
|
Создано: 12 мая 2006 13:28 · Личное сообщение · #8 Pafic пишет: Здесь же что то не то. Посмотрел я откуда идет на адрес 0060D5A2: 0060D482 E8 0560EDFF CALL lombuh.004E348C 0060D487 84C0 TEST AL,AL 0060D489 0F84 04010000 JE lombuh.0060D593 Как видишь результат в регистре ( коды на стеке) и если занопить JE, то идет сообщение про дополнительный пароль, т.е. "тепло". Проверка явно не только в 004E348C идет, т.к. 10 символьный ключ регистрации и более длинный кладут в разные адреса. Короче бомби проги которые выше адреса 0060D487 - олли там нормально все трассирует. У меня с временем напряг сильный. |
|
Создано: 12 мая 2006 13:58 · Личное сообщение · #9 |
|
Создано: 12 мая 2006 18:08 · Поправил: tundra37 · Личное сообщение · #10 Немного посмотрел - именно это программа анализа. Все остальные вытягивают данные для анализа В анализе какую-то роль играет число 2244050784 из него еще какое-то получается. Если занопить оба входа, долго думает, но все равно ругается. Либо там пауза, либо идет расшифровка. Анализ на крипто ничего не показал - будем надеятся, что легко сломается "самопальный алгоритм". Два пароля тоже радуют - по теории один нормальный тяжело ломается, а два "самопальных" - без проблем. число 2244050784 для ИНН=1234512345, и потом еще одно число появляется. Второй JMP должен отработать - это доп-пароль. Так и не научился EIP править - в command-bar ошибка, а двойной клик - ноль эмоций |
|
Создано: 12 мая 2006 19:04 · Личное сообщение · #11 Я менял джампы. Правда не в этих местах. Я это делал в редакторе - тоже не умею в Ольке. А трассирую в айсе. Но. кстати какоето странное число я видел в edx и в том участке кода, о котором первоначально писал. Мне кажется здесь вряд ли чтото даст занопливание так. как если защиту таким образом выключить и при этом не получить ничего в реестре, то запертые функции не активизируются. Если только и их потом "доводить". А ведь они - эти самые запертые функции проверяются именно через ту процедуру, какую я давал выше - там где вызов идет из 34 мест. |
|
Создано: 12 мая 2006 19:35 · Личное сообщение · #12 Да и еще. В проге есть место, где при попытке воспользоваться запертой функцией, выдается сообщение "В бесплатной версии ограничение". Может оттуда зайти и глядишь гдето удастся пропатчить? Там хорошо видны сравнения и переходы. кроме того. там можно попробовать заменить push 00 а 01. : 005D1587 E890AEEFFF cal1 004CC41C : 005D158C 85CO test eax, eax : 005D158E 7E75 jle 005D1605 : 005D1590 8B83EO020000 mov eax, dword ptr [ebx+000002E0] : 005D1596 E881AEEFFF cal1 004CC41C : 005D159B 3B83EC020000 cmp eax, dword ptr [ebx+000002EC] : 005D15A1 7E62 jle 005D1605 : 005D15A3 A1647A6300 mov eax, dword ptr [00637A64] : 005D15A8 8BOO mov eax, dword ptr [eax] : 005D15AA 83B8DCOOOOOOOO cmp dword ptr [eax+000000DC], 00000000 : 005D15B1 7552 jne 005D1605 : 005D15B3 A1647A6300 mov eax, dword ptr [00637A64] : 005D15B8 8BOO mov eax, dword ptr [eax] : 005D15BA 80B8FD02000000 cmp byte ptr [eax+000002FD], 00 : 005D15C1 7542 jne 005D1605 : 005D15C3 6AOO push 00000000 : 005D15C5 8D55F8 lea edx, dword ptr [ebp-08] : 005D15C8 8B83EC020000 mov eax, dword ptr [ebx+000002EC] : 005D15CE E8A18BE3FF cal1 0040A174 : 005D15D3 8B4DF8 mov ecx, dword ptr [ebp-08] : 005D15D6 8D45FC lea eax, dword ptr [ebp-04] Possible StringData Ref from Data 0bj ->"B бecплaтнoй вepcии oгpaничeниe " I : 005D15D9 BA34165DOO mov edx, 005D1634 |
|
Создано: 13 мая 2006 00:35 · Личное сообщение · #13 Я сейчас смотрел - правда без отладчика. только в Дасме. Отладчик на работе не держу. Второй пароль - это расширение лицензии. я правда ничего не читал о том, что там ее еще и расширить можно. А еще одно число после сгенеренных десяти символов ИНН (мне кажется) - это видимо "реакция" проги на постоянно введенный номер лицензии. Но. ведь где то они должны "объединиться". Иначе эти 10 символов и были бы рег.кодом. У меня тоже на работе аврал. Сильно долго сидеть за креком не выходит. |
|
Создано: 13 мая 2006 09:04 · Личное сообщение · #14 Останов: 0060D482 E8 0560EDFF CALL lombuh.004E348C На стеке ( рабочие ячейки программы ) 0012F2C0 0113D43C ASCII "200206001" Зашитый номер лицензии 0012F2C4 011425D4 ASCII "200206001" Зашитый номер лицензии 0012F2C8 0113A814 ASCII "1234512345" ИНН 0012F2CC 011425EC ASCII "1234512345200206001" ИНН+Зашитый номер лицензии 0012F2D0 0114258C ASCII "gggg34rtaaaa222fffff" рег-код 0012F2D4 011425B0 ASCII "gggg34rtaaaa222fffff" рег-код ============================================= Pafic пишет: "В бесплатной версии ограничение". Может оттуда зайти и глядишь гдето удастся пропатчи Во-первых, я не знаю как туда попасть( напиши какую-нибудь функцию попроще - небольшой опыт работы с бух-программами есть), во-вторых, я все больше склоняюсь к мысли, что без анализа не обойтись - программа после выдачи сообщения про "В бесплатной версии ограничение" идет туда же, куда и без этого сообщения. Значит закрываются функции, скорее всего, через ячейки и как их открыть - угадывать надо Пока твою задачку вынужден отложить |
|
Создано: 13 мая 2006 17:27 · Личное сообщение · #15 |
|
Создано: 14 мая 2006 10:46 · Личное сообщение · #16 Pafic пишет: и оттуда все смотреть в edx Почему обязательно в EDX. Результат проверки вообще в AL посылается. Первые 10 символов рег-кода долго лопатятся и получается другая комбинация, причем при перелопачивании используется еще один 10-ти символьный код ( он ниже по стеку появится). Потом это все еще долго мурыжится - пока никаких идей нет, а ковырятся нет сил и времени. Тему вроде смотрят - если перестанут, тогда в личку уйдем. |
|
Создано: 15 мая 2006 11:00 · Личное сообщение · #17 Посмотрел. Да, видно. что из этих ячеек, которые ты написал, что то берется и из этого - чегото образуются вторичные пароли. Но в айсе я не рассмотрел это чтото в виде ASCII. Пробовал командой "?". Потом перешел в ольку. Может я делаю в ней что не так, но видел в виде ASCII только ИНН и номер лицензии - тоесть: 0012F2C0 0113D43C ASCII "200206001" Зашитый номер лицензии 0012F2C4 011425D4 ASCII "200206001" Зашитый номер лицензии 0012F2C8 0113A814 ASCII "1234512345" ИНН 0012F2CC 011425EC ASCII "1234512345200206001" ИНН+Зашитый номер лицензии А все что ниже - рег.код не виден. Ставил бряк на адрес 0060D482 E8 0560EDFF CALL lombuh.004E348C Пользовался для этого плагином "Apibreak" |
|
Создано: 15 мая 2006 15:15 · Личное сообщение · #18 Pafic пишет: А все что ниже - рег.код не виден Специально проверил - поставил бряк по F2 - все видно. Вообще эти строки заводятся в динамической памяти, с 16 символов уже другой адрес, больше 32 - еще один. Поэтому может в твоей ОС( у меня ВИН2000) механизм выделения работает по другому и их нет на стеке. Я попытался найти, где это, но бряк по памяти бесполезен. На всякий случай еще одно место, где рег-код на стеке. 004E345F 33C0 XOR EAX,EAX И чуть ниже вызов call 004E3398 004E3573 E8 20FEFFFF CALL lombuh.004E3398 А в EAX - рег-код. Если не получится, тогда совет трассируй подпрограмму по 004E348C. Подпрограммы с адресом 0040хххх - пропускай - это мелкие системные. Заходи только в 42хххх 43хххх, в какой-то из них или по ходу в 004E348C увидишь рег-код и его обработку. Алгоритмы вроде несложные - до выходных попробую разобрать. решил поковырять. Вот кусок, который превращает ИНН+Зашитый номер лицензии в десятизначное число. Чего там суммирует, делит на десять и по циферке собирает. 004E34F9 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ...................................................................... ................. 004E3535 ^7D C2 JGE SHORT lombuh.004E34F9 |
|
Создано: 15 мая 2006 20:20 · Личное сообщение · #19 |
|
Создано: 16 мая 2006 12:48 · Личное сообщение · #20 |
|
Создано: 16 мая 2006 13:12 · Личное сообщение · #21 Проверил. Тот код, что начинает вычисляться циклом с адреса 004E34F9 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] - это не рег. код. Из него дальше начинаются вычисления. Всего в рег коде будет (в моем случае) 21 символ - 12 символов ИНН (физическое лицо) и 9 символов из лицензии. Причем на ИНН сначало генерится 11 символов, а 12 символ уходит к той части кода, которая на лицензию. Все кладется в EDX/ По адресу 4E3582 d edx - видны все цифры но не видно, как они должны быть расположены при вводе в прогу. Если их просто сложить (а на стеке они порознь), то выдается ошибка. Защита задумана так, чтобы в edx генерилось "на дурака" - в зависимости от того, как ты ввел в в прогу. Но я пока не могу отследить как именно должны быть введены эти цифры. |
|
Создано: 16 мая 2006 13:13 · Личное сообщение · #22 |
|
Создано: 16 мая 2006 15:09 · Личное сообщение · #23 Pafic пишет: это не рег. код Я просто не написал. Я это все пробовал. Если бы все так просто было. Надо полностью алгоритм смотреть и наверняка рег-код явно нигде не появится. Скорее всего будут сравнивать две величины : одну сгенерированную из ИНН+лицензия и вторую из рег-кода. В этом и сложность, а иначе я бы до кода добрался уже. Время - увы. |
|
Создано: 16 мая 2006 15:22 · Личное сообщение · #24 Pafic пишет: это не рег. код Я просто не написал. Я это все пробовал. Если бы все так просто было. Надо полностью алгоритм смотреть и наверняка рег-код явно нигде не появится. Скорее всего будут сравнивать две величины : одну сгенерированную из ИНН+лицензия и вторую из рег-кода. В этом и сложность, а иначе я бы до кода добрался уже. Время - увы. |
|
Создано: 16 мая 2006 15:51 · Личное сообщение · #25 Да, со временем действительно туго. Я на работе имею безграничный инет. но не могу этим заниматься. Дизасемблер держу, но отладчик не могу. А может другим путем пойти - попробовать найти место, где прога считывает из реестра рег.данные и сделать так. чтобы функция всегда возвращала "1". Я этим пока не занимался никогда. Кстати, как называется эта функция в винде? Правда плохо. что (или задумано так. или это я так грязно распаковал) в дизассемблере функций не видно. |
|
Создано: 16 мая 2006 16:36 · Поправил: tundra37 · Личное сообщение · #26 Pafic пишет: ) в дизассемблере функций не видно. В IDA все видно : RegOpenKeyExA, RegQueryValueExA, RegSetValueExA regmon показывает из интересного, только это HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed Программа какую-то величину генерит и пишет в реестр. Скорее всего в реестре рег-код она будет искать, когда что-то в ini будет прописано. Грамотно сделано - открытым текстом есть только Борланд, свои ключи они так не хранят. Пока рег-код не подберешь - ключи не узнаешь. Тут тема пробежала про скрипты в олли - хотел попробовать, но прога под олли перестала работать - блин ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Наставил вчера бряков по Alloc - вот и сломал. Скрипт не смог, да и не нужны - там condition есть. Поставил бряки по памяти еще раз - именно по ссылкам со стека проверяют рег-код. Выяснил только,что вторая цифровая строка зависит от введенного рег-кода, т.ч. точно надо дальше ковырять. Пока плюну на трассировку и попробую все-таки DeDe нормально применить - все-таки при наличии имен Дельфи-функции легче смотреть, что есть что. |
|
Создано: 17 мая 2006 12:15 · Личное сообщение · #27 Pafic В бой пошла тяжелая артиллерия, т.к. коница без толку бьется. 1) Я распаковал по второму разу : вызвал PeTools 1ю5 и увидел в нем плаг UPXFIX. Сделал и применил распаковку UPX - получился рабочий модуль и DeDe его скушал. К сожалению сама программа проверки не воспринялась, как паскалевская(или я что-то упустил в DeDe), но вот имена всех функций теперь есть. Почему-то они в файле events.txt, ну вроде логично. Попытаюсь либо получить паскаль, либо в IDA загнать имена - так верил в DeDe, что не стал сразу делать. 9ef6_17.05.2006_CRACKLAB.rU.tgz - events-ogni.rar |
|
Создано: 17 мая 2006 13:18 · Личное сообщение · #28 1) Проверки такая : читают ИНН+лиц 004E34AC |. E8 0F0FF2FF CALL <OGNI.System.@LStrAddRef> и говорят, что все хорошо 004E34BF |. C645 F7 01 MOV BYTE PTR SS:[EBP-9],1 Потом долго, долго проверяют и находят, что что-то плохо пишут 0 в [EBP-9] 2) Наша цель, чтобы прошли поверки и дойти до основной проверки : 004E35C9 |. E8 4E0DF2FF CALL <OGNI.System.@LStrCmp> Сюда она со случайными кодами не попадает. Прикладываю прогу проверки с именами программ в CALL. Осталось 3 подпрограммы рядышком неразобранных. Короче, потихоньку приближаемся к развязке. Теперь думаю в личку перейти можно, чтобы авторы программы не привлекли за распространение кряков 1a50_17.05.2006_CRACKLAB.rU.tgz - Analiz.asm |
|
Создано: 17 мая 2006 16:38 · Личное сообщение · #29 |
eXeL@B —› Вопросы новичков —› Помогите разобраться |
Эта тема закрыта. Ответы больше не принимаются. |