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

автоматический поиск и замена


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

Подскажите пожалуйста скрипт для хоткея.

есть маска

00 00 00 00 00 4C AD C0 00 00 00 00 00 7C A5 40 00 00 00 00 00 00 49 40

нужно найти ее и заменить все найденные на

00 00 00 00 00 89 B2 40 00 00 00 00 00 70 97 C0 00 00 00 00 00 00 49 40

по хоткею.

После чего скомпилировать в ехе трейнер. Как это сделть?

понял что это нужно делать через memscan_firstScan но как именно?

Огромное спасибо.

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

Если ты собираешься писать скрипт для СЕ - тогда для этого используется специальная команда aobscan. Читай хелпы к программе и наш форум, конечно же.

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

Спасибо. Я порылся и нашел вот темку: поиск и замена значения по хоткею

Понимаю, что нужно как-то вставить код Beatle в форму от Andrey...

Но как?

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

вот попробовал сделать в меру понимания... но не пашет %)

addresslist=getAddressList()
results=AOBScan("9A 99 99 99 99 99 C9 3F B8 1E", "+W-C-X")
FlCount = results_getCount

function No()
for i = 0, FlCount-1 do
address=stringlist_getString(results,i)
writeByteArray(address,"33 33 33 33 33 33 E3 BF B8 1E")
end

end


function Norma()
for i = 0, FlCount-1 do
address=stringlist_getString(results,i)
writeByteArray(address,"9A 99 99 99 99 99 C9 3F B8 1E")
end
object_destroy(results)
results=nil
showMessage("OK")

end

function SetHotKey(func, hotkey)
local objectHotKey = createHotkey(func, hotkey)
generichotkey_setKeys(objectHotKey, hotkey)
generichotkey_onHotkey(objectHotKey, func)
end


function onOpenProcess(processid)
SetHotKey(No, VK_R)--я так понял тут задается хоткей. А если мне нужно Ctrl+R например?
SetHotKey(Norma, VK_V)
control_setCaption(formTrainer, "Trainer Run ....")
setProperty(infoLabel, "Enabled", "true")
end

function OnCloseTrainerForm(sender)
closeCE()
return caFree
end

formTrainer = createForm(true)
form_centerScreen(formTrainer)
control_setCaption(formTrainer, "Process game is not exist")
form_onClose(formTrainer, OnCloseTrainerForm)

infoLabel = createLabel(formTrainer)
control_setCaption(infoLabel, "Key R - ....\n\rKey V - ....")
control_setPosition(infoLabel, 20, 10)
setProperty(infoLabel, "Enabled", "false")

listProcess = getAutoAttachList()
strings_add(listProcess, "[i]название игры[/i].exe")

--TRAINERGENERATORSTOP--

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

Roman_design, все ответы здесь.

Код

results=AOBScan("9A 99 99 99 99 99 C9 3F B8 1E", "+W-C-X")
FlCount = results_getCount

Надо запускать уже тогда, когда процесс был подсоединён, а подсоединяется он в функции onOpenProcess.

В версии CE 6.1 надо так же запустить reinitializeSymbolhandler().

function onOpenProcess(processid)
reinitializeSymbolhandler()
results=AOBScan("9A 99 99 99 99 99 C9 3F B8 1E", "+W-C-X")
FlCount = results_getCount


SetHotKey(No, VK_R)--я так понял тут задается хоткей. А если мне нужно Ctrl+R например?
SetHotKey(Norma, VK_V)

control_setCaption(formTrainer, "Trainer Run ....")
setProperty(infoLabel, "Enabled", "true")
end

Функция SetHotKey написана была мной специально для версии CE 6.1 чтобы обойти некоторый баг. Чтобы добавить ещё одну горячую клавишу, то нужно добавить в эту функцию ещё аругмент.


function SetHotKey(func, hotkey, hotkey2)
local objectHotKey = createHotkey(func, hotkey, hotkey2)
generichotkey_setKeys(objectHotKey, hotkey, hotkey2)
generichotkey_onHotkey(objectHotKey, func)
end

Вообще я этим методом регистрации горячих клавиш не пользуюсь. Здесь другой метод....

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

Вот что пробовал сделать. Пока результата 0.

addresslist=getAddressList()


function onOpenProcess(processid)
reinitializeSymbolhandler()
results=AOBScan("9A 99 99 99 99 99 C9 3F", "+W-C-X")
FlCount = results_getCount --- может нужно так: FlCount = results_getCount() ? Или как-то подругому?


SetHotKey(No, VK_F2)--я так понял тут задается хоткей. А если мне нужно Ctrl+R например?
SetHotKey(Norma, VK_F3)

control_setCaption(formTrainer, "Trainer Run ....")
setProperty(infoLabel, "Enabled", "true")
end


function No()
for i = 0, FlCount-1 do
address=stringlist_getString(results,i)
writeBytes(address,"33 33 33 33 33 33 E3 BF") -- правильно? или так нужно: "33","33","33","33","33","33","E3","BF"
end
showMessage("On") -- При нажатии хоткея это сообщение не показывает почему-то.

end


function Norma()
for i = 0, FlCount-1 do
address=stringlist_getString(results,i)
writeBytes(address,"9A 99 99 99 99 99 C9 3F")
end
showMessage("Off") -- При нажатии хоткея это сообщение не показывает почему-то.

end

function SetHotKey(func, hotkey)
local objectHotKey = createHotkey(func, hotkey)
generichotkey_setKeys(objectHotKey, hotkey)
generichotkey_onHotkey(objectHotKey, func)
end


function OnCloseTrainerForm(sender)
closeCE()
return caFree
end

formTrainer = createForm(true)
form_centerScreen(formTrainer)
control_setCaption(formTrainer, "Process game is not exist")
form_onClose(formTrainer, OnCloseTrainerForm)

infoLabel = createLabel(formTrainer)
control_setCaption(infoLabel, "Key R - ....\n\rKey V - ....")
control_setPosition(infoLabel, 20, 10)
setProperty(infoLabel, "Enabled", "false")

listProcess = getAutoAttachList()
strings_add(listProcess, "-- название игры --.exe")

--TRAINERGENERATORSTOP--

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

>>и почему aobscan а не memscan_firstScan???

Я брал aobscan потому что ему можно задавать меньше параметров чем для memscan функций

Готовый ответ не только для тебя, но и для других людей, которые учатся работать с Lua-Engine


autoAttachList = getAutoAttachList()
stringlist_add(autoAttachList, processName);
print('Программа начала искать процесс calc.exe')

------- Функция возвращаюся список строк (класс Strings или Stringlist) --------
-- В списке строк находятся найденные адреса
-- Список начинается с нулевого элемента
-- В аргумент signature передаётся строка сигнатуры
function GetAddressFromSignature(signature)
local stringListAddresses = AOBScan(signature, "+X-C-W")
if (stringListAddresses == nil) then
messageDialog("Ошибка. Не найден адрес.\n\rТрейнер будет закрыт!",1, 2)
onCloseClick(nil)
else
print('Сигнатура '..signature ..' найдена')
end
return stringListAddresses
end

------- Функция записи строки байт по адресам из списка stringListAddresses -----
-- stringListAddresses - класс Strings или Stringlist
-- bytesString - строка байт вида 'xx xx xx'
function WriteBytes(stringListAddresses, bytesString)

lenghtLines = strings_getCount(stringListAddresses) - 1

for i = 0, lenghtLines do
address = stringlist_getString(stringListAddresses, i)
-- применяем функцию автоассемблирования вида
--[["
Адрес:
db 00 00 00 00 00 00 00 00
"]]--
AACode = address .. ':\r\ndb ' .. bytesString
print('Собираюсь автоассемблировать:')
print(AACode)
autoAssemble(AACode)
print('Запись по адресу '..address..' успешна!')
end

end

--- Функции читов
function No()
WriteBytes(stringListAddresses,'33 33 33 33 33 33 E3 BF')
end

function Norma()
WriteBytes(stringListAddresses,'9A 99 99 99 99 99 C9 3F')
end
---------------

-- Функция циклически вызываемая таймером
function OnCheckHotkeys()
-- Обработка клавиш CTRL+R
if isKeyPressed(VK_CONTROL) and isKeyPressed(VK_R) then
No()
return
end
-- Обработка клавиши L
if isKeyPressed(VK_L) then
Norma()
return
end

end

------------------
print('Создаю форму и другие компонеты')
formTrainer = createForm()
form_onClose(formTrainer, onCloseClick)
form_centerScreen(formTrainer)
control_setCaption(formTrainer, "Process game is not exist")
form_onClose(formTrainer, onCloseClick)

infoLabel = createLabel(formTrainer)
control_setCaption(infoLabel, "Key CTRL + R - ???\n\rKey ??? - ....")
control_setPosition(infoLabel, 20, 10)
setProperty(infoLabel, "Enabled", "false")

function onCloseClick(sender)
closeCE()
return caFree
end


function onOpenProcess(processid)

print('Найден процесс игры')

print('Реинициализирую символы (необходимо для версии CE 6.1)')
reinitializeSymbolhandler()

print('Ищу сигнатуру 9A 99 99 99 99 99 C9 3F и сохраняю результат в глобальную переменную stringListAddresses')
stringListAddresses = GetAddressFromSignature('9A 99 99 99 99 99 C9 3F')

print('Запускаю таймер на обработку горячих клавиш с интервалом в 100 мс')
hotKeyTimer = createTimer(trainerForm)
timer_setInterval(hotKeyTimer, 100)
timer_onTimer(hotKeyTimer, OnCheckHotkeys)
print('Нажмите CTRL+R или L для активации и деактивации')

print('Изменяю заголовок окна формы и активирую Label')
control_setCaption(formTrainer, "Trainer Run ....")
setProperty(infoLabel, "Enabled", "true")
end
processName = 'calc.exe'

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

Спасибо!! Почти работает. только маленькое но... не ищет 16битный код, который нужен :mellow:

Пробовал читэнжином найти - находит около 50 адрессов.

меняю по хоткею через прогу - значения как были так и остались.

Ищю чит энжином array of bytes. :excl:

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

Проверь защиту памяти сигнатуры твоего кода

AOBScan(signature, "+X-C-W")

+X : поиск сигнатуры в памяти с правами "выполнения кода" (PAGE_EXECUTE)

-С : исключить поиск сигнатуры в памяти с правами "копирования при записи" (PAGE_WRITECOPY)

-W : исключить поиск сигнатуры в памяти с правами "записи данных" (PAGE_READWRITE)

Совмещение прав это разная комбинация X,C,W со знаками *(поиск без разницы, может быть, а может и не быть), - (исключить поиск), + (включить в поиск)

Атрибут защиты (регионов и в частности блоков)

PAGE_NOACCESS

Попытки чтения, записи или исполнения содержимого памяти на этой странице вызывают нарушение доступа

PAGE_READONLY

Попытки записи или исполнения содержимого памяти на этой странице вызывают нарушение доступа

PAGE_READWRITE

Попытки исполнения содержимого памяти на этой странице вызывают нарушение доступа

PAGE_EXECUTE

Попытки чтения или записи на этой странице вызывают нарушение доступа

PAGE_EXECUT_READ

Попытки записи на этой сфанице вызывают нарушениедоступа

PAGE_EXECUTE_READWRITE

На этой странице возможны любые операции

PAGE_WRITECOPY

Попытки исполнения содержимого памяти на этой странице выбывают нарушение доступа, попытка записи приводит к тому, что процессу предоставляется «личная» копия данной страницы

PAGE_EXECUTE_WRITECOPY

На этой странице возможны любые операции, попытка записи приводит к тому, что процессу предоставляется «личная» копия данной страницы

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

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

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

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