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

 eXeL@B —› Протекторы —› Crack SecuROM & DENUVO
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 52 . 53 . >>
Посл.ответ Сообщение

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

Создано: 28 марта 2012 14:24 · Поправил: ELF_7719116
· Личное сообщение · #1


CODEX UNVIRTUALIZE DENUVO/VMProtect
Code:
  1. Release Notes:
  2.  
  3. This is an experimental Proof of Concept release where the Denuvo DRM
  4. and VMProtect have been removed completely from the main executable.
  5. The main idea of this project was to verify whether Denuvo affects
  6. CPU usage and overall performance of this game. We noticed faster
  7. loading times but will leave the rest of the performance comparison
  8. battle to others.
  9.  
  10. Here is a small tech summary of what has been done:
  11.  
  12. - VMProtect is fully removed (30 VM entry points)
  13. - Denuvo is fully removed (104 VM entry points)
  14. - All required PE directories are fully restored
  15. (exports, imports, exceptions, TLS)
  16. - Fixed around 500k absolute & relative code and data pointers
  17.  
  18. The team would like to send out special thanks to our hard working mate who is responsible for this huge project. This would not have been possible without you! You rock man!


**************

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

░▒▓▓-SecuROM 7/8 common (VM research; disk-check bypass attack; find OEP & dumping; cumulative attack...)
░▒▓▓-- SPR I (profiles; updates)
░▒▓▓-Requests for generation SecuROM PA Unlock code (SecuROM PA Online-activation) WOW! Only on EXELAB.RU
░▒▓▓-Denuvo ("surface" questions)
░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

SPR I - Fight against the virtual machines (VM) of all SecuROM 7-8 versions (Подробности в 20, 23 посте.)


80_PA - SecuROM (PA) Online-Activation keygen! Holy shit!
[/url]
the list of programs (games), which can now be activated using 80_PA:
https://pastebin.com/EiMbV3YD or --> pastebin primary link <--

>>>>>>>> (!) Send me more games with SecuROM PA (!) >>>>>>>>>>>>

Denuvo Profiler (DProfiler)


------------
1.04.2012
Собственно я не сказал самого главного. SecuRom_Profiler 7 v1.0(SPR I) - часть большого зеленого пирога, под названием "ТИБЕРИУМНЫЙ РЕВЕРСИНГ" (статья опубликована в 159 номере ][. А позже, ещё одна итоговая статья - 199 ][), включает в себя собственно статью в журнале, ПОЛНУЮ техническую статью, материалы по SecuROM 7.33.0017, исходники X-кода и видео. Технический вариант статьи с приложениями можно брать отсюда:
Статья
Видео
Видео 2 (Продолжение)
Видео 3 (Окончательный разгром)
Видео 4 (В погоне за взломом DENUVO)
Имеет косвенное отношение к статье:
Видео косвенное

Хроники битвы при DENUVO 19.04.19
https://xakep.ru/2019/04/19/denuvo/

Message for the companies(etc) using this protection: we can buy SecuROM/DENUVO SDK & sources. Сontact me according to the personal message. Сonfidentiality is guaranteed!!! The bought files will be used for private research!

░░░░░░░░░░
См. также:
diff_trace

▓▓
615d_22.09.2013_EXELAB.rU.tgz - Sony DADC SecuROM vulnerability.zip
c177_01.02.2017_EXELAB.rU.tgz - PATENT DENUVO.pdf (притащил v00doo)


▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓
80_PA new 2.0 hotfix (!!!). Official links (mirrors):
https://mega.nz/#!L6gGBYBK!Y9X-6LFBdow6a1_IBlDFbrS6PBF4RRz_n9kuSGiI0UM (или --> 80_PA_v2.0 keygen link <--)
--> Mirror #1 <--
--> Mirror #2 <--

▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓
DENUVO Leak content
обращайтесь в личку - скину.

▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓▒▓
Denuvo Profiler (DProfiler) - test version 0.3 "INSPIRE"
https://mega.nz/#!DLwExKya!kCyFXw1roY3MkFaTO56LJAd-amc2yXWVerV2ic38bgs (или --> DProfiler link <--)

| Сообщение посчитали полезным: yanus0, obfuskator, Vovan666, MasterSoft, slick, hlmadip, ClockMan, Nightshade, Dart Raiden, Bronco, BAHEK, SReg, [Nomad], DimitarSerg, verdizela, yagello, OnLyOnE, FrenFolio, daFix, VodoleY, gena-m, m0bscene, Gideon Vi, ff0h, zeppe1in, antipod, huckfuck, kioresk, aRiX, 4kusNick, Ara, d0wn, Smon, audiofeel, zNob, cypherpunk, zzzombie1989, MarcElBichon, v00doo, DenCoder, nick7, Haoose-GP, arnix, Qbik, serilo, s2003r, DICI BF, Kindly, PavelDAS, HandMill, VanHelsing, random, TrueLies, warezhunter_, denfil777, alx30721, omeh2003, asm-jaime, WildGoblin, mushr00m, Flippy1801, KOTwasya, r3n5m388, chegevara, Groul, dnv83, kassane, ==DJ==[ZLO], red0x, HAOSov, rootkid, DirtyHarry, MacTep, kurorolucifer, s0cpy, aire1, ReloadUGunz, tRuNKator, Cherbet, RmK-FreE, Pringell, IHateInventNicknames, go2crck, mak, Dimosz, Creckerhack, zd0x, Mustafa_Dev007, UnnyBolt, Isaev, Astap1516, Voices_of_the_BULG, EHS4N, SnakeByte, KOCMOC42, anarh1st47

Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 20 ноября 2015 21:35
· Личное сообщение · #2

vden пишет:
Могу ошибаться, но, кажется, вмпрот даже не снимали. В кряке codex, похоже, просто эмулируют UPLAY APIs.

в большинстве случаев его и снимать не надо, зачем? афтары как правило наркоманы, намазав вм на функцию x, они почему-то наивно полагают, что все вложенные функции тоже будут защищены.
Code:
  1. function x;
  2. bla
  3. bla
  4. call y;
  5. bla
  6. bla
  7. call z;

ну и смысл тогда анпачить, но если вдруг всё критичное в вм...то и это не проблема ведь.

P.S.: сразу вспомнил фейл компании 1С, которые накрыли старфорсом библу движка, которую можно было слить чистую, этой же версии, с офф. сайта этого же движка.

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


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

Создано: 01 декабря 2015 03:27 · Поправил: Haoose-GP
· Личное сообщение · #3

Just Cause™ 3 - Denuvo
Игра вышла полчаса назад.
EXE - 114 Мб

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

Ранг: 20.4 (новичок), 8thx
Активность: 0.030
Статус: Участник

Создано: 01 декабря 2015 11:49
· Личное сообщение · #4

Haoose-GP пишет:
EXE - 114 Мб

Столько же весит StarCraft в распакованном виде.

Залейте, пожалуйста, файло от just cause 3, на обменник! Там Стим?



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 01 декабря 2015 11:56
· Личное сообщение · #5

3dm ее уже приговорили
3DMGAME-Just.Cause.3.XL.Edition-3DM.torrent




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 01 декабря 2015 13:02
· Личное сообщение · #6

Haoose-GP пишет:
Игра вышла полчаса назад.

упс.... всё-таки разродились
долго делали, хотя.... насрать... я и второго в своё время, процентов на 40 прошёл, потом тупо устал...крошить_освобождать_и_перемещаться... Сука, здоровая локация была.
Тут поди ещё больше, в общем нах нах нах...

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





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

Создано: 01 декабря 2015 18:15
· Личное сообщение · #7

TryAga1n
3dm ее уже приговорили
Нет, там невзломанная версия.

hello
Там Стим?
Там Denuvo



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

Создано: 01 декабря 2015 18:28
· Личное сообщение · #8

Haoose-GP пишет:
Там Denuvo

денувой же не просто так игра накрыта, а именно steam/origin?? Или игрушка требует DVD в приводе, как в старые-добрые времена... GetDriveType...

Слейте, кстати, мин. рабочий набор! Вверху уже тоже просили.




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

Создано: 01 декабря 2015 20:08 · Поправил: Haoose-GP
· Личное сообщение · #9

ELF_7719116
На русторке есть стим-рип раздача папкой, скачайте что нужно ) Я игру не качал пока.
Ну а под денувой - наверно ж стим )

Хотя -->вот<-- пак некоторых файлов:
Список файлов внутри:
bink2w64.dll
crashrpt_lang.ini
cudart64_55.dll
cufft64_55.dll
d3dx11_43.dll
fmod_studio_F.dll
gfsdk_waveworks.win64.dll
jc3AudioDSP_MultibandCompressor_SSE_F.dll
JustCause3.exe
ProfileContext_F.dll
sdkencryptedappticket64.dll
Shaders_F.shader_bundle
steam_api64.dll
steam_appid.txt
patch_win64\delta_filelist_install.archive

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

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

Создано: 02 декабря 2015 20:00
· Личное сообщение · #10

Just Cause™ 3 - DENUVO (VMProtect) first research report

А у нас теперь немного изменена логика работы VM. Естественно из всего смотрим, как теперь декодируются примитивы... А ТУТ ПАЦАНЫ РЕАЛЬНО УДИВЛЯЮТ!

Раньше в первых билдах были таблицы типа "Хранилищ №1.5" в секуроме. Расшифровав их можно спокойно получить всю раскладку примитивов...epic win! в Just Cause 3 теперь таблицы убрали и ... фокус, фокус .. стали пихать пошифрованные delta-смещения прямо в ленту pcode. Пошифованное delta-смещение теперь отсчитывается от послденего RVA примитива, на который прыгнула VM:
Code:
  1. ...
  2. raw_crypt_delta
  3. 0000000149667C84 | SUB RSI,4                               | сдвигаемся по ленте на sizeof(DWORD)
  4. 0000000149667C95 | MOV EAX,DWORD PTR DS:[RSI]              | //читаем пошифрованную delta
  5.  
  6. raw_crypt_delta^owner_constant
  7. 0000000149667C97 | XOR EAX,EBX                             |//ксорим с изменяемой константой EBX
  8.  
  9. //блок индивидуальной статической дешифровки (меняется не сильно - чаще всего выкидываются ROL'ы)
  10.  
  11. decrypt(raw_crypt_delta^owner_constant)
  12. 00000001495C1D54 | DEC EAX                                 |
  13. 00000001495C1D56 | ROL EAX,1                               |
  14. 000000014962FA1B | BSWAP EAX                               |
  15. 000000014962FA1D | ROL EAX,1                               |
  16.  
  17. //Ксорим ещё раз только саму константу
  18. owner_constant^decrypt(raw_crypt_delta^owner_constant)
  19. 0000000149621956 | PUSH RBX                                |
  20. 000000014962195B | XOR DWORD PTR DS:[RSP],EAX              |
  21. 0000000149621964 | POP RBX                                 |
  22.  
  23. //складываем (ну там в зависимости + или - ещё учитывается)
  24. 000000014962196C | ADD RDI,RAX                             | //
  25.  
  26. 000000014968E009 | JMP RDI                                 | //след. примитив

Если я всё правильно рассчитал, то (сами доагадетесь что за действия теперь можно сделать с лентой) вместо того, чтобы осложнить unvirtualization, они упростили эту задачу ...

По мелочи: исчезла вмпротная дебильная обфускация JNE/JE - примитивы стали гораздо чище и читаеме. В немного почищенном виде главные иснтрукции в примитивах выглядят так:

Code:
  1. <первый входной примитив (островок)>
  2. 0000000145CC7B80 | LEA RCX,QWORD PTR DS:[145CACF77]        |
  3. 00000001495F2A48 | PUSH FFFFFFFF981D0BD2                   |
  4. 000000014962FB35 | PUSH RDI                                |
  5. 000000014962FB36 | PUSH RCX                                |
  6. 000000014962FB3D | PUSH RBP                                |
  7. 000000014962FB3E | PUSH R13                                |
  8. 000000014962FB4A | PUSH R10                                |
  9. 0000000149572FD1 | PUSH R14                                |
  10. 0000000149572FDF | PUSHFQ                                  |
  11. 0000000149572FE8 | PUSH RSI                                |
  12. 0000000149572FE9 | PUSH R9                                 |
  13. 0000000149572FEF | PUSH R8                                 |
  14. 0000000149572FF7 | PUSH R15                                |
  15. 0000000149573002 | PUSH R12                                |
  16. 0000000149573008 | PUSH RBX                                |
  17. 0000000149560895 | PUSH RDX                                |
  18. 0000000149560896 | PUSH RAX                                |
  19. 0000000149560899 | PUSH R11                                |
  20. 00000001495608AF | PUSH RAX                                |
  21.  
  22. 00000001495608BA | MOV RSI,QWORD PTR DS:[RSP+90]           | //arg1. - лентаpcode
  23. 0000000149667C1F | MOVABS RAX,100000000                    |
  24. 0000000149667C29 | ADD RSI,RAX                             |
  25.  
  26. 0000000149667C3D | SUB RSP,140                             | //резервируем стек под зону обмена данными
  27. 0000000149667C46 | AND RSP,FFFFFFFFFFFFFFF0                |
  28.  
  29. 0000000149667C6F | LEA R12,QWORD PTR DS:[100000000]        |
  30. 0000000149667C76 | LEA RDI,QWORD PTR DS:[149667C76]        | //адрес первого островка - чтобы прыгнуть на след. нужен
  31.  
  32. 0000000149667C84 | SUB RSI,4                               | 
  33. 0000000149667C95 | MOV EAX,DWORD PTR DS:[RSI]              |
  34. 0000000149667C97 | XOR EAX,EBX                             |
  35. 00000001495C1D54 | DEC EAX                                 |
  36. 00000001495C1D56 | ROL EAX,1                               |
  37. 000000014962FA1B | BSWAP EAX                               |
  38. 000000014962FA1D | ROL EAX,1                               |
  39. 0000000149621956 | PUSH RBX                                |
  40. 000000014962195B | XOR DWORD PTR DS:[RSP],EAX              |
  41. 0000000149621964 | POP RBX                                 |
  42.  
  43. 000000014962196C | ADD RDI,RAX                             | 
  44. 000000014968E009 | JMP RDI                                 |


Code:
  1. <последующие примитивы (островки)>
  2. 000000014962E2AE | SUB RSI,1                               |
  3. 000000014962E2BE | MOVZX EAX,BYTE PTR DS:[RSI]             |
  4.  
  5. 00000001495517A7 | MOV RCX,QWORD PTR DS:[RBP]              |//RBP теперь в игре
  6. 000000014967FF0E | ADD RBP,8                               |//ровняем
  7. 000000014967FF15 | MOV QWORD PTR DS:[RSP+RAX],RCX          
  8.  
  9. 000000014967FF19 | SUB RSI,4                               |
  10. 000000014967FF27 | MOV EAX,DWORD PTR DS:[RSI]              |
  11. 000000014967FF29 | XOR EAX,EBX                             |
  12.  
  13. 00000001495894BB | PUSH RBX                                |
  14. 00000001495894BD | XOR DWORD PTR DS:[RSP],EAX              |
  15. 00000001495894C9 | POP RBX                                 |
  16. ... стат декрипт
  17.  
  18. 00000001495894D2 | ADD RDI,RAX                             |
  19.  
  20. 00000001496B7832 | PUSH RDI                                |
  21. 00000001496B7833 | RET                                     |


| Сообщение посчитали полезным: mak, Haoose-GP


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

Создано: 02 декабря 2015 22:51
· Личное сообщение · #11

ELF_7719116
Надежда на crack есть или все слишком плохо? =)



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

Создано: 03 декабря 2015 17:27
· Личное сообщение · #12

Haoose-GP пишет:
Надежда на crack есть или все слишком плохо? =)

Та ни! який кряк. Це я бачу, шо разрабы денуво вдало для унвиртуализацii повернули логіку роботи свого "VMProtect". Гарно можна статично розкрутити стрічку p-code
А для кряка, я полагаю, также возьмут и напишут эмулятор стима




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 03 декабря 2015 18:30 · Поправил: Bronco
· Личное сообщение · #13

ELF_7719116 пишет:
Та ни! який кряк

пiдтрiмую...
---------
парни на хентаксе, уже вовсю архивы игры вскрывают.

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: 35.8 (посетитель), 23thx
Активность: 0.030
Статус: Участник

Создано: 04 декабря 2015 07:16
· Личное сообщение · #14

ELF_7719116 пишет:
Гарно можна статично розкрутити стрічку p-code


Чето я не вижу послаблений для себя. До этого я мог статично проанализировать точку входа в вм, найти таблицу обработчиков примитивов, проанализировать каждый и сопоставить с известными, определить тип и ид, размер примитива в байт-коде и, собственно, расшифровщики байт-кода. А дальше работать только с байт-кодом, опираясь на собранные данные.
Теперь же надо проанализировать точку входа, определить ленту байт-кода, расшифровщик дельты, перейти на следующий обработчик, проанализировать его, перейти к следующему и т.д..

Т.е. по сути все тоже самое только подход не шаговый, а комплексный. так и где упростилось то?



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

Создано: 04 декабря 2015 11:30 · Поправил: vden
· Личное сообщение · #15

ELF_7719116 пишет:
стали пихать пошифрованные delta-смещения прямо в ленту pcode

плавно движется к структуре starforce, остается еще каждый хэндлер инлайнить

Убрали dispatch-table, видимо, потому, что ее легко перехватывали и снимали лог состояний вм Даже китайский отладчик, кажется, был на этом построен.

Интересно глянуть, что там нового в vmprotect 3



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 04 декабря 2015 13:16
· Личное сообщение · #16

Что-то очень похоже на новый VMProtect от VMPSoft. Денуво просто сотрудничает с ними? Или просто похожие идеи?




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

Создано: 04 декабря 2015 14:47
· Личное сообщение · #17

int пишет:
Что-то очень похоже на новый VMProtect от VMPSoft.

Моё предположение что кто то третий продал(подал) идею новой вм( у дерматолага просто бы бабок нехватило потянуть два проекта)

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




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

Создано: 04 декабря 2015 18:29
· Личное сообщение · #18

int пишет:
Что-то очень похоже на новый VMProtect от VMPSoft. Денуво просто сотрудничает с ними?

Я уже на это давно указываю! Причем VMPSoft отказывается комментировать данные факты.

ClockMan пишет:
Моё предположение что кто то третий продал(подал) идею новой вм

Тут определенно есть связь между VMPSoft и DENUVO. Я не верю в такие случайности - практически байт в байт повторяется код (логика вообще одинакова).

vden пишет:
Убрали dispatch-table, видимо, потому, что ее легко перехватывали и снимали лог состояний вм

Psalmopoeus Pulcher пишет:
Теперь же надо проанализировать точку входа, определить ленту байт-кода, расшифровщик дельты, перейти на следующий обработчик, проанализировать его, перейти к следующему


Друзья! Вообще, я уверен, что DENUVO кто-то (наверняка из окружения Вашего дерматолога) пишет из VMPSoft. Ну не может быть такого, что те же авторы секурома второй раз наступили на одни и те же грабли с dispatch-table (как это было в секуром версии 7). В 8 секуроме они тоже отказались от dispatch-table, но там РЕАЛЬНО ЭТО МНОГОКРАТНО УПРОСТИЛО ЗАДАЧУ ТОЧНОГО ДАМПИНГА примитивов VM. Был т.н. коллектор, под входным примитивом, куда стекалось управление, после каждой выполненной инструкции и безусловного прыжка в любом примитиве. Т.е. step-by-step мы точно собирали весь примитив + обфускации не было вообще. Насчет денувки - разработчики сами недвусмысленно указывают, что всё идет к ленте. Насчет сложности взлома - тут просто нужен коллективный разум, а не так, чтобы один человек всё писал и анализировал. Если уцепиться сейчас за денувий хвост, то вм в любом случае раскрутить более чем реально. Разработчики денуво просто работают на лохов-покупателей, которые верят в то, что игрушка не будет тормозить после навешивания этого говна. Хотя на самом деле, львиная доля тормозов и производительности уходит на вм. И теперь оно ещё больше только будет расти! Sad, but true.
Кстати, один я заметил, что все примитивы начинаются с декремента регистра-указателя на ленту (и jmp вверху)?!



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 04 декабря 2015 19:10
· Личное сообщение · #19

ClockMan пишет:
у дерматолага просто бы бабок нехватило потянуть два проекта

А причем тут бабки? Слегка подправить константы и вот уже получаем две похожие ВМ. А может это вообще одна ВМ, я глубоко не копал. Тем более деньги могла дать сама Денуво, заказав на аутсорс ВМ для себя.




Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 04 декабря 2015 20:33 · Поправил: DenCoder
· Личное сообщение · #20

ELF_7719116 пишет:
Кстати, один я заметил, что все примитивы начинаются с декремента регистра-указателя на ленту (и jmp вверху)?!

Бывает декремент, бывает инкремент. Бывают файлы с 2мя вм(обработчиками), у одной инкремент, у другой декремент, но обычно это уже в распакованном файле(со снятым верхним слоем). В файлах с 2мя вм есть примитив перехода на другую вм...

Добавлено спустя час
Наверное, ты имеешь в виду vm entry? Точка входа в вм (обработчик примитивов, как один сведущий выше человек написал). Абзацем выше я написал, подразумевая это. В обработчике с декрементом сначала декремент указателя на ленту перед тем, как взять индекс примитива, с инкрементом - сначала берётся индекс примитива, потом уже инкремент.

Кстати, я заметил 2м примитивом любой ветки, по крайней мере в версиях 2.x, светится константа - ключ для "дешифровки" указателя на некоторую аллоченную область. Одно из 2х - это либо любимое число dermatolog'а, либо - ватермарк. По возможной второй причине здесь не буду светить найденный мной в своих файлах.

-----
IZ.RU




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

Создано: 04 декабря 2015 21:51 · Поправил: vden
· Личное сообщение · #21

До ВМ. Секция по адресу 143142000, entry point 143143728 - просто расшифровывает кусок памяти (AES-256), протектит все секции как RWX и выполняет суб-функцию, которая уже ведет в вм.

Code:
  1. // ---------------------------------------------------------
  2.  
  3. int start()
  4. {
  5.   // AES-256?
  6.   AES::Decrypt_CBC_Memory(
  7.     (BYTE *)AES_KEY1_1431436E8,
  8.     (BYTE *)AES::IV1_143143708,
  9.     (BYTE *)&BufferToDecrypt_143145000,
  10.     (unsigned __int64)&EndOfBufferToDecrypt_1431677F6 - (unsigned __int64)&BufferToDecrypt_143145000);
  11.  
  12.   return SetAllSections_RWX_AndGoFurther();
  13. }
  14.  
  15. // ---------------------------------------------------------
  16.  
  17. int SetAllSections_RWX_AndGoFurther()
  18. {
  19.   // [COLLAPSED LOCAL DECLARATIONS. PRESS KEYPAD CTRL-"+" TO EXPAND]
  20.  
  21.   imagebase1 = 0x140000000i64;
  22.   v7 = 0x140000000i64;
  23.   nt = (IMAGE_FILE_HEADER *)((signed int)imgbase.e_lfanew + 0x140000004i64);
  24.   sec = 0i64;
  25.  
  26.   if ( *(WORD *)((char *)&imgbase.e_cp + (signed int)imgbase.e_lfanew) == IMAGE_FILE_MACHINE_I386 )
  27.     sec = (IMAGE_SECTION_HEADER *)(imagebase1 + *(_DWORD *)(v7 + 0x3C) + 0xF8);
  28.   else
  29.     sec = (IMAGE_SECTION_HEADER *)(imagebase1 + *(_DWORD *)(v7 + 0x3C) + 0x108);
  30.  
  31.   flOldProtect = 0;
  32.   v4 = 0;
  33.   for ( i = 0; i < nt->NumberOfSections; ++i )
  34.   {
  35.     VirtualProtect(sec, 0x28ui64, PAGE_EXECUTE_READWRITE, &flOldProtect);
  36.     flags = sec->Characteristics;
  37.     _bittestandreset((unsigned int *)&flags, 0x1Fu);
  38.     sec->Characteristics = flags;
  39.     VirtualProtect(sec, 0x28ui64, flOldProtect, &v4);
  40.  
  41.     VirtualProtect((LPVOID)(sec->RVA + imagebase1), sec->Misc.VirtualSize, PAGE_EXECUTE_READWRITE, &flOldProtect);
  42.  
  43.     ++sec;
  44.   }
  45.   return Further_145CDAE5F();
  46. }
  47.  
  48. // ---------------------------------------------------------
  49.  
  50. int  __cdecl Further_145CDAE5F()
  51. {
  52.   tovm_145CD4500(byte_145CDADED, 60, byte_145CDAE29, 54);
  53.   return tovm_145CC7B70();
  54. }
  55.  
  56. // ---------------------------------------------------------


Пролог и вход в вм для этих двух функций тут
Code:
  1. tovm_145CD4500
  2.  
  3. .code:0000000145CD4500                 mov     [rsp+arg_18], r9d
  4. .code:0000000145CD4505                 mov     [rsp+arg_10], r8
  5. .code:0000000145CD450A                 mov     [rsp+arg_8], edx
  6. .code:0000000145CD450E                 mov     [rsp+arg_0], rcx
  7. .code:0000000145CD4513                 push    rdi
  8. .code:0000000145CD4514                 mov     eax, 62B0h
  9. .code:0000000145CD4519                 call    allocation_probe_0
  10. .code:0000000145CD451E                 sub     rsp, rax
  11. .code:0000000145CD4521                 push    rcx
  12. .code:0000000145CD4522                 lea     rcx, unk_145CCF46A
  13. .code:0000000145CD4529                 jmp     vm_1495E201A
  14.  
  15. // ---------------------------------------------------------
  16.  
  17. tovm_145CC7B70
  18.  
  19. .code:0000000145CC7B70                 push    rsi
  20. .code:0000000145CC7B71                 push    rdi
  21. .code:0000000145CC7B72                 mov     eax, 11E8h
  22. .code:0000000145CC7B77                 call    allocation_probe
  23. .code:0000000145CC7B7C                 sub     rsp, rax
  24. .code:0000000145CC7B7F                 push    rcx
  25. .code:0000000145CC7B80                 lea     rcx, loc_145CACF77
  26. .code:0000000145CC7B87                 jmp     vm_1495F2A48





Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 04 декабря 2015 22:37 · Поправил: DenCoder
· Личное сообщение · #22

У вас что-то пока мной невиданное, нетроганное

Но пока не могу помочь
vden пишет:
протектит все секции как RWX

Это не ново для вмпрота, анпак без этого и невозможен. Но в версиях 2.x VirtualProtect вызывается из виртуализированного кода. Касательно AES - в 2.x не используется, встроенный анпакер проще, но подробно не разбирал.

vden пишет:
Пролог и вход в вм для этих двух функций тут

И это будет 3м признаком, что это отличная от 2.x версия. Видел подобное в pdfLock.dll, где тоже вмпрот.

Вот она, версия 3. x?

Вход в вм в 2.x:
Code:
  1. push encrypted_value1
  2. push encrypted_value2
  3. jmp common_vm_entry
  4.  
  5. common_vm_entry:
  6. push r1
  7. push r2
  8. push r3
  9. ...
  10. push encrypted_pointer
  11. push delta_disp; для exe равно 0
  12.  
  13. mov esi, [rsp + 0xA0]; encrypted_value1
  14. DECRYPT_VMPOINTER(esi)
  15. mov al, DECODE_CMD_INDEX(esi)
  16. mov rcx, DECRYPT_PRIMITIVE_ADDRESS(al)
  17. jmp rcx


-----
IZ.RU


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

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

Создано: 04 декабря 2015 22:43 · Поправил: vden
· Личное сообщение · #23

Я думаю, AES это уже поверх вмпрота, типа сделали свой дополнительный слой, хотя могу и ошибаться.

А пролог виден потому, что было наверно так

func1()
{
пролог
VMProtectBegin_XXX();
...
VMProtectEnd();
эпилог
}

Пока основное отличие версии 3 от версии 2 - отсутствие dispatch table.
Сама таблица всегда из 256 адресов, с повторяющимися значениями.


PS забавно, оказывается код каждого обработчика реально заинлайнен
т.е. наверно где-то до сотни примитивов, но скопированы тысячи раз,
в итоге секция кода вм = 100 Мб, до защиты игра наверно была 15-20 Мб.

Добавлено спустя 17 часов 26 минут
Попробовал загрузить точку входа в вм в анализатор, который я пишу для следующей версии vdisasm. Анализатор еще многого не умеет, но вот что он смог мне отследить:

Состояние на момент конца первого блока (в точке JMP RDI). Я оставил только значимые выражения.
Выражения в определенном внутреннем представлении в префиксной форме, т.е. сначала опкод, потом параметры.

RSP ========> and(add(undef(RSP), 0xFFFFFFFFFFFFFE28:64), 0xFFFFFFFFFFFFFFF0:64)
RBX ========> xor(0x145CD75A7:64, neg(bswap(add(or(shl(xor(undef([0x145CD75A3:64]:32), 0x45CD75A7:32), 0x1:8), shr(xor(undef([0x145CD75A3:64]:32), 0x45CD75A7:32), 0x1F:8)), 0x34C218C6:32))))
RBP ========> add(undef(RSP), 0xFFFFFFFFFFFFFF68:64)
RSI ========> 0x145CD75A3:64
RDI ========> add(0x1495722E8:64, SignExtend(neg(bswap(add(or(shl(xor(undef([0x145CD75A3:64]:32), 0x45CD75A7:32), 0x1:8), shr(xor(undef([0x145CD75A3:64]:32), 0x45CD75A7:32), 0x1F:8)), 0x34C218C6:32))) to 64))

[add(undef(RSP), 0xFFFFFFFFFFFFFFF8:64)] ========> 0xFFFFFFFFC8B9AEB5:64
[add(undef(RSP), 0xFFFFFFFFFFFFFFF0:64)] ========> 0x1495E2024:64
[add(undef(RSP), 0xFFFFFFFFFFFFFFE8:64)] ========> undef(R9)
[add(undef(RSP), 0xFFFFFFFFFFFFFFE0:64)] ========> undef(R11)
[add(undef(RSP), 0xFFFFFFFFFFFFFFD8:64)] ========> undef(R12)
[add(undef(RSP), 0xFFFFFFFFFFFFFFD0:64)] ========> undef(RCX)
[add(undef(RSP), 0xFFFFFFFFFFFFFFC8:64)] ========> undef(RDX)
[add(undef(RSP), 0xFFFFFFFFFFFFFFC0:64)] ========> undef(RBP)
[add(undef(RSP), 0xFFFFFFFFFFFFFFB8:64)] ========> undef(RBX)
[add(undef(RSP), 0xFFFFFFFFFFFFFFB0:64)] ========> undef(R8)
[add(undef(RSP), 0xFFFFFFFFFFFFFFA8:64)] ========> undef(RSI)
[add(undef(RSP), 0xFFFFFFFFFFFFFFA0:64)] ========> undef(RAX)
[add(undef(RSP), 0xFFFFFFFFFFFFFF98:64)] ========> undef(RFL)
[add(undef(RSP), 0xFFFFFFFFFFFFFF90:64)] ========> undef(R15)
[add(undef(RSP), 0xFFFFFFFFFFFFFF88:64)] ========> undef(RDI)
[add(undef(RSP), 0xFFFFFFFFFFFFFF80:64)] ========> undef(R10)
[add(undef(RSP), 0xFFFFFFFFFFFFFF78:64)] ========> undef(R14)
[add(undef(RSP), 0xFFFFFFFFFFFFFF70:64)] ========> undef(R13)
[add(undef(RSP), 0xFFFFFFFFFFFFFF68:64)] ========> 0x0:64

Тут мы видим основные регистры и стек. Виден весь начальный контекст вм.
Можно заметить, что RBP (указатель вм-стека) указывает на самое нижнее выражение, вм будет их один за другим переносить в свои регистры (VM_POP).
А память вм-регистров находится ниже - от RBP до RSP. Можно посчитать размер, но в любом случае, вм может увеличивать размер своего контекста,
при необходимости.


Выражения RDI и RBX в виде графа, потому что текстовый вид сложно читать:



Тут мы видим внизу есть MemRef - здесь чтение из памяти по адресу 0x145CD75A3. Это первый адрес байт-кода из которого читается DWORD. Далее по графу это значение попадает в XOR на константу, потом ROL 1 (который тут в виде SHL и SHR), потом плюс еще одна константа, потом меняем байты местами, потом меняем знак, расширяем со знаком до 64 бит и прибавляем к константе слева. В итоге получаем адрес следующего блока.

Немного автоматизировав, посчитались следующие значения

Byte-code data address for next jump: 145CD75A3 // первый адрес читаемый в байт-коде
Byte-code data for next jump: 66C6063A // DWORD прочитанный из 145CD75A3
Next jump: 0x14956496E:64
Expected RBX: 0x1BA325321:64

Действительно, JMP RDI идет по адресу 0x14956496E и RBX = 0x1BA325321.

Вот такой небольшой fun

| Сообщение посчитали полезным: ELF_7719116, DenCoder, 4kusNick, mak, v00doo


Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 05 декабря 2015 17:33 · Поправил: DenCoder
· Личное сообщение · #24

vden пишет:
Далее по графу это значение попадает в XOR на константу, потом ROL 1 (который тут в виде SHL и SHR), потом плюс еще одна константа, потом меняем байты местами, потом меняем знак, расширяем со знаком до 64 бит и прибавляем к константе слева

Аналогично, как и в 2.x. Приведённый алгоритм меняется рандомно для каждой новой протекции или каждого нового файла. Также внутри одного файла, если есть 2 вм, то для каждой свой такой алго. В обработчиках с декрементом меняются местами байты, с инкрементом - нет. Также в примитивах, использующих какую-либо константу из ленты, свой алго декодинга этих констант, зависит от размера данных, вводимых в стек/извлекаемых из стека, и типа обработчика - декремент/инкремент.

<- тебе потребуется разобрать всего где-то 4 + 4 + 1(уже есть) = 9 различных алго декодинга для одной вм. Так было в 2.x.

vden пишет:
[add(undef(RSP), 0xFFFFFFFFFFFFFFF8:64)] ========> 0xFFFFFFFFC8B9AEB5:64
[add(undef(RSP), 0xFFFFFFFFFFFFFFF0:64)] ========> 0x1495E2024:64
[add(undef(RSP), 0xFFFFFFFFFFFFFFE8:64)] ========> undef(R9)
[add(undef(RSP), 0xFFFFFFFFFFFFFFE0:64)] ========> undef(R11)
[add(undef(RSP), 0xFFFFFFFFFFFFFFD8:64)] ========> undef(R12)
[add(undef(RSP), 0xFFFFFFFFFFFFFFD0:64)] ========> undef(RCX)
[add(undef(RSP), 0xFFFFFFFFFFFFFFC8:64)] ========> undef(RDX)
[add(undef(RSP), 0xFFFFFFFFFFFFFFC0:64)] ========> undef(RBP)
[add(undef(RSP), 0xFFFFFFFFFFFFFFB8:64)] ========> undef(RBX)
[add(undef(RSP), 0xFFFFFFFFFFFFFFB0:64)] ========> undef(R8)
[add(undef(RSP), 0xFFFFFFFFFFFFFFA8:64)] ========> undef(RSI)
[add(undef(RSP), 0xFFFFFFFFFFFFFFA0:64)] ========> undef(RAX)
[add(undef(RSP), 0xFFFFFFFFFFFFFF98:64)] ========> undef(RFL)
[add(undef(RSP), 0xFFFFFFFFFFFFFF90:64)] ========> undef(R15)
[add(undef(RSP), 0xFFFFFFFFFFFFFF88:64)] ========> undef(RDI)
[add(undef(RSP), 0xFFFFFFFFFFFFFF80:64)] ========> undef(R10)
[add(undef(RSP), 0xFFFFFFFFFFFFFF78:64)] ========> undef(R14)
[add(undef(RSP), 0xFFFFFFFFFFFFFF70:64)] ========> undef(R13)
[add(undef(RSP), 0xFFFFFFFFFFFFFF68:64)] ========> 0x0:64

На 2 меньше, чем в 2.x! Кстати, порядок ввода в стек регистров процессора также меняется для каждой новой протекции.
Самый верхний адрес тут - шифрованный адрес ленты. Второй - (теоретически)шифрованный адрес перехода после окончания работы одной ленты, но не замечено, чтоб он использовался. Последний - дельта-смещение(для exe-файлов = 0, для неперебазированных dll тоже). В 2.x предпоследним был шифрованный указатель аллоченной области, бравшийся из ячейки по адресу.

Какое кол-во примитивов? 79? 78? или другое какое-то? Размер области вм-регистров = 0xC0?

vden пишет:
Пока основное отличие версии 3 от версии 2 - отсутствие dispatch table.

Не понял, что ты имеешь в виду.

-----
IZ.RU


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

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

Создано: 05 декабря 2015 18:22 · Поправил: vden
· Личное сообщение · #25

DenCoder пишет:
vden пишет:
Пока основное отличие версии 3 от версии 2 - отсутствие dispatch table.
Не понял, что ты имеешь в виду.

В 2.х там всегда есть dispatcher, который вызывает каждый примитив (или handler, дело терминологии )
В принципе, все то же что ты описал выше.
Заканчивается он таким кодом

JMP [TABLE_ADDRESS + EAX * 4] или JMP [TABLE_ADDRESS + EAX * 8]

EAX - индекс, а TABLE_ADDRESS - это то что я называю dispatch table.

И в 3.x этой таблицы нет, а переходы считаются сразу в каждом примитиве/хэндлере.

В 2.х по таблице было легко посчитать количество уникальных примитивов (хотя и не все из них могли использоваться).

В новой версии уже так не получится. Можно трейсить исполнение и определять примитивы по тому, что они делают. Когда весь код будет отслежен (после VM_EXIT примитива), тогда можно понять сколько было уникальных примитивов.

Я думаю что их около 100, потому что редко используется больше. Хотя может быть, конечно и больше. Но это не принципиально.




В графе, могут отсутствовать какие-то промежуточные значения, потому что много мусора просто оптимизируется, например, константы вычисляются сразу.

Добавлено спустя 12 минут
DenCoder пишет:
тебе потребуется разобрать всего где-то 4 + 4 + 1(уже есть) = 9 различных алго декодинга для одной вм

Зачем? Самое забавное то, что я задаю известные данные, и вычисляю выражение автоматически.
Просто нужно следить за RBX, RSI, RBP, а в 2.х еще и за RDI (там RDI, кажется, указыает на RSP).

RSI - vm ip
RBX - производная от операций с байт-кодом (vm-ip, константы на ленте)
RBP - vm sp

В примере выше, вручную я только прочитал DWORD c ленты и подставил в выражение и сделал "типа-evaluate".

Добавлено спустя 31 минуту
DenCoder пишет:
На 2 меньше, чем в 2.x!

Похоже на то. Недавно тут был Asassin's Creed новый, под vmp2. Если ошибки нет, то

RSP ========> and(add(undef(RSP), 0xFFFFFFFFFFFFFE18:64), 0xFFFFFFFFFFFFFFF0:64)
RBP ========> add(undef(RSP), 0xFFFFFFFFFFFFFF58:64)

[add(undef(RSP), 0xFFFFFFFFFFFFFFF8:64)]:8 ========> 0xFFFFFFFFB5B538DF:64
[add(undef(RSP), 0xFFFFFFFFFFFFFFF0:64)]:8 ========> 0xFFFFFFFFA64D9438:64
[add(undef(RSP), 0xFFFFFFFFFFFFFFE8:64)]:8 ========> undef(RBX)
[add(undef(RSP), 0xFFFFFFFFFFFFFFE0:64)]:8 ========> undef(R9)
[add(undef(RSP), 0xFFFFFFFFFFFFFFD8:64)]:8 ========> undef(RSI)
[add(undef(RSP), 0xFFFFFFFFFFFFFFD0:64)]:8 ========> undef(RFL)
[add(undef(RSP), 0xFFFFFFFFFFFFFFC8:64)]:8 ========> undef(RDI)
[add(undef(RSP), 0xFFFFFFFFFFFFFFC0:64)]:8 ========> undef(RCX)
[add(undef(RSP), 0xFFFFFFFFFFFFFFB8:64)]:8 ========> undef(RBP)
[add(undef(RSP), 0xFFFFFFFFFFFFFFB0:64)]:8 ========> undef(RDX)
[add(undef(RSP), 0xFFFFFFFFFFFFFFA8:64)]:8 ========> undef(R15)
[add(undef(RSP), 0xFFFFFFFFFFFFFFA0:64)]:8 ========> undef(R10)
[add(undef(RSP), 0xFFFFFFFFFFFFFF98:64)]:8 ========> undef(RDX)
[add(undef(RSP), 0xFFFFFFFFFFFFFF90:64)]:8 ========> undef(R12)
[add(undef(RSP), 0xFFFFFFFFFFFFFF88:64)]:8 ========> undef(RAX)
[add(undef(RSP), 0xFFFFFFFFFFFFFF80:64)]:8 ========> undef(R11)
[add(undef(RSP), 0xFFFFFFFFFFFFFF78:64)]:8 ========> undef(R8)
[add(undef(RSP), 0xFFFFFFFFFFFFFF70:64)]:8 ========> undef(R13)
[add(undef(RSP), 0xFFFFFFFFFFFFFF68:64)]:8 ========> undef(R14)
[add(undef(RSP), 0xFFFFFFFFFFFFFF60:64)]:8 ========> undef([0x1498A06D6:64]:64)
[add(undef(RSP), 0xFFFFFFFFFFFFFF58:64)]:8 ========> 0x0:64




Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 05 декабря 2015 18:58
· Личное сообщение · #26

vden пишет:
Просто нужно следить за RBX, RSI, RBP, а в 2.х еще и за RDI (там RDI, кажется, указыает на RSP).

Rdi там указатель на область регистров.

Хорошо, если при трейсе или после трейса инструкций мусор автоматически удаляется. Но всё равно читать больше кода, чем если из трейса байт-кода.

-----
IZ.RU




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

Создано: 05 декабря 2015 18:58 · Поправил: vden
· Личное сообщение · #27

И небольшой лог (Asassin's Creed)

Code:
  1. Analysis of 0x14921AD3B
  2. Resolving entry params.
  3. Found dispatch address: 1498A01B5
  4. Byte-code address = 0x14958E42A
  5. Dispatch table address = 0x1498A10D0
  6. VM-Loop = 0x1498A0138
  7. vhAddrDecoder = "add(vh_scrambled_addr, 0xFFFFFFFFF0A9CF23:64)"
  8. vhIndexDecoder = "add(neg(add(xor(vh_scrambled_index, 0x2A:8), 0x2F:8)), 0xFF:8)"
  9. Dispatch table resolved.
  10. Unique handlers (83)
  11.   000: 0x1498A1E89
  12.   001: 0x1498A068E
  13.   002: 0x1498A31A9
  14.   003: 0x1498A34FC
  15.   004: 0x1498A0586
  16.   005: 0x1498A0BFF
  17.   006: 0x1498A2F0D
  18.   007: 0x1498A285A
  19.   008: 0x1498A2B3B
  20.   009: 0x1498A1BE9
  21.   010: 0x1498A3338
  22.   011: 0x1498A3797
  23.   012: 0x1498A2A77
  24.   013: 0x1498A277A
  25.   014: 0x1498A1BCB
  26.   015: 0x1498A2F28
  27.   016: 0x1498A327F
  28.   017: 0x1498A107F
  29.   018: 0x1498A393E
  30.   019: 0x1498A078E
  31.   020: 0x1498A244D
  32.   021: 0x1498A1B92
  33.   022: 0x1498A050E
  34.   023: 0x1498A1D56
  35.   024: 0x1498A370B
  36.   025: 0x1498A2FA0
  37.   026: 0x1498A33B3
  38.   027: 0x1498A20F6
  39.   028: 0x1498A2A63
  40.   029: 0x1498A24DC
  41.   030: 0x1498A07B9
  42.   031: 0x1498A2E0C
  43.   032: 0x1498A01F6
  44.   033: 0x1498A0F89
  45.   034: 0x1498A09B5
  46.   035: 0x1498A0A83
  47.   036: 0x1498A1D9E
  48.   037: 0x1498A0D05
  49.   038: 0x1498A3649
  50.   039: 0x1498A27F1
  51.   040: 0x1498A3340
  52.   041: 0x1498A36B2
  53.   042: 0x1498A3690
  54.   043: 0x1498A045D
  55.   044: 0x1498A1D2D
  56.   045: 0x1498A312E
  57.   046: 0x1498A0B70
  58.   047: 0x1498A252A
  59.   048: 0x1498A0F21
  60.   049: 0x1498A1D19
  61.   050: 0x1498A2B08
  62.   051: 0x1498A19EA
  63.   052: 0x1498A093E
  64.   053: 0x1498A3396
  65.   054: 0x1498A1A80
  66.   055: 0x1498A08F4
  67.   056: 0x1498A234B
  68.   057: 0x1498A30DB
  69.   058: 0x1498A3569
  70.   059: 0x1498A2911
  71.   060: 0x1498A2E27
  72.   061: 0x1498A198A
  73.   062: 0x1498A2724
  74.   063: 0x1498A1DD6
  75.   064: 0x1498A3552
  76.   065: 0x1498A21AD
  77.   066: 0x1498A0D77
  78.   067: 0x1498A1A1C
  79.   068: 0x1498A22F8
  80.   069: 0x1498A36CE
  81.   070: 0x1498A239F
  82.   071: 0x1498A0625
  83.   072: 0x1498A32B8
  84.   073: 0x1498A1F55
  85.   074: 0x1498A1F77
  86.   075: 0x1498A05E0
  87.   076: 0x1498A071F
  88.   077: 0x1498A0F5E
  89.   078: 0x1498A0A48
  90.   079: 0x1498A0898
  91.   080: 0x1498A0535
  92.   081: 0x1498A1B35
  93.   082: 0x1498A1C0D
  94. ---


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


Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 06 декабря 2015 15:09
· Личное сообщение · #28

Может у кого есть ВМ протект 3 который появлялся в сети с ключом? Скиньте пожалуйста в личку (Для изучения)

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




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

Создано: 06 декабря 2015 19:01 · Поправил: ELF_7719116
· Личное сообщение · #29

WOW! WOW! WOW!
Я дописал, наконец-то, декодер для request unlock code (код-запрос на сервер активации) для SecuROM PA! Ну ещё добавил несколько распотрошенных новых игрушек.
Теперь кроме native-метода (primary HWID input), я могу декодировать любой (при условии наличия игрушки у меня в библиотеке) request unlock code, как это делает https://support.securom.com/PAunlock/
Так что - смело постите сюда свои request unlock code!

На радостях, я решил декодировать request unlock code, который засвечен на сайте SecuROM PA:
Code:
  1. 3S9ZB-GB983-KJMF2-9YX5N-VM9DS-TC47F-LW8SG-YP2MN-CMA2

Вот такого только набора ключей в моей библиотеке 80_PA не оказалось
Удалось расшифровать следующие данные:
Code:
  1. DES_radn seed = 0x2C
  2. CRC_of_right_part = 0x4F 
  3. CRITICAL_DATA_DES_SUCCESS_DECRYPT = 0x01
  4. CRC_of_MD5_digest_DES_INDIVIDUAL_KEY_prep[6] = 0x21 0x68 0x4C 0x08 0x14 0xB5

Что-то я сомневаюсь, что индивидуальный набор ключей будет в одной из защищенных секуромом игрушек. Скорее всего, это набор самой Sony DADC AG. В связи с чем, просто так получить набор не получится.
Ситуация такова: у меня есть CRC_of_MD5_digest_DES_INDIVIDUAL_KEY_prep - CRC от MD5 дайджеста заготовки индивидуального DES ключа. Заготовка имеет длину 48 байт (10 байт та всегда одинаковы). Я так мыслю - связка MD5 (48 байт) + CRC (6 байт) брутиться будет невероятно долго. Есть конечно вариант - плюнуть на процедуру сверки связи и напрямую брутануть индивидуальный DES ключ, которым закрыты 19 байт остальной структуры request unlock code. Можно ли за приемлемое время брутануть обычный DES??





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 07 декабря 2015 17:06
· Личное сообщение · #30

ELF_7719116 Обычный DES на обыкновенной машине или паре таких машин брутануть без дополнительных данных не удастся. Я не изучал статью, как устроен механизм гена я не знаю. Но если это реально крк от ключа, тогда ты можешь построить свой вектор атаки и сделать атаку - Встреча посередине. Такая атака возможна только если сам алгоритм реализован ошибочно. Добавив к этому некоторые ошибки или лозейки в коде, можно сгенерировать дополнительные таблицы валидации, используя десяток машин теоретически это можно сделать за 15 - 20 дней. Но если это режим кбк с мд5, тогда это маловероятно. Ты уверен, что мд5 именно от ключа ДЕС? Добавляется ли мд5 к началу шифротекста? Какой режим ДЕС? Используется ли дополнительный ключ для мд5 в шифротексте? Все эти моменты крайне важны для построения метода атаки, другими словами все зависит от реализации. Для этого нужно только правильно расписать все известные данные, а потом оценить метод подбора и его математическое качество, возможность брутануть за приемлемое время. Ты можешь проанализировать длину ключа и стойкость в других парах, если они у тебя имеются. В итоге на твой вопрос нет прямого ответа, пока ты сам не проанализируешь стойкость.

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube


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

Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 декабря 2015 02:48
· Личное сообщение · #31

ELF_7719116
Конечная цель то какая? Сгенерить из этого request рабочий unlock всё равно не получится, даже если каким-то чудом удастся пробрутить DES ключ.


<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 52 . 53 . >>
 eXeL@B —› Протекторы —› Crack SecuROM & DENUVO
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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