Сейчас на форуме: Magister Yoda, johnniewalker, Kybyx, vsv1, r0lka (+5 невидимых) |
eXeL@B —› Крэки, обсуждения —› Ccalc6.80 (версия 6.98.56). Давайте закончим? |
. 1 . 2 . 3 . 4 . 5 . 6 . >> |
Посл.ответ | Сообщение |
|
Создано: 03 апреля 2007 13:36 · Личное сообщение · #1 Здравствуйте, Мастера! Предлагаю закончить разбор программы Ccalc8.80 версии 6.98.56. Ее уже пытались ломать --> здесь (правда более старую версию)<--, но так и не закончили (а для себя решили, что взломана ). Есть уже кое-каие наработки и ОЧЕНЬ хочется дело довести до конца., т.к. жаль потерянного времени. Без Вашей помощи не обойтись - уже голова болит от этого. Да и "одна голова хорошо, а много ...". Автор грамотно подошел к защите, но Вы то круче!!! Ближе к делу: Программа написана на Delphi, что несколько упрощает (уже есть нек. готовые средства) и не запакована, следующие версии упакованы ASProtect 1.23. -->Цель лежит здесь. (2,99 МБ)<-- Это самораспаковывающийся архив рар. Просто запустить - она установится в "Program Files". При запуске она берет серийник из своего ini-файла (секция Common, параметр C2) и проверяет его. Если НЕ он, выдает окошко для регистрации. Если он, прописывает в переменную 0 и проверяет эту переменную при работе со правочниками и т.д. Прописать в эту переменную 0 легко. Патчить нужно по смещению 00656F5C (вместо mov al, byte ptr [ebp-05] пишем mov al, 0 ). Что бы Вас не напрягать мелочами --> вот пропатченный exe-шник. (1,24 МБ) <-- И все, программа запускается, все пункты работают. Все бы хорошо, но автор с некоторой версии сделал так, что программа при не верном серийнике считает неправильно данные. Вот нужно и найти, как это убрать? Подобрать правильно серийник не реально, т.к. серийник превращается в нужный вид с помощью шифрования RSA с 768 биттным ключем (я неделю ковырял ассемблерную процедуру превращения и выяснил это). Зависимость Res:=SN^13 mod N, где Res - превращенный вид SN (серийника), а N - 768-ми биттное целое. Кто не верит процедура Call 4D1314 (на входе eax указывает на SN, на выходе eax указывает на Res - преобразованный вид). Эта процедура вызывается много раз (что бы зпутать скорее всего), причем первые два раза для генерации кода компьютера по имени компа и винту (со степенью ^3 и другим N ). В серийнике содержатся название организации, на кот. выдается регистрация, ее город и телефон (все данные используются на распечатках-отчетах), с 3-го по 6-й байт и 4-ре последних - код компьютера. А вот первые три байта я так и не понял. У меня есть несколько верных серийников - во всех 1-й байт =00, 2-й=02. Нулевой разный. --> Вот несколько верных серийников (596 б)<-- (если нужны, хотя и по-умолчинию кот. в ini подойдет). Как она себя регистрирует? По смещению 6549F4 вызывается процедура 4D1314 (засшифрования SN, см. выше), далее идет сравнение через XOR те 8-мь байт о кот. я говорил. Если все верно, выполняется процедурка установки той переменной в 0, кот. мы уже пропатчили (00656F5C). И так все это для "общего развития". Программа считает НЕ верно данные. Добавляет какой-то коефициент. Как это проверить: --> Вот Вам заказ (1 кб) <--. Его нужно открыть в программе (вход в программу под юзером admin с пустым паролем) в меню "Заказ"->"Открыть из файла". На закладке "Лист заказа" кнопка "Пересчитать заказ" выполняет математику, "Печать" распечатывает отчеты. Т.к. цены в базе еще не заполнены, то должны быть нули, а не мелкие числа (это уже тот коефициент). При печати "Материалы+Неликвид" где материалы измеряются в шт. должны быть целые числа. --> Вот распечатка из ЗАрегистрированной версии. <-- Ну и естественно цена должна соотв. справочнику, а сумма умноженному колич. на цену. И так: Как же найти эту лишнюю добавку? (со знаком то "+" то "-") После кнопки "Пересчитать заказ" поподаем на процедуру 58BB54, в ней выполняется 61В674 и, похоже сам пересчет 58CF9C. Помогите, пожалуйста, разобраться. Жалко ведь потраченного времени, хотелось бы закончить, но уже мозги не соображают. P.S.: Вроде все подробно расписал, что нашел. Вот еще пару полезных ссылок (может кому пригодится). --> Файл ассемблерного кода из W32DsmV10 <-- и Файл из --> DeDe_3_10_1635. <-- Я не спец в этих делах, подправьте, если что и подсобите, плиз! |
|
Создано: 03 апреля 2007 17:14 · Личное сообщение · #2 |
|
Создано: 03 апреля 2007 17:34 · Личное сообщение · #3 |
|
Создано: 03 апреля 2007 20:38 · Личное сообщение · #4 |
|
Создано: 03 апреля 2007 21:21 · Личное сообщение · #5 Квантовые компы. Канадцы - великие мистификаторы. Работают зачастую с Intel, IBM e/t/c Фрактальное описание "молекул" является любимым детищем, как и головоломки, для запудривания мозгов (компьютер в Канаде, надо было еще сказать, что при температуре ниже 0K, остальные фтыкают на симпозиуме на пляжах пад виски). В качестве одной из самых известных их мистификаций - закоперщик канадец Бабек. Основной мутитель - Intel, IBM, Texas Inst, Rockwell. В 70-80 г.г. прошлого столетия весь мир был поставлен на уши проблемой ЦМД (цилиндрических магнитных доменов), стенок Блоха и т.д. Мир, включая СССР, потратил больше 100 млрд. $ На энту эпопею. Особенно подставили Japan - Сони, Фуджицу, Мицубиси и прочая. В Европе отличились французы и немцы - Томпсон, англичане. Было проведено десятки мировых конгрессов (!) и симпозиумом, на которые собирались тысячи (!) специалистов, даже очень известных, не буду упоминать всуе ибо каждый грешен. ЮАР щиталы дивиденды от продаж галлий-гадолиниевого граната, китайцы стали важными - у них он тоже был. Ну и конечно, СССР, у него больше всех. И нигде в мире больше его небыло. Приборы в США запускались на спутниках и Шаттлах. Ажиотаж был супер. Сотни тысяч физиков, математиков, технологов, материаловедов, электронщиков бились на этом фронте. А в это время америкосы в тиши лабораторий скромно кропали, то, что стоит сейчас в ваших компьютерах - мегабайтные чипы памяти и ускоренно продвинули HDD большой емкости. Отсюда - вывод: На 99% запудривание параллельно ведутся работы по другим архитектурам если вы видите слово телепортация, то бегите как от кошки Шредингера. Технический прогресс почти всегда делается на обмане, если есть коммерческая выгода. |
|
Создано: 03 апреля 2007 23:47 · Поправил: stahh · Личное сообщение · #6 Sasha73 Если бы ты внимательно поискал на форуме, то увидел бы, что есть еще одна тема по этой проге. Вот там как раз tundra37 и показывал место, где эти остатки генерятся. И еще- прога была взломана достаточно для того, чтоб ей можно было пользоваться. Чем не устраивает старая версия? Лично меня она за***ла еще тогда, и возвращаться к ней я не собираюсь. Я ее сломал совсем подругому. newborn может подтвердить, что кряк работал, и не нужны были никакие данные. Могу скинуть кряк для той версии, что у меня. Саму прогу не залью, инет не посволяет. ЗЫ. Брось ты ее. Юзают ее всякие жлобы, которые жмут 300 баксов отдать за раскрой евроокон |
|
Создано: 04 апреля 2007 09:30 · Личное сообщение · #7 stahh пишет: Если бы ты внимательно поискал на форуме, то увидел бы, что есть еще одна тема по этой проге. Я в начале своего сообщения не на нее сослался? Если нет, то ткни, пожалуйста носом. Я скачал оттуда две сломанные версии, но одна уж ОЧЕНЬ старая. А вторая, кот. лоадером загружается на 4-х компьютерах не запустилась нормально. Может чего не доглядел я. stahh пишет: Могу скинуть кряк для той версии, что у меня. Скинь, пожалуйста, и напиши для какой версии. Буду благодарен. stahh пишет: Брось ты ее Жалко убитого времени. |
|
Создано: 04 апреля 2007 11:09 · Поправил: DMD · Личное сообщение · #8 |
|
Создано: 04 апреля 2007 12:39 · Личное сообщение · #9 Все. Вроде добился правильных чисел. Считает нормльно. Почитав здесь все на форуме об этой проге, решил пойти своим путем. Разобрав процедуру регистрации, мы знаем в какой ответный код должен преобразовываться серийник. Если каждый раз сразу после процедуры преобразования проге подсовывать верный (предположительно, т.к. 3 байта я так и не разобрал из него, но и без них считает) серийник, то она запускается и считает верно. Нужно придумать как пропатчить. Подскажите, пожалуйста, как добавить к этой программе еще одну процедуру? Как дописать код на ассемблере? Она будет во время вызова процедуры преобразования подставлять нужный преобразованный серийник. Ее саму сильно портить нельзя, так как она вызавается не только для преобразования серийника, но и для шифрования кода компьютера в пом. RSA и может еще для чего. Т.е. нужно ДОПИСАТь еще одну процедуру, кот. проверит что это нужный вызов (по входным данным) и вернет нужный серийник. Дописать смогу, но вопрос как ее добавить к программе? Если в конец exe-шника добавить, то наверное не получится, т.к. там переменные и загрузятся в другую область памяти? Я новичек в этом и не знаю теории. Подскажите, пожалуйста, как и куда добавить нужный код? |
|
Создано: 04 апреля 2007 12:45 · Личное сообщение · #10 |
|
Создано: 04 апреля 2007 13:20 · Личное сообщение · #11 |
|
Создано: 04 апреля 2007 13:39 · Личное сообщение · #12 |
|
Создано: 04 апреля 2007 14:06 · Поправил: DMD · Личное сообщение · #13 Sasha73 пишет: Ее саму сильно портить нельзя, если все так, то следующий команды после вызова процедуры преобразования придется "убрать" в новый код, в котором и заменишь серийник. все зависит от наличия свободного места рядом с вызовом процедуры преобразования.. или jmp_short + new_code + jmp_short_back или, как у взрослых: CALL_NEW_PROC и не забудь выполнить команды, затертые jmp/CALL ... судя по размеру серийников, проще будет прилепить к exe доп.секцию.. с флагом execute. но это как вариант.. сам код примитивен: mov edi, addr_destination mov esi, addr_correct_serial mov ecx, serial_length ; in byte - may be in DWORD rep movs BYTE [edi], BYTE [esi] ; must change "BYTE" -> "DWORD" ps/ если что, сохраняй регистры "до" и восстанавливай "после".. наверное, это и сам знаешь.. |
|
Создано: 04 апреля 2007 15:31 · Личное сообщение · #14 Спасибо! Приблизительный путь понятен. Про затертые байты и востановление после JMP или CALL само-собой. Примитивный код для подставы серийника тоже ясен изначально. Вот вопрос в добавлении секции. Просмотрел инфу о структуре PE файла, нужно читать и разбираться. Нет ли готового софтика для добавления секции? Где лучше хранить сам нужный серийник (может в конце секции?) и как прыгать на новую секцию? Или все таки вручную нужно секцию создавать и придется материал почитать? Пока Вы отвечаете почитаю, что бы совсем не наглеть! |
|
Создано: 04 апреля 2007 15:48 · Личное сообщение · #15 Sasha73 пишет: Вот вопрос в добавлении секции. Просмотрел инфу о структуре PE файла, нужно читать и разбираться. Нет ли готового софтика для добавления секции? PE_Tools, LordPE и т.п. А вообще секцию добавлять не обязательно - просто посмотри свободное место заполненное нулями в секции кода (только чтобы оно входило в RawSize) или заюзай заголовок файла (правда DEP может срабатывать) ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 04 апреля 2007 16:28 · Личное сообщение · #16 Нашел еще поще решение, если не ошибаюсь. В проге (в exe-шнике) есть картинка JPG (типа заставки). Вот можно ее в уголке подпортить. Места хватает - она не маленькая. Да и прога не ругается, когда я 576 бай FF-фами заполнил, просто в уголке серый квадрат появился. В файле место с которого правил 31EF00. Как вычислить к какой секции принадлежит? Как туда прыгнуть и назад? И насколько это сложно? Вот секции выдаваемые W32DsmV10:
|
|
Создано: 04 апреля 2007 16:30 · Поправил: DMD · Личное сообщение · #17 Sasha73 пишет: Вот вопрос в добавлении секции. Просмотрел инфу о структуре PE файла, нужно читать и разбираться. Нет ли готового софтика для добавления секции? Где лучше хранить сам нужный серийник (может в конце секции?) и как прыгать на новую секцию? тут начинаются "варианты".. кому что нравится, кто к чему привык как правило, да и тебя должно устроить! , чтобы не очень много думать - делай в Winhex или любым hex-редактором "пустышку" размером сколько потребуется (сам можешь прикинуть).. а в LordPE (на пример) выбираешь PE editor -> твой файл -> section -> клик на последню + локальное меню -> load section from disk -> выбирешь заготовку -> save -> ok viola! прилепил правишь head new section -> flags (исполняемый код) иначе при загрузке в Олли узнаешь адрес новой секции (чтобы не складывать все из section info) ну и переносишь код + данные. только вот, если попытаешься сохранить в олли измененный exe .. новая секция в изменения не попадет.. так что ручками.. finish! ps/ если все дело в ~ 600 байт - попробуй поискать "00" в файле.. как правило, нужное кол-во найдется. |
|
Создано: 04 апреля 2007 20:51 · Личное сообщение · #18 Спасибо за помощь. Нули нашел в конце секции кода, хватило. Код написал. Пропатчил. Все работает. Осталось одно, узнать код любого компьютера. Можно использовать саму же программу. Она в процедуре своей регистрации сравнивает преобразованный серийник с нужным кодом. Вот если бы пропатчить еще такой же exe-шник, что бы он скидывал в файл этот код. Как это сделать? Создать еще одну такую же процеду я смогу по такому же принципу. А вот как в файл область памяти сбросить? Если воспользоваться int 21h, будет ли это нормально работать на ОС 2k, 9x и XP ? Если пользовать API (CreateFile, WriteFile), то как вычислить адрес процедуры CreateFile и т.д. (ведь нельзя же просто в чужой программе написать Call CreateFile ?) ? Подскажите, пожалуйста, Мастера! Уже чуть-чуть осталось. |
|
Создано: 04 апреля 2007 20:58 · Личное сообщение · #19 Sasha73 пишет: Если воспользоваться int 21h, будет ли это нормально работать на ОС 2k, 9x и XP ? Если пользовать API (CreateFile, WriteFile), то как вычислить адрес процедуры CreateFile и т.д. (ведь нельзя же просто в чужой программе написать Call CreateFile ?) ? int 21h ты естессно вызывать не можешь. CreateFile наверняка уже есть в импорте. а если нет - что мешает добавить? |
|
Создано: 04 апреля 2007 21:21 · Поправил: Ara · Личное сообщение · #20 |
|
Создано: 05 апреля 2007 10:19 · Личное сообщение · #21 Sasha73 пишет: Осталось одно, узнать код любого компьютера. Можно использовать саму же программу. Она в процедуре своей регистрации сравнивает преобразованный серийник с нужным кодом. Вот если бы пропатчить еще такой же exe-шник, что бы он скидывал в файл этот код. Как это сделать? гм.. может проще сделать еще один аналогичный патч *.exe на предмет коррекции нужного кода? Впрочем, коллеги ssx и Ara предоставили широкое поле для фантазии! и экспериментов .. |
|
Создано: 05 апреля 2007 11:50 · Личное сообщение · #22 DMD пишет: может проще сделать еще один аналогичный патч *.exe на предмет коррекции нужного кода? Да, совершенно верно. Таким путем и пошел. Но нарвался на проблему. В секции .text в конце больше нулей не осталось. Я все занял. Там такая картина: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Вот после 94 22 66 00 я и "встроился". Для коррекции нужного кода нужно еще место. Пытался встроить сразу перед 94 22 66 00, там как видно тоже нули (их больше, не все показал). Но программа делает недопустимую ошибку и вылетает. Странно, но похоже я зацепил "опасный участок" кода. Такое может быть? Значит нужно искать другое место. Есть еще нули в конце следующей секции .itext. Она тоже с такими же флагими, как и .text (т.е. Executable и т.д.). Могу ли я ее использовать? Т.е. есть ли уверенность, что она в памяти тоже ВСЕГДА будет идти после .text и мои ссылки JMP будут работать? |
|
Создано: 05 апреля 2007 12:03 · Личное сообщение · #23 |
|
Создано: 05 апреля 2007 18:14 · Личное сообщение · #24 Ara пишет: А добавить новую секцию не получилось? Я и не пытался. Зачем увеличивать файлик? Так скрытней! Все получилось, СПАСИБО всем участникам. Пару часов промучался над мелочью. Я ведь таблицу с серийником (место из кот берется подставляемым серийником) тоже в секцию .text запихнул. Вот когда первую процедуру писал (в секцию .text), обращался к ней, копировал все было ОК. А когда вторую писал (в секцию .itext) ее добавил, то никак не мог эту таблицу изменить, ошибка вылетала, все прога висла. Я уже и так и сяк, по ошибке не понятно было в чем дело. Уже начал думать, что из секции в секцию не так просто обращаться и другие глупости. А потом дошло, что ведь на секцию .text стоят флаги Executable, Readable и еще какой-то, а Writeble не включен и мы в ОС вылетаем при обращинии к этой памяти. Поменял флаг и все пошло. Столько времени убил по тупости. |
|
Создано: 05 апреля 2007 19:30 · Личное сообщение · #25 |
|
Создано: 24 апреля 2007 15:09 · Личное сообщение · #26 Sasha73 пишет: Осталось одно, узнать код любого компьютера. Можно использовать саму же программу. Она в процедуре своей регистрации сравнивает преобразованный серийник с нужным кодом. Чего-то ты усложнил все. Для "обмана" проверки серийника во всех версиях хватало замены 0 на 1 или наоборот. Соответственно, за кривой счет отвечал "серийный номер" диска С. Для него было 2 варианта : править серийник известной утилитой(но слетает регистрация программ завязанных на него), либо патчить то место, где он считывается - в старом топике подробно объяснено. Не думаю, чтобы в новой версии что-то поменялось. |
|
Создано: 13 июня 2007 17:01 · Личное сообщение · #27 |
|
Создано: 15 июня 2007 00:27 · Поправил: SergX · Личное сообщение · #28 Всем превед ! Если кого интересует, предлагаю принять участие в написании LOADERа. Я считаю в данном случае этот вариант самым корректным, поскольку многим пользователям необходимо регулярно обновлять прогу (добавляют новые профиля и т.д.). Обновление представляет собой замену EXE и MDB. После обновления CCALC не требует перерегистрации. LOADER я уже написал он перехватывает вызовы native API (DeviceIoControl, GetDiskFreeSpaceExA, GetVolumeInformationA, GetComputerNameA, GlobalMemoryStatus) и может подставлять любые значения. Кто точно знает какие именно данные использует CCALC для генерации ключа ??? 0012FAF4 015091F8 ASCII "COMP" 0012FAF8 7C913801 ntdll.7C913801 0012FAFC 00384102 0012FB00 775F4101 ole32.775F4101 0012FB04 015091C8 ASCII "34C8CFA8" --- это что ??? 0012FB08 00000001 0012FB0C 0153B468 ASCII "WD-WCANK8176183" 0012FB10 0153B448 ASCII "WDC WD2500KS-00MJB0" 0012FB14 015091E0 ASCII "02.01C03" Вот LOADERы: [url=loader.zip]loader.zip[/url] Loader_MemPatch - подставляет пробные данные Loader_Log – создаёт лог вызовов API (в c:\loader.log ) Loader_ShowMsg – выводит месаги при вызовах API Вот мой CCALC 6.99.7.24423 : [url=ccalc.zip]ccalc.zip[/url] PeID говорит “ASProtect 1.2x - 1.3x [Registered] -> Alexey Solodovnikov” Распаковывать я не умею. Буду очень благодарен, если поможете. Шагать эго так очень не удобно…. Если у кого есть, скиньте рабочий ключ и данные, какие и куда надо подставлять. А я выложу готовый LOADER. |
|
Создано: 15 июня 2007 11:04 · Личное сообщение · #29 Уже разобрался. 0012FAF4 015091F8 ASCII "COMP" - GetComputerNameA 0012FAF8 7C913801 ntdll.7C913801 0012FAFC 00384102 0012FB00 775F4101 ole32.775F4101 0012FB04 015091C8 ASCII "34C8CFA8" - GetVolumeInformationA (серийка диска С) 0012FB08 00000001 0012FB0C 0153B468 ASCII "WD-WCANK8176183" - DeviceIoControl (серийка HDD) 0012FB10 0153B448 ASCII "WDC WD2500KS-00MJB0" - DeviceIoControl (модель HDD) 0012FB14 015091E0 ASCII "02.01C03" - DeviceIoControl (версия прошивы HDD) |
|
Создано: 15 июня 2007 15:08 · Личное сообщение · #30 |
. 1 . 2 . 3 . 4 . 5 . 6 . >> |
eXeL@B —› Крэки, обсуждения —› Ccalc6.80 (версия 6.98.56). Давайте закончим? |
Эта тема закрыта. Ответы больше не принимаются. |