async def _get_file(self, name, platform): self.log.debug(f"Getting file {name}") if name.endswith('.go'): # if not platform or platform.lower() not in {ab['platform'].lower() for ab in await self.data_svc.explode_abilities()}: # if platform.lower() not in 'arm': # raise FileNotFoundError # if platform.lower() in 'arm': # print('arm') # name = 'sandcat.go-arm' # else: name = await self._go_compile(name, platform.lower()) _, file_path = await self.find_file_path(name, location='payloads') with open(file_path, 'rb') as file_stream: return name, file_stream.read() _, file_name = await self.find_file_path(name, location='payloads') if file_name: with open(file_name, 'rb') as file_stream: return name, file_stream.read() _, file_name = await self.find_file_path('%s.xored' % (name, ), location='payloads') if file_name: return name, xor_file(file_name) raise FileNotFoundError
async def read_file(self, name, location='payloads'): _, file_name = await self.find_file_path(name, location=location) if file_name: if self.is_extension_xored(file_name): return name, xor_file(file_name) return name, self._read(file_name) raise FileNotFoundError
def test_read_file_xor(self, loop, mocker, tmpdir, file_svc): plaintext_fn = 'xor-plaintext.txt' xortext_fn = "%s.xored" % plaintext_fn content = b'this is plaintext' plaintext_file = tmpdir.join(plaintext_fn) plaintext_file.write(content) xored_file = tmpdir.join(xortext_fn) xor_file(plaintext_file, xored_file) mocker.patch.object(file_svc, 'find_file_path', new_callable=AsyncMock, return_value=(None, str(xored_file))) name, nonxored_output = loop.run_until_complete( file_svc.read_file(xortext_fn)) assert name == xortext_fn assert nonxored_output == content
async def read_file(self, name, location='payloads'): """ Open a file and read the contents :param name: :param location: :return: a tuple (file_path, contents) """ _, file_name = await self.find_file_path(name, location=location) if file_name: if file_name.endswith('.xored'): return name, xor_file(file_name) return name, self._read(file_name) raise FileNotFoundError
async def read_file(self, name, location='payloads'): """ Open a file and read the contents :param name: :param location: :return: a tuple (file_path, contents) """ _, file_name = await self.find_file_path(name, location=location) if file_name: with open(file_name, 'rb') as file_stream: return name, file_stream.read() _, file_name = await self.find_file_path('%s.xored' % (name,), location=location) if file_name: return name, xor_file(file_name) raise FileNotFoundError
async def _get_file(self, name, platform): if name.endswith('.go'): name = await self._go_compile(name, platform) _, file_path = await self.find_file_path(name, location='payloads') with open(file_path, 'rb') as file_stream: return name, file_stream.read() file_info = await self.find_file_path(name, location='payloads') if file_info: with open(file_info[1], 'rb') as file_stream: return name, file_stream.read() file_info = await self.find_file_path('%s.xored' % (name, ), location='payloads') if file_info: return name, xor_file(file_info[1]) raise FileNotFoundError
async def _get_file(self, name, platform): if name.endswith('.go'): if not platform or platform.lower() not in {ab['platform'].lower() for ab in await self.data_svc.explode_abilities()}: raise FileNotFoundError name = await self._go_compile(name, platform.lower()) _, file_path = await self.find_file_path(name, location='payloads') with open(file_path, 'rb') as file_stream: return name, file_stream.read() _, file_name = await self.find_file_path(name, location='payloads') if file_name: with open(file_name, 'rb') as file_stream: return name, file_stream.read() _, file_name = await self.find_file_path('%s.xored' % (name,), location='payloads') if file_name: return name, xor_file(file_name) raise FileNotFoundError