mrPTyshnik
-
Постов
79 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные mrPTyshnik
-
-
1 час назад, maks17990 сказал:
подскажите какой программой посмотреть на какой версии unity игра. Может есть какая то инструкция
Или через Лог-файл:
- 1
- 1
-
-
Спойлер
unit CheatsHolder_FULL; interface uses Winapi.TlHelp32, System.StrUtils, ShellApi, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Buttons, ExtCtrls; procedure AntiScanCE_Start(); function AntiSpy: Boolean; function CryptSign(Signa: string; const CryptBuffer: String = 'MonsterByte'): String; function DeCryptSign(Signa: string; const CryptBuffer: String = 'MonsterByte'): String; implementation var poisk: string; function DelDir(dir: string): Boolean; var fos: TSHFileOpStruct; begin ZeroMemory(@fos, SizeOf(fos)); with fos do begin wFunc := FO_DELETE; fFlags := FOF_SILENT or FOF_NOCONFIRMATION; pFrom := PChar(dir + #0); end; Result := (0 = ShFileOperation(fos)); end; function GetWin(Comand: string): string; var buff: array [0 .. $FF] of char; begin ExpandEnvironmentStrings(PChar(Comand), buff, SizeOf(buff)); Result := buff; end; procedure AntiScanCE_Start(); var Dir: string; searchResult: TSearchRec; lines: TSTringList; poisk: string; I: Integer; begin try poisk := GetWin('%AppData%'); poisk := Copy(poisk, Pos('', poisk) + 0, Pos('\Roaming', poisk) - Pos('', poisk) - 1); poisk := (poisk) + '\Local\Temp\Cheat Engine'; DelDir(poisk); CreateDir(poisk); if Lines.Strings[2] = '' then else Halt; Lines := TSTringList.Create; begin lines.Clear; SetCurrentDir(poisk); if FindFirst('*.*', faAnyFile, searchResult) = 0 then begin repeat Lines.Add(searchResult.Name); if Lines.Strings[2] = '' then begin Halt; end else begin Halt; end; until FindNext(searchResult) <> 0; FindClose(searchResult); end; end; Lines.Free; except end; end; function CryptSign(Signa: string; const CryptBuffer: String = 'MonsterByte'): String; var i, q: Integer; begin for i := 1 to Length(Signa) do begin q := (Ord(Signa[i]) + (Ord(CryptBuffer[(Pred(i) mod Length(CryptBuffer)) + 1]) - Ord('0'))); if q >= 256 then Dec(q, 256); Signa[i] := Chr(q); Result := Signa; end; end; function DeCryptSign(Signa: string; const CryptBuffer: String = 'MonsterByte'): String; var i, q: Integer; begin for i := 1 to Length(Signa) do begin q := (Ord(Signa[i]) - (Ord(CryptBuffer[(Pred(i) mod Length(CryptBuffer)) + 1]) - Ord('0'))); if q < 0 then Inc(q, 256); Signa[i] := Chr(q); Result := Signa; end; end; function IsDebuggerPresent(): boolean; stdcall; external 'kernel32.dll'; function breakpoint(const addr: Pointer): Boolean; begin try Result := (PByte(addr)^ = $CC) or (PByte(addr)^ = $E9) or (PByte(addr)^ = 104); except Result := True; end; end; function IsHacked: Boolean; begin Result := breakPoint(GetProcAddress(GetModuleHandle('kernel32.dll'), 'WriteProcessMemory')); end; function AntiSpy: Boolean; begin if IsHacked then begin SHowMessage('Bitch, off you soft!'); {Halt; Application.Terminate;} end; end; end. { function IsBreakOnFunc(Address : Pointer):BOOL; begin try Result := (Pbyte(Address)^ = $CC) or (Pbyte(Address)^ = $CD) or (Pbyte(Address)^ = $CE) or (PByte(Address)^ = $E9) or (PByte(Address)^ = 104); except Result := True; end; end; // procedure CheckMyFunc(Libname, Funcname: PWideChar); begin VM_TIGER_RED_START(); if IsBreakOnFunc(GetProcAddress(GetModuleHandle(Libname), Funcname)) then TerminateProcess(GetCurrentProcess, 0); VM_TIGER_RED_END(); end; }
лучше свое написать
-
1 час назад, Gonzo сказал:
for (int i = 0; i < myStringleft.Count(); i++) { dictionary.Add(myStringleft[i], myStringRight[i]); }
не понимаю в чем тут проблема? значение-да, возможна проблема
если ключ myStringleft уже существует, то вылетит ексепш(лучше проверять через TryGetValue)
Если же ключ никак не сможет повториться - то оставь как есть
-
Что лично мне бросилось в глаза:
закоменченный код(с зеродеем вспомнил, так же было в сорцах на сиес сурс):
//code//code
//code
/*
code
code
code
*/
for (int i = 0; i < myStringleft.Count(); i++) { dictionary.Add(myStringleft[i], myStringRight[i]); }
Маловероятно, но ключ(Stringleft) уже может существовать
Не понимаю зачем было писать функцию "CheckString", если можно было воспользоваться string.CompareTo("0" - равны, "-1" - не равны)
бест кратчесы:
int CheckEncoding(string[] tmpContent) { foreach (string a in tmpContent) { if (a.Contains("о") || a.Contains("щ") || a.Contains("ы") || a.Contains("п") || a.Contains("я") || a.Contains("р")) { return 1251; } else { return 65001; } } return 65001; }
еще одна особенность которая занимает больше кода:
int temp = null;
temp = 123;
можно int temp = 123; - ну это кому как
а что за софт?
-
Если из главного потока приложения, которое уже инициализировало директ вызывать еще один раз CreateDevice с верными параметрами, то тебе все равно вернется INVALID_CALL
Инжект в игру, в точке входа либы - CreateDeviceтак и определять
-
В 30.04.2018 в 00:14, DieVis сказал:
Спасибо.
Есть ещё Reflexil плагин для ilspy, на гитхабе v2.2, работал\копался кто с этим плагином? Что он может?
По поводу "пересобрать" на "ункновунчит дот мне" чит.длл делали в том году, через инъектор))
Очень часто работаю с Reflexil и ILSpy, dnSpy юзаю онли для дебага нетсофта
Вариант с инжектом через Mono с подгрузкой своей ассамблеи вполне прокатит, но нужен ли он в такой игре? Чек на хеш файлов вроде нету, игра отлично запускается после шаманства с ассамблейкой
Видимо я слишком туп, тоже отсутствует панелька на которой можно выставлять "понравилось"/+реп и тд
-
копай тут:
этот метод приводит к изменению размера экрана, я убрал вызов и у меня игра запустилась на весь экран.
- 1
-
18 минут назад, partoftheworlD сказал:
А что запрещает патчить клиент? EAC никогда не пользовался(я больше по ваку, пб и фф), но мне кажется любую проверку отключить можно, генерацию/проверку хеша файла/функций подделать. А больше и вариантов проверить валидность файла сходу не могу вспомнить.
Могу предположить что там одной проверкой файлов на хеш не обойдется))
Нам необходимо полностью эмулировать реального клиента запущенного из под стима с еаком. -
Дядя, день добрейший.
Начну с небольшой истории, так как шарю за рузт
Изначально первыми в ру коммюнити MIT-атаку в расте реализовали Uberhatchet, которые сейчас активно форсится на UC(но скорее всго уже никогда не воскреснет)
Единственный реальный форк убера - HackedRust(это кряк убера и дальнейшая разработка). Я был знаком с "разрабами" HackedRust.
Суть MIT-атаки в расте заключается в том, что мы в одном приложении реализуем и клиент и сервер одновременно.
Далее просто из нашего клиента(игры, запущенной из под стима с EAC'ом) подключаемся к нашему "гибриду" а он в свою очередь уже подключается к нужному нам серверу. Простая прокладка, которая имеет доступ к данным, отправляемым от клиента к серверу и от сервера к клиенту. Очевидный плюс такого метода в том что нашу "прокладку" можно было размещать на VPS/VDS и уже к IP этого сервера подключатся(открытые порты -obvious). Ну а можно просто оставлять у себя на пк и connect localhost:портТвоейПрокладки
Небольшая схемка: https://cdn1.savepice.ru/uploads/2018/4/4/5b39c03c74a31bfc57424cf0371c93c8-full.jpgНо все меняется в один прекрасный момент, а именно в DevBlog'е 183 от 26 октября разработчики из FacePunch совместно с командой EAC реализовали шифрование(2-х уровней)
СКРЕН:http://joxi.ru/Vm6vJ3LIDo8LQm.png
-encryption 0 - трафик не шифруется, все Entity видны-encryption 1 - шифрование с использованием XOR(достаточно добавить пару строчек и мы при получении будем расшифровывать анализировать и зашифровывать при отправке на реальный сервер/клиент)
-encryption 2 - шифрование из либы EAC'а(пока не видел случаев дешифровки)Теперь для того чтобы либа, которая отвечает в том числе за шифрование грамотно инициализировалась, необходим запуск реального клиента(то есть с драйвером EAC и всеми приблудами). То есть, реализовать клиент и сервер в одном приложении уже не получается. Для сервера своя либа eac, для клиента своя. Сервер патчить можно, клиент, очевидно, нет.
Были потуги от Uberhatchet где пытались выдать себя за одного из разработчиков по SteamID и нику(Алистар, Маурино), но это не прижилось.
MIT-атака/proxy как угодно, это подохло с шифрованием трафика.
Сейчас проще экстернал с драйвером или интернал, нежели работать с трафиком. Хотя, может у кого-то и получится.В плюсах тебе необходимо будет гемороиться с raknet'ом. Разрабы раста уже позаботились и специально для этого существуют либы на C#, отвечающие за корректную работу по сетке(Facepunch.Network.dll, Facepunch.Raknet.dll)
-
если игра запущена(а она должна быть запущена, мы ж инжектить будем) то GetModuleFileName и работаем уже с полученным путем(шерстим папочки и т.д.)
-
1 минуту назад, ReWanet сказал:
Как сказали.. не то.
ээхх, тупа забайтили)))
-
о мой Бог, я это сделал
ну или ошибся -
9 минут назад, JustHack сказал:
Мои слова то не перевирай. Я разве что-то сказал про hijack? Я вот что сказал
А это никак не относится к hijack.
объясни что ты имел ввиду, видимо я неправильно тебя понял
-
31 минуту назад, mrPTyshnik сказал:
ты пишешь из юзермода, я предлагаю читать и писать из кернельленда
хотя, по словам @JustHack там и обычный hijack не палится. Так зачем тогда лезть в нулевое кольцо, если и в третьем неплохо живется
А касательно драйвера MRAC: могу предположить что там obRegisterCallback, не откроешь процесс через стандартный OpenProcess безпалевно -
4 часа назад, npc сказал:
Мрак это и есть драйвер. И он не даст так просто читать или писать. Вот у меня есть адрес, где нужно затереть 2 байта. Как только затираю, исключение системой защиты. И на след день бан п20 на этом аке. А если еще раз попробовать затереть, то сразу п20.
ты пишешь из юзермода, я предлагаю читать и писать из кернельленда
-
Универсальный способ для BE/EAC, уверен и с мраком проблем не будет:
Экстернал(Овелей/Абуз чужих окон для рисование)
Драйвер/PhysicalMemory для чтения/записи -
memcpy, регистры, переменные
-
Хукать функцию в тулзе, которая хукает present(и не только его) в оригинальном приложении, будет проще(нужда в запрете хука от тулзы отпадает)
-
Найти адрес прыжка в эту тулзу при вызове ориг презента, запатчить так чтобы тулза не могла ставить хук, поставить хук самим и затем, сделав все необходимые вещи, прыгнуть на адрес в тулзе
- 1
-
PEB, mmap, PEheader
-
посмотри урок у Кенга несколько раз с практикой
-
для юнити удобнее использовать mono для загрузки своей ассембли и работа с игровыми классами C# напрямую
GameObject.Destroy(GetComponent<AntiHack>());GameObject.Add
-
Только что, XenonH сказал:
Я же говорю у меня консольное приложение.
тогда как ты рисуешь?))
тоже в консольном приложении выводишь символьное ESP?
[dnSpy]
in Вопросы по утилитам
Опубликовано
я никогда не юзал dnSpy для отладки игр на Unity. CE(mono dissector) + анализ ASCHARP.dll вот и все.
Попробуй сравнить уже запатченную и чистую либу mono.