к адресу обращается такая инструкция vmovss [rdi+r12],xmm0
и как мне найти структуру?
Сообщения Hakor
-
как узнать смещение?
-
поиск структуры
Как найти структуру, если знаешь её точное название? Есть ли какие-нибудь хитрости в этом плане?
-
RE: поиск текста (строки)
Кстати нашел, UE Explorer 1.3.2.0 называется программа, можно открывать файлы с расширением .U может кому пригодится информация
-
RE: поиск текста (строки)
@__fastcall тут с горем пополам нашел распаковщик .U файлов игры, распаковать распаковал, но внутри файлы с расширениями .class .nameproperty .boolproperty .function .textbuffer .strproperty и т.п., вот среди них есть файлы, такие как SpawnedSecurityBots.ObjectProperty, к примеру, которые не открыть ничем, а так надеялся в файлах поискать значения какие-нибудь
-
RE: поиск текста (строки)
Пользователь @__fastcall написал в поиск текста (строки):
@Hakor если бы я ещё знал, что именно ты ищешь, то мог бы конкретнее сказать. А так, побегай в игре, строки могут измениться. А ещё есть вариант, что твоя строка статичная вообще, но опять же Я хз, что Ты ищешь.
ищу securitybot (в игре это робот охраны, такой дрон в общем летает с тобой рядом, и когда его отключаешь, он через какое-то время взрывается сам, вот я не могу найти ни инструкцию которая его взрывает ни таймер), он так в игре называется, ну в файлах я поковырялся, в иду загрузил один, там можно поискать что как называется, но больше ничего не узнать особо
-
RE: поиск текста (строки)
@__fastcall я нашел 700 адресов, а дальше с ними что можно делать? я до этого находил, только в другой кодировке, было 85 адресов, я все проверил вручную, какие инструкции обращаются, но там несколько было к которым обращалась одна инструкция но она не то вообще что надо
А вот эти 775 адресов в ютф 16 и там вручную не вариант просматривать, только зеленые адреса проверил и ничего... может есть какой-то способ все эти адреса автоматически проверить, хотя бы на то, что к каким из этих 775 найденных адресов вообще в принципе обращаются инструкции? -
RE: поиск текста (строки)
а, надо было искать "поиск строк", тогда находит кое-что...
Хотя нет, глухо -
поиск текста (строки)
Нигде не нашел объяснений про поиск текста в cheat engine, что если найти какие-то строки, что дальше делать с этим можно, например я нашел 10 адресов с названием какого-то объекта в значении, что с ними можно делать и что это вообще? Если у кого-то есть опыт по этому поводу, кто может рассказать что-то интересное, поделитесь пожалуйста
А то весь интернет просмотрел толком ничего не нашел, в ютубе тож... Или этот способ (поиск текста) вообще бесполезен и им никто не пользуется? -
RE: несколько смещений в одном адресе
Пользователь @Partizan1078 написал в несколько смещений в одном адресе:
А что пытаешься сделать. В смысле чит какой?
в игре есть робот-охранник летающий, его можно активировать и деактивировать, когда он активированный он рядом летает, и у него нет таймера, он может с тобой летать сколько угодно, но когда его отключаешь, у него тикает счетчик, и через минуту или две он взрывается, самоуничтожается в общем. Я хочу эту штуку отключить и никак не могу найти ни таймер, ни инструкцию которая уничтожает, в структуре отслеживал смотрел искал ничего не нашел, разными способами отсеивал, в общем муть там какая-то. Причем таймер авто-турели смог найти и отключил самоуничтожение, с роботом проблема вот. А та инструкция, sub, я хотел добавить робота в исключения в общем. чтоб к нему эта инструкция не обращалась, я хотел скрипт набросать, я уже правда подзабыл что там я делал...
-
RE: несколько смещений в одном адресе
@Partizan1078 bioshock 2 remastered v 1.0.122864
-
RE: несколько смещений в одном адресе
Пользователь @LIRW написал в несколько смещений в одном адресе:
на точку разве cmp сравнение идет ?
у меня кстати много скриптов так работают)
-
RE: несколько смещений в одном адресе
Пользователь @LIRW написал в несколько смещений в одном адресе:
Пользователь @Hakor написал в несколько смещений в одном адресе:
хочу добавить сравнение cmp [edi+300],(float)2500
на точку разве cmp сравнение идет ?
fld dword [zzzz]
fcomp
или
movss xmm [zzzz] // это типа zzzz. dd (float)2500.00
comiss xmm [edi+300]а что со смещениями этими, я не нашел инфу
-5DC +23C первое это структура одна там есть, вторая тоже наверно структура, без названия она, а 300 смещение это уже в третьей структуре, и что в итоге как их записать не пойму -
несколько смещений в одном адресе
а что делать если смещений несколько? как в скрипте эти смещения указать?
хочу добавить сравнение cmp [edi+300],(float)2500 чтоб инструкция sub[edi+04],ebx это смещение пропускала? смещения 04 и 300 в одной структуре, по 04 значение сходится (=4)вот такой скрипт хочу написать cmp [edi+300],(float)2500 je exit sub[edi+04],ebx add esp,0C exit: jmp returnhere
ну а как добавить это смещение 300 если там адрес со смещениями, я не знаю... Подскажите пж
-
RE: BioShock Infinite Steam!
@LIRW а ты не помнишь в этой игре есть какая-то защита от отладки?
-
RE: Как получить всё оружие в начале игры?
Пользователь @__fastcall написал в Как получить всё оружие в начале игры?:
@Hakor В игре или её библиотеках. Странный вопрос однако. Если нету опыта в реверсе, то ставь себе не такую сложную цель.
ааа, ты про иду, я думал в чит энжин
-
RE: Как получить всё оружие в начале игры?
@__fastcall а функции где искать?
-
RE: BioShock Infinite Steam!
Пользователь @LIRW написал в BioShock Infinite Steam!:
Бесконечная соль..
-
Покажите как написать скрипт, с объяснением
В игре есть полоска энергии, она уменьшается когда, к примеру, стреляешь огненным шаром
вот функция:1077D020 - 55 - push ebp { 〈push word or doubleword onto the stack〉 %s } 1077D021 - 8B EC - mov ebp,esp { 〈copy memory〉 %s } 1077D023 - 64 A1 00000000 - mov eax,fs:[00000000] { 〈copy memory〉 %s } 1077D029 - 6A FF - push -01 { 〈push byte onto the stack〉 %s } 1077D02B - 68 0C63F010 - push 10F0630C { 〈push word or doubleword onto the stack (sign extended)〉 %s } 1077D030 - 50 - push eax { 〈push word or doubleword onto the stack〉 %s } 1077D031 - 64 89 25 00000000 - mov fs:[00000000],esp { 〈copy memory〉 %s } 1077D038 - 83 EC 0C - sub esp,0C { 〈subtract〉 %s } 1077D03B - 64 A1 2C000000 - mov eax,fs:[0000002C] { 〈copy memory〉 %s } 1077D041 - 8B 15 44F19911 - mov edx,[1199F144] { 〈copy memory〉 %s } 1077D047 - 56 - push esi { 〈push word or doubleword onto the stack〉 %s } 1077D048 - 57 - push edi { 〈push word or doubleword onto the stack〉 %s } 1077D049 - 8B 14 90 - mov edx,[eax+edx*4] { 〈copy memory〉 %s } 1077D04C - 8B F9 - mov edi,ecx { 〈copy memory〉 %s } 1077D04E - A1 686D7211 - mov eax,[11726D68] { 〈copy memory〉 %s } 1077D053 - 3B 82 08010000 - cmp eax,[edx+00000108] { 〈compare two operands〉 %s } 1077D059 - 0F8F F0000000 - jg 1077D14F { 〈jump near if greater (ZF=0 and SF=OF)〉 %s } 1077D05F - A1 5C6D7211 - mov eax,[11726D5C] { 〈copy memory〉 %s } 1077D064 - 83 EC 0C - sub esp,0C { 〈subtract〉 %s } 1077D067 - D9 45 08 - fld dword ptr [ebp+08] { 〈load floating point value〉 %s } 1077D06A - 8B CC - mov ecx,esp { 〈copy memory〉 %s } 1077D06C - D9 5C 24 08 - fstp dword ptr [esp+08] { 〈store single〉 %s } 1077D070 - 89 01 - mov [ecx],eax { 〈copy memory〉 %s } 1077D072 - A1 606D7211 - mov eax,[11726D60] { 〈copy memory〉 %s } 1077D077 - 89 41 04 - mov [ecx+04],eax { 〈copy memory〉 %s } 1077D07A - 8B CF - mov ecx,edi { 〈copy memory〉 %s } 1077D07C - E8 69E07BFF - call 0FF3B0EA { 〈call procedure〉 %s } 1077D081 - F3 0F10 87 C00C0000 - movss xmm0,[edi+00000CC0] { 〈move scalar single-fp〉 %s } 1077D089 - 0F57 C9 - xorps xmm1,xmm1 { 〈bit-wise logical xor for single-fp data〉 %s } 1077D08C - D9 5D 08 - fstp dword ptr [ebp+08] { 〈store single〉 %s } 1077D08F - D9 45 08 - fld dword ptr [ebp+08] { 〈load floating point value〉 %s } 1077D092 - D9 5D 08 - fstp dword ptr [ebp+08] { 〈store single〉 %s } 1077D095 - D9 87 BC0C0000 - fld dword ptr [edi+00000CBC] { 〈load floating point value〉 %s } 1077D09B - D8 65 08 - fsub dword ptr [ebp+08] { 〈substract〉 %s } 1077D09E - F3 0F11 45 EC - movss [ebp-14],xmm0 { 〈move scalar single-fp〉 %s } 1077D0A3 - D9 5D F0 - fstp dword ptr [ebp-10] { 〈store single〉 %s } 1077D0A6 - D9 45 F0 - fld dword ptr [ebp-10] { 〈load floating point value〉 %s } 1077D0A9 - D9EE - fldz { 〈Push +0.0 onto the FPU register stack〉 %s } 1077D0AB - DFF1 - fcomip st(0),st(1) { 〈compare real and set eflags〉 %s } 1077D0AD - 76 07 - jna 1077D0B6 { 〈jump short if not above (ZF=1 or CF=1)〉 %s } 1077D0AF - DDD8 - fstp st(0) { 〈store real〉 %s } 1077D0B1 - 0F28 C1 - movaps xmm0,xmm1 { 〈move aligned four packed single-fp〉 %s } 1077D0B4 - EB 0E - jmp 1077D0C4 { 〈jump short〉 %s } 1077D0B6 - D9 45 EC - fld dword ptr [ebp-14] { 〈load floating point value〉 %s } 1077D0B9 - DFF1 - fcomip st(0),st(1) { 〈compare real and set eflags〉 %s } 1077D0BB - DDD8 - fstp st(0) { 〈store real〉 %s } 1077D0BD - 76 05 - jna 1077D0C4 { 〈jump short if not above (ZF=1 or CF=1)〉 %s } 1077D0BF - F3 0F10 45 F0 - movss xmm0,[ebp-10] { 〈move scalar single-fp〉 %s } 1077D0C4 - F3 0F11 87 BC0C0000 - movss [edi+00000CBC],xmm0 { 〈move scalar single-fp〉 %s } 1077D0CC - F3 0F10 45 08 - movss xmm0,[ebp+08] { 〈move scalar single-fp〉 %s } 1077D0D1 - 0F2E C1 - ucomiss xmm0,xmm1 { 〈unordered scalar single-fp compare and set eflags〉 %s } 1077D0D4 - 9F - lahf { 〈load status flag into ah register〉 %s } 1077D0D5 - F6 C4 44 - test ah,44 { 〈logical compare〉 %s } 1077D0D8 - 7B 63 - jnp 1077D13D { 〈jump short if not parity (PF=0)〉 %s } 1077D0DA - 8B 07 - mov eax,[edi] { 〈copy memory〉 %s } 1077D0DC - 8B CF - mov ecx,edi { 〈copy memory〉 %s } 1077D0DE - FF 90 48050000 - call dword ptr [eax+00000548] { 〈call procedure〉 %s } 1077D0E4 - 8B 07 - mov eax,[edi] { 〈copy memory〉 %s } 1077D0E6 - 8B CF - mov ecx,edi { 〈copy memory〉 %s } 1077D0E8 - FF 90 B4050000 - call dword ptr [eax+000005B4] { 〈call procedure〉 %s } 1077D0EE - 8B 8F 10010000 - mov ecx,[edi+00000110] { 〈copy memory〉 %s } 1077D0F4 - 8B 49 5C - mov ecx,[ecx+5C] { 〈copy memory〉 %s } 1077D0F7 - E8 E7D67CFF - call 0FF4A7E3 { 〈call procedure〉 %s } 1077D0FC - 8B C8 - mov ecx,eax { 〈copy memory〉 %s } 1077D0FE - E8 5C207BFF - call 0FF2F15F { 〈call procedure〉 %s } 1077D103 - F3 0F10 45 08 - movss xmm0,[ebp+08] { 〈move scalar single-fp〉 %s } 1077D108 - 8B F0 - mov esi,eax { 〈copy memory〉 %s } 1077D10A - 6A 00 - push 00 { 〈push byte onto the stack〉 %s } 1077D10C - 8D 45 E8 - lea eax,[ebp-18] { 〈load effective address〉 %s } 1077D10F - 89 7D E8 - mov [ebp-18],edi { 〈copy memory〉 %s } 1077D112 - 50 - push eax { 〈push word or doubleword onto the stack〉 %s } 1077D113 - A1 BCBC7211 - mov eax,[1172BCBC] { 〈copy memory〉 %s } 1077D118 - 6A 00 - push 00 { 〈push byte onto the stack〉 %s } 1077D11A - 83 EC 08 - sub esp,08 { 〈subtract〉 %s } 1077D11D - F3 0F11 45 EC - movss [ebp-14],xmm0 { 〈move scalar single-fp〉 %s } 1077D122 - 8B CC - mov ecx,esp { 〈copy memory〉 %s } 1077D124 - 89 01 - mov [ecx],eax { 〈copy memory〉 %s } 1077D126 - A1 C0BC7211 - mov eax,[1172BCC0] { 〈copy memory〉 %s } 1077D12B - 89 41 04 - mov [ecx+04],eax { 〈copy memory〉 %s } 1077D12E - 8B CE - mov ecx,esi { 〈copy memory〉 %s } 1077D130 - E8 30327CFF - call 0FF40365 { 〈call procedure〉 %s } 1077D135 - 8B 16 - mov edx,[esi] { 〈copy memory〉 %s } 1077D137 - 8B CE - mov ecx,esi { 〈copy memory〉 %s } 1077D139 - 50 - push eax { 〈push word or doubleword onto the stack〉 %s } 1077D13A - FF 52 0C - call dword ptr [edx+0C] { 〈call procedure〉 %s } 1077D13D - 8B 4D F4 - mov ecx,[ebp-0C] { 〈copy memory〉 %s } 1077D140 - 5F - pop edi { 〈pop a value from the stack〉 %s } 1077D141 - 64 89 0D 00000000 - mov fs:[00000000],ecx { 〈copy memory〉 %s } 1077D148 - 5E - pop esi { 〈pop a value from the stack〉 %s } 1077D149 - 8B E5 - mov esp,ebp { 〈copy memory〉 %s } 1077D14B - 5D - pop ebp { 〈pop a value from the stack〉 %s } 1077D14C - C2 0400 - ret 0004 { 〈near return to calling procedure and pop 4 bytes from stack〉 %s } 1077D14F - 68 686D7211 - push 11726D68 { 〈push word or doubleword onto the stack (sign extended)〉 %s } 1077D154 - E8 64087BFF - call 0FF2D9BD { 〈call procedure〉 %s } 1077D159 - 83 C4 04 - add esp,04 { 〈add (sign extended)〉 %s } 1077D15C - 83 3D 686D7211 FF - cmp dword ptr [11726D68],-01 { 〈compare two operands〉 %s } 1077D163 - 0F85 F6FEFFFF - jne 1077D05F { 〈jump near if not equal (ZF=0)〉 %s } 1077D169 - 6A 01 - push 01 { 〈push byte onto the stack〉 %s } 1077D16B - 6A 02 - push 02 { 〈push byte onto the stack〉 %s } 1077D16D - 68 A8C00311 - push 1103C0A8 { 〈push word or doubleword onto the stack (sign extended)〉 %s } 1077D172 - B9 5C6D7211 - mov ecx,11726D5C { 〈copy memory〉 %s } 1077D177 - C7 45 FC 00000000 - mov [ebp-04],00000000 { 〈copy memory〉 %s } 1077D17E - E8 81CA7BFF - call 0FF39C04 { 〈call procedure〉 %s } 1077D183 - 68 686D7211 - push 11726D68 { 〈push word or doubleword onto the stack (sign extended)〉 %s } 1077D188 - C7 45 FC FFFFFFFF - mov [ebp-04],FFFFFFFF { 〈copy memory〉 %s } 1077D18F - E8 81927AFF - call 0FF26415 { 〈call procedure〉 %s } 1077D194 - 83 C4 04 - add esp,04 { 〈add (sign extended)〉 %s } 1077D197 - E9 C3FEFFFF - jmp 1077D05F { 〈jump near〉 %s }
В игре я нашёл конкретное значение этой полоски, адрес со значением 130
Нашел инструкцию, которая записывают в данный адрес, это movss [edi+00000CBC],xmm0 по адресу 1077D0C4
Если её отключить (nop), то энергия не отнимается
Есть ещё одна инструкция по адресу 10E9D09B, это fsub dword ptr [ebp+08], вместо fsub я ставил fadd, до какого-то момента работало (вместо уменьшения полоска прибавлялась), и после перезапуска игры, и с сохранением и загрузкой, но в какой-то момент игра начала вылетать, когда включал скрипт, скрипт простой вот такой был:[ENABLE] 10E9D09B: db D8 45 08 F3 0F 11 45 EC [DISABLE] 10E9D09B: db D8 65 08 F3 0F 11 45 EC
Ставить nop куда-либо я понял вообще идея не очень
Как сделать максимально рабочий и простой вариант? Вообще что лучше, инъекция кода, полная инъекция или AOB?
Кстати, сделал movss xmm0,[edi+00000CBC] вместо movss [edi+00000CBC],xmm0 - тоже не отнимается энергия, но какие осложнения могут быть при таких манипуляциях? -
Как получить всё оружие в начале игры?
В игре Bioshok 2 различное вооружение можно получить только по ходу игры, а как сделать так, чтобы сделать его доступным с самого начала? Может есть какие-то похожие уроки, с другими играми, с аналогичной задачей?