catbein
-
Постов
17 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные catbein
-
-
Доброго времени суток всем.
Решил я попробовать найти координаты игрока в игре "Lifeless Planet", сначала я пробовал найти высоту то есть ось Z, но среди адресов которые остались в процессе отсева я нашел ось X, после заморозки этой оси я не смог в игре идти назад или вперед.
Я поставил бряк на доступ и вот что получилось:
Странно то, что адрес который я нашел не получает доступ ни к одной из этих инструкций.
И моего адреса там нет, нигде, ни в единой инструкции, вот что получалось когда я находил адреса получающие доступ к любой инструкции что выше, моего адреса там не оказалось (мой адрес 0EA2D244):
Я сначала подумал что возможно это другие оси, но заморозка этих значений мне ничего не дало. Я попробовал заглянуть в структуру одной из тех инструкций и вот что получилось:
Как вы видите мой адрес находиться со смещением 14, я взял адрес со смещением 10,8,4,0,18,1С и тд. и тп. но среди них не оказалось нужных мне осей Y и Z, почему же в игре координаты не находятся рядом друг от друга с интервалом по смещению и почему когда я хотел найти адреса которые получают доступ к любой инструкции ,- своего адреса я там не нашел???? ну и как мне найти остальные координаты???
Потом после этого я пробовал найти остальные координаты вручную но в итоге после отсева оставалось адресов 400-600.
-
Если переменная _money выполняет роль переключателя(так оно по ходу и есть) нужно задать тип. Ты написал add 1, может всё же надо dd 1, а лучше db 1 - 1 байта достаточно) И кажется надо добавить строчку
label(_money)
registersymbol(_money)
newmem:
Спасибо большое, поменял вместо dd на db и написал registersymbol(_money) соответственно поставил unregistersymbol и всё пошло. Оставлю скрипт рабочий здесь вдруг кому то тоже пригодиться:
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
label(_money)
registersymbol(_money)
newmem:
cmp dword ptr [_money],1
jne originalcode
add [eax+54],#1000 // добавляет 1000 золота
mov [_money],0
originalcode:
mov edi,[eax+54]
lea ecx,[esi+00004454]
exit:
jmp returnhere
_money:
db 1
"game.exe"+811698:
jmp newmem
nop
nop
nop
nop
returnhere:
[DISABLE]
unregistersymbol(_money)
dealloc(newmem)
"game.exe"+811698:
mov edi,[eax+54]
lea ecx,[esi+00004454]И еще одно, этот скрипт добавляет деньги только тогда когда я еще достаю, как сделать так чтобы деньги добавлялись сразу, а не при естественном пополнении ????
-
Всем привет
Я прочитал одну из ваших статей о написание скрипта который добавляет какое-то количество денег до суммы.
По примеру я написал вот что(mov edi,[eax+54]-отвечающая за деньги инструкция):
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
label(_money)
newmem:
cmp dword ptr [_money],1
jne originalcode
add [eax+54],#1000
mov [_money],0
originalcode:
mov edi,[eax+54]
lea ecx,[esi+00004454]
exit:
jmp returnhere
_money:
add 1
"game.exe"+811698:
jmp newmem
nop
nop
nop
nop
returnhere:
[DISABLE]
dealloc(newmem)
"game.exe"+811698:
mov edi,[eax+54]
lea ecx,[esi+00004454]Но при добавлении скрипта мне пишет ошибку:
Что не так ??? выправите скрипт пожалуйста, БУДУ ОЧЕНЬ благодарен
-
надо не искать очки улучшения, а сам опыт, взломаешь опыт до 70 лвл и будешь иметь максимальное количество очков. Вот скрипт, активируй, убей кого-то и будешь иметь 70 лвл и все очки улучшения
[ENABLE]
alloc(newmem,2048)
label(xp)
registersymbol(xp)
label(returnhere)
aobscan(aob_xp,01 77 3C 8B 47 28 8B 57 3C 85 C0 74 14 0F B7 4F 4A)
newmem:
mov [edi+3C],#99999999
add [edi+3C],esi
mov eax,[edi+28]
jmp returnhere
aob_xp:
xp:
jmp newmem
nop
returnhere:
[DISABLE]
dealloc(newmem)
unregistersymbol(xp)
xp:
add [edi+3C],esi
mov eax,[edi+28] -
уже пробовал, скрипт работает только на одной способности((а что помешало поставить БРЯК НА ЧТЕНИЕ...И придавать все время максимальное значение количества энергии?
-
Есть проблема. Решил я взломать игру. Там главный герой имеет полоску энергии, я без вопросов взломал, все было хорошо, но в игре персонаж имеет много разных способностей, эти способности по разному хавают эту энергию, я занопил инструкцию которая отвечает за эту энергию но такой скрипт работает только на той способности на которой я ставил бряк, если переключить способность то скрипт уже не работает и даже если пользоваться одной же способностью то она имеет одну инструкцию которая отвечает за уменьшение и еще одну за увеличение энергии. Одним словом чтобы написать скрипт который бы полностью замораживал энергию во всех способностях он будет иметь более 100 строк.Что самое главное, в способностях за увеличение и уменьшение энергии отвечает одна и та же инструкция но в разных способностях эта инструкция имеет различные адреса, то есть в игре есть где-то более 10 одинаковых инструкций но они имеют разные адреса. Подскажите как написать скрипт не задавая все эти инструкции?
Вот я написал скрипт в котором занопил все эти инструкции
[ENABLE]
label(damage)
label(uvel)
label(run)
label(sila)
label(fly)
label(time)
label(kamni)
registersymbol(damage)
registersymbol(uvel)
registersymbol(run)
registersymbol(sila)
registersymbol(fly)
registersymbol(time)
registersymbol(kamni)
aobscan(aob_damage,F3 0F 11 83 E8 17 00 00 F3 0F 10 05 D8 92 67 00 0F 2F 83 50 1B 00 00 72 10 F3 0F 10 05 98 87 69 00 F3 0F 11 83 50 1B 00 00)
aobscan(aob_uvel,F3 0F 11 83 E8 17 00 00 D9 83 38 19 00 00 D9 9B 28 19 00 00 D9 83 3C 19 00 00 D9 9B 2C 19 00 00 D9 83 40 19 00 00)
aobscan(aob_run,F3 0F 11 83 E8 17 00 00 F6 83 48 1B 00 00 20 74 0A F3 0F 10 05 D8 92 67 00 EB 08 F3 0F 10 05 74 84 69 00)
aobscan(aob_sila,F3 0F 11 83 E8 17 00 00 8B 53 08 8B 89 38 01 00 00 D9 02 8B 81 BC 07 00 00 F3 0F 10 05 EC 92 67 00)
aobscan(aob_fly,F3 0F 11 83 E8 17 00 00 83 BB E0 17 00 00 01 75 23 F6 83 B8 18 00 00 01 74 1A F3 0F 10 83 40 18 00 00 0F 2F 05 04 91 67 00)
aobscan(aob_time,F3 0F 11 81 E8 17 00 00 F3 0F 10 05 04 91 67 00 F3 0F 11 81 14 18 00 00 F3 0F 10 05 50 86 69 00 F3 0F 11 81 50 1B 00 00 5E)
aobscan(aob_kamni,F3 0F 11 80 E8 17 00 00 5D)
aob_damage:
damage:
nop
nop
nop
nop
nop
nop
nop
nop
aob_uvel:
uvel:
nop
nop
nop
nop
nop
nop
nop
nop
aob_run:
run:
nop
nop
nop
nop
nop
nop
nop
nop
aob_sila:
sila:
nop
nop
nop
nop
nop
nop
nop
nop
aob_fly:
fly:
nop
nop
nop
nop
nop
nop
nop
nop
aob_time:
time:
nop
nop
nop
nop
nop
nop
nop
nop
aob_kamni:
kamni:
nop
nop
nop
nop
nop
nop
nop
nop
[DISABLE]
unregistersymbol(damage)
damage:
movss [ebx+000017E8],xmm0
unregistersymbol(uvel)
uvel:
movss [ebx+000017E8],xmm0
unregistersymbol(run)
run:
movss [ebx+000017E8],xmm0
unregistersymbol(sila)
sila:
movss [ebx+000017E8],xmm0
unregistersymbol(fly)
fly:
movss [ebx+000017E8],xmm0
unregistersymbol(time)
time:
movss [ecx+000017E8],xmm0
unregistersymbol(kamni)
kamni:
movss [eax+000017E8],xmm0 -
Видео нет, а пример могу.
-- Ищем в памяти с правами "исполнения кода", "без копирования при записи" и "без записи"
function ByteScan(signature)
local results = AOBScan(signature, "+X-C-W")
if (results == nil) then
messageDialog("Ошибка. Не найден адрес внедрения.\n\rТрейнер будет закрыт!",1, 2)
closeCE()
return nil
end
local address = stringlist_getString(results, 0)
destroy(results)
return address
end
function Cheat0()
--1 Убрать отдачу на руку
local workAddres = ByteScan("e8xxxxxxxx8bxxxxxx83xxxx33xx80xxxxxx75xx8bxxxxxxf7")
local workTemplateAsmText = [[
->>address:
db 90 90 90 90 90]]
workTemplateAsmText = string.gsub(workTemplateAsmText, "->>address", workAddres)
autoAssemble(workTemplateAsmText)
--2 Устойчивый прицел при стрельбе
--3 Устойчивый прицел при беге
--Устойчивый прицел при беге
local workAddres1 = ByteScan("d9xxd9xxxxd9xxxxd9xxxxxxxxxxdexxdfxxf6xxxx75xxd9xxxxxxxxxxd9")
workAddres1 = string.format("%x", ("0x"..workAddres1) + 8)
-- Устойчивый прицел при стрельбе
local workAddres2 = ByteScan("d9xxxxxxxxxx75xxd9xxxxxxxxxxd8xxxxxxd8xxdfxxf6xxxx7axxd9")
local workTemplateAsmText = [[
alloc(newmem1,2048)
label(newmem2)
label(returnhere1)
label(originalcode1)
label(returnhere2)
label(originalcode2)
newmem1:
fstp st
fldz
originalcode1:
fstp dword ptr [ebx+00000624]
jmp returnhere1
newmem2:
fstp st
fldz
originalcode2:
fst dword ptr [ecx+00000624]
jmp returnhere2
->>address1:
jmp newmem1
nop
returnhere1:
->>address2:
jmp newmem2
nop
returnhere2:
]]
workTemplateAsmText = string.gsub(workTemplateAsmText, "->>address2", workAddres1)
workTemplateAsmText = string.gsub(workTemplateAsmText, "->>address1", workAddres2)
autoAssemble(workTemplateAsmText)
beep()
end
function DisableCheat0()
---...функцию DisableCheat0() нужно будет написать
beep()
endФункцию Cheat0 можно связать с горячими клавишами через Lua или кривым способом для тестов через АА:
[ENABLE]
luacall(Cheat0())
[DISABLE]
luacall(DisableCheat0())Спасибо
-
а можешь сделать видео или туториал как делать такого рода Аобскан???Возможно поиск значительно ускорить, если сканировать не скриптами АА, а Lua с указанием типа памяти при сканировании.
Цитата из main.lua:
Можешь поискать примеры в Интернете.
-
а есть какой-то способ ускорить этот поиск???Если после задержки скрипт активируется, значит столько времени занимает поиск байтов.
-
Я сделал скрипт в СЕ и он работает нормально но после того как я сделал в нем "AOBSCAN" он активируется где-то после 5-10 секунд и в то время СЕ очень сильно зависает, подскажите почему это так и как это решить?
-
[ENABLE]
alloc(newmem,2048)
label(xp)
registersymbol(xp)
label(returnhere)
aobscan(aob_xp,01 77 3C 8B 47 28 8B 57 3C 85 C0 74 14 0F B7 4F 4A)
newmem:
mov [edi+3C],#99999999
add [edi+3C],esi
mov eax,[edi+28]
jmp returnhere
aob_xp:
xp:
jmp newmem
nop
returnhere:
[DISABLE]
dealloc(newmem)
unregistersymbol(xp)
xp:
add [edi+3C],esi
mov eax,[edi+28]
P.S. скрипт на взлом опыта и поинтов для улучшения
- 1
Проблемка из созданием телепорта
in Вопросы по созданию читов в одиночных играх
Опубликовано
От души спасибо за помощь, я просто читал ваши статьи и про такие проблемы там ни слова не было и это загнало меня в тупик. Большое спасибо теперь разобрался)))))