Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Протекторы —› Взлом игр Electronic Arts (ActivationUI.exe, Activation.dll)
Посл.ответ Сообщение

Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 11 января 2015 11:53
· Личное сообщение · #1

Electronic Arts Origin Service (ака steam №2)
https://www.origin.com/ru-ru/store/ (ага! вот там трэшак всякий продают)

intro: короче после некоторых событий, которые произошли вот в этой задолбавшей ->теме<-, я волей неволей столкнулся с EA Origin. Тема для меня новая, поле не паханное. Пообщался с народом - нету ни нормальных туторов, ни статей, ни описания что к чему, ну и, естественно, публичных тузл.
Ввиду моего глубокого негодования(НУ ЭТОЖ НЕ СТАРФОРС И НЕ СЕКУРОМ), желаю восполнить данный пробел. Накопал немножко, желаю поделиться. Авось кто восполнит пробелы и можно будет накатать полноценную статью.

Что мы имеем вначале:
1. Исходный PE-файл, который зашифрован. Точка входа смотрит сразу в...
2. Activation.dll(Core/Activation.dll). Т.е. там сразу выполнен
Code:
  1. JMP [Activation.#100] (ординал 100)

ну по типу как в старфорсе (или солидшиелде)...ну не важно
3. ActivationUI.exe(Core/ActivationUI.exe)
4. Клиент origin
Главная суть проблемы заключается в расшифровке секций .text и .rdata, которые зашифрованы (если я правильно научился угадывать мелодию криптоалго ) - AES с длинной ключа 128 (...256)
Code:
  1. ....
  2. .text:100428B1                 movzx   eax, ds:byte_100A0B48[esi] ; <$ignsrch> "AES Rijndael Si / ARIA X1 [..256]"
  3. .text:100428B8                 shr     ebp, 18h
  4. .text:100428BB                 movzx   esi, ss:byte_100A0B48[ebp] ; <$ignsrch> "AES Rijndael Si / ARIA X1 [..256]"
  5. .text:100428C2                 shr     edx, 8
  6. .text:100428C5                 and     edx, 0FFh
  7. .text:100428CB                 movzx   edx, ds:byte_100A0B48[edx] ; <$ignsrch> "AES Rijndael Si / ARIA X1 [..256]"
  8. .text:100428D2                 shl     esi, 8
  9. .text:100428D5                 xor     eax, esi
  10. .text:100428D7                 shl     eax, 8
  11. .text:100428DA                 xor     eax, edx
  12. .text:100428DC                 and     ecx, 0FFh
  13. .text:100428E2                 movzx   ecx, ds:byte_100A0B48[ecx] ; <$ignsrch> "AES Rijndael Si / ARIA X1 [..256]"
  14. .text:100428E9                 shl     eax, 8
  15. .text:100428EC                 xor     eax, ecx
  16. .text:100428EE                 xor     eax, [ebx+0Ch]
  17. .text:100428F1                 mov     edx, eax
  18. .text:100428F3                 ror     edx, 8
  19. .text:100428F6                 and     edx, 0FF00FF00h
  20. .text:100428FC                 rol     eax, 8
  21. .text:100428FF                 and     eax, 0FF00FFh
  22. .text:10042904                 or      edx, eax
  23. .text:10042906                 mov     [edi+0Ch], edx
  24. .text:10042909                 pop     edi
  25. .text:1004290A                 pop     esi
  26. .text:1004290B                 pop     ebp
  27. .text:1004290C                 pop     ebx
  28. .text:1004290D                 add     esp, 8
  29. .text:10042910                 retn
  30. .text:10042910 sub_10042380    endp

+ сверил с libeay32.dll, прикинул в уме-таки да, похоже AES. OpenSSL - это 100% точно.

Подетально имеем следующую картинку:
Activation.dll сначала делает
Code:
  1. HMODULE Target_Module_Handle = ::GetModuleHandleW(NULL);
  2.          ::GetModuleFileNameW(Target_Module_Handle,&buffer[0],buf_size);
  3.          HANDLE target_file = ::CreateFileW(&buffer[0],GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

чтобы извлечь из цели две структуры:
Code:
  1. if (Origin_Get_Critical_PE_Data(pSecurity_Table,&Target_Origin_block, target_file))
  2.  
  3. typedef struct Origin_DATA_struct
  4. {
  5.          char Dll_path[20];
  6.          BYTE any_data[84];
  7.          DWORD PresetSettingRange;
  8.          DWORD Unk1_dword;
  9.          DWORD First_Origin_SIGNATURE;
  10.          DWORD Second_Origin_SIGNATURE;
  11.          BYTE any_data2[336];
  12. }Origin_block, *pOrigin_block;
  13.  
  14. typedef struct Security_Table__struct
  15. {
  16.          BYTE Sec_Unk_data[0x2D0];
  17.          DWORD Is_XOR_data; //as BOOL - CMP BYTE PTR SS:[ESP+66C],0
  18.          DWORD First_Section_offset;
  19.          DWORD Sizeof_XOR_data_for_VirtualProtect;
  20.          BYTE Sec_Unk_data1[0x1D8];
  21. }Security_Table_block, *pSecurity_Table_block;

их роль пока не совсем ясна до конца. Причем адрес (более точно: raw-смещение для seek) Security_Table_block берется из Origin_block.

затем Activation.dll делает:
Code:
  1. CreateMutexA(NULL,NULL,"CoreXProcState");

и
Code:
  1. CreateFileMapping(NULL,&Target_Mapping,PAGE_READWRITE,NULL,0x1000,NULL);

т.е. открывает путь для обмена данными между двумя процессами.

Activation.dll затем порождает ActivationUI.exe с аргументом "/SMOID= %хэндл от CreateFileMapping%", который собственно вторым процессом и выступит.
В свою очередь, ActivationUI.exe порождает Origin.exe(origin-клиент) или связывается, если тот уже запущен. Судя по всему, от orgin-клиента требуется только подтверждение входа в origin (offline или online). Кстати, после этого, формально работа активэйшн dll'ки и exe'шника закончена, ибо сам origin может только «правильно» запустить игру (нужен макрос специальный в командной строке, типа такого -=..\..=-\ и очевидно есть проверка по PID потом).
Короче имеем связь:
Activation.dll <-> ActivationUI.exe <-> Origin.exe
Насчет последних двух уместно заметить, что они завязаны только на авторизации (точки останова на filemapping и mutex в origin-клиенте «молчат»).
Однако неформально пойдем далее. dll требует от exe (MapViewOfFile-UnmapViewOfFile) AES-ключ(строка UNICODE «Key») и какие-то параметры лицензии и responce... смс по mapping «шифруются» xor с определенной маской типа 6$sjP3qwe1q@pO3o#5jNA(вообще их там несколько, в зависимости от типа смс). Судя по всему, ActivationUI.exe сам вытаскивает откуда-то ключ, который хранится на машине (offline режим никто не отменял). Я конечно не думаю, что AES ключ вшит в одну из структур, что были приведены выше. После идет расшифровка секций (проверка CRC этих секций), восстановление импорта и релоков.
OEP и дамп:
Переход на OEP осуществляется естественно с dll'ки, причем адрес расшифрован(AES ключом?) и находится в стеке:
Code:
  1. CALL [ESP+0x10]

тащемта, после выхода из игрушки, dll'ка подчищает за собой хендлы, мьютексы, какой-то там свой loop thread закрывает.
Ничего особенного с восстановлением дампа нет-PeTools, ImpRec (в моем случае с игрушкой, правда, часть импорта пришлось руками дописать-не распознавался. впрочем, это нормально), релоки... В ИТОГЕ у меня дамп работал без origin; НО, есть небольшой нюанс - в target в самом начале (WinMainCRTStartup когда вызывает код самой программы), стоит маленькая функа, которая проверяет, есть ли связь с Origin-клиентом (чтобы проверить offline/online), так вот её нужно немножко «полечить» EAX=1 или RAX=1 (короче, return true).

Другие наблюдения:
1. Куча (штук 5) тредов во всех трех цепочках с непонятной функциональностью.
2. IGO32.dll (igo64.dll), которые Origin.exe инжектит в target. Причем, хук в target на LoadLibrary остается до конца. Тут работает также igoproxy64.exe

| Сообщение посчитали полезным: hello, v00doo, plutos, gurololicon, zNob, HandMill, jude, SasukeK93


Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 11 января 2015 19:34
· Личное сообщение · #2

ELF_7719116 пишет:
похоже AES


SHA160/AES


7d15_11.01.2015_EXELAB.rU.tgz - OriginClientService.exe.cc.7z




Ранг: 241.9 (наставник), 107thx
Активность: 0.140.01
Статус: Участник

Создано: 11 января 2015 21:11
· Личное сообщение · #3

В первых версиях, при наличии ключа, после прогрузки длл и прыжка на оеп. Имели полностью рабочии ехе в памяти. Без ВМ, защиты импорта и остального. Т е снималось не сложнее упх. Потом под еа оригин стали класть вм секурома. Дальше я не копал, т к не знал для чего там секур. По сути он выполнял функу вм без активации, но как то инициализировался.




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 12 января 2015 03:04
· Личное сообщение · #4

ELF_7719116 пишет:
Ничего особенного с восстановлением дампа нет-PeTools, ImpRec (в моем случае с игрушкой, правда, часть импорта пришлось руками дописать-не распознавался. впрочем, это нормально)

Вообщето раньше была криптована только секция кода, скопировав в его в оригинальный файл и найдя оригинальную точку входа в Import Directory и исправив ОЕР можно было получить идеальный экзешен.

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 12 января 2015 07:35
· Личное сообщение · #5

gazlan пишет:
SHA160/AES

ок.
Nightshade пишет:
Дальше я не копал, т к не знал для чего там секур

Нету больше секурома ни в еа оригин и вообще

а собственно ключ SHA160/AES мы как получаем? от сервера в обмен на код активации игры?



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 20 февраля 2018 18:48
· Личное сообщение · #6

апаю.
накидайте, пожалуйста, в личку dlf-файлов обрыгина, кому не жалко. Желательно игрушек с денувой.
"C:\ProgramData\Electronic Arts\EA Services\License\*.dlf"



Ранг: 2.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 ноября 2018 04:31
· Личное сообщение · #7

Приветствую всех, у меня появился вопрос.
При запуске игры x64 сначала идет проверка Activation64.dll .. смотрит дальше файл лицензии .. ну а потом закрывает текущий процесс и после всех манипуляций Origin запускает новый процесс игры как я понял с расшифрованными секциями и уже без подгрузки Activation64.dll.
Вопрос заключается в том, что exe игры крашится (Access violation writing location ntdll.dll) после всех моих монипуляций: Убрал проверку Activation64.dll и изменил переход OEP на действительный (реальный) старт игры, пофиксил таблицу импорта.
Может кто подскажет в чем причина?
P.S. Могу записать видео как все делал.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 21 ноября 2018 10:10
· Личное сообщение · #8

jude
x64 игра - название у игры есть? Небось DENUVO ещё накрыта.
jude пишет:
При запуске игры x64 сначала идет проверка Activation64.dll .. смотрит дальше файл лицензии .. ну а потом закрывает текущий процесс и после всех манипуляций Origin запускает новый процесс игры как я понял с расшифрованными секциями и уже без подгрузки Activation64.dll.

Нет, не совсем так. В любом случае, будет грузиться Activation64.dll и проверять всегда лицуху. Второй раз - если игра не из клиента origin (правильно OriginCore это называется, судя по SDK) запущена была. Activation64.dll получает по каналу от OriginCore ключ, расшифровывает всё, восстанавливает секции и идёт jmp на OEP. Тут должен быть чистый дамп по всем канонам (помнится OllyDmpEx к x64dbg делал).
jude пишет:
Вопрос заключается в том, что exe игры крашится (Access violation writing location ntdll.dll) после всех моих монипуляций: Убрал проверку Activation64.dll и изменил переход OEP на действительный (реальный) старт игры, пофиксил таблицу импорта.

Наверное-ж требуется корректно OriginStub вырезать. Первая инициализация (OriginInit) + встроенная в функа (OriginUpdate). В каком месте именно краш(Середина игра - старт игры?)?



Ранг: 2.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 ноября 2018 15:39
· Личное сообщение · #9

ELF_7719116 пишет:
x64 игра - название у игры есть? Небось DENUVO ещё накрыта.

Игра Battlefield 4, версия exe: 1.8.2.48475
ELF_7719116 пишет:
Нет, не совсем так. В любом случае, будет грузиться Activation64.dll и проверять всегда лицуху. Второй раз - если игра не из клиента origin (правильно OriginCore это называется, судя по SDK) запущена была. Activation64.dll получает по каналу от OriginCore ключ, расшифровывает всё, восстанавливает секции и идёт jmp на OEP. Тут должен быть чистый дамп по всем канонам (помнится OllyDmpEx к x64dbg делал).

Да согласен. Просто не стал расписывать что уже было написанно в начале темы.
ELF_7719116 пишет:
Наверное-ж требуется корректно OriginStub вырезать. Первая инициализация (OriginInit) + встроенная в функа (OriginUpdate). В каком месте именно краш(Середина игра - старт игры?)?

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

Добавлено спустя 2 часа 15 минут
Эхх, столько много проверок OriginStub:
OriginStartup,
OriginRequestAuthCode,
OriginGetSettingSync,
OriginGetGameInfoSync,
OriginDestroyHandle,
OriginShutdown,
OriginUpdate,
OriginCheckOnline,
OriginGetProfileSync,
OriginGetProfile,
OriginQueryPresence,
OriginRegisterEventCallback,
OriginStartGame,
OriginIGOShutdown

И это еще не полный список.
Даже не знаю как все это вырезать, т.к крашится игра непонятно почему.



Ранг: 80.6 (постоянный), 194thx
Активность: 0.10.04
Статус: Участник

Создано: 21 ноября 2018 18:15 · Поправил: v00doo
· Личное сообщение · #10

ELF_7719116 пишет:
Наверное-ж требуется корректно OriginStub вырезать. Первая инициализация (OriginInit) + встроенная в функа (OriginUpdate)

jude пишет:
OriginStub

Это не stub, это Origin SDK, игра получает необходимую информацию, например ник пользователя, статус сети и прочее, тоже самое что есть у steam или uplay, только тут нет никаких публичных документаций само собой, парни со сцены реверсят и пишут эмуляторы клиентов.
ELF_7719116 пишет:
Первая инициализация (OriginInit) + встроенная в функа (OriginUpdate)

Инит говорит сдк какой идишник игры стартует, update служит для обновления колбечин сдк, его не надо вырезать уж точно.
Stub там один, protection id называет его EaDRM, там просто криптовка поверх бинаря, дальше восстанавливаются директории, если они были сперты и все, бинарь дальше чист, если там нет denuvo.

| Сообщение посчитали полезным: Jupiter

Ранг: 2.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 ноября 2018 19:03
· Личное сообщение · #11

Да я в курсе что это Origin SDK "Code\External\EA\OriginSDK\src\impl\OriginSDKstub.cpp"
Эмулятор Origin написать не сложно, готовые уже есть.
EaDRM вырезал успешно как показывает Protection ID.
Но проблема в другом, а в том, что игра крашится по непонятным причинам.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 22 ноября 2018 19:10
· Личное сообщение · #12

v00doo пишет:
Это не stub, это Origin SDK

Origin SDK это как-бы всё общее. первую инит функа stub/EaDRM, да
v00doo пишет:
и пишут эмуляторы клиентов.

клиент абсолютно не обязательно эмулить (это 100%)
v00doo пишет:
update служит для обновления колбечин сдк, его не надо вырезать уж точно.

если стек коллбеков пуст, то оно не нужно. Если не был инициализирован, то он просто выводит OutDebugString а-ля "Origin SDK not running"
v00doo пишет:
Инит говорит сдк какой идишник игры стартует

не только. В инит 4 параметра должно передаваться:
Code:
  1. typedef struct struct_EA_ACCESS_request
  2. {
  3.          char* ContentId;
  4.          char* Title;
  5.          char* MultiplayerId;
  6.          char* Language;
  7. }EA_ACCESS_request, *pEA_ACCESS_request;


jude пишет:
Игра Battlefield 4, версия exe: 1.8.2.48475

Да, знаю такую, ковырял. Ещё теперь внутри интерфейс сетевой игры сделали?? Раньше браузер запускался.
Если просто дамп корректно сделать, а Origin SDK не трогать - игра будет просто запускаться без крашей (если Origin CORE включен, то оно запустится без проблем в распакованном виде, при замене bf4_dump.exe на bf4.exe)?



Ранг: 2.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 22 ноября 2018 20:04 · Поправил: jude
· Личное сообщение · #13

ELF_7719116 пишет:
Да, знаю такую, ковырял. Ещё теперь внутри интерфейс сетевой игры сделали?? Раньше браузер запускался.
Если просто дамп корректно сделать, а Origin SDK не трогать - игра будет просто запускаться без крашей (если Origin CORE включен, то оно запустится без проблем в распакованном виде, при замене bf4_dump.exe на bf4.exe)?

Да верно теперь интерфейс внутри игры сделали.
Я толком и дамп нормально сделать не могу, вот адресс реального старта игры как я думаю 0x1411840A8 он же в дальнейшем запускает фунцию WinMain.
Проблема еще в том, что отладить процесс который был запущен OriginCore-м не получается. Т.к перехватить прямо старт запуска нового процесса игры не получается.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 22 ноября 2018 20:47 · Поправил: ELF_7719116
· Личное сообщение · #14

jude пишет:
Т.к перехватить прямо старт запуска нового процесса игры не получается.

Дааа, есть такое дело. Необходимо управление успеть перехватить в activation(64).dll
Где-то у меня валялся старый bf4_патченный.exe, корректно сдампленный. Со стабом/EaDRM патченным браузер запускался. Скриншот с exe'шника нашел - сам exe файло пока нет.

upd
BF4_Dumped_1.4.2.23831 в личку отправил

a5b2_22.11.2018_EXELAB.rU.tgz - TANK.jpg

| Сообщение посчитали полезным: jude, sefkrd
 eXeL@B —› Протекторы —› Взлом игр Electronic Arts (ActivationUI.exe, Activation.dll)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати