Помогите с написанием анти чита...

Тема в разделе "WASM.BEGINNERS", создана пользователем f1redArk, 16 июл 2008.

  1. f1redArk

    f1redArk Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    34
    В общем, пишу тут в первый раз, рад буду услышать предложения, критику и т п.
    Хочу написать анти чит для игры КС. Язык - С++. Для начала хочу сделать защиту процесса hl.exe от записи + завершать процессы читов, если они запущенны в данный момент. Подскажите свои идеи как по анти читу в целом, так и по тем, моментам, которые я озвучил выше. Как я понял лучше всего использовать сплайсинг функций. Но тут встаёт вопрос, допустим, перехватил я ZwCreateThread, как мне узнать, что запущен чит, т.е. как из функции ZwCreateThread вытащить полное имя исполняемого файла. Далее опять же если в функции ZwCreateThread полное имя файла = hl.exe, то надо установить защиту этому процессу, т.е. сообщить всем моим инжектируемым длл во всех процессах, что теперь нельзя давать писать в этот процесс. И последнее, перехватим, ZwWriteVirtualMemory, опять же надо узнать из этой функции полное имя файла процесса, куда она хочет писать, и если он = hl.exe то запретить, вот как узнать это имя... Очень внимательно выслушаю все предложения и ответы, спасибо :derisive:
     
  2. toto

    toto New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2008
    Сообщения:
    36
    есть множество античитов например таких myac, я думаю погонять их под идой труда не составит
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    f1redArk
    Вот никак не пойму, где то в сервисе NtCreateThread имя модуля ты видел ?
    И что за защита такая, которая использует перехват юзермодных заглушек ?
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Clerk
    Это новейшая метода, перехват юзермодных функций и определение чита по имени, взломать пока никому не удалось.
     
  5. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
  6. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    toto, они закриптованы.
    f1redArk, узнать откуда вызвано моно очень легко по хендлу процесса передаваемого как параметор, у ZwWriteVirtualMemory - 1-й параметор, у ZwCreateThread - 4-й параметор.
    Мне кажеться надо ставить sdt хуки, чтоб как-то продержаться на плаву.
    А еще тебе придется вести базу с чексуммами читов, и частенько их обновлять.
    Неблагодарная и не выгодная затея. Ибо если он даже станет популярным, те чуть ни ли каждый день придется новые версии выпускать как sxe injector. Читописатели не дремлят :)
     
  7. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Например такая ситуация, я играю в CS с читом, и скажи зачем мне устанавливать твой античит?

    Поубивать читы это легко, ты лучше подумай над тем как сделать чтобы на сервер не пускало если не запущен античит;)
     
  8. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    2FED
    в этом есть проблемма?
     
  9. f1redArk

    f1redArk Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    34
    2 2FED Анти чит для сети, без него не пустит на сервер сети, а в нете пинг большой, так что волей неволей прийдётся.

    Чтобы на сервер не пускало так же легко, можно либо написать плагин на pawn для amxx, и анти чит клиент с ней будет обмениваться сообщениями, либо .dll для сервера, опять же для той же цели
     
  10. f1redArk

    f1redArk Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    34
    Я не видел, я говорю что надо перехватить эту функцию, в ней есть ID просесса, по нему надо вычислить имя файла. Вот я и спросил как. Защита очень простая, все читы инжектятся в процесс игры и меняют параметры, если перехватить функции, это предотвратит запись в процесс игры => читы не будут работать
     
  11. f1redArk

    f1redArk Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    34
    Я спросил реально интересующий вопрос, если охота посмеяться, bash.org.
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    f1redArk
    Лан, не обижайся :)
    NtQuerySystemInformation(ProcessImageFileName).
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Вот лови код: http://clerk.cih.ms/upload/misc/psquery.rar
     
  14. f1redArk

    f1redArk Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    34
    Я не обижаюсь. С ассембером если честно не очень, только начал учить. Может быть всё таки ZwQueryInformationProcess?
     
  15. f1redArk

    f1redArk Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    34
    В общем попробывал такой код для получения полного имени файла процесса через его PID:

    Код (Text):
    1. #include "NativeApi.h"
    2. #include <conio.h>
    3. #include <stdio.h>
    4.  
    5. ZwQueryInformationProcessPtr Ptr;
    6.  
    7. int main()
    8. {
    9.         ZwQueryInformationProcessPtr Ptr;
    10.         DWORD adr_ZwQueryInformationProcess;
    11.         DWORD PID;
    12.         HANDLE PH;
    13.         NTSTATUS Res;
    14.         PROCESS_BASIC_INFORMATION ProcInfo;
    15.  
    16.  
    17.         adr_ZwQueryInformationProcess = (DWORD)GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwQueryInformationProcess");
    18.  
    19.  
    20.         if(!adr_ZwQueryInformationProcess)
    21.         {
    22.                 printf("\nError GetProcAddress");
    23.                 getch();
    24.                 return 1;
    25.         }
    26.  
    27.         printf("Input proccess ID: ");
    28.         scanf("%U", &PID);
    29.  
    30.         Ptr = (ZwQueryInformationProcessPtr)adr_ZwQueryInformationProcess;
    31.  
    32.         PH = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, PID);
    33.  
    34.         if(!PH)
    35.         {
    36.                 char buff[128];
    37.  
    38.                 strcpy(buff, SysErrorMessage(GetLastError()).c_str());
    39.                 CharToOem(buff, buff);
    40.  
    41.                 printf("\n%s: %s", "Error: ", buff);
    42.                
    43.                 getch();
    44.                 return 0;
    45.         }
    46.  
    47.  
    48.         Res = Ptr(PH, ProcessBasicInformation, &ProcInfo, sizeof(PROCESS_BASIC_INFORMATION), NULL);
    49.  
    50.         if(Res == STATUS_INFO_LENGTH_MISMATCH)
    51.         {
    52.                 printf("\n\nError STATUS_INFO_LENGTH_MISMATCH");
    53.                 getch();
    54.                 return 0;
    55.         }
    56.  
    57.  
    58.  
    59.         if(Res == STATUS_SUCCESS)
    60.         {
    61.                 printf("\n\nName: %s", String(ProcInfo.PebBaseAddress->ProcessParameters->ImagePathName.Buffer).c_str());
    62.                 getch();
    63.                 return 0;
    64.         }
    65.  
    66.         getch();
    67.  
    68.         return 0;
    69. }
    Если указан ИД текущего процесса, то выводит на экран норм имя файла, а если какого то другого, то ошибка выполнения: Project PProcInf.exe raised exception class EAccessViolation with message 'Access violation at adress 0040142B. Read of address 00001E3C'. Подскажите где трабл :'(
     
  16. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    f1redArk, по вышеперечисленным функциям в качестве параметра передается не pid а хендл процесса.
    Быстрее вот так:
    Код (Text):
    1. invoke ZwQueryInformationProcess,hProcess,27,addr buffer,MAX_PATH*2,0
     
  17. f1redArk

    f1redArk Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    34
    неполучается, непонимаю, какой надо размер передавать в функцию, и как выделять память под UNICODE_STRING и надо ли её вообще выделять... Приведите пожалуйсто пример на С, ZwQueryInformationProcess(27)... Целый день пробую, один бред получается...
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    f1redArk
    Ты чё дурак ?
    Я же скомпиленый модуль дал.
     
  19. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    f1redArk
    А почему ты думаешь что запрет записи в процесс спасёт от читов?
    А как быть с теми, которые например подменяют DLL'ки?
    Я как-то видел кривые дрова для видяхи, в которых не правильно считались нормали к текстурам и не правильно определялось видит наблюдатель эту текстуру или нет, из-за этого часть текстур были прозрачными.
     
  20. f1redArk

    f1redArk Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    34
    Сам ты дурак, читать надо внимательно, я ассемблер не знаю.