Перейти к содержанию

OSIRIS:NEW DAWN Beta4


rugraver

Рекомендуемые сообщения

Други мои дружные, с 2000 года играю в игры на читах от ArtMoney (позже Cheat Engine), и не припомню случая, чтобы что-то не удалось поломать, но тут ну просто нашла коса на камень, прошу помощи.

Вот, три дня и три ночи мучался с OSIRIS:NEW DAWN в попытке добраться до указателей, но потерпел поражение. Посмотрел десяток роликов с сайта, в том числе как ломалась Subnautica (OSIRIS тоже на Unity), попробовал с ней - всё норм. Взял Empyrion-Galactic Survival - тоже много чего накопал через монофичу. OSIRIS же  вобще не пойму как писан Фениксами, там Player размазан по всей dll-ке, структура совсем не как в Сабнаутике, и добраться мне удалось лишь до указателей 2-3 уровня, а дальше начинается ветвление и я теряюсь.
Кроме беты, есть старая почти 3-хгодичной давности версия 1.180, у неё другая система сохранения ( бета-версия хранит 1 файл в AppData и не имеет даже меню сохранения-загрузки), но и там то же самое - начинается ветвление и я запцтываюсь. Хотя вон люди пишут, что за 5 минут игры стряпают таблицы.

Цель простая: указатели для бесконечного боеприипаса, медаптечки,продпакета.
Умоляю научите на примере одного параметра, как взламывать остальные, я научусь. Чистые файлы игры Стим(бета) лежат на полуангл-полурусском форуме, таблетка там же на следующей странице.

Изменено пользователем Xipho
Ссылки на кряки и тому подобное низзя. Читай правила.
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, rugraver сказал:

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

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

Ссылка на комментарий
Поделиться на другие сайты

Скилами уровня обработки кода я пока, к стыду своему, не владею, а о моно-режиме и вовсе узнал из видео по взлому Сабнаутики. Мой потолок виграх (предпочитаю сингл-космовыживалки, к слову) - нахождение указателей автоотсевом или руками.
И тогда как с прошлыми играми особых проблем, в общем, не возникало, в OSIRIS я уже заманался, честно :) Нашёл только 1 указатель на патроны штурмовой винтовки, и то - на экранное значение никак не могу найти, тоесть визуально при стрельбе обойма убывает, доходит до 0, продолжается без перезарядки, тоесть бесконечно, но при перезагрузке возрождаешься с 0 патронов, и если в инвентаре нет хотя бы 1 обоймы для зарядки, винтовка становится бесполезной.

Игра мне очень нравится, я намерен её купить как только Фениксы накатят бету 5 и 6(посмотрите их видео, там чудо, ну субъективно), и поскольку часто слышу в видеоуроках сайта "приходите на форум задавать вопросы, расскажем-покажем", то вот пришёл, покажите-расскажите.

Сообщение "обратиться на прямую по имени функции " для меня наполовину магия, т.к. я вроде начал вникать по Вашим урокам. Прошу указать на видео, где это разжёвано, а также помнится в одном из уроков говорилось, что да, при поиске патронов находится 2 значения (одно я нашёл), прошу разъяснить как найти второе.

Ссылка на комментарий
Поделиться на другие сайты

Можно одним только CE обойтись, но он ужасен, так что следует использовать разные инструменты, например dnSpy.

 

image.thumb.png.6b58113121e4de784a28cfbc5e946b69.png

 

В CE во вкладке с моно ищешь "LoadAmmo" и переходишь по LoadAmmo в дизассемблер. Находишь пишущую инструкцию.Стреляешь.

 

image.thumb.png.8b3926f882a16874d584e9d80c2e4442.png

 

Спойлер

{ Game   : OsirisNewDawn.exe
  Version:
  Date   : 2019-04-05
  Author : Alexander

  This script does blah blah blah
}

[ENABLE]

aobscan(sad,48 63 40 60 48 83 C4 08) // should be unique
alloc(newmem,$1000,1EA944F4E4B)

label(code)
label(return)

newmem:

code:
  mov [rax+60],#99
  movsxd  rax,dword ptr [rax+60]
  add rsp,08
  ret

sad:
  jmp newmem
  nop
  nop
  nop
return:
registersymbol(sad)

[DISABLE]

sad:
  db 48 63 40 60 48 83 C4 08 c3

unregistersymbol(sad)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 1EA944F4E4B

1EA944F4E34: 01 50 00                       -  add [rax+00],edx
1EA944F4E37: 00 00                          -  add [rax],al
1EA944F4E39: 00 00                          -  add [rax],al
1EA944F4E3B: 00 00                          -  add [rax],al
1EA944F4E3D: 00 00                          -  add [rax],al
1EA944F4E3F: 00 48 83                       -  add [rax-7D],cl
1EA944F4E42: EC                             -  in al,dx
1EA944F4E43: 08 48 89                       -  or [rax-77],cl
1EA944F4E46: 0C 24                          -  or al,24
1EA944F4E48: 48 8B C1                       -  mov rax,rcx
// ---------- INJECTING HERE ----------
1EA944F4E4B: 48 63 40 60                    -  movsxd  rax,dword ptr [rax+60]
1EA944F4E4F: 48 83 C4 08                    -  add rsp,08
// ---------- DONE INJECTING  ----------
1EA944F4E53: C3                             -  ret
1EA944F4E54: 00 00                          -  add [rax],al
1EA944F4E56: 00 00                          -  add [rax],al
1EA944F4E58: 00 00                          -  add [rax],al
1EA944F4E5A: 00 00                          -  add [rax],al
1EA944F4E5C: 14 00                          -  adc al,00
1EA944F4E5E: 00 00                          -  add [rax],al
1EA944F4E60: 24 00                          -  and al,00
1EA944F4E62: 00 00                          -  add [rax],al
1EA944F4E64: 01 04 01                       -  add [rcx+rax],eax
}

 

 

И все.

 

image.thumb.png.54aeea74f88e855a722415b6816e1259.png

 

 

Нужны указатели - восстанавливай руками начиная от патрон. Выйдет около 4-5 уровней.(6)

 

image.thumb.png.966b96d6bdc385a6d9cdd0d4de752823.png

 

4 часа назад, rugraver сказал:

но при перезагрузке возрождаешься с 0 патронов

 

А это уже баг/механика игры,  не зависящий от правки инструкций. Это к разработчикам.

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, partoftheworlD сказал:

А это уже баг/механика игры,  не зависящий от правки инструкций. Это к разработчикам.

И он идёт пишет разработчикам "Здравствуйте, я тут вашу игру взламываю и тут происходит баг... ...исправьте это безобразье!"

 

Ссылка на комментарий
Поделиться на другие сайты

50 минут назад, imaginary сказал:

И он идёт пишет разработчикам

 

Ну да, на пиратке, сброки хххх, беты у происходит ...

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

Так что либо, это дурацкая механика, либо баг.("не баг, а фитча").

Ссылка на комментарий
Поделиться на другие сайты

Большое спасибо за разъяснения, очень это ценю. На примере Ваших манипуляций с СЕ всё воспроизвелось идентично - бесконечные патроны+какое угодно кол-во на мониторе. dnSpy скачал (версия, кстати, обновилась до 6.0.4, разбираюсь как манипулировать в ней.

Также подобрал через сигнатуры СЕ медкит, и сразу попал в ловушку, упомянутую в одном из уроков - ВСЕ итемы стали 5/5 (по игре там стек из 5 аптечек), и при сборе ресурса игра крашится. Стала крашиться и от скрипта оружия (и от Вашего, и от своего), а в результате умер мой единственный указатель на патроны (не экранный). Как упоминалось ранее, версия игры тестовая и не имеет механизма сохранения, чтобы например, погоняв по одной планете персонажем А, начать новую игру персонажем Б и полететь на другую.. или просто откатиться на 2-3 Сола назад. Прогресс пишется в 1 бинарный файл PlayerData, притом не весь прогресс а например только итемы инвентаря и их кол-во. Экспу по профессиям и Левел персонажа (которые все нужны для разблокировки строительства) я и вовсе не знаю, где искать, игра куда-то это пишет, но куда - непонятно.

В меню игры на входе имеется кнопка "Удалить все данные", вот речь как раз об удалении этого PlayerData.dat, и после этого слетает всё - скрипты, указатели. В общем, я пока в тупике :)
 

Изменено пользователем rugraver
правка орфографии
Ссылка на комментарий
Поделиться на другие сайты

10 минут назад, rugraver сказал:

Стала крашиться и от скрипта оружия (и от Вашего, и от своего)

Я свой поправил уже, теперь нет вылетов)

 

15 минут назад, rugraver сказал:

ВСЕ итемы стали 5/5 (по игре там стек из 5 аптечек), и при сборе ресурса игра крашится

Решается простым фильтром по ItemInfo.type или как-то так. Ведь когда предмет добавляется, так же передается его id.

Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, partoftheworlD сказал:

Я свой поправил уже, теперь нет вылетов)

Поделитесь с просящим, что там в скрипте не так? Я тоже правил, mov [rax+60],#99 из секции code перекладывал в newmem: (нам же под это дело память выделяют), но не помогло. Я бы пока посмотрел урок про Фильтры (помню был такой, но не смотрел его), и попробовал бы поправить свой скрипт на медкит и продпакеты.

Ссылка на комментарий
Поделиться на другие сайты

24 минуты назад, rugraver сказал:

что там в скрипте не так?

 

проблема была в ret, который просто затирался вместо прыжка в оригинальный код, просто выходим из функции и возвращаем управление вызвавшей её.

Играю несколько часов, вроде проблем нет.

 

9 часов назад, partoftheworlD сказал:

 

  Скрыть контент Скрыть контент


{ Game   : OsirisNewDawn.exe
  Version:
  Date   : 2019-04-05
  Author : Alexander

  This script does blah blah blah
}

[ENABLE]

aobscan(sad,48 63 40 60 48 83 C4 08) // should be unique
alloc(newmem,$1000,1EA944F4E4B)

label(code)
label(return)

newmem:

code:
  mov [rax+60],#99
  movsxd  rax,dword ptr [rax+60]
  add rsp,08
  ret

sad:
  jmp newmem
  nop
  nop
  nop
return:
registersymbol(sad)

[DISABLE]

sad:
  db 48 63 40 60 48 83 C4 08 c3

unregistersymbol(sad)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 1EA944F4E4B

1EA944F4E34: 01 50 00                       -  add [rax+00],edx
1EA944F4E37: 00 00                          -  add [rax],al
1EA944F4E39: 00 00                          -  add [rax],al
1EA944F4E3B: 00 00                          -  add [rax],al
1EA944F4E3D: 00 00                          -  add [rax],al
1EA944F4E3F: 00 48 83                       -  add [rax-7D],cl
1EA944F4E42: EC                             -  in al,dx
1EA944F4E43: 08 48 89                       -  or [rax-77],cl
1EA944F4E46: 0C 24                          -  or al,24
1EA944F4E48: 48 8B C1                       -  mov rax,rcx
// ---------- INJECTING HERE ----------
1EA944F4E4B: 48 63 40 60                    -  movsxd  rax,dword ptr [rax+60]
1EA944F4E4F: 48 83 C4 08                    -  add rsp,08
// ---------- DONE INJECTING  ----------
1EA944F4E53: C3                             -  ret
1EA944F4E54: 00 00                          -  add [rax],al
1EA944F4E56: 00 00                          -  add [rax],al
1EA944F4E58: 00 00                          -  add [rax],al
1EA944F4E5A: 00 00                          -  add [rax],al
1EA944F4E5C: 14 00                          -  adc al,00
1EA944F4E5E: 00 00                          -  add [rax],al
1EA944F4E60: 24 00                          -  and al,00
1EA944F4E62: 00 00                          -  add [rax],al
1EA944F4E64: 01 04 01                       -  add [rcx+rax],eax
}

 

 

Ссылка на комментарий
Поделиться на другие сайты

Огромное спасибо за скрипт и науку, продолжаю обучение :) Игра сырая, да, но Фениксы вот-вот обещают что-то глобальное в бете 5, всякие дроиды, турели, транспорт, роботы-разведчики и прочее, так что готовиться надо заранее :) Я пока не разобрался, как отделить аптечки и продпакеты, но работаю над этим. Вижу, игра Вас немного увлекла ("неск.часов), так вот если сможете сломать профессии или уровень персонажа, или (большая хотелка) вес инвентаря, хоть изначальный 80кг хоть примороженый как-то - почту за счастье, если подскажете как и что сломали.
Инвентарь находит мне 1 float значение, толку с которого нет - ни экранное значение ни в целом грузоподъёмность не меняется.

Ссылка на комментарий
Поделиться на другие сайты

 

18 минут назад, rugraver сказал:

Инвентарь находит мне 1 float

 

Если есть желание сделать самому, то могу подсказать, что это правильное значение. 

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, rugraver сказал:

или (большая хотелка) вес инвентаря, хоть изначальный 80кг хоть примороженый как-то

Надеюсь хватит грузоподъемности.

 

image.thumb.png.3d193c4f5d723ee5286eb3d2b594119e.png

image.thumb.png.a406037b0d1596dafaebd3a536fd6ca3.png

 

Спойлер


[ENABLE]

aobscan(MaxWeight, F3 0F 10 8E 00 01 00 00 F3 0F 5A C9 F2 0F 5E C1 F2 0F 5A E8 F3 0F 11 6C 24 10 F3 0F 10 44 24 10) // should be unique
aobscan(StartEquipment,48 63 8F F0 00 00 00 3B) // should be unique

alloc(StartEquipment_newmem,$1000)
alloc(MaxWeight_newmem,$1000)

label(MaxWeight_code)
label(MaxWeight_return)
label(StartEquipment_code)
label(StartEquipment_return)

MaxWeight_newmem:

MaxWeight_code:
  mov [rsi+00000100],(float)999999
  movss xmm1,[rsi+00000100]
  jmp MaxWeight_return

MaxWeight:
  jmp MaxWeight_newmem
  nop
  nop
  nop
MaxWeight_return:
registersymbol(MaxWeight)

StartEquipment_newmem:

StartEquipment_code:
  mov [rdi+000000F0],#20
  movsxd  rcx,dword ptr [rdi+000000F0]
  jmp StartEquipment_return

StartEquipment:
  jmp StartEquipment_newmem
  nop
  nop
StartEquipment_return:
registersymbol(StartEquipment)

[DISABLE]

MaxWeight:
  db F3 0F 10 8E 00 01 00 00
StartEquipment:
  db 48 63 8F F0 00 00 00

unregistersymbol(StartEquipment)
unregistersymbol(MaxWeight)
dealloc(StartEquipment_newmem)
dealloc(MaxWeight_newmem)

{
// ORIGINAL CODE - INJECTION POINT: StartEquipment

1AB0BCDB4B8: 00 00                    -  add [rax],al
1AB0BCDB4BA: 00 00                    -  add [rax],al
1AB0BCDB4BC: 00 00                    -  add [rax],al
1AB0BCDB4BE: 00 00                    -  add [rax],al
1AB0BCDB4C0: 48 83 EC 18              -  sub rsp,18
1AB0BCDB4C4: 48 89 34 24              -  mov [rsp],rsi
1AB0BCDB4C8: 48 89 7C 24 08           -  mov [rsp+08],rdi
1AB0BCDB4CD: 48 8B F1                 -  mov rsi,rcx
1AB0BCDB4D0: F3 0F 10 86 04 01 00 00  -  movss xmm0,[rsi+00000104]
1AB0BCDB4D8: F3 0F 5A C0              -  cvtss2sd xmm0,xmm0
// ---------- INJECTING HERE ----------
1AB0BCDB4DC: F3 0F 10 8E 00 01 00 00  -  movss xmm1,[rsi+00000100]
// ---------- DONE INJECTING  ----------
1AB0BCDB4E4: F3 0F 5A C9              -  cvtss2sd xmm1,xmm1
1AB0BCDB4E8: F2 0F 5E C1              -  divsd xmm0,xmm1
1AB0BCDB4EC: F2 0F 5A E8              -  cvtsd2ss xmm5,xmm0
1AB0BCDB4F0: F3 0F 11 6C 24 10        -  movss [rsp+10],xmm5
1AB0BCDB4F6: F3 0F 10 44 24 10        -  movss xmm0,[rsp+10]
1AB0BCDB4FC: F3 0F 5A C0              -  cvtss2sd xmm0,xmm0
1AB0BCDB500: F3 0F 10 0D 88 00 00 00  -  movss xmm1,[1AB0BCDB590]
1AB0BCDB508: F3 0F 5A C9              -  cvtss2sd xmm1,xmm1
1AB0BCDB50C: 66 0F 2F C8              -  comisd xmm1,xmm0
1AB0BCDB510: 0F 8A 4F 00 00 00        -  jp 1AB0BCDB565
}

{
// ORIGINAL CODE - INJECTION POINT: MaxWeight

1AB0BC553AF: 48 8B 45 A8                    -  mov rax,[rbp-58]
1AB0BC553B3: 48 8B C8                       -  mov rcx,rax
1AB0BC553B6: 48 83 EC 20                    -  sub rsp,20
1AB0BC553BA: 48 8B 00                       -  mov rax,[rax]
1AB0BC553BD: 90                             -  nop
1AB0BC553BE: 90                             -  nop
1AB0BC553BF: 90                             -  nop
1AB0BC553C0: FF 90 D0 02 00 00              -  call qword ptr [rax+000002D0]
1AB0BC553C6: 48 83 C4 20                    -  add rsp,20
1AB0BC553CA: 48 63 87 EC 00 00 00           -  movsxd  rax,dword ptr [rdi+000000EC]
// ---------- INJECTING HERE ----------
1AB0BC553D1: 48 63 8F F0 00 00 00           -  movsxd  rcx,dword ptr [rdi+000000F0]
// ---------- DONE INJECTING  ----------
1AB0BC553D8: 3B C1                          -  cmp eax,ecx
1AB0BC553DA: 0F 8C E7 00 00 00              -  jl 1AB0BC554C7
1AB0BC553E0: 45 33 E4                       -  xor r12d,r12d
1AB0BC553E3: E9 C9 00 00 00                 -  jmp 1AB0BC554B1
1AB0BC553E8: 48 8B 47 38                    -  mov rax,[rdi+38]
1AB0BC553EC: 49 63 CC                       -  movsxd  rcx,r12d
1AB0BC553EF: 39 48 18                       -  cmp [rax+18],ecx
1AB0BC553F2: 0F 86 66 03 00 00              -  jbe 1AB0BC5575E
1AB0BC553F8: 48 8D 44 C8 20                 -  lea rax,[rax+rcx*8+20]
1AB0BC553FD: 48 8B 00                       -  mov rax,[rax]
}

 

  • Понравилось 1
Ссылка на комментарий
Поделиться на другие сайты

7 минут назад, partoftheworlD сказал:

Надеюсь хватит

Просто чума! Я зашёл в нужное место, в нужное время, к нужным людям :) Скрипт подхватился посреди игры прямо "из коробки", вес - мечта любого сталкера. Тысяча благодарностей Вам, и заодно на примере Ваших приёмов надеюсь подкачать собственные скилы. 
Скрипт- бомба.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.