Русское сообщество по скриптингу

Проверка на наличие OpenGl32.dll в игровой папке

Новые плагины для AMX Mod X, которые были добавлены в базу плагинов нашего форума. Плагины еще не утвеждены администратором/модератором.

Модератор: Leonidddd

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

Данный раздел форума служит для добавления новых плагинов в базу нашего форума. После того, как администратор/модератор утвердит плагин, он будет перемещен в раздел "Утвежденные плагины".

Правила при добавлении новых плагинов:

1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. Обязательно выкладывайте исходник sma плагина. Запрещено выкладывать amxx файл.
4. Обязательно указывайте настоящих авторов плагина, если вы использовали чьи-то наработки или функции, указывайте их авторов в сообщении.
5. Необходимо заполнять детальную информацию о плагине (версию, настройки, используемые модули, список изменений и другую).

Проверка на наличие OpenGl32.dll в игровой папке

Сообщение AlexRussIp » 18 фев 2014, 23:52

Авторы: AlexRussIp
Версия: 1.0

Описание:
Плагин работает на старых клиентах, в обновленном steam-e выкидывает всегда.

Для работы:
1) Установить на сервере квару mp_consistency "1"
2) Удалите в игровой папке сервера, если имеется, файл opengl32.dll
3) Если на сервере установлен плагин античита CSF, то в нем должна быть отключена опция проверки файлов cvar: csf_ac_filescheck "0" в конфиге античита: csf_ac_main.cfg
4) Отключите другие планигы с проверкой на соответствие файлов.


Похожий эффект, что и в плагине, можно получить с помощью CSF античита, для этого добавьте в конфиг csf_ac_filescheck.cfg файл для проверки ../opengl32.dll, Если для проверки указываешь два файла находящиеся не в папке cstrike, а выше, например, ../valve/cl_dlls/particleman.dll и ../opengl32.dll, то клиент не проходит проверку.

Используемые модули:
Cstrike


Хотелось получить плагин, который проверяет наличие у клиента файла opengl32.dll )) Что-то на подобии вот этого Вы должны зарегистрироваться, чтобы видеть ссылки.
Кстати, протестировал его, он также ложно срабатывает и не пускает обновленный steam.

[pawn]
  1.  #include <amxmodx>

  2.  

  3. #define PLUGIN "Is_OpenGL"

  4. #define VERSION "1.0"

  5. #define AUTHOR "AlexRussIp"

  6.  

  7.  

  8. new checkfile[64] = "../opengl32.dll"

  9. public plugin_init()

  10.         {

  11.            register_plugin(PLUGIN, VERSION, AUTHOR)

  12.         }

  13.        

  14. public plugin_precache()

  15.         {

  16.     force_unmodified(force_exactfile, {0,0,0},{0,0,0}, checkfile) //Если файл на сервере отсутствует, а у клиента имеется, то он передается функции inconsistent_file

  17.         }

  18.                        

  19. public inconsistent_file(id, const filename[], reason[64])

  20.         {

  21.         if(equali(filename,checkfile)) //Проверяем имя некорректного файла, если opengl32.dll записываем причину, по которой выкидывает с Сервера

  22.                 {

  23.                 formatex(reason, 63,"Удалите %s из игровой папки", filename)

  24.                 }

  25.     return PLUGIN_CONTINUE

  26.         }

  27.        
[/pawn]

Может кто-нибудь знает как сделать перехват функции force_unmodified, через модуль Orpheu
Она же при сравнении двух файлов должна получать размер с клиента или md5 проверочную сумму.
Если ее как-то перехватить, потом можно будет базу всех известных opengl32.dll сделать и проверять не по одному файлу, как это реализовано во многих Opengl Detect плагинах (Вы должны зарегистрироваться, чтобы видеть ссылки.), а сразу по всей базе... Еще плюс - не надо хранить OpenGl файлы у себя на сервере.

DJ_WEST, в этом топике объяснял про перехват на уровне amxmoda Вы должны зарегистрироваться, чтобы видеть ссылки., но в моем случае придется лезть в движок. Подскажите что и как, в каком направлении копать?
Вот код функции force_unmodified из исходников amxmodx.cpp
[pawn]
  1.  

  2. static cell AMX_NATIVE_CALL force_unmodified(AMX *amx, cell *params)

  3. {

  4.     int a;

  5.    

  6.     cell *cpVec1 = get_amxaddr(amx, params[2]);

  7.     cell *cpVec2 = get_amxaddr(amx, params[3]);

  8.    

  9.     Vector vec1 = Vector((float)cpVec1[0], (float)cpVec1[1], (float)cpVec1[2]);

  10.     Vector vec2 = Vector((float)cpVec2[0], (float)cpVec2[1], (float)cpVec2[2]);

  11.    

  12.     char* filename = get_amxstring(amx, params[4], 0, a);

  13.  

  14.     ForceObject* aaa = new ForceObject(filename, (FORCE_TYPE)((int)(params[1])), vec1, vec2, amx);

  15.  

  16.     if (aaa)

  17.     {

  18.         if (stristr(filename, ".wav"))

  19.             g_forcesounds.put(aaa);

  20.         else if (stristr(filename, ".mdl"))

  21.             g_forcemodels.put(aaa);

  22.         else

  23.             g_forcegeneric.put(aaa);

  24.  

  25.         return 1;

  26.     }

  27.  

  28.     return 0;

  29. }

  30.  

  31.  

  32. class ForceObject

  33. {

  34.     String filename;

  35.     FORCE_TYPE type;

  36.     Vector mins;

  37.     Vector maxs;

  38.     AMX* amx;

  39. public:

  40.     ForceObject(const char* n, FORCE_TYPE c, Vector& mi, Vector& ma, AMX* a) : filename(n), type(c), mins(mi), maxs(ma), amx(a) {}

  41.  

  42.     inline const char* getFilename() { return filename.c_str(); }

  43.     inline AMX* getAMX() { return amx; }

  44.    

  45.     Vector& getMin() { return mins; }

  46.     Vector& getMax() { return maxs; }

  47.    

  48.     inline FORCE_TYPE getForceType() { return type; }

  49. };
[/pawn]
Последний раз редактировалось AlexRussIp 19 фев 2014, 20:04, всего редактировалось 5 раз(а).
Аватара пользователя
AlexRussIp
 
Сообщения: 6
Зарегистрирован: 10 дек 2013, 21:46
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6

Re: Проверка на наличие OpenGl32.dll в игровой папке

Сообщение Safety1st » 22 фев 2014, 11:51

Информация по вопросу прекэша - не для паблика: она же позволит кулхацкерам обходить детект файлов. Никто в здравом уме вам помогать здесь не будет. И в привате аналогично - неизвестно, что вы за человек.


AlexRussIp писал(а):
Safety1st писал(а):...Перехватывать функции движка можно только модулем.

А можно поподробней чем и как? Это можно через IDA Pro?

Насколько я понимаю, IDA позволяет изучать движок, находить названия функций, offset'ы. Пример перехвата модулем - Orpheu.
GoldSrc Gaming Community
Аватара пользователя
Safety1st
 
Сообщения: 1958
Зарегистрирован: 08 окт 2011, 05:41
Откуда: Moscow
Благодарил (а): 1690 раз.
Поблагодарили: 933 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: Проверка на наличие OpenGl32.dll в игровой папке

Сообщение AlexRussIp » 25 фев 2014, 13:07

AlexRussIp писал(а):1) Допустим для начала файл кешируется на сервере типо precache_general() и проверочная сумма отправляется клиенту, клиент принимает проверочную сумму и путь до файла, сравнивает со своим файлом, затем посылает ответ серверу в виде: true(файлы одинаковы), false(различаются). В этом случае необходимо поймать функцию формирующую отправочное сообщение и подставлять в нее по очереди хеш суммы разных opengl32.dll (утрированно:new dirFilename[64] = "../opengl32.dll"; function CheckSum(dirFilename,szFile);) И каждый раз перехватывать ответный бит...

2) Если же для проверки сервер сначала делает запрос для получения хеш суммы файла с клиента, то все проще: Перехватываем в ответном сообщении эту хеш сумму и сравниваем с массивом хешей всех opengl32.dll

Выяснил, что используется второй вариант. Также он более защищенный, так как в первом, можно постоянно возвращать единицу в ответном сообщении и заходить на сервер с калькулятора))))
Аватара пользователя
AlexRussIp
 
Сообщения: 6
Зарегистрирован: 10 дек 2013, 21:46
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6

Пред.

Вернуться в Добавленные новые плагины

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2