Слив лаунчера игрового портала fabis

fokus

Новый пользователь
Дней с нами
3.759
Розыгрыши
0
Сообщения
3
Репутация
1
Реакции
4
Написано самим разработчиком и создателем действующего лаунчера,администратором никнейм MAD.. Кто поймет суть защиты сможет обойти и читерить на здоровье не платными читами.


Из чего состоит.
имяПроекта_LAUNCHER_Версия.exe (далее LAUNCHER) - приложение, созданное с помощью xStarter.
имяПроекта_protector_Версия.exe (далее protector) - то же самое
arma2oa_protector.dll (далее arma2oa_protector) - на самом деле не библиотека, а обычный exe.
arma2oa_launcher.dll - на WinXP есть, на семерке почему-то нет.
Что делает.
FABISDayZLauncher.exe не используется вообще, спокойно запустил игру без него, никаких обращений к этому файлу ProcessMonitor не нашел.
Во время работы LAUNCHER грузит проц (на виртуалке) на 20-60 процентов. Видимо, циклы ожидания. Все окна командной строки постоянно закрываются этим лаунчером зачем-то, один раз закрылся диспетчер задач. Общение с пользователем происходит через стандартные виндовые диалоговые окна с кнопками "да, нет, отмена". То же самое делает protector, но грузит проц меньше. Если убрать arma2oa_protector.dll, то лаунчер пожалуется на его отсутствие. Если запустить protector, он скажет запустить сначала LAUNCHER.
Перед запуском игры чекаются файлы. Старый скрин, щас у меня всё установлено, что нужно:
http://i.imgur.com/6H9OUKQl.png
Изменяется имя экзешника армы на "NNN_arma2oaHM.exe" (на "NNN_arma2oaZP.exe" у DayZ ZP), где NNN - две-три цифры. Строка запуска армы:
NNN_arma2oaZP.exe -beta=Expansion\beta;Expansion\beta\Expansion -nosplash -noFilePatching -mod=@DayZ_Epoch -connect=dayzzp.no-ip.org -port=2302 -password=fga2ga235gklljasklh2325kjlskf2i
Перед полем -password огромная куча пробелов, видимо, чтобы не было видно в заголовке. Но в Process Explorer'е видно.
Создаётся батник, добавляющий арму в исключения фаерволла. Текст батника:
- temp_add_rule_firewall_arma2oa.bat
netsh firewall add allowedprogram "E:\GAMES\arma\Expansion\beta_108074\285_arma2oaZP.exe" "ZP" ENABLE
netsh advfirewall firewall add rule name="ZP" dir=in action=allow program="E:\GAMES\arma\Expansion\beta_108074\285_arma2oaZP.exe" enable=yes
netsh firewall add allowedprogram "E:\GAMES\arma\Expansion\beta_108074\285_arma2oaZP.exe" "ZP" ENABLE
netsh advfirewall firewall add rule name="ZP" dir=in action=allow program="E:\GAMES\arma\Expansion\beta_108074\285_arma2oaZP.exe" enable=yes
Посмотреть внутрь LAUNCHER и protector не вышло, там хитрая какая-то система. Внутри хранится файл проекта xStarter, который выполняется, вытаскивал его, но открыть ни разу не получилось почему-то. А с дебаггером xStarter'овские программки не стартуют, приаттачиться тоже не вышло - дебаггер повис, не ебу, че с этим всем делать.
arma2oa_launcher.dll хранился у меня на WinXP в папке "C:\Documents And Settings\All Users\", имел аттрибут "системный" и это тоже никакая не dll, просто текстовик с какой-то HEX строкой. Не GUID, нет. На Win7 этого файла у меня нет. Наверное, это файл от лаунчера DayZ HM, на своем компе я его не запускал, только на виртуалке, может они отличаются.
Теперь arma2oa_protector.dll. После запуска игры, arma2oa_protector.dll копируется в папку "C:\Users\All Users" (и её аналог в WinXP) с именем arma2oa_protector.exe, далее он запускается следующим образом:
arma2oa_protector.exe +32|39|9|40|58|52|20|33|13|24|22|3|43|26|16|20|13|37|31|7|48|3|1|30|55|43|42|22|2|50|6|25|
После чего отрабатывает и удаляется.
Запускается protector'ом без консольного окна, поэтому не закрывается раньше времени. То, что идёт после плюсика, будет записано в память армы после некоторых простых преобразований (про них ниже). При запуске arma2oa_protector.exe вручную, видим текст:
- by AntonP
____________________________
_________by AntonP__________
_______nCuX-OguHo4Ka________
____________________________
____________________________
______Memory Injector_______
____________________________
____________________________
________Version 1.0_________
____________________________
Проверяется наличие параметров запуска, видимо, ожидается строка с числами и палками, как наверху. Если прога запущена без параметров, выводится сообщение "Password not detect!" с кнопкой ОК и прога закрывается.
Дальше он ищет окно с заголовком "Arma 2 OA" и классом "#32770". Это окно загрузки армы с квадратиками:
http://i.imgur.com/jSv9ysg.png
Если оно не найдено (не совсем так, но суть та же), выводится сообщение "Arma2 no detected" с кнопкой ОК, прога закрывается.
Если же всё хорошо, то открывается процесс армы и из его памяти по адресу 00E259D8 читается 4 байта, эти 4 байта - адрес какой-то строки.
Дальше по полученному адресу читается 32 байта. У меня всё время была строка, состоящая из тридцати одной звезды, на конце ноль:
*******************************\0
непонятно, зачем это было читать, оно всё равно ни на что не влияет и нигде не используется.
Вокруг этой строки в памяти армы то ли объявления скриптовых функций, то ли еще что-то, вам виднее:
- скрин памяти армы
http://i.imgur.com/iwmgiB9.png
Мне кажется, это либо пароль, либо имя функции или переменной.
Дальше идет преобразование параметра запуска по простейшему алогритму. Есть алфавит
1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ _=+(*)
и есть строка
+32|39|9|40|58|52|20|33|13|24|22|3|43|26|16|20|13|37|31|7|48|3|1|30|55|43|42|22|2|50|6|25|
цифры указывают на позицию нужного символа в алфавите, т.е. 32 это "w", 39 - "D", 9 - "0" и т.д., в итоге получаем строку:
wD0EWQkxdom4HqgkdBv8M42uTHGm3O7p
Эта строка пишется в память армы на место звездочек. Зачем - я не знаю, вам виднее, опять же.
Больше ничего не нашёл.
Пока смотрел arma2oa_launcher.dll писал всякое в текстовик, там адреса вызовов и немного пояснений, может Emp'у или еще кому понадобится:
- скрыть спойлер
При запуске программы видим это:
____________________________
_________by AntonP__________
_______nCuX-OguHo4Ka________
____________________________
____________________________
______Memory Injector_______
____________________________
____________________________
________Version 1.0_________
____________________________
------------------------------
0046d151 (адрес команды)
Проверяется наличие строки параметра. Если нет параметра, то сообщение "Password not detect!".
------------------------------
чуть подальше.
ищется окно с заголовком "Arma 2 OA" и классом "#32770". Вот это - http://i.imgur.com/jSv9ysg.png
по его хендлу берется ID процесса армы через GetWindowThreadProcessId().
По PID делается OpenProcess() c PROCESS_ALL_ACCESS.
Если OpenProcess возвращает ноль, выдается сообщение "Arma2 no detected".
В противном случае, возвращается хендл процесса, этот хендл будет передаваться в функции чтения и записи памяти, очевидно.
-------------------------------
0046d1b3
чтение указателя на что-то (strAddr1). указатель лежит в памяти армы по адресу 00E259D8.
ReadProcessMemory
base addr = 00E259D8 (константа).
buffer pointer = 0018ff3c (переменная на стёке)
buff size = 4
Если ReadProcessMemory() вернул ноль, то, вроде бы, программа завершается.
0018ff3c - здесь лежит strAddr1.
---------
чуть дальше
Читаем 32 байта по адресу strAddr1, который ранее был получен, в буффер starBuffer1.
ReadProcessMemory()
base addr = strAddr1
buffer pointer = 0018ff0c (переменная на стёке) (starBuffer1)
buff size = 32
Если ReadProcessMemory() вернул ноль, то, вроде бы, программа завершается.
В starBuffer1 находится строка, состоящая из тридцати одной звезды, на конце ноль
*******************************\0
непонятно, зачем это было читать, оно ни на что не влияет и нигде не используется.
вокруг звёзд - то ли объявления функций, то ли еще что-то: http://i.imgur.com/iwmgiB9.png
---------
0046d23a
вызывается внутренняя функция, её адрес - 0046cf98 ( decode() )
в этой функции строка из параметров запуска
32|39|9|40|58|52|20|33|13|24|22|3|43|26|16|20|13|37|31|7|48|3|1|30|55|43|42|22|2|50|6|25|
преобразуется в
wD0EWQkxdom4HqgkdBv8M42uTHGm3O7p
и помещается в стёк.
числа 32, 39, 9 и т.д. это номера символов в алфавите
1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ _=+(*)
32 - w
39 - D
9 - 0
...
---------
следующая команда.
после выхода из decode() полученая строка конвертируется из юникода в ASCII и копируется в starBuffer1 (цикл 0046d289 - 0046d2b6). нуль на конце starBuffer1 затирается.
---------
0046d2d5
Копируем starBuffer1 (с уже новым содержимым) туда же, откуда его читали, по адресу strAddr1
WriteProcessMemory
base addr = strAddr1
buffer pointer = starBuffer1
buff size = 32
Если WriteProcessMemory() вернул ноль, то, вроде бы, программа завершается.
-----------
выход из функции
Все ошибки компьютера сидят в полуметре от монитора.

Спасибо, если понравилось и пригодилось.
 
upload_2018-11-30_14-1-45.png
 
  • Like
Реакции: SELiX
Слишком сложно для меня
 
  • Like
Реакции: Dim1k
Это эксклюзив,структура лаунчера не менялась за исключением добаления в него новых ехешников разного рода платных и бесплатных читов. Суть в самом обходе защиты. Скрины актуальны и сегодня. Слито с личной переписки создателей проекта.
 
  • Like
Реакции: creative36rus