![]() |
eXeL@B —› Вопросы новичков —› реверс l2divine (используя brain.ini и hand.dll) |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 02 февраля 2013 18:09 · Поправил: rastHEX · Личное сообщение · #1 Попробую начать 3ю тему - надеюсь не забанят ![]() Итак какашки брошеные мне заставили меня взять на вооружение brain.ini и hand.dll При помощи них выяснилось следующее Защита [!] dotNet Reactor v3.3 - v3.9 protected ! Microsoft SLPS Используя NETUnpack получит 5 файлов Unpacked_1 Unpacked_2 Unpacked_3.dll Unpacked_4.dll Unpacked_5.dll просканировав их ProtectionId на Unpacked_5.dll наткнулся на [!] dotFuscator detected ! это и её размер в 2.2мб натолкнул на мысль что это и есть программа а остальное - мусор упаковщика (к стати не подскажите - так ли оно на самом деле? ![]() Затем использовал Kurapica DotNET DeObfuscator в результате работы которого получил длл которая открылась в Рефлекторе. схема работы бота ![]() На данный момент задача в раскриптовке исходящего и ответного запросов. Обновление ссылок (результаты работы) ![]() ![]() запросы словленые снифером (Base64binarity) исходящий Code:
входящий Code:
![]() |
|
Создано: 02 февраля 2013 18:21 · Поправил: ZaZa · Личное сообщение · #2 rastHEX Для деобфускации лучше использовать Если у Вас столько времени и топиков заняла лишь деобфускация, тогда Вам ОЧЕНЬ много нужно думать и читать... За Вас здесь ничего делать не будут! [Ваши предыдущие топики не читал] Да и перезалить надо бы... Deposit нынче не в почете... ----- One death is a tragedy, one million is a statistic. ![]() |
|
Создано: 02 февраля 2013 18:25 · Поправил: rastHEX · Личное сообщение · #3 ZaZa Спасибо. вроде меньше кода и понятнее в рефлекторе длл выглядит ![]() ЗЫ: Размер меньше стал, она сюда влезла ![]() ![]() |
|
Создано: 02 февраля 2013 18:33 · Личное сообщение · #4 Ботоводов тут тоже не любят, потому, наверное, Вы весь в какашках и ходите... А откуда уверенность, что именно эта бибилиотека содержит в себе алгоритм криптования запроса на сервер и раскриптовки ответа? Проще, наверное, плясать от исполняемого файла... Он то точно скажет, к какой функции/процедуре бибилиотеки обращается... ----- One death is a tragedy, one million is a statistic. ![]() |
|
Создано: 02 февраля 2013 18:40 · Личное сообщение · #5 обфусцированной была только она одна. однако после того как посмотрел обнаружил что код лицензирования действительно не в ней! спасибо ZaZa Две другие в рефлекторе фроде идентичны (тогда почему их две ![]() ![]() ![]() |
|
Создано: 02 февраля 2013 18:44 · Личное сообщение · #6 Странно больно Вы ищете: метод научного тыка? Должно же быть хоть какая-то методика поиска нужного места в программе! Например, начать с поиска строки [хотя там есть специальная функция для шифрования/дешифрования строк], или просто идти с начала исполняемого файла и искать, искать, искать.... ----- One death is a tragedy, one million is a statistic. ![]() |
|
Создано: 02 февраля 2013 18:55 · Личное сообщение · #7 |
|
Создано: 03 февраля 2013 05:02 · Поправил: dima2k · Личное сообщение · #8 ![]() |
|
Создано: 03 февраля 2013 17:41 · Поправил: rastHEX · Личное сообщение · #9 dima2k дык ради этого и ковыряю. только хочу расшифровать запросы. я писал уже в теме но её прикрыли. Патч мне ненужен, нет коммерческой цели продавать эту прогу - хочу обесплатить. к стати - помню иду пользовал, так там был внешний вид как у вин32дасм, т.е. видно асм команду и адрес. как включить такой вид в той иде которая щас на сайте? снял все галки в графике но всё равно неудобно. ![]() |
|
Создано: 03 февраля 2013 19:29 · Личное сообщение · #10 Code:
Как понимаю грузит код из файла, в массив и вызывает функцию обработки лицензии. только вот программа никаких файлов не создаёт ![]() Code:
Code:
[MethodImpl(32)] - как это найти? разбираю Unpacked_3.dll ![]() |
|
Создано: 03 февраля 2013 19:49 · Поправил: rastHEX · Личное сообщение · #11 Code:
как понимаю назначение переменных?! Status.lic ключь(ответ от сервера) в этой переменной ![]() ![]() |
|
Создано: 03 февраля 2013 19:56 · Личное сообщение · #12 |
|
Создано: 03 февраля 2013 19:59 · Поправил: rastHEX · Личное сообщение · #13 вот и изучаю на примере. просто провожу паралели. У меня нормальный опыт лиш в 1С (там сиподобный язык) ЗЫ: какоето подозрение что тем зашифрованным в Base64 запросом фаил какой то передаётся ![]() исходящий Code:
входящий (может это фаил?) Code:
![]() |
|
Создано: 04 февраля 2013 03:53 · Личное сообщение · #14 Unpacked_5.dll это и есть exe файл. Его хеадер просто нужно подправить. Тут не все так просто как тебе кажется. Данная программа помимо обфускации защищена вот этой виртуальной машиной _http://www.microsoft.com/slps/. Точнее 3 метода защищено. Можешь увидеть в коде такие вызовы Code:
Пытался как то девиртуализировать этот код, но не преуспел, столкнулся с проблемами. Код защищенных хранится в файле ресурсов _SVM_BUF.DAT Виртуальная машина исполняется в Permutation_1cc06_2.0.dll, эта длл тоже накрыта дотфускатором. Поэтому грубо отломал защиту. Но так как расчет зашифрованного логина для входа в игру производится на сервере, пришлось вставить еще и свой код RSA шифрования. Еще в одном из защищенных методов производится расчет хешсумы exe файла, поэтому оригинальный exe пришлось тоже оставить. Вообщем, чтобы снять защиту надо девертуализировать код, насколько я знаю готовых решений для этого нету. Может кто то подскажет по этому поводу... Надо защитить свой код этим протектором, тогда реверсить будет проще. ![]() |
|
Создано: 04 февраля 2013 06:20 · Поправил: rastHEX · Личное сообщение · #15 |
|
Создано: 04 февраля 2013 06:52 · Поправил: rastHEX · Личное сообщение · #16 тормозит ещё то что разбирающиеся из комьюнити ненавидят меня ![]() В Олли с фантомом попытка снятия дампа неудачна. может можно загрузить 5ю длл лоадером каким и сдампить потом? комьюнити хелп ![]() т.е. расшифрованный код находится в памяти виртуальной машины которая и есть Permutation_1cc06_2.0.dll и для его запуска нужно загрузить Permutation_1cc06_2.0.dll а в неё загрузить шифрованный код из файла ресурсов. гдето ведь он должен расшифровыватся Ты говорил об RSA однако когда я снифал явного обмена ключами не было. Ты расшифровал хоть какой то из запросов? комьюнити - с меня за помощь красивая статья на портал по снятию dotNet Reactor + Microsoft.Licensing Деобфусцированная Permutation_1cc06_2.0.dl (глянув в неё сложилось мнение что вся система от мс лиценз. и разработчик руку мало приложил) ![]() |
|
Создано: 04 февраля 2013 15:17 · Личное сообщение · #17 rastHEX пишет: т.е. ты думаеш механизм раскриптовки ключа в самой программе? идея лекарства - эмуляция http сервера и подмена оригинального адреса на 127.0.0.1 в файле хостс. и соответственно отправка правильного запроса клиенту. Эта идея и так всем понятна, но для этого нужно понять что шифруется и чем шифруется. rastHEX пишет: т.е. расшифрованный код находится в памяти виртуальной машины которая и есть Permutation_1cc06_2.0.dllи для его запуска нужно загрузить Permutation_1cc06_2.0.dll а в неё загрузить шифрованный код из файла ресурсов. гдето ведь он должен расшифровыватся Там не просто расшифрованный код. Там исполняется код что написан под эту виртуальную машину, можна сказать свой ассемблер спецификацию которого никто не знает. Дамп тебе ничего не даст, тебе нужно написать свой дизассамблер для него. Какая команда что означает и что делает. rastHEX пишет: Ты говорил об RSA однако когда я снифал явного обмена ключами не было. Ты расшифровал хоть какой то из запросов? Ключами никто не обменивается они явно зашиты в следуемую программу, а именно в код защищенных методов. Никаких пакетов я не расшифровал, это логический вывод из анализа кода. А именно как ты знаешь в протоколе Ла2, используется RSA для шифрования передаваемого логина и пароля. В данном случае l2divine передает нужные данные на сервер, а сервер возвращает зашифрованный логин, пароль и подтверждение что оплачено, все это накрыто еще своей шифрацией сверху. ![]() |
|
Создано: 04 февраля 2013 16:58 · Личное сообщение · #18 |
|
Создано: 04 февраля 2013 17:01 · Поправил: rastHEX · Личное сообщение · #19 Medsft функционал на клиенте. есть клиент и снифнутые запросы. на сервере http://www.l2divine.com/ws/gateway.jsp?wsid= яваскрипт запрос обрабатывает. сканировал акунетиксом - уязвимостей на сайте нет чтоб джаваскрипт выковырять. heXelium есть идея как загрузить длл виртуальной машины? как понимаю основая цель - как раз и есть ключи шифрования протокола. RSA стандартное. Ещё как думаеш - можно ли загрузить Unpacked_5.dll длл? лоадером занятся. а процедуру проверки хэш суммы - поставить бряк и занопить, подставив нужное значение вывода? ![]() |
|
Создано: 04 февраля 2013 17:12 · Личное сообщение · #20 |
|
Создано: 04 февраля 2013 17:31 · Личное сообщение · #21 Medsft пишет: rastHEX пишет:функционал на клиенте. - а зачем тебе тогда функционал проверки лицензии нужен? Он хочет сломать защиту путем запуска своего сервера проверки. Как я уже описывал выше чтобы просто отломать защиту патчем, нужно также дописать свою логику для RSA шифрования (это нужно для авторизации в игре) так как это логика вынесена на сервер. rastHEX пишет: есть идея как загрузить длл виртуальной машины?как понимаю основая цель - как раз и есть ключи шифрования протокола. RSA стандартное.Ещё как думаеш - можно ли загрузить Unpacked_5.dll длл? лоадером занятся. а процедуру проверки хэш суммы - поставить бряк и занопить, подставив нужное значение вывода? Еще раз RSA это то чем шифруются пакеты к серверу ла2, эта логика вынесена на сервер, в защищаемой программе ее нету, все передается путем запросов на сервер L2divine вот эти запросы зашифрованы не известной шифрацией не RSA!!! Unpacked_5.dll тебе не нужен лоадер, это и есть искомый ексе, нужно только подправить хеадер. Процедура проверки хэш суммы находится в защищенном методе, ты ее не занопишь не зная ассемблера этой виртуальной машины, и бряк не поставишь не зная что там делается. Я вижу 2 пути решения взлома: 1. Ты статически анализируеш код виртуальный машины, узнаешь какой код она исполняет, какая команда виртуального кода за что отвечает. И пишешь девиртуализатор. Потом анализируешь механизм защиты запросов к серверу l2divine. 2. Делаешь как я. Тупо патчишь программу, обламывая проверку. Но + к этому тебе придется написать свою реализацию недостающей логики RSA шифрованию, что находится на сервере l2divine. Твоих знаний я думаю не достаточно ни для одного из этих шагов. Сначала стоит поучится на чемто попроще. ![]() |
|
Создано: 04 февраля 2013 17:38 · Личное сообщение · #22 |
|
Создано: 04 февраля 2013 17:49 · Личное сообщение · #23 Блин откуда ты вообще хочешь добыть пакеты обмена серверов бота и линейки? Для себя хотя бы нарисуй схему своего проекта... Какая в твоей задача на хер подмена сервера. Не думал ты также что и на сервере тоже можно проверять ключ твоей лицухи а реализация проверки его на клиенте простая затычка для облегчения нагрузки сервера... Если любишь глобальные задачи ставлю ее тебе: спи.ди серверную часть ))))))))) самому смешно стало... ![]() |
|
Создано: 04 февраля 2013 17:50 · Личное сообщение · #24 |
|
Создано: 04 февраля 2013 17:50 · Личное сообщение · #25 |
|
Создано: 04 февраля 2013 18:00 · Личное сообщение · #26 Medsft пишет: Блин откуда ты вообще хочешь добыть пакеты обмена серверов бота и линейки? Для себя хотя бы нарисуй схему своего проекта... Какая в твоей задача на хер подмена сервера. Не думал ты также что и на сервере тоже можно проверять ключ твоей лицухи а реализация проверки его на клиенте простая затычка для облегчения нагрузки сервера... Извини не совсем понял твой комментарий. Он хочет подменить не сервер линейки, а сервер проверки лицензии бота). К линейке это никакого по сути отношения, кроме того что это бот для линейки. Medsft пишет: Этот бот пишется самими же разработчиками игры. Знай Откуда такая инфа?) ![]() |
|
Создано: 04 февраля 2013 18:11 · Поправил: rastHEX · Личное сообщение · #27 |
|
Создано: 04 февраля 2013 18:34 · Личное сообщение · #28 Твою дивизию... Смотри схему (1 часть клиент <обмен пакетами чего ты хочешь от бота>)(2 часть Сервер бота<обмен пакетами что нужно сделать>Сервер игры) Про 2 часть говорить не будем: Думаем: На хрена нам особо шифровать команды типа: иди из пункта А в пункт Б Отвечаем: 1.Для того чтобы проверить- а команды присланы от чела который платил... или нет Думаем: ну можно же организовать логику проверки лицензии полностью на сервере.... а тут что-то не то... а что тогда... Догадываемся: что чуваки знают определенную логику сервера игры и пути ее шифрования (ну например какие нибудь координаты, способы поведения перса, нужные ключи.... чтобы из отправленного пакета клиентом бота сервер бота смог понять что ты хочешь: иди из пункта А в пункт Б) а вот это уже то что никто не должен знать.. Согласен? если нет перечитай заново)))))) Вывод Ты можешь КОГДА НИБУДЬ осилить и девиртуализировать машину клиента и ЭТО даст тебе возможность написать свой бот.... (поскольку Я не верю что ты сможешь спи.дить серверную часть)... но я точно знаю что как только ты это сделаешь завтра выйдет патч игры где что нибудь будет изменено на 1 байт а следом за данным шагом выйдет обновленный бот с еще лучщей защитой. ![]() |
|
Создано: 04 февраля 2013 18:43 · Поправил: rastHEX · Личное сообщение · #29 |
|
Создано: 04 февраля 2013 19:03 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Вопросы новичков —› реверс l2divine (используя brain.ini и hand.dll) |
Эта тема закрыта. Ответы больше не принимаются. |