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

mrPTyshnik

Пользователи
  • Постов

    79
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Сообщения, опубликованные mrPTyshnik

  1. 30 минут назад, maks17990 сказал:

    А подскажите где мне найти mono.dll пропатченный на эту версию (2017.4.2f2)

    я никогда не юзал dnSpy для отладки игр на Unity. CE(mono dissector) + анализ ASCHARP.dll вот и все.

    Попробуй сравнить уже запатченную и чистую либу mono. 

    • Плюс 1
  2. Спойлер
    
    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;
    }

     

     

     

    лучше свое написать
     

     

     

  3. 1 час назад, Gonzo сказал:
    
       for (int i = 0; i < myStringleft.Count(); i++)
        {
            dictionary.Add(myStringleft[i], myStringRight[i]);
        }

    не понимаю в чем тут проблема? значение-да, возможна проблема
    

     

    если ключ myStringleft уже существует, то вылетит ексепш(лучше проверять через TryGetValue)

    Если же ключ никак не сможет повториться - то оставь как есть

  4. Что лично мне бросилось в глаза:

    закоменченный код(с зеродеем вспомнил, так же было в сорцах на сиес сурс): 
     //code

     //code

     //code

     

     

    /*

     code

     code

     code

    */

     

    for (int i = 0; i < myStringleft.Count(); i++)
        {
            dictionary.Add(myStringleft[i], myStringRight[i]);
        }


    DrlNYM6hvLYLO2.png

    Маловероятно, но ключ(Stringleft) уже может существовать

     

     

    Не понимаю зачем было писать функцию "CheckString", если можно было воспользоваться string.CompareTo("0" - равны, "-1" - не равны)

    KAxVPMxhMydzZm.png

     

     

     

     

    бест кратчесы:

    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;
                }

     

    KAgklJeu4Q1oZA.png

     

     

    еще одна особенность которая занимает больше кода:

    int temp = null;

    temp = 123;

     

    можно int temp = 123; - ну это кому как
     

    а что за софт?

  5. Если из главного потока приложения, которое уже инициализировало директ вызывать еще один раз CreateDevice с верными параметрами, то тебе все равно вернется INVALID_CALL
    Инжект в игру, в точке входа либы - CreateDevice

    так и определять
    18756_0-500x500.png

  6. В 30.04.2018 в 00:14, DieVis сказал:

    Спасибо.

    Есть ещё Reflexil плагин для ilspy, на гитхабе v2.2, работал\копался кто с этим плагином? Что он может?

    По поводу "пересобрать" на "ункновунчит дот мне" чит.длл делали в том году, через инъектор))

    Очень часто работаю с Reflexil и ILSpy, dnSpy юзаю онли для дебага нетсофта
    Вариант с инжектом через Mono с подгрузкой своей ассамблеи вполне прокатит, но нужен ли он в такой игре? Чек на хеш файлов вроде нету, игра отлично запускается после шаманства с ассамблейкой
     

    Видимо я слишком туп, тоже отсутствует панелька на которой можно выставлять "понравилось"/+реп и тд -_-

     

  7. 18 минут назад, partoftheworlD сказал:

    А что запрещает патчить клиент? EAC никогда не пользовался(я больше по ваку, пб и фф), но мне кажется любую проверку отключить можно, генерацию/проверку хеша файла/функций подделать. А больше и вариантов проверить валидность файла сходу не могу вспомнить.

    Могу предположить что там одной проверкой файлов на хеш не обойдется))
    Нам необходимо полностью эмулировать реального клиента запущенного из под стима с еаком.  

  8. Дядя, день добрейший.

    Начну с небольшой истории, так как шарю за рузт

    Изначально первыми в ру коммюнити 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)
    :mellow:

  9. 31 минуту назад, mrPTyshnik сказал:

    ты пишешь из юзермода, я предлагаю читать и писать из кернельленда
     

    хотя, по словам @JustHack там и обычный hijack не палится. Так зачем тогда лезть в нулевое кольцо, если и в третьем неплохо живется
    А касательно драйвера MRAC: могу предположить что там obRegisterCallback, не откроешь процесс через стандартный OpenProcess безпалевно

  10. 4 часа назад, npc сказал:

    Мрак это и есть драйвер. И он не даст так просто читать или писать. Вот у меня есть адрес, где нужно затереть 2 байта. Как только затираю, исключение системой защиты. И на след день бан п20 на этом аке. А если еще раз попробовать затереть, то сразу п20.

    ты пишешь из юзермода, я предлагаю читать и писать из кернельленда
     

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

    • Плюс 1
×
×
  • Создать...

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

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