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

[CE] Lua - Неизвестный косяк со скриптом


pachela

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

В 08.02.2017в21:42, pachela сказал:

Поиск сразу заканчивается и ничего не находит.

pachela, я перечитал топик и результат пока нулевой. Думаю, что всё дело в нерабочей сигнатуре:

 

В 06.02.2017в22:42, Garik66 сказал:

И второе - ты уверен в своей сигнатуре?

 

В 08.02.2017в06:11, Garik66 сказал:

Если твоя сигнатура рабочая,

 

Поэтому в начале докажи, что сигнатура у тебя рабочая - ну например запиши видео, как она у тебя находится. (лично я твою сигнатуру у себя не нашёл).

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

31 минуты назад, Garik66 сказал:

pachela, я перечитал топик и результат пока нулевой. Думаю, что всё дело в нерабочей сигнатуре:

 

 

 

Поэтому в начале докажи, что сигнатура у тебя рабочая - ну например запиши видео, как она у тебя находится. (лично я твою сигнатуру у себя не нашёл).

Кхм. Что за бред? Я первый кто заинтересован в работоспособности скрипта. Косяк вот в чем: С включенным СЕ трейнер работает, а когда конвертируешь в ЕХЕ - нет. Это все вина неправильной сигнатуры? Или все же это вина защиты процесса, который СЕ обходит путем инструментов ядра?

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

проверил у себя с стандартным блокнотом в виндовс такая же проблема с процессом " notepad.exe " в самом се ищет сигнатуру " 3F 00 00 00 00 00 00 E0 " но после компиляции в exe пишет сигнатура не найдена

проверял на играх все работает нормально

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

16 минуту назад, horror113 сказал:

в самом се ищет сигнатуру " 3F 00 00 00 00 00 00 E0 "

у меня по этой сигнатуре СЕ находит 109 адресов, правда У меня старая версия блокнота v5.8.7 (с руссификатором - английским не владею:wacko:). 

Скрытый текст

sl = AOBScan("3F 00 00 00 00 00 00 E0 ");

if(sl == nil) then
    print("No code found!");
else
   j = stringlist_getCount(sl);
   print("Found:",j);
   for i = 1, j do
      print(stringlist_getString(sl,i-1));
   end
   object_destroy(sl);
end

Found: 109 
5F0F235F 
68FE8B0F 
70FF8CE7 
70FFD2CF 
70FFD2D7 
70FFE66F 
710060C7 
7100A3AF 
7100A3B7 
7100C2CF 
71024537 
7106D59F 
71070187 
71074657 
7107583F 
71075847 
71076F27 
71077347 
710781FF 
7107D357 
7380B27F 
739D5F6F 
739D8327 
739DB887 
739DC4DF 
739DC4E7 
739DD69F 
739DDABF 
739DDEFF 
739E26A7 
739E6047 
739E8CBF 
739E8CC7 
739E9DFF 
73A6A9AB 
73A6B191 
7400CFCF 
74661271 
74667987 
74667AA7 
7466A5B7 
74677F3F 
7467A70F 
7467AB57 
7467B03F 
7467B047 
7467DF1F 
7467F387 
7468192F 
74751367 
7485E60F 
7493197F 
74D272EF 
74E98E0F 
74E9B1CF 
74E9E717 
74E9F36F 
74E9F377 
74EA051F 
74EA093F 
74EA0D7F 
74EA5517 
74EA9127 
74EAC63F 
74EAC647 
74EACE5F 
74EB3BA7 
74EB681F 
74EB6827 
74EB795F 
74F43A9B 
74F43CA1 
76C4A92E 
76C4A975 
76C4A9BC 
76C4AA03 
76C4AA4A 
76C4AA91 
76C4FBAF 
76C58CE7 
76C59CFC 
76C5A4AC 
76C5B250 
76C5B622 
76C61D7D 
76C61DC4 
76C7542B 
76C83F96 
76C83FDD 
76C84024 
76C91151 
76C92B56 
76C92DFC 
76C92E8A 
76C941FA 
76C944A0 
76C9452E 
76C975D5 
76C99A31 
76C99A78 
76C9AC55 
76C9AC9C 
76CA380B 
76CBA494 
76CBCAB0 
76CCDA24 
76CD2D36 
76CD58D0 
773BD031 
 

для блокнота виндос 10 нашлось 56 адресов:

Скрытый текст

Found: 56 
7FFF3396A64F 
7FFF35CA0357 
7FFF363A836F 
7FFF36B84617 
7FFF36B8461F 
7FFF36B847CF 
7FFF36B847D7 
7FFF36B8A34F 
7FFF36B8A357 
7FFF36B8A53F 
7FFF36B8A547 
7FFF36B8A667 
7FFF36B8A6F7 
7FFF36B8AA0F 
7FFF36B9906F 
7FFF36E0084F 
7FFF370AD297 
7FFF376F4587 
7FFF3852B92E 
7FFF3852B975 
7FFF3852B9BC 
7FFF3852BA03 
7FFF3852BA4A 
7FFF3852BA91 
7FFF38530BAF 
7FFF38539CE7 
7FFF3853ACFC 
7FFF3853B4AC 
7FFF3853C250 
7FFF3853C622 
7FFF38542D7D 
7FFF38542DC4 
7FFF3855642B 
7FFF38564F96 
7FFF38564FDD 
7FFF38565024 
7FFF38572151 
7FFF38573B56 
7FFF38573DFC 
7FFF38573E8A 
7FFF385751FA 
7FFF385754A0 
7FFF3857552E 
7FFF385785D5 
7FFF3857AA31 
7FFF3857AA78 
7FFF3857BC55 
7FFF3857BC9C 
7FFF3858480B 
7FFF3859B494 
7FFF3859DAB0 
7FFF385AEA24 
7FFF385B3D36 
7FFF385B68D0 
7FFF38EB3477 
7FFF398800CF 
 

может в этом всё дело?

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

Разобрался. Просто нужно было включить инструменты ядра. Т.к. я не знал как это делается, потому тупняки и были.

Итоговый скрипт имеет следующий вид

 

Скрытый текст

function CEButton1Click(sender)
dbk_initialize() 
dbk_useKernelmodeOpenProcess() 
dbk_useKernelmodeProcessMemoryAccess()
if (getProcessIDFromProcessName('notepad++.exe')==nil) then
messageDialog("Запустите игру...",-1,0)
return end
openProcess('notepad++.exe')
potok = createNativeThread(potokF)
end

function potokF(senderThread)
results=AOBScan("0000000050C3000050C300000000000000000000000000000000000050C3000050C30000"  ,"*W*C*X")
  if (results==nil) then
  messageDialog("Сигнатура не найдена...",-1,0)
  return end
count=stringlist_getCount(results)
for i = 0, (count-1), 1 do
address =stringlist_getString(results,i)
writeBytes(address,0xC0,0x5C,0x15,0x00,0x80,0xC3,0xC9,0x01)
end
   while true do
			writeBytes(address,0xC0,0x5C,0x15,0x00,0x80,0xC3,0xC9,0x01)
            sleep(250)
	end
end

Теперь работает нормально. Естественно мне не нравится концовка, с цикличной перезаписью. Это все топорщина. Сейчас буду запиливать сигнатуру на инструкцию.

 

P.s. Не знаю. правильно ли я сделал форматирование поста или нет. Тут с тегами черт ногу сломает.

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

Как правильно в Lua обьеденить 2 АА скрипта с АОБ сканом в один скрипт? Для наглядности вот кусок моего кода, сделанный не грамотно конечно, но рабочий:

Скрытый текст

function CEButton2Click(sender)
showMessage("Wait until the scan is complete. It may take several minutes!")
AAScript =
[[
label(attack_speed1)
registersymbol(attack_speed1)

aobscan(address,89 8C 87 68 0B 00 00)
address_1:
attack_speed1:
db 90 90 90 90 90 90 90
]]
autoAssemble(AAScript)
AAScript2 =
[[
label(attack_speed2)
registersymbol(attack_speed2)

aobscan(address,89 84 0A 68 0B 00 00)
address_2:
attack_speed2:
db 90 90 90 90 90 90 90
]]
autoAssemble(AAScript2)
showMessage("Ok!")
end

 

Опять таки, тут 2 раза АОБскан находит сигнатуру и пишет в переменную. Могу ли я сделать уникальную переменную на весь свой трейнер, что бы потом использовать ее? Ну к примеру, у меня есть еще одна кнопка, где снова таки приходится использовать подобный код, дабы вернуть измененную инструкцию. Приложение огромезное, и АОБскан зависает на немалую минуту. Но зачем же сканировать постоянно одно и то же, если мы уже проводим сканирование и записываем в переменную?

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

Спасибо Garik66, подсказал, объяснил. Продолжим дальше. Интересует теперь 2 вопроса:

1. Как узнать по средством Lua в какие адреса пишет инструкция? Вот в чем проблема, отладчик я подключить не могу, стоит защита и обойти ее у меня не получается. Вот я и думаю, сможет ли Lua каким то образом узнать значения регистра, высчитать адреса в которые идет запись и записать их в переменные?

2. Интересуют подробности работы с потоками. Т.к. везде одни и те же примеры, толком не пойму. А именно:

Скрытый текст

potok = createNativeThread(potokF) -- Так я создаю сам поток, что такое potok? Это переменная? Я могу называть ее как то иначе? Что такое potokF? и снова тот же вопрос.

function potokF(senderThread) -- Тут ясно, что это сама функция потока.
Ссылка на комментарий
Поделиться на другие сайты

Может кто подсказать как реализуется, а то, что то у меня не получается.

Сначала при помощи AOBscaner мы находим адрес. Записываем его в переменную. Теперь мне нужно отталкиваясь от этого адреса найти новые адреса. Ну т.е. добавить смещение. Я пытался так

someVAlue = "address + 4"

Пробовал разные вариации. И с одинарной кавычкой и с квадратными скобками и т.п. Но результат один: В нужный мне адрес запись не происходит! Запись в АА не предлагать, я это умею делать, но мне нужно произвести либо writeInteger, а в АА я этого не умею делать. Либо пересчитывать значение с Интеджера в байты, а это мне кажется задачка посложнее, чем задать смещение уже имеющемуся адресу.

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

13 minutes ago, pachela said:

Может кто подсказать как реализуется, а то, что то у меня не получается.

Сначала при помощи AOBscaner мы находим адрес. Записываем его в переменную. Теперь мне нужно отталкиваясь от этого адреса найти новые адреса. Ну т.е. добавить смещение. Я пытался так


someVAlue = "address + 4"

Пробовал разные вариации. И с одинарной кавычкой и с квадратными скобками и т.п. Но результат один: В нужный мне адрес запись не происходит! Запись в АА не предлагать, я это умею делать, но мне нужно произвести либо writeInteger, а в АА я этого не умею делать. Либо пересчитывать значение с Интеджера в байты, а это мне кажется задачка посложнее, чем задать смещение уже имеющемуся адресу.

 

Адрес в памяти, даже если и выглядит как страшные "0x12345678" - по сути число.

Если ты делаешь это через LUA то просто возьми и прибавь к нему смещение без кавычек:

offset = 4
someAddress = mainAddress + offset

Запись в память по этому адресу:

writeInteger(someAddress, 666)

 

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

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

 

Адрес в памяти, даже если и выглядит как страшные "0x12345678" - по сути число.

Если ты делаешь это через LUA то просто возьми и прибавь к нему смещение без кавычек:


offset = 4
someAddress = mainAddress + offset

Запись в память по этому адресу:


writeInteger(someAddress, 666)

 

Так тоже пробовал. И ничего не получается. И ошибку выдает, типа нельзя использовать в арифметическом уравнении нулевое значение. А происходит это все, я предполагаю, из-за того, что адрес найден и зарегистрирован в АА, а я его пытаюсь использовать в LUA.

Скрытый текст

function potokF(senderThread)
autoAssemble([[
aobscan(address3,90 5F 01 00 50 C3 00 01 00 50 C3 00 00)
registersymbol(address3)
]])
offset = 4
someAddress = address3 + offset
end

function CEButton6Click(sender)
writeInteger(someAddress, 50)
end

Или я ошибаюсь?

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

Смотри, ты регистрируешь этот адрес как символ, после чего можешь узнать его адрес через функцию getAddress:

Попробуй сделать так:

function potokF(senderThread)
autoAssemble([[
aobscan(address3,90 5F 01 00 50 C3 00 01 00 50 C3 00 00)
registersymbol(address3)
]])
offset = 4
someAddress = getAddress('address3') + offset
end

function CEButton6Click(sender)
writeInteger(someAddress, 50)
end

 

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

33 минуты назад, pachela сказал:

 А происходит это все, я предполагаю, из-за того, что адрес найден и зарегистрирован в АА, а я его пытаюсь использовать в LUA.

Предположение не верно, просто где-то ошибаешься,

Вот посмотри вчера записывал видео.

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

В 20.02.2017в17:12, srg91 сказал:

Смотри, ты регистрируешь этот адрес как символ, после чего можешь узнать его адрес через функцию getAddress:

Попробуй сделать так:


function potokF(senderThread)
autoAssemble([[
aobscan(address3,90 5F 01 00 50 C3 00 01 00 50 C3 00 00)
registersymbol(address3)
]])
offset = 4
someAddress = getAddress('address3') + offset
end

function CEButton6Click(sender)
writeInteger(someAddress, 50)
end

 

Вот с getAddress все работает замечательно. Для себя решил не делать лишние переменные типа offset, а сразу в присвоении переменной "someAddress" прибавлять нужное число. Не знаю, возможно это чем то чревато, но у меня работает. Теперь стал другой вопрос: В АА, в АОБскан нужно теперь вписать вместо адреса переменную, но переменной присваивается значение в LUA и когда я пишу 

Скрытый текст

function potokF(senderThread)
autoAssemble([[
aobscan(address3,SignaS)
registersymbol(address3)
]])
end

 

Естественно ничего не происходит... Может мне после присваивания переменной значения нужно как то регистрировать эту переменную? Ну как это делается в АА, registersymbol

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

Очень интересный вопрос:

Можно ли готовый ЛУА скрипт из СЕ, использовать вне СЕ? Ну т.е. взять LUA и переписать начисто в него весь скрипт и скомпилировать не в СЕ, а в LUA?

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

43 минуты назад, pachela сказал:

Очень интересный вопрос:

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

На форуме этот вопрос  поднимался неоднократно и многие ребята в этом продвинулись.

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

Только что, Garik66 сказал:

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

На форуме этот вопрос  поднимался неоднократно и многие ребята в этом продвинулись.

Ты прав от части. Но так как я любознателен, меня интересует не только защита, а еще и возможность использовать инструменты СЕ в других языках. Так как я уже немного понял суть LUA, будет логично, начать разбираться именно с этого языка. Пока что меня не интересуют развернутые возможности, меня интересует краткий ответ, которого я не нашел в гугле, можно ли инструменты СЕ использовать в сторонних языках? Главное меня интересует это использование режима ядра, драйвера СЕ.

Просто: Да\НЕТ и линк на почитать.

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

  • 2 недели спустя...

Всплыла новая проблема, реализовал я вот такую вот функцию:

Скрытый текст
Цитата


autoAssemble([[
aobscan(address3,90 5F 01 ?? 50 C3 00 01 00 50 C3 00 00)
registersymbol(address3)
]])

 

 

Как мне записать в переменную значение четвертого байта? Просто раньше эта сигнатура не менялась и я все время выключал функцию заменяя NOP'ами, а включал тупо вернув значение байт. Теперь 4 байт каждый запуск приложения изменяется, так вот и вопрос, как записать в переменную либо значение 4 байта, либо значение последовательно какогото количества байт?

П.с. На ногах уже больше 30 часов, мысли заплетаются, если не понятен вопрос, завтра уточню.

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

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

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

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