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

 eXeL@B —› Основной форум —› StarForce 5.7 MMOG
. 1 . 2 . >>
Посл.ответ Сообщение

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

Создано: 24 октября 2012 20:14 · Поправил: Once
· Личное сообщение · #1

Есть одна игра - Prime World, которая совсем недавно была защищена с помощью StarForce 5.7 MMOG
Мне нужно научиться обходить защиту или, что ещё лучше, научиться её снимать.
Снятие защиты мне необходимо для поиска багов в игре.
У меня есть старая, не накрытая Старом версия.
Раньше сам exe'шник весил мало и подтягивал все функции из dll, сейчас всё в одном exe.
Сама игра весит 1.7 GB, но я собрал необходимые файлы в архив:
Новая версия (20MB) - http://multi-up.com/780073
Старая версия (12MB) - http://multi-up.com/780089


То что нашел сам:
Файл PW_Game.exe защищён StarForce 5.70.37.002 MMOG
BM вроде нету.
Защитный модуль имеет название sakijapi.dll. В старой версии он имеется, но, похоже, не используется. Упакован UPX, распаковывается легко если надо.
Если запустить PW_Game.exe - появится MessageBox, который говорит, что нужно запустить лаунчер. Это нормально, т.к. PW_Game.exe запускается с набором параментров о сессии, логине, разрешении, и т.д.
Скрыть Olly помогает плагин фантом.
OEP - 00A094DD
В старой версии EP - 00401443
Сдампив на этом OEP без восстановления импорта, можно запустить дамп, но возникает исключение - деление на 0 в модуле защиты по адресу 015FDF57.
Не знаю, нужно ли там восстанавливать импорт?
По адресу 00A092AC происходит вызов Старовской функции, в которой вызывается _initterm_e (в старой версии exe'шника вызов этой функции виден по адресу 00401212), которая и вызывает функцию, в которой происходит исключение.

Не знаю куда дальше двигаться..
Если занопить _initterm_e и следом за ним _initterm, то исключение будет в ntdll
Эти initterm'ы, как я понимаю, вызывают конструкторы классов, используемых в приложении, а может и нет =)



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

Создано: 24 октября 2012 20:23 · Поправил: Flasher-11
· Личное сообщение · #2

Once, думаю Вам нужно почитать, что она вообще представляет из себя SF MMOG --> Link <--

Once пишет:
Мне нужно научиться обходить защиту или, что ещё лучше, научиться её снимать.


Прям так сразу и SF ломать?



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

Создано: 24 октября 2012 20:38 · Поправил: Veliant
· Личное сообщение · #3

Скиньте еще PWLauncher что-ли.
Давно хотел 5 версию поковырять.

add..
фи! архитектура ВМ такая же как и в 4.7 версиях



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

Создано: 24 октября 2012 20:49 · Поправил: Once
· Личное сообщение · #4

Veliant пишет:
Скиньте еще PWLauncher что-ли.


Боюсь не всё так просто =)
Лаунчер запускает castle.exe (замок) из которого запускается бой (PW_Game.exe)
И они там друг с другом связаны, каждый exe'шник запускается с особыми параметрами.
UPD Попробуйте запустить PW_Game.exe с такими параметрами - parentWidth 1280 parentHeight 800 parentSessionLogin 217.174.109.140:35001/559376540634029/00000000000000000000000000000000 serverName http://ru.pwcastle.nivalnetwork.com:88/four uid 1111111111 serverKey 222222222 serverSecret 33333333333
Бой не начнется, но MessageBox'а не будет

Once пишет:
фи! архитектура ВМ такая же как и в 4.7 версиях

А можете объяснить, как вы так быстро поняли, что там есть ВМ, да ещё точную версию знаете? Мне это жутко интересно ))



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

Создано: 24 октября 2012 21:05 · Поправил: Veliant
· Личное сообщение · #5

Once пишет:
А можете объяснить, как вы так быстро поняли, что там есть ВМ, да ещё точную версию знаете? Мне это жутко интересно ))

То что она есть, не значит что она может вызываться из игры. Если так интересно поковырять ВМ - смотрите функцию PSM_0 из sakijapi. Она вызывается с самого EntryPoint игры. Там сначала идет инициализация контекста, потом как в старых версиях идет чтение лент пикода. Отличие разве что в переходе между обработчиками по jmp edx вместо jmp eax в предыдущих версиях. Это на первый взгляд.

Once пишет:
Бой не начнется, но MessageBox'а не будет

Подтвержаю. MessageBox'а нет.



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

Создано: 24 октября 2012 21:19 · Поправил: Once
· Личное сообщение · #6

Сейчас вынес каталог с PW_Game.exe на рабочий стол и запустил с указанными выше параметрами - процесс завершился.
В каталоге он не падает, играет приятная музыка, черный экран в окне игры с парой строчек об ошибке.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 24 октября 2012 21:26 · Поправил: ARCHANGEL
· Личное сообщение · #7

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

Продолжение
Veliant
Нет, статья про виртуальные машины в общем, на старфорс рано замахиваться. А про традицию - да, заканчивается она, в общем, тоже стандартно: " А потом мы с друзьями идём в баню..." Ну, т.е. в баню идут только те друзья, которые сами ничего не сделали, а только накидали ссылок на софт и ждут, что им тут всё отреверсят.

-----
Stuck to the plan, always think that we would stand up, never ran.




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

Создано: 24 октября 2012 21:29 · Поправил: Veliant
· Личное сообщение · #8

ARCHANGEL пишет:
Да, вот из-за таких топиков я сейчас подниму задницу и пойду писать статью про виртуальные машины

Про декомпиляцию или ее дамп??
Кажется в последней теме от свиновода, там изложили все что только можно.
Но у нас кажется традиция раз в пол года поднимать тему про SF и оффтопить на десяток страниц

p.S.
В аттаче адреса обработчиков команд в VM и трейслог для них. На некоторых он обрывается до выхода из него по jmp reg (увы, автоматические средства не совершенны), но тип команды установить можно.

p.p.S
Пример обработчика команды с пояснением.
EDI указывает на контекст VM. В самом начале идет чтение лент пикода. Указатели на них находятся в первых четырех 64битных регистрах. Ленты между собой xor'ятся и заносятся в буфер для дальнейшей обработки
Code:
  1. точка входа:
  2. 0xfd4285 mov edx, dword ptr [edi+0x00]
  3. 0xfd4288 mov eax, dword ptr [edx+0x00]
  4. 0xfd428b mov edx, dword ptr [edi+0x08]
  5. 0xfd428e xor eax, dword ptr [edx+0x00]
  6. 0xfd4291 mov edx, dword ptr [edi+0x10]
  7. 0xfd4294 xor eax, dword ptr [edx+0x00]
  8. 0xfd4297 mov edx, dword ptr [edi+0x18]
  9. 0xfd429a xor eax, dword ptr [edx+0x00]
  10. 0xfd429d xor edx, ecx ; мусор
  11. 0xfd429f mov dword ptr [edi+0x20], eax
  12. 0xfd42a2 mov edx, dword ptr [edi+0x00]
  13. 0xfd42a5 mov eax, dword ptr [edx+0x04]
  14. 0xfd42a8 mov edx, dword ptr [edi+0x08]
  15. 0xfd42ab xor eax, dword ptr [edx+0x04]
  16. 0xfd42ae mov edx, dword ptr [edi+0x10]
  17. 0xfd42b1 xor eax, dword ptr [edx+0x04]
  18. 0xfd42b4 mov edx, dword ptr [edi+0x18]
  19. 0xfd42b7 xor eax, dword ptr [edx+0x04]
  20. 0xfd42ba mov dword ptr [edi+0x24], eax

Далее идет смещение лент, на длину команды
Code:
  1. 0xfd42bd 
  2. mov eax, 0x00000008
  3. 0xfd42c3 add dword ptr [edi+0x00], eax
  4. 0xfd42c6 add dword ptr [edi+0x08], eax
  5. 0xfd42c9 add dword ptr [edi+0x10], eax
  6. 0xfd42cc add dword ptr [edi+0x18], eax

Парсинг флагов. Некоторые из них влияют на флаги ВМ, некоторые на сам опкод.
Code:
  1. 0xfd42cf mov ecx, dword ptr [edi+0x21]
  2. 0xfd42d2 shr ecx, 0x04
  3. 0xfd42d5 and ecx, 0x0000000F
  4. 0xfd42db mov eax, 0x00000001
  5. 0xfd42e1 shl eax, cl
  6. 0xfd42e3 and eax, 0x00007FFF
  7. 0xfd42e9 and eax, dword ptr [edi+0x38]
  8. 0xfd42ec xor dword ptr [edi+0x20], eax
  9. 0xfd42ef mov ecx, dword ptr [edi+0x22]
  10. 0xfd42f2 shr ecx, 0x03
  11. 0xfd42f5 and ecx, 0x0000000F
  12. 0xfd42fb mov eax, 0x00000001
  13. 0xfd4301 jmp 0x01003230
  14. 0x1003230 or edx, 0x08F5DF2D
  15. 0x1003236 je 0x014B14AC
  16. 0x100323c shl eax, cl
  17. 0x100323e and eax, 0x00007FFF
  18. 0x1003244 and eax, dword ptr [edi+0x38]
  19. 0x1003247 jmp 0x011FF5DA
  20. 0x11ff5da xor dword ptr [edi+0x22], eax
  21. 0x11ff5dd shr edx, 0x02
  22. 0x11ff5e0 mov eax, edx
  23. 0x11ff5e2 shr ebx, 0x02
  24. 0x11ff5e5 jmp 0x010D28A4
  25. 0x10d28a4 or ecx, dword ptr [edi+0x00000048]
  26. 0x10d28aa mov ecx, dword ptr [edi+0x22]
  27. 0x10d28ad add edx, ebx
  28. 0x10d28af sub eax, ebx
  29. 0x10d28b1 cmp eax, edx
  30. 0x10d28b3 jg 0x0166F724
  31. 0x10d28b9 shr ecx, 0x07
  32. 0x10d28bc and ecx, 0x0000000F
  33. 0x10d28c2 mov eax, dword ptr [edi+0x22]
  34. 0x10d28c5 shr eax, 0x02
  35. 0x10d28c8 and eax, 0x00000001
  36. 0x10d28ce or eax, eax
  37. 0x10d28d0 jne 0x010D28E6
  38. 0x10d28d6 mov eax, 0xFFFFFFFE
  39. 0x10d28dc rol eax, cl
  40. 0x10d28de and dword ptr [edi+0x38], eax
  41. 0x10d28e1 jmp 0x017DB557

Начинается парсинг параметров команды. Здесь например читается индекс регистра общего назначения в контексте ВМ. Как не трудно догадаться их всего 32 по 64 бит
Code:
  1. 0x17db557 mov eax, dword ptr [edi+0x20]
  2. 0x17db55a and eax, 0x0000001F
  3. 0x17db560 shl eax, 0x03
  4. 0x17db563 add eax, edi ; в edi если не забыли - указатель на контекст

Здесь читается смещение.
Вообще есть разные способы доступа к памяти: [адрес], [IB+адрес], [IB+адрес&3FFFFFFF], [CTX+адрес&FFFF].
Code:
  1. 0x17db565 mov edx, dword ptr [edi+0x24]
  2. 0x17db568 and edx, 0x3FFFFFFF

В большинстве команд имеются пара бит отвечающих за размер операндов (1,2,4 или 8 байт)
Code:
  1. 0x17db56e mov ebx, dword ptr [edi+0x22]
  2. 0x17db571 and ebx, 0x00000003
  3. 0x17db577 cmp bl, 0x00000000
  4. 0x17db57a je 0x017DB59B

А теперь и само действие команды
Code:
  1. 0x17db59b call 0x017DB5A0
  2. 0x17db5a0 pop ecx
  3. 0x17db5a1 add ecx, edx
  4. 0x17db5a3 and edx, dword ptr [edi+0x000000B0]
  5. 0x17db5a9 mov bl, byte ptr [ecx-0x0081B5A0]
  6. ;---
  7. 0x17db5af mov dword ptr [eax], ebx ; в данном случае заносит в регистр значение из памяти
  8. ;---
  9. 0x17db5b1 jmp 0x0112167C

Завершается почти любой обработчик парсингом опкода следующей команды. Как видим команд максимум 128.
Code:
  1. 0x112167c mov edx, dword ptr [edi+0x20]
  2. 0x112167f shr edx, 0x05
  3. 0x1121682 and edx, 0x0000007F
  4. 0x1121688 shl edx, 0x02
  5. 0x112168b call 0x01121690
  6. 0x1121690 pop eax
  7. 0x1121691 mov ecx, eax
  8. 0x1121693 add eax, 0x003E93D8
  9. 0x1121699 or ebx, edi
  10. 0x112169b add ecx, 0xFFE9E970
  11. 0x11216a1 jmp 0x011BD122
  12. 0x11bd122 add edx, eax
  13. 0x11bd124 mov edx, dword ptr [edx]
  14. 0x11bd126 add edx, ecx
  15. 0x11bd128 jmp edx ; переходим на обработку следующей команды


59a7_24.10.2012_EXELAB.rU.tgz - sakijapi_trace.txt

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

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

Создано: 27 октября 2012 16:20 · Поправил: Once
· Личное сообщение · #9

Veliant, спасибо большое за такие подробности!
А обязательно ли разбирать виртуальную машину?
Мне, по сути, нужно лишь сделать так, чтобы я свободно мог заниматься отладкой приложения. Обязательно ли при этом отвязывать защиту в виде dll?
Ещё вопрос: StarForce изменяет некоторые вызовы функций, вызывая их через переходники. Зачем он это делает, и обязательно ли убирать эти переходники?

З.Ы. Если не трудно, дайте ссылок по распаковке стара. Желательно чтобы там было побольше теории, а то те статьи, что я нашел, говорят лишь: - "тыкните туда, затем сюда"

UPD: восстанавливать переходники нужно, потому что в оригинальном процессе и в сдампленном они иногда ведут в разные места. А вот почему так, понять пока не могу.
Вот, например, первый же вызов переходника по адресу 00A092AC в оригинале ведет на API-функцию _initterm_e, а в дампе на 00A0982D, в которой вызывается _except_handler4_common




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

Создано: 28 октября 2012 16:58
· Личное сообщение · #10

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

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

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

Создано: 28 октября 2012 18:04
· Личное сообщение · #11

Не получается перехоники восстановить...
Пытаюсь и вручную и скриптом в аттаче.
Буквально на третьем сверху какая-нить гадость. (terminate или crash или выводит не на ту функцию)
Почему так получается, если я даже не правлю ниодного байта? (в скрипте специально закомментчивал запись переходников)
Или стар как-то всё-таки отлавливает присутствие отладчика, несмотря на PhantOm'а?



a809_28.10.2012_EXELAB.rU.tgz - scrypt.txt



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

Создано: 06 ноября 2012 00:33 · Поправил: Модератор
· Личное сообщение · #12

Once
Старфорс 5.хх ломается элементарно,с помощью приклеивания к дампу основного exe секций из PROTECT.dll
А именно, sforce3 (самая здоровая,обычно 7-10 МБ) + диапазон памяти Private RWE (как правильно,от 10000000 и выше). Импорт даже не испорчен,это самая легкая версия Стара, ломается за 10 минут

Имейте ввиду,что снимать дамп нужно целиком всё сразу ,иначе у вас поплывет адрессация вызовов ВМ.
Т.е. к примеру, не будет работать дамп ,у которого разные блоки памяти сохранены на диск в разные разы запуска программы. Метод не ахти какой продвинутый,но по-крайней мере неоднократно проверен на работоспособность, причем на разных версиях старфорса




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

Создано: 06 ноября 2012 07:26
· Личное сообщение · #13

И такой ехе будет работать только у тебя. Да и то, в старых версиях вм чекает pid. Но тогда это было сделано через апи, что легко патчиться.



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

Создано: 06 ноября 2012 21:06 · Поправил: Pchelovod
· Личное сообщение · #14

Главное что будет работать. Сейчас у топикстартера как мне показалось,такая каша в голове,что он даже Basic версию не сможет правильно снять. Кому интересно,пишите,у меня есть мануалы в картинках как всё это сделать. Разумеется, такое УГ как Prime World я не исследовал и исследовать не собираюсь
Могу предложить мануал по снятию StarForce 5.50 Pro с игры Буратилло



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

Создано: 07 ноября 2012 15:48
· Личное сообщение · #15

Pchelovod, с версией 5.50 у меня получается справиться, в этой же, 5.70, что-то добавлено, что мешает мне сделать всё как в прошлых версиях.
Если не трудно, скиньте мануалы, мне будет интересно.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 07 ноября 2012 16:06
· Личное сообщение · #16

Та давайте уже мануалы в массы, а то я прямо-таки жутко заинтригован.

-----
Stuck to the plan, always think that we would stand up, never ran.




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

Создано: 07 ноября 2012 16:23
· Личное сообщение · #17

ARCHANGEL пишет:
Та давайте уже мануалы в массы, а то я прямо-таки жутко заинтригован.

Сейчас тебя пчеловод научит как делать дампы размером в 100+ мб и которые работают только у тебя.



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 07 ноября 2012 16:42
· Личное сообщение · #18

ARCHANGEL
http://svinovod2012.livejournal.com/




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 07 ноября 2012 17:02 · Поправил: ARCHANGEL
· Личное сообщение · #19

Что-то там так много рассусоливал Свиновод, а можно всё уложить в пару предложений. Где-то (где - Свиновод не знает) внутри protect.dll идёт проверка диска, цель Свиновода - выкинуть этот код из окончательного дампа, что позволит отучить программу от диска. Поэтому он ищет ОЕР, восстанавливает импорт и к дампу прикручивает ВМ без разбора последней. ОЕР ищет GeTaOEP (как, Свиновод тоже не представляет), импорт восстанавливает импрек, дампит Pe Tools. ВМ определяется в лоб - если есть переходник, и это переходник не на эмулируемый импорт, то это ВМ. Дампится она вся, причём дампится набор, относящийся к текущему состоянию, а т.к. инициализация ВМ пропущена, то, при услоии, что это состояние не является допускающим, дамп на другой машине не заработает. Ресурсы, релоки - я не нашёл упоминания про эти страшные слова. В общем, этим действиям со старфорсом я могу научить своего пса.

-----
Stuck to the plan, always think that we would stand up, never ran.




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

Создано: 07 ноября 2012 18:12
· Личное сообщение · #20

ARCHANGEL пишет:
В общем, этим действиям со старфорсом я могу научить своего пса.

или свинку домашнюю

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

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

Создано: 07 ноября 2012 18:25
· Личное сообщение · #21

ARCHANGEL пишет:
В общем, этим действиям со старфорсом я могу научить своего пса.

Посмотрел тут один nodvd от skidrow - не далеко ушли. Ехе с приклеенной ВМ + dll в которой сначала через GetProcAddress в нужные места прописываются адреса API, потом копируется в вм проинициализированные заранее данные. В итоге ехе на 40+ метров

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

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

Создано: 07 ноября 2012 19:38
· Личное сообщение · #22

Давайте подождём авторитетного мнения пчеловода по этому поводу




Ранг: 111.0 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 07 ноября 2012 19:56
· Личное сообщение · #23

tihiy_grom, ну а чего язвить-то? . У меня где-то валялись тулзы (для избранных) по старке. Нет ни особо внятного описания, как их использовать, только пример, как выглядит код, и где надо что поправить. Больше ничего. Меня порадовали материалы svinovod2012, пусть даже и видно, что защиту разбирает не самый опытный боец.

-----
Ламер - не профессия :))




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

Создано: 07 ноября 2012 20:01
· Личное сообщение · #24

aspirin пишет:
tihiy_grom, ну а чего язвить-то?

Ну есть маленько, согласен ...

Мне просто очень понравился кусок в статьях, где было написано что тулза не правильно нашла OEP
И какбы не совсем понятно зачем браться за старфорс, если даже руками OEP не можешь найти и не представляешь как она должна выглядеть.



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

Создано: 07 ноября 2012 22:01 · Поправил: Модератор
· Личное сообщение · #25

Мануал пришлось временно забросить,поскольку меня вызывали на допрос в прокуратуру. Разумеется,не из-за взлома игр,но пришлось временно залечь на дно. Возможно мой ЖЖ перечитывают в отделе К, поэтому я бы с радостью поделился своими наработками когда буду уверен что слежка закончилась

По поводу критики:
1. Размер дампа в конечном итоге будет не больше 10-15 МБ , так что поводов для паники нет. Даже если клеить всю выделенную память,какая только есть.
2. Привязка к CPUID нас не волнует,мы делаем файл для себя а не для сцены.Это 2 разные вещи.
3. Патч PROTECT.DLL будет разъяснен чуть позже,этому я посвящу отдельную главу.
4. Найти OEP можно и руками,поставив бряк на функцию GetStartupInfoA либо GetModuleHandleA в зависимости от версии VisualC++ . У меня есть таблица всех возможных ОЕР в формате .docx ,кому надо могу выложить.
5. Разработка dll для декриптования SFFS - пока в разработке. Может быть появится через полгода или год.
6. Мануал по распаковке dll, восстановлению релоков - ну тоже через полгода может будет.Пока я этим не занимался,у меня всего 1 игра где надо распаковывать библиотека со старом.А в остальных случаях релоки нам не нужны.

Вот ещё рекомендую всем хорошую книгу по реверсингу:
http://forcoder.ru/cpp/windows-via-cc-programmirovanie-na-yazyke-visual-c-1099

Там содержится подробная информация,которая очень пригодится вам для распаковки StarForce и не только.



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

Создано: 08 ноября 2012 12:07 · Поправил: Veliant
· Личное сообщение · #26

Данная техника годная, если нет желания ковырять ВМ, а хочется получить просто рабочую игрушку.

Чего нехватает:
1) Как когда-то посоветовал olenevod, нужно перед отладкой внедрить в процесс свою dll, которая будет выступать в качестве менеджера памяти. Это позволит более экономно выделять память для ВМ, что потом скажется на размере ехе

2) После склейки ехе с ВМ нужно сделать один из следующих вариантов:
a) Простой.Сделать свою dll, которая будет восстанавливать API и динамическую память для ВМ перед запуском.
б) Чуть сложней. Приклеить динамическую память в конец ехе, поправив указатели, а также сделать ребилд импорта с необходимыми функциями.

3) CPUID. Так же два варианта решения
a) Запатчить код в секции ВМ, который проверяет cpuid
б) Вместо cpuid (0FA2) везде воткнуть опкод ud2(0F0B), а потом ловить exception и подставлять нужные данные.



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

Создано: 08 ноября 2012 13:55 · Поправил: Модератор
· Личное сообщение · #27

На версии 4.50 данный способ почему-то не работает. Дамп запускается,висит в памяти как процесс и грузить процессор на 100% ,но ничего не происходит. Какие-то дополнительные проверки видимо есть
Мне так сходу тяжело dll написать,потому что я VisualC++ начал изучать 2 месяца назад,специального образования программиста у меня нет,всё чему меня научили это Турбо Паскаль
Поэтому приходится и асм,и делфи,и си всё с нуля изучать. Постараюсь к Новому году выложить штук 6-7 мануалов с картинками,так что наберитесь терпения.

Veliant пишет:
Посмотрел тут один nodvd от skidrow - не далеко ушли. Ехе с приклеенной ВМ + dll в которой сначала через GetProcAddress в нужные места прописываются адреса API, потом копируется в вм проинициализированные заранее данные. В итоге ехе на 40+ метров

А зачем разбирать и декомпилировать ВМ? Всё правильно они делают,есть простой способ - используй его.
Если RELOADED больше нечем заняться,как сидеть дешифровать 10 мегабайт обфусцированного кода (это наверно полмиллиона инструкций), то среднестатистическому реверсеру эта задача не под силу.
Once пишет:
с версией 5.50 у меня получается справиться, в этой же, 5.70, что-то добавлено, что мешает мне сделать всё как в прошлых версиях.

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




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 08 ноября 2012 22:29
· Личное сообщение · #28

Pchelovod
Даже теряюсь, с чего начать. Ладно, начнём как-нибудь.

А зачем разбирать и декомпилировать ВМ?
Декомпиляция ВМ - основная работа, которая должна быть проделана, если вы хотите действительно отреверсить что-то в игре и написать чит или бота. Ведь вам нужно отреверсить протокол обмена инфой с сервером, узнать, как игра обращается с объектами игрового мира и научить бота выполнять некоторые действия за вас. А это невозможно, если вы не сможете исследовать игру в полной мере. Запустить её без диска при том, что алкоголь или Daemon Tools могут это сделать и без вас - умение не очень ценное само по себе.

Если RELOADED больше нечем заняться,как сидеть дешифровать 10 мегабайт обфусцированного кода (это наверно полмиллиона инструкций), то среднестатистическому реверсеру эта задача не под силу.

Что ж вы так реверсинг-то обижаете. В том-то и сила, чтоб понять, как это делается - как изучать ВМ и строить декомпиляторы от версии к версии. Дерзайте.

Мне так сходу тяжело dll написать,потому что я VisualC++ начал изучать 2 месяца назад
Так на турбо паскале пишите, не одна Microsoft Visual C++ умеет дллки собирать.

Особенно в блоге мне понравилась инфа про то, как надо прятать труп - самая полезная запись там.

Теперь в плане конструктива. Не совсем понял, что вы собираетесь патчить в protect.dll - по идее распакованная игра будет от неё полностью отвязана. Про то, что найти ОЕР можно и руками, это мы не сомневаемся, но поиск ОЕР должен успешно завершаться даже в случае, если нам изначально неизвестен компилятор, поэтому ваши методы не подойдут - нужно что-то более универсальное. Но ничего - лет через 5, может, и получится у вас анпак.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 3.2 (гость), 6thx
Активность: 0.020
Статус: Участник

Создано: 08 ноября 2012 23:44
· Личное сообщение · #29

ARCHANGEL пишет:
Особенно в блоге мне понравилась инфа про то, как надо прятать труп - самая полезная запись там.

первоё что бросилось в глаза при заходе на блог - это Как спрятать труп! повеселило хоть
я считаю если писать статьи о анпаке, нужно хотя бы самому уметь это делать
панты конечно штука не очень плохая , но в реверсинге я считаю не умесна!



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

Создано: 09 ноября 2012 02:33
· Личное сообщение · #30

ARCHANGEL пишет:
Не совсем понял, что вы собираетесь патчить в protect.dll - по идее распакованная игра будет от неё полностью отвязана

Насколько я помню,она в 90% случаев запакована UPX ,и чтобы загрузить жертву в отладчик с распакованной dll нужно пропатчить проверку контрольной суммы (Старфорс кричит что файл заражен вирусов и типа галактика в опасности)
Потом разумеется,можно её удалить.
ARCHANGEL пишет:
поиск ОЕР должен успешно завершаться даже в случае, если нам изначально неизвестен компилятор, поэтому ваши методы не подойдут - нужно что-то более универсальное

В чем проблема использовать GetTaOEP? Из всех способов что предлагает нам Рикардо Наварро у меня работал только бряк на первую API и то не всегда.


. 1 . 2 . >>
 eXeL@B —› Основной форум —› StarForce 5.7 MMOG
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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