trueseeing 2.2.6__tar.gz → 2.2.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {trueseeing-2.2.6 → trueseeing-2.2.7}/Dockerfile +8 -1
- {trueseeing-2.2.6 → trueseeing-2.2.7}/PKG-INFO +5 -4
- {trueseeing-2.2.6 → trueseeing-2.2.7}/README.md +2 -2
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/__init__.py +1 -1
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/api.py +1 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/ios/engage.py +56 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/inspect.py +4 -1
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/shell.py +2 -2
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/context.py +13 -3
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/env.py +13 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/.dockerignore +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/.github/FUNDING.yml +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/.github/workflows/deploy.yaml +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/.github/workflows/lint.yaml +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/.github/workflows/publish.yaml +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/.github/workflows/stale.yaml +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/.gitignore +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/COPYING +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/pyproject.toml +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/__init__.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/__init__.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/alias.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/analyze.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/android/__init__.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/android/asm.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/android/engage.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/android/recon.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/android/search.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/android/show.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/config.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/info.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/ios/__init__.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/report.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/scan.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/search.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/cmd/show.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/app/scan.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/__init__.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/analyze.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/android/analyze/__init__.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/android/analyze/flow.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/android/analyze/nat.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/android/analyze/op.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/android/asm.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/android/context.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/android/db.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/android/device.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/android/model.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/android/store.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/android/tools.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/config.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/cvss.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/db.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/exc.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/ext.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/ios/__init__.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/ios/analyze.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/ios/context.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/ios/db.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/ios/device.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/ios/model.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/ios/store.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/ios/swift.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/model/__init__.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/model/cmd.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/model/issue.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/model/sig.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/nat.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/report.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/scan.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/store.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/tools.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/ui.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/core/z.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/LICENSE.md +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/android/abe.jar +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/android/apkeditor.jar +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/android/apksigner.jar +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/android/frida-app.smali +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/android/frida-scriptdir.config +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/android/nsc.xml +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/android/store.0.sql +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/android/store.1.sql +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/files.0.sql +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/ios/store.0.sql +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/ios/store.1.sql +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/public_suffix_list.dat +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/store.0.sql +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/store.s.sql +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/template/report.html +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/libs/tlds.txt +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/py.typed +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/sig/__init__.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/sig/android/__init__.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/sig/android/crypto.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/sig/android/fingerprint.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/sig/android/manifest.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/sig/android/nat.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/sig/android/privacy.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/sig/android/security.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/sig/ios/__init__.py +0 -0
- {trueseeing-2.2.6 → trueseeing-2.2.7}/trueseeing/sig/ios/base.py +0 -0
|
@@ -3,16 +3,23 @@ run pip install flit
|
|
|
3
3
|
copy . /tmp/build/
|
|
4
4
|
run (cd /tmp/build && flit build)
|
|
5
5
|
|
|
6
|
+
from python:3.13-slim
|
|
7
|
+
run apt-get update -y && apt-get install -y git
|
|
8
|
+
run (cd /opt && git clone https://github.com/AloneMonkey/frida-ios-dump.git && cd frida-ios-dump && python3 -m venv .venv && .venv/bin/pip install -r ./requirements.txt)
|
|
9
|
+
|
|
6
10
|
from python:3.13-slim
|
|
7
11
|
run apt-get update -y && apt-get install -y openjdk-17-jre-headless zip adb
|
|
8
12
|
run install -d -m 777 /data /ext /cache /out && ln -sfn /cache /root/.local
|
|
13
|
+
copy --from=1 /opt/frida-ios-dump /opt/frida-ios-dump
|
|
9
14
|
copy --from=0 /tmp/build/dist/*.whl /tmp/dist/
|
|
10
15
|
run pip install /tmp/dist/*.whl && rm -rf /tmp/dist /tmp/ext
|
|
11
|
-
env PATH=/usr/local/bin:/usr/local/sbin:/usr/
|
|
16
|
+
env PATH=/usr/local/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
12
17
|
env TS2_IN_DOCKER=1
|
|
13
18
|
env TS2_CACHEDIR=/cache
|
|
14
19
|
env TS2_HOME=/data
|
|
15
20
|
env TS2_EXTDIR=/ext
|
|
21
|
+
env TS2_FRIDA_IOS_DUMP_PATH=/opt/frida-ios-dump/dump.py
|
|
22
|
+
env TS2_FRIDA_IOS_DUMP_INTERP=/opt/frida-ios-dump/.venv/bin/python3
|
|
16
23
|
env TS2_SWIFT_DEMANGLER_URL=http://ts2-swift-demangle
|
|
17
24
|
workdir /out
|
|
18
25
|
entrypoint ["trueseeing"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: trueseeing
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.7
|
|
4
4
|
Summary: Trueseeing is a non-decompiling iOS/Android application vulnerability scanner.
|
|
5
5
|
Keywords: ios,android,security,pentest,hacking
|
|
6
6
|
Author-email: Takahiro Yoshimura <alterakey@protonmail.com>
|
|
@@ -13,6 +13,7 @@ Classifier: Operating System :: POSIX :: BSD
|
|
|
13
13
|
Classifier: Operating System :: MacOS :: MacOS X
|
|
14
14
|
Classifier: Operating System :: Android
|
|
15
15
|
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
16
|
+
License-File: COPYING
|
|
16
17
|
Requires-Dist: lxml~=5.0
|
|
17
18
|
Requires-Dist: pyyaml~=6.0
|
|
18
19
|
Requires-Dist: jinja2~=3.1
|
|
@@ -90,7 +91,7 @@ Alternatively, you can install our package with pip as follows. This form of ins
|
|
|
90
91
|
You can interactively scan/analyze/patch/etc. apps -- making it the ideal choice for manual analysis:
|
|
91
92
|
|
|
92
93
|
$ trueseeing target.apk
|
|
93
|
-
[+] trueseeing 2.2.
|
|
94
|
+
[+] trueseeing 2.2.7
|
|
94
95
|
ts[target.apk]> ?
|
|
95
96
|
...
|
|
96
97
|
ts[target.apk]> i # show generic information
|
|
@@ -323,7 +324,7 @@ class APKFileFormatHandler(FileFormatHandler):
|
|
|
323
324
|
return APKFileFormatHandler()
|
|
324
325
|
|
|
325
326
|
def get_formats(self) -> FormatMap:
|
|
326
|
-
return {'apk2':dict(e=self._handle, r=r'\.apk$', d='sample file format')}
|
|
327
|
+
return {'apk2':dict(e=self._handle, r=r'\.apk$', d='sample file format', t=None)} # if this handler can suggest device context type, advertise at t
|
|
327
328
|
|
|
328
329
|
def get_configs(self) -> ConfigMap:
|
|
329
330
|
return dict()
|
|
@@ -55,7 +55,7 @@ Alternatively, you can install our package with pip as follows. This form of ins
|
|
|
55
55
|
You can interactively scan/analyze/patch/etc. apps -- making it the ideal choice for manual analysis:
|
|
56
56
|
|
|
57
57
|
$ trueseeing target.apk
|
|
58
|
-
[+] trueseeing 2.2.
|
|
58
|
+
[+] trueseeing 2.2.7
|
|
59
59
|
ts[target.apk]> ?
|
|
60
60
|
...
|
|
61
61
|
ts[target.apk]> i # show generic information
|
|
@@ -288,7 +288,7 @@ class APKFileFormatHandler(FileFormatHandler):
|
|
|
288
288
|
return APKFileFormatHandler()
|
|
289
289
|
|
|
290
290
|
def get_formats(self) -> FormatMap:
|
|
291
|
-
return {'apk2':dict(e=self._handle, r=r'\.apk$', d='sample file format')}
|
|
291
|
+
return {'apk2':dict(e=self._handle, r=r'\.apk$', d='sample file format', t=None)} # if this handler can suggest device context type, advertise at t
|
|
292
292
|
|
|
293
293
|
def get_configs(self) -> ConfigMap:
|
|
294
294
|
return dict()
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""Trueseeing is a non-decompiling iOS/Android application vulnerability scanner."""
|
|
2
|
-
__version__ = '2.2.
|
|
2
|
+
__version__ = '2.2.7'
|
|
@@ -24,6 +24,8 @@ class EngageCommand(CommandMixin):
|
|
|
24
24
|
def get_commands(self) -> CommandMap:
|
|
25
25
|
return {
|
|
26
26
|
'!!!':dict(e=self._run_frida_shell, n='!!!', d='attach frida to the foreground process', t={'ipa'}),
|
|
27
|
+
'xg':dict(e=self._engage_grab_package, n='xg[!] package [output.ipa]', d='engage: grab package', t={'ipa'}),
|
|
28
|
+
'xg!':dict(e=self._engage_grab_package, t={'ipa'}),
|
|
27
29
|
'xs':dict(e=self._engage_frida_attach, n='xs[!] [config]', d='engage: attach frida scripts (!: force)', t={'ipa'}),
|
|
28
30
|
'xs!':dict(e=self._engage_frida_attach, t={'ipa'}),
|
|
29
31
|
'xst':dict(e=self._engage_frida_trace_call, n='xst[!] [init.js]', d='engage: trace calls (!: force)', t={'ipa'}),
|
|
@@ -139,6 +141,60 @@ class EngageCommand(CommandMixin):
|
|
|
139
141
|
|
|
140
142
|
ui.success("done ({t:.2f} sec.)".format(t=time() - at))
|
|
141
143
|
|
|
144
|
+
async def _engage_grab_package(self, args: deque[str]) -> None:
|
|
145
|
+
cmd = args.popleft()
|
|
146
|
+
|
|
147
|
+
import os
|
|
148
|
+
if not args:
|
|
149
|
+
ui.fatal('need the package name')
|
|
150
|
+
|
|
151
|
+
pkg = args.popleft()
|
|
152
|
+
|
|
153
|
+
if args:
|
|
154
|
+
outfn = args.popleft()
|
|
155
|
+
else:
|
|
156
|
+
outfn = f'{pkg}.ipa'
|
|
157
|
+
|
|
158
|
+
if os.path.exists(outfn):
|
|
159
|
+
if not cmd.endswith('!'):
|
|
160
|
+
ui.fatal('output file exists; force (!) to overwrite')
|
|
161
|
+
else:
|
|
162
|
+
os.remove(outfn)
|
|
163
|
+
|
|
164
|
+
from time import time
|
|
165
|
+
from tempfile import TemporaryDirectory
|
|
166
|
+
from trueseeing.core.ios.device import IOSDevice
|
|
167
|
+
|
|
168
|
+
dev = IOSDevice()
|
|
169
|
+
at = time()
|
|
170
|
+
outfn = os.path.realpath(outfn)
|
|
171
|
+
|
|
172
|
+
ui.info(f'grabbing package: {pkg} -> {outfn}')
|
|
173
|
+
|
|
174
|
+
with TemporaryDirectory() as td:
|
|
175
|
+
from os import chdir, getcwd
|
|
176
|
+
from trueseeing.core.env import get_frida_ios_dump_interp, get_frida_ios_dump_path
|
|
177
|
+
from shlex import quote
|
|
178
|
+
cd = getcwd()
|
|
179
|
+
try:
|
|
180
|
+
chdir(td)
|
|
181
|
+
from subprocess import CalledProcessError
|
|
182
|
+
try:
|
|
183
|
+
await dev.invoke_frida_passthru("{interp} {dump} -o t.ipa {name}".format(
|
|
184
|
+
interp=get_frida_ios_dump_interp(),
|
|
185
|
+
dump=get_frida_ios_dump_path(),
|
|
186
|
+
name=quote(pkg),
|
|
187
|
+
))
|
|
188
|
+
except CalledProcessError:
|
|
189
|
+
ui.fatal('cannot attach to process')
|
|
190
|
+
|
|
191
|
+
from shutil import copy2
|
|
192
|
+
copy2('t.ipa', outfn)
|
|
193
|
+
|
|
194
|
+
ui.success('done ({t:.02f} sec)'.format(t=time() - at))
|
|
195
|
+
finally:
|
|
196
|
+
chdir(cd)
|
|
197
|
+
|
|
142
198
|
def _get_context(self) -> IPAContext:
|
|
143
199
|
return self._helper.get_context().require_type('ipa') # type:ignore[return-value]
|
|
144
200
|
|
|
@@ -452,7 +452,10 @@ class CommandHelperImpl:
|
|
|
452
452
|
from trueseeing.core.exc import InvalidFileFormatError
|
|
453
453
|
t = self.get_target()
|
|
454
454
|
if not t:
|
|
455
|
-
|
|
455
|
+
try:
|
|
456
|
+
return self._opener.get_device_context_type()
|
|
457
|
+
except InvalidFileFormatError:
|
|
458
|
+
raise ui.fatal('invalid file type for device (try "apk" or "ipa", or not at all)')
|
|
456
459
|
try:
|
|
457
460
|
return self._opener.get_context(t).type
|
|
458
461
|
except InvalidFileFormatError:
|
|
@@ -46,8 +46,8 @@ class Shell:
|
|
|
46
46
|
parser.add_argument('--quiet', action='store_true', help='Be less verbose')
|
|
47
47
|
parser.add_argument('-d', '--debug', action='store_true', help='Debug mode')
|
|
48
48
|
parser.add_argument('-e', '--abort-on-errors', action='store_true', help='Abort on errors')
|
|
49
|
-
parser.add_argument('-F', dest='force_opener', help='
|
|
50
|
-
parser.add_argument('-n', dest='no_target', action='store_true', help='Run without target')
|
|
49
|
+
parser.add_argument('-F', dest='force_opener', metavar='FORMAT', help='Set file format')
|
|
50
|
+
parser.add_argument('-n', dest='no_target', action='store_true', help='Run without target (use -F for assuming device type)')
|
|
51
51
|
args_mut0.add_argument('-i', dest='scriptfn', metavar='FILE', help='Run script file before prompt')
|
|
52
52
|
args_mut0.add_argument('-c', dest='inline_cmd', metavar='COMMAND', help='Run commands before prompt')
|
|
53
53
|
args_mut1.add_argument('-q', dest='mode', action='store_const', const='batch', help='Batch mode; quit instead of giving prompt')
|
|
@@ -53,6 +53,16 @@ class FileOpener:
|
|
|
53
53
|
return c
|
|
54
54
|
raise InvalidFileFormatError()
|
|
55
55
|
|
|
56
|
+
def get_device_context_type(self) -> Optional[Set[ContextType]]:
|
|
57
|
+
from trueseeing.core.exc import InvalidFileFormatError
|
|
58
|
+
if self._force_opener is None:
|
|
59
|
+
return None
|
|
60
|
+
if self._force_opener in self._formats:
|
|
61
|
+
t = self._formats[self._force_opener]['t']
|
|
62
|
+
if t is not None:
|
|
63
|
+
return t
|
|
64
|
+
raise InvalidFileFormatError()
|
|
65
|
+
|
|
56
66
|
def get_formats(self) -> Iterator[Mapping[str, str]]:
|
|
57
67
|
for k,v in self._formats.items():
|
|
58
68
|
yield dict(n=k, d=v['d'])
|
|
@@ -61,9 +71,9 @@ class FileOpener:
|
|
|
61
71
|
from trueseeing.core.ext import Extension
|
|
62
72
|
|
|
63
73
|
self._formats.update({
|
|
64
|
-
'apk':dict(e=self._handle_apk, r=r'\.apk$', d='Android application package'),
|
|
65
|
-
'xapk':dict(e=self._handle_xapk, r=r'\.xapk$', d='Android appllication bundle'),
|
|
66
|
-
'ipa': dict(e=self._handle_ipa, r=r'\.ipa$', d='iOS application archive'),
|
|
74
|
+
'apk':dict(e=self._handle_apk, r=r'\.apk$', d='Android application package', t={'apk','file'}),
|
|
75
|
+
'xapk':dict(e=self._handle_xapk, r=r'\.xapk$', d='Android appllication bundle', t=None),
|
|
76
|
+
'ipa': dict(e=self._handle_ipa, r=r'\.ipa$', d='iOS application archive', t={'ipa', 'file'}),
|
|
67
77
|
})
|
|
68
78
|
|
|
69
79
|
for clazz in Extension.get().get_fileformathandlers():
|
|
@@ -80,6 +80,19 @@ def get_device_frida_dir(package_name: str) -> str:
|
|
|
80
80
|
def get_swift_demangler_url() -> str:
|
|
81
81
|
return os.environ.get('TS2_SWIFT_DEMANGLER_URL', 'http://127.0.0.1:8000')
|
|
82
82
|
|
|
83
|
+
@cache
|
|
84
|
+
def get_frida_ios_dump_interp() -> str:
|
|
85
|
+
from sys import executable
|
|
86
|
+
return os.environ.get('TS2_FRIDA_IOS_DUMP_INTERP', executable) # XXX
|
|
87
|
+
|
|
88
|
+
@cache
|
|
89
|
+
def get_frida_ios_dump_path() -> str:
|
|
90
|
+
try:
|
|
91
|
+
return os.environ['TS2_FRIDA_IOS_DUMP_PATH']
|
|
92
|
+
except KeyError:
|
|
93
|
+
from trueseeing.core.ui import ui
|
|
94
|
+
ui.fatal('need frida-ios-dump (try setting TS2_FRIDA_IOS_DUMP_PATH to the path to its dump.py)') # XXX
|
|
95
|
+
|
|
83
96
|
@cache
|
|
84
97
|
def get_cpu_count() -> int:
|
|
85
98
|
from os import cpu_count
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|