Что нового

[Оборонпром] варианты проверки валидности клиента

nowost

Знающий
Сообщения
178
Репутация
17
Приветствую. Хотелось бы спросить у общественности, есть ли какие то "стандартные" методы проверки валидности копии клиента? Получаю уникальный айдишник машины, есть клиент серверная проверка ключа бота и сопоставление с айдишником но как правильно сделать проверку в клиентском скрипте ?
например отправляю запрос на сервер и получаю ответ псевдокод:
Код:
.....
$tData=Server.Response
.....
If Not $tData='Good' then exit

т.е если ответ сервера неправильный (проверка данных не прошла) то выходим из программы.
Учитывая простоту декомпиляции кода, есть ли какие то "продвинутые" варианты проверок ? Потому что можно прикрутить и шифрование, вот как здесь писал Belfigor http://autoit-script.ru/index.php?topic=15833.msg98118#msg98118 но можно взять и подставить нужное значение в $tData и обойти всю защиту.
еще как вариант проверять в рабочем цикле по таймеру
Код:
while true
...основной цикл...
If $Time >= $TimeDiff then 
.....проверка...
endif
wend

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

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
от декомпиляции никак не спасешься, захотят сломают. Защищаться нужно от брутфорсов, перехватов пакетов и тд и тп. Вошьешь динамическое шифрование с коротким сроком жизни ключа, и те кто смогут сломать его путем декомпиляции там, реверс инжиниринга, 99.99% что в игры уже не играют.
+ конечно выносить за пределы клиента ключевые моменты логики. А с помощью функций Eval, Execute и Call, ты можешь за пределы клиента выносить вообще ключевые названия переменных, формулы и названия функций.

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

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

nowost

Знающий
Сообщения
178
Репутация
17
а можно небольшой пример как можно вынести скажем какую то функцию из скрипта, на сервер ? И чтобы при старте скрипт её подхватил
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
nowost
Хотел было вам расписать все подробно, только вот смысл? Обсуждали это десятки раз.

Для защиты от рядового "недохакера" это будет лишним, что на счет более опытных ребят - бессмысленно. Количество потраченного вами времени на вынос/защиту серверных данных будет пропорционально затраченному времени у взломщика следующим образом: HOUR / 0.0001*HOUR;

Если ваш сервер мощный и с хорошим соединением, то можете поэкспериментировать с полным, дистанционным интерпретированием. Вот это будет иметь реальный толк ( если конечно скорость выполнения не так важна ). У меня даже наработки имеются, но поделиться ими не могу, уж слишком они "вредные" :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
;старт скрипта

$func_to_call = "qwqw"
$param1 = "ewew"
$param2 = "erer"
;верхние три переменные заданы заранее лишь в демонстрационных целях ну и для какой-нибудь отладки

If Not IsDeclared("mob_lvl") Then MsgBox(0,0,"Переменная mob_lvl не определена")
If Not IsDeclared("radius") Then MsgBox(0,0,"Переменная radius не определена")

;Тут как бе инициализация соединения с сервером, обмен ключами и тд и тп

;Тут как бе запрос инфы и получение её в зашифрованном виде

;А тут расшифровка, и далее мы получаем например те 3 переменных что указаны ниже. А по сути это конечно же должны быть массивы, обрабатываться они должны в циклах и структура должна быть не такой примитивной ибо не кошерно, хотя и так бы сработало

$func_to_call = "farm" ;Допустим в эту переменную после всех расшифровок и преобразований, с сервера передается строковое значение "farm"
$param1 = 25
$param2 = 10 ;все $param так же получаются с сервера

Global $var_to_declare[2] = ["mob_lvl", "radius"]

For $i = 0 To UBound($var_to_declare, 1)-1 Step 1
	declare_var($var_to_declare[$i])
	MsgBox(0,0,Eval($var_to_declare[$i]))
Next

If IsDeclared("mob_lvl") Then MsgBox(0,0,"Переменная mob_lvl определена")
If IsDeclared("radius") Then MsgBox(0,0,"Переменная radius определена")

Call($func_to_call, Eval($var_to_declare[0]), Eval($var_to_declare[1]))

Func declare_var($var)
	MsgBox(0,"dec_var", $var)
	If Not IsDeclared($var) Then
		Local $temp
		Switch $var
			Case "mob_lvl"
				$temp = $param1
			Case "radius"
				$temp = $param2
		EndSwitch
		Assign($var, $temp, 2)
	EndIf
EndFunc

Func farm($par1, $par2)
	MsgBox(0,"Цель", "Убить мобов: "&$par1&@CR&"В радиусе: "&$par2)
EndFunc

Для постоянно вызываемых функций не каждый вариант подойдет если они опираются на скорость. Но вот например в момент запуска скрипта, и получения основных хранящихся на сервере значений и их имен (то действие которое происходит либо однажды либо достаточно редко, дабы не замедлять работу скрипта), вполне сойдет :smile:


Добавлено:
Сообщение автоматически объединено:

А я нынча занимаюсь промышленной автоматизацией, мне не жалко :D
 
Автор
N

nowost

Знающий
Сообщения
178
Репутация
17
Благодарю за науку, это то что нужно
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Только главное не перегружай алгоритм.
 
Верх