![]() |
eXeL@B —› Вопросы новичков —› Программу взломал, но хочу и не могу найти как генерируется правильный код регистрации. |
Посл.ответ | Сообщение |
|
Создано: 09 июня 2013 13:10 · Поправил: AVL4EXELAB · Личное сообщение · #1 Всем привет! Помогите, пожалуйста, (научите) понять как генириуется в программе правильный ответ для регистрации программы на компе. ИД на разных компах - разное. Сам софт я поламал (изменением адреса условного перехода), он принимает любой серийник, но интересно разобраться как можно узнать ПРАВИЛЬНЫЙ ответ. Также интересно откуда прграмма знает, что она уже зарегистрирована ранее, наверное в реестре где-то сохраняет этот факт... Прикрепляю два файла. Ломаный мною и оригинал. https://dl.dropboxusercontent.com/u/104910404/ARDUINO%20simulator.rar Спасибо! ![]() |
|
Создано: 09 июня 2013 13:20 · Поправил: Vovan666 · Личное сообщение · #2 |
|
Создано: 09 июня 2013 13:35 · Поправил: dfnsff · Личное сообщение · #3 AVL4EXELAB пишет: Также интересно откуда прграмма знает, что она уже зарегистрирована ранее, наверное в реестре где-то сохраняет этот факт... Скачай http://technet.microsoft.com/ru-ru/sysinternals/bb896645.aspx и посмотри что куда записывается Тоже интересно как сделать кейген для программы. допустим есть некий сложный(!) код проверки ключа. как я понимаю выход один: встраивать брут в программу? нельзя никак сделать "обратную функцию" т.е. на вход этой функции подаём то что должно получится и получем ключ?)) ![]() |
|
Создано: 09 июня 2013 14:12 · Личное сообщение · #4 |
|
Создано: 09 июня 2013 15:06 · Личное сообщение · #5 |
|
Создано: 09 июня 2013 15:11 · Личное сообщение · #6 dfnsff, AVL4EXELAB Вот кстати еще интересный ресурс http://crackmes.de Там чуть ли не с нулевым уровнем сложности крэкмисы есть, решая их, научитесь ломать более сложное и так по нарастающей. ![]() |
|
Создано: 09 июня 2013 15:15 · Личное сообщение · #7 рега хранится тут HKEY_LOCAL_MACHINE\SOFTWARE\SimForArduino 0.98.C.1 ![]() |
|
Создано: 09 июня 2013 18:38 · Поправил: AVL4EXELAB · Личное сообщение · #8 Спасибо за подсказки. Нарваху читаю денно и ночно. Даже перечитываю. Но что-то застрял, вот и осмелился спросить. PROSIM я видел в коде неноднократно и сравнение видел этого PROSIM. На радостях даже решил что ЭТО и есть пароль (один на всех, по приколу), но не тут-то было, конечно. Этот пароль не прокатил. Я сейчас на курорте, интернет есть только в холле отеля, так-что в топик заглядываю раз на пару часов. Иду в номер попробую поработать исходя из Ваших подсказок. ![]() |
|
Создано: 09 июня 2013 19:11 · Поправил: dfnsff · Личное сообщение · #9 ARCHANGEL пишет: В этом-то и искусство - найти способ получить обратную функцию за допустимое время. т.е. если это возможно даже руками, значит можно всё это автоматизировать? или тут есть какие то ограничения? для MD5 хэшей например нету ничего обратного - только брут) мб аддон есть какой для olly для брута?)) Вобщем тут ещё и не 100 процентов можно сделать Кейген, ассиметричное шифрование не ломануть...пока) Правда был такой случай что разрабы засунули данные для формирования закрытого ключа в прогу...так что да это Искусство!) ![]() |
|
Создано: 09 июня 2013 19:22 · Личное сообщение · #10 Даже руками ? Скорее головой и руками ибо это все не механически делается. В каждом случае индивидуальный подход и автоматизировать этот процесс не получится. Даже если используются хэши не обязательно знать как этот хэш получился(из какой строки), достаточно подменить неправильный хэш(сгенерированный твоим ключом) на правильный(если в программе он проскальзывает где-то), брут обычно не применяется , а если применяется то очень редко. ![]() |
|
Создано: 09 июня 2013 19:24 · Поправил: dfnsff · Личное сообщение · #11 |
|
Создано: 09 июня 2013 19:32 · Личное сообщение · #12 Генерация ключа при необратимом алгоритме невозможна, соответственно и кейген не сделать ко всему. Тебе нужна практика чтобы это понять. А глюки как ты говоришь могут возникнуть в разных случаях, например при проверке контрольной суммы файла и ли если ветка с проверкой содержала еще изменение каких то данных, которые нужны походу исполнения программы, вот как раз нахождение этого всего и правка файла так чтобы все работало, тоже можно отнести к искусству. ![]() |
|
Создано: 09 июня 2013 20:45 · Личное сообщение · #13 dfnsff пишет: ассиметричное шифрование не ломануть Зависит от его типа и размера публичного ключа. В даном случае Vovan666 всё верно сказал, алго простое. Serial number = id тома С в виде (хххх - хххх) Ну и после несложны преобразований в цикле, начиная с 0067DAF8 |> /8B45 C8 /MOV EAX, [LOCAL.14] получается строка, которая сравнивается с PROSIM (точнее ищется PROSIM в декодированной полученной строке) ----- ds ![]() |
|
Создано: 09 июня 2013 21:09 · Поправил: dfnsff · Личное сообщение · #14 |
|
Создано: 09 июня 2013 21:20 · Личное сообщение · #15 dfnsff К чему ты вообще толлить начал про то чего не знаешь? какие-то бруты md5,ассиметрия, нахрена тут это вообще? ![]() |
|
Создано: 09 июня 2013 21:23 · Поправил: DimitarSerg · Личное сообщение · #16 AVL4EXELAB Всё очень просто: на примере 2-х первых символов (как получить PR), дальше сам... мой ID тома F8328583 мейл ds@mail.ru UNICODE "DS@MAIL.RU@@@@@@@" UNICODE " " UNICODE "F832 - 8583 " ![]() ----- ds ![]() |
|
Создано: 09 июня 2013 21:33 · Личное сообщение · #17 |
|
Создано: 09 июня 2013 21:37 · Личное сообщение · #18 |
|
Создано: 09 июня 2013 21:57 · Личное сообщение · #19 Хорош уже не по теме гонять. dfnsff Тебе мало было 1 философского топика про смысл реверса? 1 раз глаза на это закрыл, в следующий раз посты порежу. ![]() |
|
Создано: 09 июня 2013 23:17 · Личное сообщение · #20 Ого, понаписали тут, пока меня небыло ![]() Зачем мне знать как генерится ключь - для самообразования. Ибо, переход я поправил довольно быстро( пару дней ушло), может, просто повезло. И коль я уже разбираюсь конкретно с этой программой, то хотелось-бы вытянуть с неё все соки в плане крекинга. Это моя первая "проба пера" и я не программист, так-что не обезсудьтте. Вот начал разбирать рекоменуемую процедуру и сразу затык. CALL 0067D9F0. Разбираю процедуру по винтикам: 0067D9F0 /$ 55 PUSH EBP // заносим в стек регистр ЕВР (000AF704) 0067D9F1 |. 8BEC MOV EBP,ESP // копируем ЕСП в ЕБП (000AF6D0) 0067D9F3 |. 83C4 AC ADD ESP,-54 // к ЕСП плюсует -54 (000AF6D0 -54 = 000AF67C) 0067D9F6 |. 53 PUSH EBX // в стек ЕВХ (022F5DB0) 0067D9F7 |. 33DB XOR EBX,EBX // обнуляем ЕВХ 0067D9F9 |. 895D AC MOV DWORD PTR SS:[EBP-54],EBX // ЗАТЫК. Помещают 00000000 КУДА? В стек? Почему ТАК делают? 0067D9FC |. 895D B0 MOV DWORD PTR SS:[EBP-50],EBX // ЗАТЫК. Помещают 00000000 КУДА? В стек? Почему ТАК делают? 0067D9FF |. 895D B4 MOV DWORD PTR SS:[EBP-4C],EBX // ЗАТЫК. Помещают 00000000 КУДА? В стек? Почему ТАК делают? 0067DA02 |. 895D CC MOV DWORD PTR SS:[EBP-34],EBX............ 0067DA05 |. 895D C8 MOV DWORD PTR SS:[EBP-38],EBX 0067DA08 |. 895D C4 MOV DWORD PTR SS:[EBP-3C],EBX 0067DA0B |. 895D C0 MOV DWORD PTR SS:[EBP-40],EBX 0067DA0E |. 894D F4 MOV DWORD PTR SS:[EBP-C],ECX 0067DA11 |. 8955 F8 MOV DWORD PTR SS:[EBP-8],EDX 0067DA14 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX 0067DA17 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] В реестре Виндовса нашол где программа сохраняет свои заметки и понял, что толку от этого мало, ибо туда заносятся только те данные, что мне и так известны. Факт успешной регистрации там не фиксируется. ![]() |
|
Создано: 09 июня 2013 23:39 · Личное сообщение · #21 |
|
Создано: 09 июня 2013 23:44 · Личное сообщение · #22 AVL4EXELAB пишет: // ЗАТЫК. Помещают 00000000 КУДА? В стек? Почему ТАК делают? Забей, просто не красивая реализация очистки стека. весь приведенный участок можешь пропустить, это не интересно и к генерации не имеет отношения. ![]() |
|
Создано: 09 июня 2013 23:47 · Поправил: dfnsff · Личное сообщение · #23 AVL4EXELAB пишет: 0067D9F9 |. 895D AC MOV DWORD PTR SS:[EBP-54],EBX // ЗАТЫК. Помещают 00000000 КУДА? В стек? Почему ТАК делают? 0067D9FC |. 895D B0 MOV DWORD PTR SS:[EBP-50],EBX // ЗАТЫК. Помещают 00000000 КУДА? В стек? Почему ТАК делают? 0067D9FF |. 895D B4 MOV DWORD PTR SS:[EBP-4C],EBX // ЗАТЫК. Помещают 00000000 КУДА? В стек? Почему ТАК делают? Здесь просто обнуляют переменные, как в программировании - "на всякий случай" мало ли чего там осталось после работы программы. Как новичок новичку рекомендую использовать IDA+hex rays, в IDA есть крутая функция Graph View. и интересная функция: hex rays, показывает псевдокод твоей функции на языке похожем на c++. вот кусок твоего(из твоего поста) кода из IDA: Code:
гораздо лучше понимается! var_54,var_50... - переменные и там будет видно что с этими переменными делается И ещё 1 момент: во время исследования программы лучше все переменные и функции переименовывать в понятные названия - в итоге получим хорошо читаемый код ![]() |
|
Создано: 10 июня 2013 22:27 · Личное сообщение · #24 DimitarSerg пишет: Всё очень просто: на примере 2-х первых символов (как получить PR), дальше сам...мой ID тома F8328583мейл ds@mail.ruUNICODE "DS@MAIL.RU@@@@@@@"UNICODE " "UNICODE "F832 - 8583 " Делаю как Вы сказали. Но не всё так гладко. Первые 4-ре разряда - без проблем посчитал. 5-й - методом тыка-перебора-анализа-тупо сделал. А 6-й ни в какую. А именно: Ид- 3C78 - 89EF Мейл: @@@@@@@@list.ru Считаю: 3 + 1 = 4+20+20=44-> D C + 1 = D+20+22=4F-> O 7 + 1 = 8+20+1F=47-> G 8 + 1 = 9+20+23=4C-> L -1 + 1 = 0+20+19=39-> 9 2D + 1 = 2E+20+1D=6B-> k Получаю в коде PROSIxxx. Букву М подобрать не могу. Вот мои попытки: 1-A 2-B 3-C 4-D 6-F 7-G 8-H 9-I F-V A-Q B-R a-q b-r o- m-} ^-n z- 0-@ !-1 M-] O-_ G-W H-X J-Z K-[ L-\ Почему 5 и 6 разряды не считаются нормально? Где именно в коде программы виден алгоритм пересчёта? Ибо, я ж ассемблер, типа, изучаю, а не тупо подбором кода зинимаюсь. Помогите, пожалуйста, понять как в коде реализована формула трансформации из мейла и ИД винта в правильный пароль. Разжуйте, если можно, а я постараюсь понять. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Программу взломал, но хочу и не могу найти как генерируется правильный код регистрации. |