Сейчас на форуме: 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. Я не знаю сколько продержится эта защита после опубликования данного минитутора пользуйтесь пока. |
|
Создано: 24 июля 2011 18:37 · Личное сообщение · #2 OnLyOnE пишет: Принцип до безобразия прост, тут даже олли не надо (только между нами )... Запускаешь игру, потом ее сворачиваешь в трей (иногда достаточно нажать клавишу Windows). Далее дампишь рабочий процесс игры (который с wrap) LordPE. Открываешь полученный дамп в HEX-редакоторе (в моем случае это HiEW) идешь на ЕР и видишь что все байты на месте. Переносишь спертые байты в врапленный файл, получаешь рабочий... все. если вам не трудно, пожалуйста, сделайте Tutorials-flash Чтобы Способ был для меня ясен. |
|
Создано: 24 июля 2011 20:12 · Личное сообщение · #3 AKAB пишет: если вам не трудно, пожалуйста, сделайте Tutorials-flash P.S. надеюсь все будет понятно ----- aLL rIGHTS rEVERSED! | Сообщение посчитали полезным: AKAB, hlmadip |
|
Создано: 24 июля 2011 21:30 · Личное сообщение · #4 |
|
Создано: 24 июля 2011 21:43 · Поправил: Kindly · Личное сообщение · #5 |
|
Создано: 24 июля 2011 22:21 · Личное сообщение · #6 Isaev Ну тогда теже яйца только в профиль (возможно так интереснее =): вот сюда хардварный (можно железно-металлический =) бряк 1006691B E8 52E8FFFF CALL wrapper.10065172 в стеке 0012B2A8 013DE8A0 ASCII "j`hh&D" <<- это буквенынй вид нашего OEP делаем Folow in dump, из дампа копипастим бинарно 4 строки. Эффект как на картинке ----- Don_t hate the cracker - hate the code. | Сообщение посчитали полезным: Isaev |
|
Создано: 25 июля 2011 00:44 · Поправил: SReg · Личное сообщение · #7 |
|
Создано: 25 июля 2011 01:43 · Личное сообщение · #8 Isaev пишет: вот это наверное то, что мне надо, только у меня не ставится bp ZwWriteProcessMemoryпишет Unknown identifier а всё почему? потому что я фигню спорол забыл как функция обзывается, отладчика под рукой не было ZwWriteVirtualMemory вроде надобно ставить. зайди сам внутрь WriteProcessMemory и посмотри |
|
Создано: 27 июля 2011 15:08 · Личное сообщение · #9 |
|
Создано: 22 августа 2011 13:19 · Личное сообщение · #10 |
|
Создано: 22 августа 2011 13:23 · Личное сообщение · #11 wwwspider пишет: извините за глупый вопрос. а что такое EP читайте и просвещайтесь - http://exelab.ru/faq/EP | Сообщение посчитали полезным: wwwspider |
|
Создано: 22 августа 2011 13:44 · Поправил: wwwspider · Личное сообщение · #12 |
|
Создано: 22 августа 2011 13:58 · Личное сообщение · #13 |
|
Создано: 27 сентября 2011 00:46 · Личное сообщение · #14 Обращаюсь к более опытным товарищам. Хочу снимать враппер алавара в статике. Как бе, всё уже разобрано, не хватает главного. Нужен xml файл с настройками, который и управляет враппером. И вот я всё никак не могу догнать, откуда он загружается, может кто поможет? Можно взять игру http://www.alawar.ru/game/luntik/ если запустить luntik.exe, то появится приветствие враппера. Так вот если просканировать память на предмет юникод строки 6F 00 70 00 74 00 69 00 6F 00 6E 00 73 00 32 00 options2 то мы увидим, что xml файл уже загружен, а вот кем, чем, откуда Память каждый раз меняется, это по моему в хипе где то, гуру подскажите, откуда этот файлик загружается. ----- Yann Tiersen best and do not fuck |
|
Создано: 27 сентября 2011 07:18 · Личное сообщение · #15 Сами настройки хронятся в ресурсах luntik.exe в формате HTML,wrapper.dllгрузит из ресусов начало процедуры ImageBase + 00022CE0,по адрессу IB+0022DFD в [ESI] ложится расспакованная строка потом по адрессу IB+000B920 вызывается msxml3.dll для преоброзования HTML в xml формат. ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 27 сентября 2011 09:03 · Поправил: PE_Kill · Личное сообщение · #16 ClockMan да спасибо нашел, только ты не прав. 00022CE0 это всего лишь подпроцедура распаковщика. Выйди выше, прокрути чуть вверх и сам поймешь. ZLib походу используется, буду разбираться. Жаль что без запуска загрузчика всё же не обойтись PS Вот оно: Code:
PPS Залейти пожалуйста игру, где кроме EP еще что то сперто, те же папины дочки сейчас только EP тырят. ----- Yann Tiersen best and do not fuck |
|
Создано: 27 сентября 2011 12:39 · Поправил: Cigan · Личное сообщение · #17 |
|
Создано: 27 сентября 2011 12:49 · Поправил: Vovan666 · Личное сообщение · #18 Cigan пишет: На сколько я знаю, на них на всех только 40 байт с EP и сперто, больше ничего Плохо знаешь. Часто бывает, что 3 раза WriteProcessMemory пишет, 2 раза на ЕП и один раз где-то еще (это не считая проверки на ланчер). PE_Kill Посмотри игры из серии Веселая Ферма, они обычно в них пихали свои "новаторские" технологии, Также посмотри игры на alawar.pl и alawar.de там чаще встречаются игры с относительно старой защитой и с защитой новее чем алавар.ру | Сообщение посчитали полезным: SReg |
|
Создано: 27 сентября 2011 13:36 · Поправил: Cigan · Личное сообщение · #19 Vovan666 пишет: Плохо знаешь. Часто бывает, что 3 раза WriteProcessMemory пишет, 2 раза на ЕП и один раз где-то еще (это не считая проверки на ланчер). Ну как тебе сказать, сколько игр не смотрел на всех он писал на EP 2 раза, первый раз 40 байт, второй раз 2 байт. И эти 2 байта всегда совпадали с первыми двумя что были записаны при первом врайте(тот который 40). И также на каждой игре которую я смотрел, враппер исплоьзовал write 7 раз и постояно на 3тем 03-7FFDF238-00000004.dmp одинаковый адрес и количество байт. Внутрености не смотрел так как без надобности ЕП востановлена и игра работает |
|
Создано: 27 сентября 2011 13:48 · Поправил: Vovan666 · Личное сообщение · #20 |
|
Создано: 27 сентября 2011 14:24 · Личное сообщение · #21 DLL wrapper.dll используется одна и та же, просто будет ли писаться еще один кусок, да и вообще будет ли что то писаться зависит от настроек, что грузятся из XML. То, что может писаться еще 1 кусок я уже разобрал, и условия вычислил когда он будет писаться, вот в реальности не видел игры где это используется. В игре, что указал Vovan666 как раз механизм дополнительной защиты включен, буду тестить. Потом выложу сорсы, если кому интересно. ----- Yann Tiersen best and do not fuck | Сообщение посчитали полезным: tihiy_grom, SReg |
|
Создано: 27 сентября 2011 16:32 · Личное сообщение · #22 Vovan666 пишет: Развлекайся,2 куска пишется. +1 В самой игре создаётся поток который привязан к врапперу(раньше можно убить враппер а сама игра шла и время не тикало) пишется он черезWriteProcessMemory если пролистать назад то я описывал как работает этот код. ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 27 сентября 2011 17:58 · Личное сообщение · #23 |
|
Создано: 27 сентября 2011 20:58 · Поправил: vden · Личное сообщение · #24 |
|
Создано: 28 сентября 2011 21:03 · Личное сообщение · #25 Промежуточные результаты: Была цель - написать статический анвраппер алавара. Всё, что можно было разобрать в статике я разобрал, не хватает только XML файла настроек, на основе которого всё и строится. XML файл хранится в ресурсах основного файла игры, на который ведет ярлык после установки, тип ресурса: HTML (17h), название ресурса "TEST.XML". После того, как ASProtect расшифровал ресурсы, ну и всё остальное, сам файл еще дешифрует ресурс ключем, полученым из RCDATA и после чего, отдает TEST.XML на загрузку в wrapper.dll. Wrapper.dll распаковывает и дешифрует TEST.XML, обнуляет его местополажение в секции ресурсов и конвертирует в XML DOM. Решение: Запустить файл, просканировать память и найти XML DOM. Проблема в том, что XML DOM отражен в память не полностью. Собственно теперь 2 пути. Хукать в процессе работу с ресурсами и забирать TEST.XML до того, как он будет обнулен и переведен в DOM, либо искать XML DOM в памяти кусками. И первый и второй метод чреват ошибками. Совета не прошу, просто размышляю в слух. ----- Yann Tiersen best and do not fuck |
|
Создано: 28 сентября 2011 21:44 · Личное сообщение · #26 PE_Kill пишет: Wrapper.dll распаковывает и дешифрует TEST.XML может лучше разобрать как и не париться с хуками? ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh | Сообщение посчитали полезным: OnLyOnE |
|
Создано: 29 сентября 2011 07:51 · Личное сообщение · #27 |
|
Создано: 03 октября 2011 11:04 · Личное сообщение · #28 Сделал подмену wrapper.dll, чтобы забрать XML файл из игры. Потестите, если всё нормально выложу сорсы: http://peco.at.ua/UNAL_15.rar С точки зрения совместимости - идеальный вариант, никаких хуков, дебаг апи, потоков и прочего. Забирается XML файл и в статике обрабатывается. ----- Yann Tiersen best and do not fuck |
|
Создано: 03 октября 2011 11:11 · Личное сообщение · #29 Я что-то не пойму - патчить wrapper.dll уже нельзя? Раньше там была какая-то (не помню уже названия, давно не игрался) экспортируемая враппером функция, по которой можно было найти место проверки на зареганность, и битхак делал своё дело. Теперь уже нет? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 03 октября 2011 12:18 · Личное сообщение · #30 |
|
Создано: 03 октября 2011 13:52 · Личное сообщение · #31 ARCHANGEL пишет: Я что-то не пойму - патчить wrapper.dll уже нельзя? Раньше там была какая-то (не помню уже названия, давно не игрался) экспортируемая враппером функция, по которой можно было найти место проверки на зареганность, и битхак делал своё дело. Теперь уже нет? Патчить-то можно, но есть одно НО. Да даже не одно. длл сейчас пакуется аспром, т.е. простому смертному ее уже не пропатчить. в длл сейчас используются какие-то (по-слухам) скрытые проверки, которые во время игры на висте и 7 закрывают или сворачивают игру и показывают какие-то рекламные наги, т.е. банальный патч GetRegKey(или как его там), тоже не катит. |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . >> |
eXeL@B —› Крэки, обсуждения —› Взлом Alawar игр (отучим от триала) |