LIMB
Вход Регистрация

тема

Часть 2. Paddle, ты просто черт! Реверсим простую приложуху с необычной активацией и углубляемся в реверс.

adrenaline · · 2 ответов · 490 просмотров

------ By adrenaline, special for LIMB.cc ------
Всем привет!
Сегодня мы научимя реверсить приложения с Paddle, разберемся в чем разница arm/x86 для нас, а также углубимся в реверс
Не удалось прогрузить медиа
​

Содержание​
  • Разница x86/arm​
  • Ассемблер и функции, которые нужно знать​
  • Реверсим прилку с Paddle​
x86/arm - а разница в чем?
Как говориться и года не прошло, а я уже пилю вам статью, где мы влетим с двух ног к солидным реверсерам. Как вы знаете (или нет), то сейчас самой главной архитектурой процессоров в компах является x86, а самой модной - ARM. X86 работает как слон, он большой, там много инструкций и он умеет складывать числа, а еще у него есть l1,l2,l3 кэш, который быстрее оперативки. X86 процы стучат в оперативку, считают и лишний раз ее не дергают, а ARM это как сын маминой подруги, умеет мало, кормят его с ложки, но все его боготворят. В ARM инструкций меньше, да и считать он не умеет, ему нужно сначала выгрузить, прибавить, вернуть в память. Зато процессоры на ARM меньше греются, мало потребляют, но код для них немного больше. Какая разница для нас? На как минимум x86 код может в одной строке, как наполеон, делать несколько дел одновременно, а ARM имеет фикс длину в 4 байта и у него 1 строка = 1 действие, да и ARM все делает внутри себя, а не бегает в оперативку что упрощается нам жизнь.
Ассемблер? Можно, а зачем?
Ассемблер это как последняя инстанция перед самой жутью - нулями и единицами. Ассемблер помогает нам перевести нули и единицы в читаемый код, пусть даже не очень понятный для вайб кодеров. Давайте посмотрим на самые основные функции, который 100 процентов вам пригодятся:
MOV - перемещает данные из точки А в точку Б
ADD/SUB - добавить/отнять, меняет флажки

XOR - исключающее ИЛИ
AND/OR - И/ИЛИ, тут нету смысла распинаться.
JMP - прыжок, переходит на указанный адрес
JZ - прыжок, если условие верно, т.е 0
JNZ - прыжок, если условие неверно, т.е не 0.
Это самые основные функции которые проходят в 7-8 классе на уроках информатики (прыжки может и не проходят, но XOR и AND/OR проходят точно :))
Сегодня мы как раз попрактикуемся в использовании функций ассемблера для убийства проверки лицензии.

Paddle? Мы тебя сломаем! Кто это и зачем он нужен?
Разработчики очень хитрые ребята. Кто-то продает свою приложуху через AppStore/Любой другой магазин приложений, а кто-то дает тебе скачать полную версию с триалом, которая потребует ключ. Сегодня мы разберем и реверсним прилку под названием "Clipsy", она как раз использует Paddle. Если коротко - Paddle система монетизации приложений, это готовый framework, который освобождает кодера от мук с лицензиями и дает готовое решение. Кодер может настроить какие ключи давать, насколько устройств, деактивировать их и тд и тп. Конечно существует несколько видов активации - оффлайн (проверка через математический алгоритм), послать ключ с HWID на сервер разраба, послать ключ с HWID на сервер разраба и проверить его легитимность, но это уже мелочь. Сегодня мы сломаем эту шайтан машину злых капиталистов. Начнем!

Открываем уже знакомый нам Binary Ninja и закидываем туда сам бинарь не приложения, а самого фреймворка. Почему? Потому что это отдельное приложение, которое и позволяет не мучаться с активацией кодеру. Нам это на руку, потому что там и лежит основная логика активации. На MacOS проваливаемся по пути /Applications/Clipsy.app/Contents/Frameworks/Paddle.framework/Versions/A

Берем сам бинарь Paddle и тянем его в Binary Ninja и ждем пока он все прочитает. Получаем такую картину:
Не удалось прогрузить медиа


Paddle прекрасен тем, что он не только облегчает разработку, но и светит своими классами в открытую, что нам в разы упрощает работу. Переходим в вкладку Symbols (вы же читали мою прошлую статью?) и вбиваем туда PADProduct activated:
Не удалось прогрузить медиа


Увидели такое? Вы на верном пути! Кликаем по строке и попадаем прямиком в функцию.
Не удалось прогрузить медиа


Выше мы можем наблюдать функции ExpirityDay, LicenseCode, но они нам не важны. Мы сделаем так, что любой, кто спросит Paddle об активации, будет получать всегда единицу (True). Жмем ПКМ по функции, Patch -> Assemble и прописывает заветный код:
Code:
mov al, 1
ret

MOV - перемещение значения
al - младший регистр основного, он имеет размер всего в 1 байт и является bool значением. В нем 1 - это TRUE, а 0 - FALSE
ret - return, вернуть значение. Говорит процу выйти из функции и вернуться к той, что вызвала нашу.
Жмем apply, Ctrl + S и переподписываем бинарник, без него ничего не пойдет:
Code:
sudo codesign -s - --entitlements debug.entitlements -f /Applications/Clipsy.app/Contents/Frameworks/Paddle.framework/Versions/A/Paddle
sudo xattr -r -c /Applications/Clipsy.app
sudo codesign --force --deep --sign - /Applications/Clipsy.app
Ииии.. Вауля!
Не удалось прогрузить медиа


Все работает! Теперь вы стали еще чуточку лучше и умнее в реверсе! 
------ By adrenaline, special for LIMB.cc ------
------ By adrenaline, special for LIMB.cc ------
------ By adrenaline, special for LIMB.cc ------
​
👍48 ❤️11 😁7 😮8 👏9 😢7
Ответadrenaline

послать ключ с HWID на сервер разраба, послать ключ с HWID на сервер разраба

Два раза повторяется)) Такая коротенькая статья и уже недочеты) У вас есть хорошее введение, вы можете зацепить читателя, есть забавная обложка - это здорово. 

Ответadrenaline

Разработчики очень хитрые ребята. Кто-то продает свою приложуху через AppStore/Любой другой магазин приложений, а кто-то дает тебе скачать полную версию с триалом, которая потребует ключ.

Почему они так делают и в каком случае, нам интересно, могли бы объяснить. 

Ответadrenaline

Сегодня мы разберем и реверсним прилку под названием "Clipsy"

https://macked[.]app/clipsy-crack.html - уже китайцы это сделали за вас. Можно было выбрать таргет который еще не реверснут - это было бы круто и очень желательно если продукт полезный, люди его покупают.

Ответadrenaline

Если коротко - Paddle система монетизации приложений, это готовый framework, который освобождает кодера от мук с лицензиями и дает готовое решение.

Почему его выбирают разработчики, актуальное ли оно, код открыт? На чем зарабатывает разработчик, можно ли ему доверять. Какие аналоги, что использовать. Вы рассматривали другие решения, пытались ли крякнуть продукты с другими sdk?

Ни в коем случае, не хочу, чтобы вы ушли от нас и перестали писать статьи. Просто даю советы, которые сильно улучшат ваш материал. Нужно более углубленно изучить реверс и пошарить ценный продукт крякнутый.
ОтветModerator

Два раза повторяется)) Такая коротенькая статья и уже недочеты) У вас есть хорошее введение, вы можете зацепить читателя, есть забавная обложка - это здорово. Почему они так делают и в каком случае, нам интересно, могли…

По недочетам согласен, больше внимание уделил чтобы все по красоте было и не слетало как в прошлых статьях. Про китайцев - они ребята дикие, ими крякнут весь софт вдоль и поперек, не зря их оттуда дергают в биг тех ;) Просто хотелось показать что такое есть и что с этим можно работать, в следующих частях буду разбирать все на нетронутых прилках, так даже интереснее будет. Спасибо за советы!)
👍2

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.