Перейти к содержанию

Взлом мобильных приложений с помощью CE server


Рекомендуемые сообщения

Cheat Engine сервер предназначен для удалённого взлома каких либо приложений, сервер располагается на целевом устройстве, а клиент подключается к нему по IP, после этого становятся доступны почти все функции стандартного Cheat Engine ☺️.

Установка Cheat Engine сервера на Android:

Спойлер

Для установки и использования вам потребуются:

  • root права в системе.
  • Приложение - терминал, скачать можно например из Google play.
  • Сам сервер, который можно скачать с официального сайта, в разделе Download снизу, под вашу версию Android.


После того, как у вас есть все эти компоненты, можно приступать к установке.
Сначала, вам нужно найти системную папку с файлом sh, у меня это /system/bin:

Спойлер

image.thumb.png.d1bdf571ee8525432dffb744ee97c09c.png


После, нужно распаковать файлы из скачанного архива сервера в эту папку (файлы могут называться иначе):

Спойлер

image.thumb.png.e00c5478a6dda8afce214fabde6fbf16.png


После распаковки, останется только запустить сервер. Сделать это можно с помощью приложения терминал.
Команды:


su                                      		--Дать терминалу права суперпользователя.
system/bin/ceserver_x86 	   		--Путь к файлу сервера. (какой у вас файл, и путь, вводите свой)


При успешном запуске, вы увидите сообщение от сервера, в котором он пишет что ожидает подключения клиента:

Спойлер

image.thumb.png.fe1e3194fab649cf8d94004aa59397e3.png


Что бы подключиться к серверу, вам нужно открыть клиент CE, и ввести ip адрес сервера, и порт (стандартный 52736), не забывайте что для подключения вне локальной сети порт должен быть открыт.

Спойлер

1224157773_.thumb.png.d592c15203d4de7a908528f7b62aff07.png


После подключения вы увидите список процессов на устройстве, и сможете взаимодействовать с ними:

Спойлер

image.thumb.png.8456722241c5c28ba6f0a90006ea5a46.png

 

 

Особенности использования, написание скрипта:

Спойлер

CE сервер нестабилен.
При работе с CE сервером нужно соблюдать осторожность, не замораживайте слишком много значений, с маленьким интервалом заморозки, при просмотре списка символов, не замораживайте, не совершайте много действий сразу... Проще говоря, сервер может от этого зависнуть в любой момент☺️.
Так же не доступно выделение памяти, по крайней мере на моей версии сервера, и версии для linux, у других я думаю всё так же. При попытке выделить память, написав alloc() или иначе, сервер навечно зависнет, и клиент тоже. Поэтому, не выделяйте память.

Для написания скриптов, если вам нужно использовать выделенную память с прыжком на неё и обратно, используйте какую либо существующую память, например найдите неиспользуемую игрой функцию (в .so модулях, с помощью отладчика) и делайте прыжок на неё, например такую:

Спойлер

image.thumb.png.d1cb8b93d7dd837c0331db0ff23afb22.png


Рассмотрим написание скрипта без alloc, с использованием подобной функции.
Я возьму для примера, прыжок с функции здоровья игрока в игре Terraria:

Спойлер

image.thumb.png.d7cebd100378e16c12d993c837b42bfa.png


Напишем простой скрипт, который должен будет постоянно восстанавливать здоровье игрока:

Спойлер


[ENABLE]
aobscan(PlayerL, 8B 9B A4 04 00 00) //Поиск инструкции по сигнатуре
registersymbol(PlayerL)

libopus.haar1: //Код в выбранном месте
mov [ebx+000004A4],#500 //Установить 500 здоровья

originalcode: //Оригинальный код (просто метка)
mov ebx,[ebx+000004A4] //Оригинальная инструкция

jmp returnhere //Возврат в код после прыжка

PlayerL:
jmp libopus.haar1 //Прыжок на наш код
nop //nop 1 байт, так как прыжок 5 байт, а инструкция 6

returnhere:
 
[DISABLE]
PlayerL:
db 8B 9B A4 04 00 00 //Восстановление оригинальной инструкции
unregistersymbol(PlayerL)

 


Теперь персонаж постоянно получает 500 здоровья, и урон не заметен:

Спойлер

image.thumb.png.25a185b40062031eb5b82fb56bc51e25.png


Но как поступить, если вам нужно делать метки, записывать что либо в них, например, если вы хотите автоматически искать адрес игрока?
Тут 2 варианта, или найти участок памяти в которой есть права на запись (выдать не вариант, CE server так не умеет), или использовать LUA и отладчик.

Мы рассмотрим второй вариант. Напишем простой скрипт, который будет ставить точку отладчика на функцию здоровья, и получать из неё адрес игрока:

Спойлер


{$lua}
[ENABLE]
Adr = AOBScan('8B 9B A4 04 00 00','+X')[0] --Поиск сигнатуры
debug_setBreakpoint(Adr, 6, bptExecute, givePlayer) --Установка брякпоинта на найденный адрес, с параметром срабатывания при исполнении, и вызываемая при срабатывании функция.
function givePlayer() --Вызываемая функция
  print(EBX) --Вывести адрес игрока (из EBX)
  debug_removeBreakpoint(Adr) --Убрять брякпоинт
end
[DISABLE]

 


После включения, в выводе мы сразу получим адрес игрока, в десятичной системе исчисления:

Спойлер

image.thumb.png.79af64d413f1d18b5b1523588be8180c.png


Но это не удобно, хочется увидеть адрес в виде указателя, в таблице, но память выделять мы не можем.
Снова воспользуемся "libopus.haar1" и запишем адрес в него, добавив в таблицу.

Спойлер


--Заменим print на следующий код:
writeInteger('libopus.haar1', EBX) --Записать адрес игрока в память игры, по метке libopus.haar1

--Этим можно было бы и ограничиться, но оно не стало работать нормально, записывая какую то ерунду, даже если сохранить EBX ранее.
--Вместо нужного кода, туда каким то образом попадает mov [ebx+000004A4],000001F4 (500), инструкция из предыдущего скрипта, хотя он уже удалён из таблицы...
--Не помог даже перезапуск клиента и сервера, чистая магия, иначе не скажешь. В следующие попытки вообще перестала работать запись куда либо..
--Возможно это как то связано с инструкциями записи, которые используются в Android..
--Потом, внутри функции небыло записи, возможно это как то связано с владельцем и правами потока, только такой код смог заработать верно:

{$lua}
[ENABLE]
Adr = AOBScan('8B 9B A4 04 00 00','+X')[0] --Поиск сигнатуры
debug_setBreakpoint(Adr, 6, bptExecute, givePlayer) --Установка брякпоинта на найденный адрес, с параметром срабатывания при исполнении, и вызываемая при срабатывании функция.
function givePlayer() --Вызываемая функция
  --Ненужный код+
  timer = createTimer(getMainForm()) --Таймер с владельцем
  timer.Interval = 20 --Время до срабатывания
  timer.OnTimer = function(timer) --Функция
     timer.destroy() --Убрать таймер
     writeInteger('libopus.haar1', EBX) --Записать адрес игрока
  end
  --Ненужный код-

  debug_removeBreakpoint(Adr) --Убрять брякпоинт
end
[DISABLE]

image.png.7e475d6e956197d657d14ab48f7bdaed.png


После чего мы получим адрес игрока в таблице:

Спойлер

image.thumb.png.7d10454fc5a8b8e48cf4eccf464a145f.png

 

Используем его как указатель, и попробуем добавить здоровье в таблицу:

Спойлер

image.png.6077b829a6dba4e7354e96428b0e65c0.pngimage.thumb.png.7d51b423bed8b5b675ff0b5b7a2ff1d6.png


Так же можно добавить и другие параметры игрока, зная смешения:

Спойлер

image.thumb.png.da0d8bed2ba81cb5fad64ed65e7f7523.png


Как вывод можно сказать, что Cheat Engine сервер ещё не очень стабилен, и при использовании вам скорей всего придётся иногда его перезапускать (клиент перезапускать не нужно, даже если он завис, достаточно сервера, клиент сразу присоединится к нему). Lua в общих чертах работает, а самое главное - работает отладчик, который в таком виде очень даже удобен для использования ?.
Надеюсь что эта статья вас чему то научила ?



 

  • Понравилось 1
  • Спасибо 1
  • Плюс 5
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, imaginary сказал:

writeInteger('libopus.haar1', EBX) --Записать адрес игрока в память игры, по метке libopus.haar1

 

2 часа назад, imaginary сказал:

libopus.haar1: //Код в выбранном месте

mov [ebx+000004A4],#500 //Установить 500 здоровья

 

Это точно верно? Т.к. значение записывается в инструкцию.

P.S.

Спойлер

Вообще обычно не у всех есть рут.  Тогда распаковываем apk, патчим, запаковываем, переподписываем. Дальше выкладываем mod apk. Ставим апк, ни таблиц, ни CE и играешь без ограничений. Статья интересная

 

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, MasterGH сказал:

Это точно верно?

Всё верно, эти скрипты не предполагают совместной работы, и включаются отдельно друг от друга, libopus.haar1 используется просто как место для хранения

Ссылка на комментарий
Поделиться на другие сайты

Офигеть, я думал применять компьютерный CE можно только на эмуляторах андроид, но никак не на реальном.То есть вот это вот самое, можно использовать даже на андроид тв боксах?

Ссылка на комментарий
Поделиться на другие сайты

20 часов назад, DBCooper сказал:

То есть вот это вот самое, можно использовать даже на андроид тв боксах?

Конечно! можно везде, на любом Android или Linux ?

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
13 минут назад, Dison сказал:

На каком эмуляторе андройд лучше всего это делать?

На любом, главное что бы была система, и версия андроид поддерживала сервер.

Ссылка на комментарий
Поделиться на другие сайты

Только что, imaginary сказал:

На любом, главное что бы была система, и версия андроид поддерживала сервер.

 

Ну например на Nox что то у меня не выходит это сделать, рут есть, файлы закидываю в папку, все нормально

Но в терминале когда прописываешь команды, то пишет отказано в доступе

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Dison сказал:

Ну например на Nox что то у меня не выходит это сделать, рут есть, файлы закидываю в папку, все нормально

У меня всё на Nox отлично получалось, ты что то делаешь не так.

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Dison сказал:

Может версию ниже ставить? 

Нет, это не при чём тут. Если ты хочешь помощи то расписывай подробно в чём проблема.

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, imaginary сказал:

Нет, это не при чём тут. Если ты хочешь помощи то расписывай подробно в чём проблема.

1 - Скачал сервер СЕ Android x86 (Cheat Engine 6.5)

2 - Закинул в папку System/bin/

3 - Скачал терминал, ввел команду SU для получения доступа права РУТ

4 - Ввел путь, подтвердил

system/bin/ceserver_x86

5 - Появляется ошибка, отказано в доступе

Ссылка на комментарий
Поделиться на другие сайты

10 минут назад, Dison сказал:
  Показать контент

2020-04-05-160021.png

 

Замечательно. На картинке у тебя даже рут не включён, когда рут включается, пользователь меняется. Можешь посмотреть на картинку в статье.

Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, imaginary сказал:

На картинке у тебя даже рут не включён, когда рут включается, пользователь меняется. Можешь посмотреть на картинку в статье.

 

Спойлер

2020-04-05-161628.png

 

Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, Dison сказал:

 

  Скрыть контент

2020-04-05-161628.png

 

Единичка, это номер последней ошибки
 

3 минуты назад, Dison сказал:

Процесс какой выбирать для скана

Гениальный вопрос, откуда я знаю, какой тебе нужен?

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...
В 26.03.2020 в 19:08, imaginary сказал:

Сам сервер, который можно скачать с официального сайта

Я что то по твоей ссылке, там не нашёл сервер, там ссылки еа саму СЕ

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Pitronic сказал:

Я что то по твоей ссылке, там не нашёл сервер, там ссылки еа саму СЕ

 

В 26.03.2020 в 19:08, imaginary сказал:

Сам сервер, который можно скачать с официального сайта, в разделе Download снизу, под вашу версию Android.

Судя по тому, что дальше написано в инструкции это оно?:

Спойлер

unknown.png

 

Изменено пользователем youneuoy
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Спасибо подсказал, от меня плюсик.

 

В 26.03.2020 в 19:08, imaginary сказал:

в разделе Download снизу, под вашу версию Android.

под мою версию не нашёл, у меня Android 7. Вот скриншёт.

Спойлер

2020-07-24_094313.png

 

 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.