Skip to content

Commit

Permalink
Made changes to apkpure to create the file extension based on the Con…
Browse files Browse the repository at this point in the history
…tent-Disposition header
  • Loading branch information
domwhewell-sage committed Nov 9, 2024
1 parent 3e67a9f commit 455051d
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 12 deletions.
16 changes: 11 additions & 5 deletions bbot/modules/apkpure.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,15 @@ async def download_apk(self, app_id):
path = None
url = f"https://d.apkpure.com/b/XAPK/{app_id}?version=latest"
self.helpers.mkdir(self.output_dir / app_id)
file_destination = self.output_dir / app_id / f"{app_id}.xapk"
result = await self.helpers.download(url, warn=False, filename=file_destination)
if result:
self.info(f'Downloaded "{app_id}" from "{url}", saved to {file_destination}')
path = file_destination
response = await self.helpers.request(url, allow_redirects=True)
if response:
attachment = response.headers.get("Content-Disposition", "")
if "filename" in attachment:
extension = attachment.split('filename="')[-1].split(".")[-1].strip('"')
content = response.content
file_destination = self.output_dir / app_id / f"{app_id}.{extension}"
with open(file_destination, "wb") as f:
f.write(content)
self.info(f'Downloaded "{app_id}" from "{url}", saved to {file_destination}')
path = file_destination
return path
2 changes: 1 addition & 1 deletion bbot/modules/jadx.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ async def setup(self):
async def filter_event(self, event):
if "file" in event.tags:
if not event.data["magic_description"].lower() in self.allowed_file_types:
return False, f"Jadx is not able to decompile this file type"
return False, f"Jadx is not able to decompile this file type: {event.data['magic_description']}"
else:
return False, "Event is not a file"
return True
Expand Down
10 changes: 6 additions & 4 deletions bbot/test/test_step_2/module_tests/test_module_apkpure.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ async def setup_after_prep(self, module_test):
module_test.httpx_mock.add_response(
url="https://d.apkpure.com/b/XAPK/com.bbot.test?version=latest",
content=self.apk_file,
headers={
"Content-Type": "application/vnd.android.package-archive",
"Content-Disposition": "attachment; filename=com.bbot.test.apk",
},
)

def check(self, module_test, events):
Expand All @@ -61,9 +65,7 @@ def check(self, module_test, events):
and e.data["url"] == "https://play.google.com/store/apps/details?id=com.bbot.test"
]
), "Failed to find bbot android app"
filesystem_event = [
e for e in events if e.type == "FILESYSTEM" and "com.bbot.test.xapk" in e.data["path"] and "apk" in e.tags
]
filesystem_event = [e for e in events if e.type == "FILESYSTEM" and "com.bbot.test.apk" in e.data["path"]]
assert 1 == len(filesystem_event), "Failed to download apk"
file = Path(filesystem_event[0].data["path"])
assert file.is_file(), "Destination xapk doesn't exist"
assert file.is_file(), "Destination apk doesn't exist"
4 changes: 2 additions & 2 deletions bbot/test/test_step_2/module_tests/test_module_jadx.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,15 @@ async def setup_after_prep(self, module_test):
content=self.apk_file,
headers={
"Content-Type": "application/vnd.android.package-archive",
"Content-Disposition": "attachment; filename=com.bbot.test.xapk",
"Content-Disposition": "attachment; filename=com.bbot.test.apk",
},
)

def check(self, module_test, events):
filesystem_events = [e for e in events if e.type == "FILESYSTEM"]
apk_event = [e for e in filesystem_events if "file" in e.tags]
extension, mime_type, description, confidence = get_magic_info(apk_event[0].data["path"])
assert description == "Android application package", f"Downloaded file was detected as {description}"
assert description == "Android Application Package", f"Downloaded file was detected as {description}"
extract_event = [e for e in filesystem_events if "folder" in e.tags]
assert 1 == len(extract_event), "Failed to extract apk"
extract_path = Path(extract_event[0].data["path"])
Expand Down

0 comments on commit 455051d

Please sign in to comment.