Сейчас на форуме: vsv1, johnniewalker, NIKOLA (+6 невидимых)

 eXeL@B —› Крэки, обсуждения —› Echelon
Посл.ответ Сообщение

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

Создано: 17 июня 2016 17:21 · Поправил: Rio
· Личное сообщение · #1

Hi All!
Кто что может подсказать по поводу Echelon II файл лицензии?
какие либы отвечают за защиту?




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 17 июня 2016 21:52 · Поправил: ajax
· Личное сообщение · #2

кредо? удачи там дрова даж были, если не путаю. смотрел давно, интереса не было

-----
От многой мудрости много скорби, и умножающий знание умножает печаль


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

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

Создано: 19 июня 2016 16:20
· Личное сообщение · #3

Кто-нибудь разбирал эту "штуку"?



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

Создано: 19 июня 2016 18:37
· Личное сообщение · #4

"шо за фрукт?" эдакий hasp?? есть мин. рабочий набор (справшиваю ради любопытсва)?



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

Создано: 19 июня 2016 19:44
· Личное сообщение · #5

ELF_7719116 пишет:
есть мин. рабочий набор

конечно в личке...



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

Создано: 25 июня 2016 16:16
· Личное сообщение · #6

кредо...первые мысли - игрушка "Assasin Creed". Ну, неважно, короче!

Вообщем, я поверхностно прошелся. Имеем, по сути, три(или четыре) ... не знаю как правда назвать это, на виртуальную машину оно не шибко тянет, впрочем, пусть будет виртуальная недомашина. Похожесть: SolidhShield самые первые версии; часть трюков была в SecuROM 8 (коллектор управления) и ProtectionID (XORing участков кода до/после исполнения). Выделяем память (VirtualAlloc) - кидаем туда данные, расшифровываем, дописываем релоки. Крутимся внутри аллочных областей и прыгаем то в секцию кода к функам программы (там всё без обфускации), то в MSVCR90, ну или в остальные системные (и не очень) дллки. аллочная область скрывает только код между вызовами функций. Причём скрывает так себе - обфускация разве что это куча jmp(трасинг в помощь). Антидебага нет. Есть проверка участков выполнения кода другим тредом (палим софтварные точки останова). По существу сам Echelon представляет собой систему "сервер-клиент"."Впрочем,ничего нового!"(с)...

Начинаем мы с главного потока, который вызывает функу инициализации (билдер) первой недоVM (естественно, сразу бросается в глаза VirutalAlloc, а ниже _beginthread...). Билдер вообще "гениальное" болото из заинлайненных функций - программист сей чуши был явно обсажен и, очевидно, не поминает сути вируальной машины. Имеем скелет и находу цепляем туда адреса...релоки. В конце через один и тот же код прыгаем в аллочную область. Короче, дэбилизм.
Касаемо самого Echelon II - стартует три треда. Тут имеет смысл вспомнить MessageBox с ошибками, например, когда не удается найти модуль, в конце смс, в скобках пишется три hex-значения типа (0xFFF000, 0xFFF000, 0xFFF000). К.О. сообщает, что это коды ошибок.
Code:
  1. Первая недоVM (main тред): 0x004428E0
  2. //в ней сначала
  3. virtualalloc (size 0x00055DE9, PAGE_EXECURE_READWITE)
  4. init болото
  5. переходник в болото

Стабильный переходник в аллочную область для всех недоVM:
Code:
  1. 00402710  /$  8B41 04       MOV EAX,DWORD PTR DS:[ECX+4]
  2. 00402713  |.  890424        MOV DWORD PTR SS:[ESP],EAX
  3. 00402716  \.  C3            RETN //после оказывааемся в аллочной области с исполняемым кодом

В главном потоке из 1й недоVM прыгаем в такую процедуру - 1ST PROTECT FUNC. Я писал выше про MessageBox с тремя hex-значениями (см. выше)! Так вот, первое hex-берется из result этой функи (в идеале она должна возвратить 0):
Code:
  1. //ПЕРВЫЙ КОНТАКТ КЛИЕНТА С СЕРВЕРОМ. До этого был инициализирован winsock
  2. 004107D0  /.  55            PUSH EBP                                                            ; 1ST PROTECT FUNC
  3. 004107D1  |.  8BEC          MOV EBP,ESP
  4. 004107D3  |.  83E4 F8       AND ESP,FFFFFFF8                                                    ; QWORD (8.-byte) stack alignment
  5. 004107D6  |.  81EC C4010000 SUB ESP,1C4
  6. ...
  7. 00410A7C  |.  8B4424 0C     MOV EAX,DWORD PTR SS:[ESP+0C]
  8. 00410A80  |.  5F            POP EDI
  9. 00410A81  |.  5E            POP ESI
  10. 00410A82  |.  5B            POP EBX
  11. 00410A83  |.  8BE5          MOV ESP,EBP
  12. 00410A85  |.  5D            POP EBP
  13. 00410A86  |.  C2 1000       RETN 10 //ТУТА ВОЗВРАЩАЕМ НОЛЬ (NULL, 0)

Далее стартуют ещё три треда (два контактных, один - шлёт смс юзеру...вроде так). Все они начинаются аналогично, как и главный - иницализируют свои недоVM:
Code:
  1. 1:
  2. 00410AA0   .  55            PUSH EBP                                                            ; 2nd VM init
  3. (тред 1)virtualalloc (size 0x00099A22, PAGE_EXECURE_READWITE)
  4. 2:
  5. 0040A960   .  55            PUSH EBP                                                            ; 3rd vm init
  6. (тред 2)virtualalloc (size 0x000206B2, PAGE_EXECURE_READWITE)
  7. 3:
  8. 004724F0   .  55            PUSH EBP                                                            ; 4r vm init
  9. тред 3)virtualalloc (size 0x0005F510, PAGE_EXECURE_READWITE)


Если патчить 1ST PROTECT FUNC нулём, то прога запускается, появляется окошко "Добро пожаловать" и чуть позже MessageBox с ошибкой контакта с сервером, которое шлёт другой тред после второй проверки. Причём в смс уже ДВА hex-значения ошибки. Вторая проверка уже размазана по winapi и отдельным процедурам. Но суть схожа с 1ST PROTECT FUNC. Пробуем ловить через winsock. На этом краткий обзор остановился, дальше - сами.

Что запомнилось в недоVM:
Code:
  1. //коллекторы в аллочной области - чаще всего знаменуют выход из неё или переход в другой "примитив"(?)
  2. 0433084D    50              PUSH EAX
  3. 0433084E    51              PUSH ECX
  4. 0433084F    52              PUSH EDX
  5. 04330850    9C              PUSHFD
  6. 04330851    E8 14000000     CALL 0433086A
  7. 0433086D    0300            ADD EAX,DWORD PTR DS:[EAX]
  8. 0433086F    8B00            MOV EAX,DWORD PTR DS:[EAX]
  9. 04330871    8B4A 0C         MOV ECX,DWORD PTR DS:[EDX+0C]
  10. 04330874    03CA            ADD ECX,EDX
  11. 04330876    51              PUSH ECX
  12. 04330877    8B4A 08         MOV ECX,DWORD PTR DS:[EDX+8]
  13. 0433087A    03C8            ADD ECX,EAX
  14. 0433087C    51              PUSH ECX
  15. 0433087D    8B4424 04       MOV EAX,DWORD PTR SS:[ESP+4]
  16. 04330881    874424 14       XCHG DWORD PTR SS:[ESP+14],EAX
  17. 04330885    8B0C24          MOV ECX,DWORD PTR SS:[ESP]
  18. 04330888    874C24 10       XCHG DWORD PTR SS:[ESP+10],ECX
  19. 0433088C    5A              POP EDX
  20. 0433088D    5A              POP EDX
  21. 0433088E    9D              POPFD
  22. 0433088F    5A              POP EDX
  23. 04330890    C3              RETN


Code:
  1. xoring code - аля ProtectionID. Сначала я подумал, что это проверка участков но через пару сек понял, что первым операндом мы пишем
  2. 04514A23    803408 41       XOR BYTE PTR DS:[ECX+EAX],41
  3. 04514A27    83C1 01         ADD ECX,1
  4. 04514A2A    81F9 A1000000   CMP ECX,0A1
  5. 04514A30  ^ 75 F1           JNE SHORT 04514A23
  6. 04514A32    8038 90         CMP BYTE PTR DS:[EAX],90 
  7. 04514A35  ^ 0F84 44FFFFFF   JE 0451497F


| Сообщение посчитали полезным: 4kusNick, Rio
 eXeL@B —› Крэки, обсуждения —› Echelon
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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