Сейчас на форуме: vsv1, NIKOLA, r0lka, johnniewalker (+4 невидимых) |
eXeL@B —› Крэки, обсуждения —› Взлом Alawar игр (отучим от триала) |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . |
Посл.ответ | Сообщение |
|
Создано: 28 сентября 2006 04:20 · Личное сообщение · #1 Уж извините за форму написания ведь он почти первый (че-то я в последнее время расщедрился) Мини тутор по снятию триал-защиты с игр от Alawar`a Инструмент: Shadow with bpmx да голова Кролик : Игра "Разгадай код Да Винчи" Как обычно приобрел очередной ComputerBild и на диске прилагаемом к нему нашлась игруха от алавара "Разгадай Код Да Винчи". На все про все наиграться мне отвели 30 минут а игруха класная новый вариант Lines.Поскольку я никогда не смотрю что мне нужно оттдать за то чтобы вдоволь насладится очередным программным продуктом пришлось на время отложить работу и взятся за сей продукт. При первом рассмотрении PEid нашел Aspr.Периодически лазить в реестр и что нибудь там чистить это не по мне. Не долго думая обработал поделку stripper`ом.Получилось.Причем stripper сказал что триал инфы не используются. Уже интересно ДА. Однако продукт после распаковки запускаться не захотел и улетал в несуществующие адреса. Как же так несправедливо получается уже потрачено 5 минут драгоценного времени впустую 8-( не отступать рано продолжим. Загрузил дамп в shadow и своим трейсером дошел до места где вызываются не существующие адреса. Выглядело это место примерно так call dword [4383a8] где по этому адресу лежало 00401440 естественно указывающее вникуда. Беда но зачем же отступать. Я рассудил так раз такой call есть значит что-то не до конца обработало дамп не доведя до ума т.е. при распаковке процедуры приведения проги до нормального вида не включались а сидели в апи аспра т.е. где то же они есть.Поиском всех референсов на адрес 004383а8 нашлась интересное место: 1 PUSH da_vinci.0040E36D ; /Arg5 = 0040E36D 2 PUSH DWORD PTR DS:[428F44] ; |Arg4 = 00000000 3 PUSH da_vinci.0042839C ; |Arg3 = 0042839C 4 PUSH da_vinci.004210DC ; |Arg2 = 004210DC ASCII "GetLocaleInfoW" 5 PUSH da_vinci.00420F50 ; |Arg1 = 00420F50 ASCII "kernel32.dll" 6 CALL da_vinci.0040E02F ; \da_vinci.0040E02F 7 JMP DWORD PTR DS:[42839C] ; da_vinci.0040D9F0 8 PUSH da_vinci.0040E24E ; /Arg5 = 0040E24E 9 PUSH DWORD PTR DS:[428F40] ; |Arg4 = 00000000 10 PUSH da_vinci.004283A8<---вот он адресок ; |Arg3 = 004283A8 11 PUSH da_vinci.004210EC а это то что должно быть --> ; |Arg2 = 004210EC ASCII "GetProcAddress" 12 PUSH da_vinci.00420F50 ; |Arg1 = 00420F50 ASCII "kernel32.dll" 13 CALL da_vinci.0040E02F ; \da_vinci.0040E02F 14 JMP DWORD PTR DS:[4283A8] 15 PUSH da_vinci.0040E2AA ; /Arg5 = 0040E2AA 16 PUSH DWORD PTR DS:[428F3C] ; |Arg4 = 00000000 17 PUSH da_vinci.004283B8 ; |Arg3 = 004283B8 18 PUSH da_vinci.004210FC ; |Arg2 = 004210FC ASCII "LoadLibraryW" 19 PUSH da_vinci.00420F50 ; |Arg1 = 00420F50 ASCII "kernel32.dll" 20 CALL da_vinci.0040E02F ; \da_vinci.0040E02F 21 JMP DWORD PTR DS:[4283B8] ; da_vinci.0040DA3A Осмыслив данный кусок кода начинаю понимать что это то что надо однако ни одного референса на 1 строку решаю рискнуть выставляю оер на строку 8 и жму F8 до 14 строки и о радость по адресу 4383a8 цифирки меняются на почти (внимательно) валидные адреса. 1 PUSH da_vinci.0040E36D ; /Arg5 = 0040E36D 2 PUSH DWORD PTR DS:[428F44] ; |Arg4 = 00000000 3 PUSH da_vinci.0042839C ; |Arg3 = 0042839C 4 PUSH da_vinci.004210DC ; |Arg2 = 004210DC ASCII "GetLocaleInfoW" 5 PUSH da_vinci.00420F50 ; |Arg1 = 00420F50 ASCII "kernel32.dll" 6 CALL da_vinci.0040E02F ; \da_vinci.0040E02F 7 JMP DWORD PTR DS:[42839C] ; unicows.GetLocaleInfoW 8 PUSH da_vinci.0040E24E ; /Arg5 = 0040E24E 9 PUSH DWORD PTR DS:[428F40] ; |Arg4 = 00000000 10 PUSH da_vinci.004283A8 ; |Arg3 = 004283A8 11 PUSH da_vinci.004210EC ; |Arg2 = 004210EC ASCII "GetProcAddress" 12 PUSH da_vinci.00420F50 ; |Arg1 = 00420F50 ASCII "kernel32.dll" 13 CALL da_vinci.0040E02F ; \da_vinci.0040E02F 14 JMP DWORD PTR DS:[4283A8] <-видите куда теперь он указывает ; unicows.GetProcAddress И так если использовать данную процедуру (их кстати 2 не небольшом расстоянии друг от друга и дальше (естественно пропуская jmp`ы) можно полностью раскодировать импорт, он там небольшой около 20 имен функций.Но вот зараза если внимательно приглядеться то можно заметить что GetProcAddress находится не во всеми любимом kernel32.dll а в какои то херне под названием unicows.dll (Кстати это микрософтовская библиотека я так не хера и не понял зачем она нужна.Плюс с ней программа не пожелала запускаться. Чтож отступать поздно потрачено уже около 25 минут.Думаю дальше. Далее найдется до фига желающих меня обласкать за то что я пошел обходным путем однако ничего не попишешь в тот момент ко мне пришла такая идея. Я взял да подставил в эту микротаблицу импорта правильные адреса всех фунции т.е. теперь по адресу 4283a8 лежал указатель не на unicows.GetProcAddress а на kernel32.GetProcAddress. Все прекрасно прога запустилась но функции триала остались. Думаю дальше ведь времени уже потрачено около 40 минут. Анализ данного импорта показал что wrapper юзает функции в том числе CreateFile и CreateProcess, WriteProcessMemory т.е. по сути wrapper создает отдельный файл и потом его контролирует. Что ж ставим бряки на эти функции и отпускаем прогу нажимаем в ней продолжать играть и вываливаемся на создании файла game32.img.(нужно только поменять атрибуты для файла на Normal) Все вроде бы готово. Уф.Глушим прогу Переименовываем его в game32.exe и пытаемся запустить и...... ОБЛОМ. Прога не запускается. Думаю дальше. Посмотрим на oep (game32.exe) и видим что не все так просто просто там ничего нет. Загружаем в олю родителя оставляем бряки на старом месте.СТАРТ. Проходим как описано выше до создания дочки (game32....) жмем еще раз f9 и вываливаемся на бряке WriteProcessMemory первый пропускаем он просто записывает дочку а вот когда прогавалится еще раз смотрим что же она пишет и о боги видим что в наш game32... на место оер записывается 6 байт посмотрев в буфер запоминаем их а затем подправляем наш game32.exe. все игра заработала..Облегчение..... P.S. Я не знаю сколько продержится эта защита после опубликования данного минитутора пользуйтесь пока. |
|
Создано: 23 мая 2019 19:22 · Личное сообщение · #2 |
|
Создано: 23 мая 2019 20:38 · Личное сообщение · #3 |
|
Создано: 23 мая 2019 22:14 · Поправил: Adler · Личное сообщение · #4 |
|
Создано: 24 мая 2019 00:12 · Поправил: ID21l5X · Личное сообщение · #5 Adler пишет: дык, там же ссылка да все вижу создает wrapper_config.txt(ключ) и 2322_key.reg(нужный файл) Добавлено спустя 25 минут lx60 пишет: либо расшифровать .exe работает но с одним но. Возьмем для примера игру Cat on diet Известный работающий ключ: Code:
И вот тот ключ что выдается у нас в результате манипуляций с твоим wrapper.dll Code:
отличие в последнем символе "x=" и "w=" Окей возьмем для примера игру Next Stop 3 она самая новая ключа на нее пока нет. вот что мне выдало в результате махинаций wrapper.dll Code:
данный ключик не есть верный. Но исходя из варианта выше. проанализировав буквы Hex-кодах. x= и w= - это 78 и 77 в Hex, где символ x= есть правильный следовательно M= (4D) сдвигаем на один байт получаем N= (4E) верный ключ. т.е. нужно добавить для символа перед =, сдвиг на 1 байт в плюс. Если несложно доработай там. add eax,1 // это вроде надо добавить к символу перед равно |
|
Создано: 24 мая 2019 10:06 · Личное сообщение · #6 |
|
Создано: 24 мая 2019 12:19 · Личное сообщение · #7 Зачем эти ключегенераторы, которые работают через раз, когда проще анврапнуть оригинальный exe? Ради интереса скачал последнюю игру Farm Life. Если раньше враппер под АСпром сам выполнял WriteProcessMemory, то сейчас они вывели эту логику в отдельную wrapper.dll, которая ничем не накрыта. В итоге восстановил 64 байта в Farm Life.wrp.exe и радуешься жизни | Сообщение посчитали полезным: BlackCode, -=AkaBOSS=- |
|
Создано: 24 мая 2019 12:34 · Личное сообщение · #8 ID21l5X пишет: проанализировав буквы Hex-кодах Это кодировка base64 если что, очень узнаваемая. Сравнивать лучше то, что под ней. TryAga1n пишет: Зачем эти ключегенераторы Большинству пользователей проще перебрать несколько патчей/ключегенов. Вряд ли где-то выкладывают кряк прямо под каждую игру, выпущенную алаваром. ----- 2 оттенка серого | Сообщение посчитали полезным: TryAga1n |
|
Создано: 24 мая 2019 13:20 · Личное сообщение · #9 |
|
Создано: 24 мая 2019 18:55 · Поправил: lx60 · Личное сообщение · #10 ID21l5X пишет: Окей возьмем для примера игру Next Stop 3 не поленился, скачал с alawar.ru, игра называется "Следующая остановка 3" получился следующий ключ: https://pastebin.com/RcQgTkPE откуда у тебя взялось p8sD8h4sXD52Ram6IUCLYM= в конце ключа, не знаю у меня всё работает .. то же самое с игрой "Кот на диете" вероятно, качаешь англ. версии? ******** Есть ещё одно решение)) http://sendfile.su/1496166 Делает зарегистрированной любую игру алавара. Надо просто кинуть в папку с игрой, и больше нет нужды в ключах) |
|
Создано: 25 мая 2019 01:03 · Поправил: ID21l5X · Личное сообщение · #11 lx60 пишет: вероятно, качаешь англ. версии? именно англ. версия скачана была качну русскоязычную для теста. по итогу выдало мне тот же ключ что у тебя. но мне написали ключик неверный. опять ошибка с последним символом. Пришлось вручную последнюю букву править. lx60 пишет: Есть ещё одно решение)) http://sendfile.su/1496166 Делает зарегистрированной любую игру алавара. Надо просто кинуть в папку с игрой, и больше нет нужды в ключах) это типа wrapper.dll закинь и все игры зарегены? А вот с игрой Farm Life ключ как обычно скопировать не получилось. пришлось сначала заменить последний символ перед равно и потом добавить данные в реестр. |
|
Создано: 25 мая 2019 16:01 · Поправил: lx60 · Личное сообщение · #12 |
|
Создано: 27 мая 2019 01:35 · Поправил: Adler · Личное сообщение · #13 ID21l5X, f13nd пишет: Это кодировка base64 если что, очень узнаваемая. Сравнивать лучше то, что под ней. Не разбирался в алгоритме base64, но в случае с uEtSAgw= и uEtSAgх= в итоге возвращается одинаковая последовательность байт - B8 4B 52 02 0C Так же и в случае 6IUCLYM= и 6IUCLYN= возвращается E8 85 02 2D 83. При том в последнем случае если вместо M или N подставить O или P, то итоговый результат не изменится. При K и L последний байт будет 82, а при R, S соответственно 84. В предыдущем варианте такая же ситуация с "соседними" буквами. |
|
Создано: 27 мая 2019 02:34 · Личное сообщение · #14 Adler пишет: Так же и в случае 6IUCLYM= и 6IUCLYN= возвращается E8 85 02 2D 83 base64 это когда двоичные данные на входе разбиваются на поля по 6 бит и вместо них по таблице подставляется один из 64 печатных символов (задумка неплохая, но со слешем в таблице изобретатели промахнулись, для get-запросов http его приходится менять на другой). Таким образом из 3 байт на входе получается 4 байта на выходе. M и N это смещения 0C и 0D в таблице, то есть 001100 и 001101: aaaaaa bbbbbb cccccc dddddd aaaaaabb bbbbcccc ccdddddd 'M', взятый из ключа может быть 3м символом cccccccc, а выдуманный 'N' не может (в нем есть младшая единица, она не может относиться к выравниванию). По идее количество символов должно быть кратно 4, но на деле раскодируется до первого не находящегося в таблице символа или до конца строки (допиши произвольное количество '=' в конец и убедись). Так что не надо брать 4/8/12... символов с конца строки включая '=' и считать их реальными позициями 1,2,3 и 4 в кодировании, отсчет всегда от начала строки. ----- 2 оттенка серого |
|
Создано: 27 мая 2019 10:16 · Поправил: Adler · Личное сообщение · #15 f13nd пишет: Так что не надо брать 4/8/12... символов с конца строки включая '=' и считать их реальными позициями 1,2,3 и 4 в кодировании, отсчет всегда от начала строки. Тогда понятно. В случае с полным ключом https://pastebin.com/RcQgTkPE замена предпоследнего знака (6->7) приводит к замене последнего байта - 7A -> 7B - |
|
Создано: 28 мая 2019 14:35 · Поправил: lx60 · Личное сообщение · #16 С чего вы вообще решили, что это base-64 ? Ключ получается такой, какой и должен быть. Не нужно мутить с последними символами. Этот ключ предназначен для записи в реестр. ID21l5X пишет: по итогу выдало мне тот же ключ что у тебя. но мне написали ключик неверный. не нужно ключ никуда вводить, см. выше В аспровом (который в виде base-64) ключе зашито имя покупателя, при попытке зарегать ключом игру имя сравнивается с "SMS", если совпадает (в данном случае), то напишет, что неверный ключ. Данный ключ пишется в реестр, когда вводите короткий смс-ключ. Надеюсь, понятно объяснил |
|
Создано: 28 мая 2019 14:38 · Поправил: Adler · Личное сообщение · #17 lx60 пишет: С чего вы вообще решили, что это base-64 ? Потому что это он скорее всего и есть. Это видно не вооруженным взглядом. А как и для чего он применяется уже другой вопрос. Добавлено спустя 13 минут lx60 пишет: Данный ключ пишется в реестр, когда вводите короткий смс-ключ. Надеюсь, понятно объяснил Ну все логично. Не знаю как там на самом деле (вообще не разбирался как и что в этих игрушках), но первое что в голову приходит, что этот ключ - результат какого то шифрования, например Blowfish, где конечный результат часто заворачивается в base64 для удобной передачи (например, сохранить в реестре).. А при чтении его из реестра он скорее всего дешифруется и как то проверяется. |
|
Создано: 28 мая 2019 16:45 · Поправил: -=AkaBOSS=- · Личное сообщение · #18 TryAga1n пишет: Зачем эти ключегенераторы, которые работают через раз, когда проще анврапнуть оригинальный exe? В целом согласен - так проще. Поначалу, помнится, они всего 1-2 байта на 0хС3 заменяли, вообще детская защита была. Но в некоторых случаях встречается западло в виде встроенных в саму игру проверок на наличие враппера. Проходишь два-три уровня и го дальше реверсить) |
|
Создано: 29 мая 2019 06:47 · Личное сообщение · #19 |
|
Создано: 29 мая 2019 09:31 · Поправил: lx60 · Личное сообщение · #20 |
|
Создано: 29 мая 2019 13:11 · Поправил: artyavmu · Личное сообщение · #21 |
|
Создано: 30 мая 2019 09:32 · Поправил: lx60 · Личное сообщение · #22 |
|
Создано: 31 мая 2019 07:58 · Личное сообщение · #23 TryAga1n пишет: Может вспомнишь название? Хотелось бы посмотреть, ради интереса Название "Правитель. Колосс", например. Но я специально проверил - та версия, что сейчас на офсайте - уже фришная. Оказалось неожиданно сложно найти оригинальный некрякнутый триальный дистрибутив, но мне это удалось - После восстановления первых двух байтов с ОЕП .wrp файл становится рабочим, но через несколько минут после запуска игра закрывается с мессаджбоксом sub_40AA00 показывает матерный мессаджбокс референсы с адресов 40AB65 и 40ABF5 условия вызова - false из функций 401190 и 402070 функция 401190 просто проверяет дворд 591064 на ненулёвость. Это результат работы отдельного потока с таймером на рандомной задержке. Создаётся в 4021A0, обработчик 4020A0. Внутри опять-таки проверка через функцию 402070 Итак, основная проверка в функции 402070. Последовательно вызываются: 401BC0 !!CreateFile (ssfCOMMONAPPDATA + "\AlawarWrapper\temp\wrapper.log") 401E30 имяТекущегоПроцесса == имяРодительскогоПроцесса [:-4] + ".wrp.exe" 401FC0 !!FindResource (LoadLibrary (GetModuleFileName [:-8] + ".exe"), "ZZZ_X9__________________________", RT_HTML) 401970 проверяет наличие в родительском процессе wrapper.dll и htmlayout.dll Вот такая вот дополнительная защита. Вроде где-то еще какое-то западло встречал, там между главами на середине игры проверка была. Но уже не вспомню, где именно. Много лет прошло, да и переломал я этих игрушек немало. | Сообщение посчитали полезным: TryAga1n, artyavmu |
|
Создано: 16 июня 2019 12:10 · Личное сообщение · #24 |
|
Создано: 17 июня 2019 09:27 · Поправил: artyavmu · Личное сообщение · #25 ID21l5X пишет=Ключик уже не делается как там выше вытаскивали С какого перепугу не делается? Последняя английская The Myth Seekers: The Legacy Of Vulcan. Collector's Edition, а это ключ: 0ujj5B6ZLlskCMM/NORei6tPzO KyVf48W77doX5EojT6FsAK2L+n GKcU8gsLKzXBjHkIZvUjYhM2y/ fTgYvBGl1P/AJyjPpwKZ6MSm1V ppTfKLyFMVuvjPqNHWMGqjAovq f7T9BmZW1NIXKRS177KJyAjn1z bkKaPFrSg1hqCHqB= |
|
Создано: 12 июля 2019 00:11 · Личное сообщение · #26 |
|
Создано: 12 июля 2019 01:54 · Поправил: plutos · Личное сообщение · #27 andreykacat пишет: Это хорошая идея, начинать учить реверс с защиты алавара? Если начинаешь совсем с "нуля", то лучше взять туториал Нарвахи по но все зависит, конечно, от конечных целей и уровня знаний в данный момент. ----- Give me a HANDLE and I will move the Earth. |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . |
eXeL@B —› Крэки, обсуждения —› Взлом Alawar игр (отучим от триала) |