frida-fusion 0.1.11__tar.gz → 0.1.12__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.

Potentially problematic release.


This version of frida-fusion might be problematic. Click here for more details.

Files changed (34) hide show
  1. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/PKG-INFO +1 -1
  2. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/__meta__.py +2 -2
  3. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/args.py +4 -0
  4. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/config.py +35 -2
  5. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/fusion.py +22 -1
  6. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/module.py +6 -7
  7. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/modules/android_setings/settings.js +1 -1
  8. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/modules/android_setings/settings.py +4 -0
  9. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/modules/crypto/crypto.py +71 -27
  10. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion.egg-info/PKG-INFO +1 -1
  11. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/LICENSE +0 -0
  12. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/README.md +0 -0
  13. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/__init__.py +0 -0
  14. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/__main__.py +0 -0
  15. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/libs/__init__.py +0 -0
  16. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/libs/color.py +0 -0
  17. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/libs/database.py +0 -0
  18. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/libs/helpers.js +0 -0
  19. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/libs/logger.py +0 -0
  20. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/libs/scriptlocation.py +0 -0
  21. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/modules/__init__.py +0 -0
  22. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/modules/android_setings/__init__.py +0 -0
  23. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/modules/crypto/__init__.py +0 -0
  24. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/modules/crypto/crypto.js +0 -0
  25. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/modules/tls_unpinning/__init__.py +0 -0
  26. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion/modules/tls_unpinning/frida_multiple_unpinning.py +0 -0
  27. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion.egg-info/SOURCES.txt +0 -0
  28. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion.egg-info/dependency_links.txt +0 -0
  29. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion.egg-info/entry_points.txt +0 -0
  30. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion.egg-info/requires.txt +0 -0
  31. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/frida_fusion.egg-info/top_level.txt +0 -0
  32. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/pyproject.toml +0 -0
  33. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/setup.cfg +0 -0
  34. {frida_fusion-0.1.11 → frida_fusion-0.1.12}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frida-fusion
3
- Version: 0.1.11
3
+ Version: 0.1.12
4
4
  Summary: Hook your mobile tests with Frida
5
5
  Author-email: "Helvio Junior (M4v3r1ck)" <helvio_junior@hotmail.com>
6
6
  Maintainer-email: "Helvio Junior (M4v3r1ck)" <helvio_junior@hotmail.com>
@@ -1,8 +1,8 @@
1
- __version__ = '0.1.11'
1
+ __version__ = '0.1.12'
2
2
  __title__ = "Frida Fusion"
3
3
  __description__ = "📱 frida-fusion - runtime mobile exploration"
4
4
  __url__ = "https://github.com/helviojunior/frida-fusion"
5
- __build__ = 0xc8879a3
5
+ __build__ = 0x6c949ce
6
6
  __author__ = "Helvio Junior (M4v3r1ck)"
7
7
  __author_email__ = "helvio_junior@hotmail.com"
8
8
  __license__ = "GPL-3.0"
@@ -148,4 +148,8 @@ class Arguments(object):
148
148
  dest='enabled_modules',
149
149
  help='Enabled module by name. You can specify multiple values repeating the flag.')
150
150
 
151
+ modules.add_argument('--silence-module-messages',
152
+ action='append',
153
+ dest='ignore_messages_modules',
154
+ help='Silence messages becaming from module by name. You can specify multiple values repeating the flag.')
151
155
 
@@ -22,6 +22,7 @@ class Configuration(object):
22
22
  base_path = str(Path(__file__).resolve().parent)
23
23
  db_path = os.path.join(str(Path(".").resolve()), "fusion.db")
24
24
  enabled_modules = {}
25
+ ignore_messages_modules = {}
25
26
 
26
27
  # Device vars
27
28
  device_id = None
@@ -180,9 +181,15 @@ class Configuration(object):
180
181
 
181
182
  Logger.pl(' {C}min debug level:{O} %s{W}' % str(args.debug_level).upper())
182
183
 
183
- if args.enabled_modules is not None and isinstance(args.enabled_modules, list):
184
+ if (args.enabled_modules is not None and isinstance(args.enabled_modules, list)) or \
185
+ (args.ignore_messages_modules is not None and isinstance(args.ignore_messages_modules, list)):
184
186
  mods = ModuleManager.list_modules()
185
- for mod in args.enabled_modules:
187
+ for mod in [
188
+ m.strip()
189
+ for md in args.enabled_modules
190
+ for m in md.split(",")
191
+ if m.strip() != ""
192
+ ]:
186
193
  fm = next(iter([
187
194
  m
188
195
  for _, m in mods.items()
@@ -197,12 +204,38 @@ class Configuration(object):
197
204
  if name not in Configuration.enabled_modules.keys():
198
205
  Configuration.enabled_modules[name] = fm
199
206
 
207
+ for mod in [
208
+ m.strip()
209
+ for md in args.ignore_messages_modules
210
+ for m in md.split(",")
211
+ if m.strip() != ""
212
+ ]:
213
+ fm = next(iter([
214
+ m
215
+ for _, m in mods.items()
216
+ if m.safe_name() == mod.lower()
217
+ ]), None)
218
+ if fm is None:
219
+ Color.pl(
220
+ '{!} {R}error: module {O}%s{R} not found{W}\r\n' % mod)
221
+ sys.exit(1)
222
+
223
+ name = fm.safe_name()
224
+ if name not in Configuration.ignore_messages_modules.keys():
225
+ Configuration.ignore_messages_modules[name] = fm
226
+
200
227
  if len(Configuration.enabled_modules) > 0:
201
228
  Logger.pl(' {C}modules:{O} %s{W}' % ', '.join([
202
229
  m.name
203
230
  for _, m in Configuration.enabled_modules.items()
204
231
  ]))
205
232
 
233
+ if len(Configuration.ignore_messages_modules) > 0:
234
+ Logger.pl(' {C}ignored messages from modules:{O} %s{W}' % ', '.join([
235
+ m.name
236
+ for _, m in Configuration.ignore_messages_modules.items()
237
+ ]))
238
+
206
239
  Logger.pl("")
207
240
 
208
241
  @staticmethod
@@ -44,6 +44,7 @@ class Fusion(object):
44
44
  self.pid = 0
45
45
  self.script_trace = {}
46
46
  self._modules = []
47
+ self._ignore_messages = []
47
48
  signal.signal(signal.SIGINT, self.signal_handler)
48
49
 
49
50
  t = threading.Thread(target=Fusion._db_worker, daemon=True)
@@ -293,6 +294,10 @@ class Fusion(object):
293
294
  mType = jData.get('type', '').lower()
294
295
  mLevel = jData.get('level', None)
295
296
  if mType == "message":
297
+
298
+ if script_location.file_name in self._ignore_messages:
299
+ return
300
+
296
301
  msg = jData.get('message', '')
297
302
  try:
298
303
  msg = base64.b64decode(msg).decode("UTF-8")
@@ -621,7 +626,23 @@ class Fusion(object):
621
626
  if len(self._modules) > 0:
622
627
  Logger.pl("{+} Starting selected modules")
623
628
  for m in self._modules:
624
- m.start_module(db_path=Configuration.db_path)
629
+ m.start_module(
630
+ package=Configuration.package,
631
+ db_path=Configuration.db_path
632
+ )
633
+ if m.safe_name() in Configuration.ignore_messages_modules.keys():
634
+ m.suppress_messages()
635
+
636
+ self._ignore_messages = [
637
+ Path(f).name
638
+ for _, md in Configuration.ignore_messages_modules.items()
639
+ if (m := next(iter([
640
+ mi
641
+ for mi in self._modules
642
+ if mi.name == md.name
643
+ ]), None)) is not None
644
+ for f in m.js_files()
645
+ ]
625
646
 
626
647
  self.get_device()
627
648
  if self.device is not None:
@@ -8,13 +8,9 @@ import requests
8
8
  import importlib.util
9
9
  from pathlib import Path
10
10
 
11
- from typing import TYPE_CHECKING
12
-
13
11
  from .__meta__ import __version__
14
12
  from .libs.logger import Logger
15
-
16
- if TYPE_CHECKING:
17
- from .fusion import Fusion # só no type checker
13
+ from .libs.scriptlocation import ScriptLocation
18
14
 
19
15
 
20
16
  class ModuleLoaderError(Exception):
@@ -42,8 +38,11 @@ class ModuleBase(object):
42
38
  def js_files(self) -> list:
43
39
  return []
44
40
 
41
+ def suppress_messages(self):
42
+ pass
43
+
45
44
  def key_value_event(self,
46
- script_location: "Fusion.ScriptLocation" = None,
45
+ script_location: ScriptLocation = None,
47
46
  stack_trace: str = None,
48
47
  module: str = None,
49
48
  received_data: dict = None
@@ -51,7 +50,7 @@ class ModuleBase(object):
51
50
  raise Exception('Method "key_value_event" is not yet implemented.')
52
51
 
53
52
  def data_event(self,
54
- script_location: "Fusion.ScriptLocation" = None,
53
+ script_location: ScriptLocation = None,
55
54
  stack_trace: str = None,
56
55
  received_data: str = None
57
56
  ) -> bool:
@@ -27,7 +27,7 @@ setTimeout(function() {
27
27
  let value = item[1];
28
28
 
29
29
  if (name === name) {
30
- fusion_sendMessage('D', `Bypassing ${name}`)
30
+ fusion_sendMessage('D', `Bypassing android settings checking: ${name}`)
31
31
  return value;
32
32
  }
33
33
  });
@@ -32,6 +32,7 @@ class Settings(ModuleBase):
32
32
  cursor.execute("""
33
33
  CREATE TABLE IF NOT EXISTS [android_settings] (
34
34
  id INTEGER PRIMARY KEY AUTOINCREMENT,
35
+ package TEXT NOT NULL,
35
36
  module TEXT NULL,
36
37
  name TEXT NULL,
37
38
  flag INTEGER NULL DEFAULT (0),
@@ -49,12 +50,14 @@ class Settings(ModuleBase):
49
50
  def __init__(self):
50
51
  super().__init__('Settings', 'Hook Android Settings functions')
51
52
  self._settings_db = None
53
+ self._package = None
52
54
  self.mod_path = str(Path(__file__).resolve().parent)
53
55
 
54
56
  def start_module(self, **kwargs) -> bool:
55
57
  if 'db_path' not in kwargs:
56
58
  raise Exception("parameter db_path not found")
57
59
 
60
+ self._package = kwargs['package']
58
61
  self._settings_db = Settings.SettingsDB(db_name=kwargs['db_path'])
59
62
  return True
60
63
 
@@ -87,6 +90,7 @@ class Settings(ModuleBase):
87
90
 
88
91
  self._settings_db.insert_ignore_one(
89
92
  table_name='android_settings',
93
+ package=self._package,
90
94
  module=module,
91
95
  name=name,
92
96
  flag=flag,
@@ -32,6 +32,7 @@ class Crypto(ModuleBase):
32
32
  cursor.execute("""
33
33
  CREATE TABLE IF NOT EXISTS [crypto] (
34
34
  id INTEGER PRIMARY KEY AUTOINCREMENT,
35
+ package TEXT NOT NULL,
35
36
  hashcode TEXT NOT NULL,
36
37
  algorithm TEXT NULL,
37
38
  init_key TEXT NULL,
@@ -52,6 +53,7 @@ class Crypto(ModuleBase):
52
53
  cursor.execute("""
53
54
  CREATE TABLE IF NOT EXISTS [crypto_key] (
54
55
  id INTEGER PRIMARY KEY AUTOINCREMENT,
56
+ package TEXT NOT NULL,
55
57
  key TEXT NULL,
56
58
  printable_key TEXT NULL,
57
59
  salt TEXT NULL,
@@ -59,7 +61,7 @@ class Crypto(ModuleBase):
59
61
  key_class TEXT NULL DEFAULT ('<unknown>'),
60
62
  additional_data TEXT NULL,
61
63
  created_date datetime not null DEFAULT (datetime('now','localtime')),
62
- UNIQUE (key, key_class)
64
+ UNIQUE (package, key, key_class)
63
65
  );
64
66
  """)
65
67
 
@@ -68,6 +70,7 @@ class Crypto(ModuleBase):
68
70
  cursor.execute("""
69
71
  CREATE TABLE IF NOT EXISTS [digest] (
70
72
  id INTEGER PRIMARY KEY AUTOINCREMENT,
73
+ package TEXT NOT NULL,
71
74
  algorithm TEXT NOT NULL,
72
75
  hashcode TEXT NULL,
73
76
  clear_text TEXT NULL,
@@ -98,7 +101,7 @@ class Crypto(ModuleBase):
98
101
 
99
102
  def update_crypto(self, iv=None, hashcode=None, flow=None, key=None, before_final=None,
100
103
  after_final=None, stack_trace=None, id=None, algorithm=None,
101
- status=None):
104
+ status=None, package=None):
102
105
 
103
106
  conn = self.connect_to_db(check=False)
104
107
  cursor = conn.cursor()
@@ -124,6 +127,12 @@ class Crypto(ModuleBase):
124
127
 
125
128
  data = []
126
129
  update = "update [crypto] set "
130
+
131
+ if package is not None:
132
+ integrity = True
133
+ update += " package = ?,"
134
+ data.append(package)
135
+
127
136
  if iv is not None:
128
137
  integrity = True
129
138
  update += " iv = ?,"
@@ -213,7 +222,7 @@ class Crypto(ModuleBase):
213
222
 
214
223
  conn.close()
215
224
 
216
- def insert_digest(self, hashcode, algorithm, data_input, data_output, stack_trace):
225
+ def insert_digest(self, package, hashcode, algorithm, data_input, data_output, stack_trace):
217
226
 
218
227
  conn = self.connect_to_db(check=False)
219
228
 
@@ -243,9 +252,9 @@ class Crypto(ModuleBase):
243
252
 
244
253
  cursor = conn.cursor()
245
254
  cursor.execute("""
246
- insert into [digest] ([hashcode], [algorithm], [clear_text], [clear_text_b64], [hash_b64], [hash_hex], [stack_trace])
247
- VALUES (?,?,?,?,?,?,?);
248
- """, (hashcode, algorithm, clear_text, clear_text_b64, hash_b64, hash_hex, stack_trace,))
255
+ insert into [digest] ([package], [hashcode], [algorithm], [clear_text], [clear_text_b64], [hash_b64], [hash_hex], [stack_trace])
256
+ VALUES (?,?,?,?,?,?,?,?);
257
+ """, (package, hashcode, algorithm, clear_text, clear_text_b64, hash_b64, hash_hex, stack_trace,))
249
258
 
250
259
  conn.commit()
251
260
 
@@ -253,13 +262,14 @@ class Crypto(ModuleBase):
253
262
 
254
263
  # Color.pl('{+} {W}Inserindo crypto. {C}Algorithm: {O}%s{W}' % algorithm)
255
264
 
256
- def insert_crypto(self, hashcode, algorithm, init_key):
265
+ def insert_crypto(self, package, hashcode, algorithm, init_key):
257
266
 
258
267
  if hashcode is None:
259
268
  return
260
269
 
261
270
  rows = self.select(
262
271
  table_name='crypto',
272
+ package=package,
263
273
  hashcode=hashcode,
264
274
  status='open'
265
275
  )
@@ -280,6 +290,7 @@ class Crypto(ModuleBase):
280
290
  if init_key is not None and init_key != '' and init_key != 'IA==':
281
291
  self.insert_one(
282
292
  table_name='crypto',
293
+ package=package,
283
294
  hashcode=hashcode,
284
295
  algorithm=algorithm,
285
296
  init_key=init_key,
@@ -287,15 +298,17 @@ class Crypto(ModuleBase):
287
298
  else:
288
299
  self.insert_one(
289
300
  table_name='crypto',
301
+ package=package,
290
302
  hashcode=hashcode,
291
303
  algorithm=algorithm,
292
304
  status='open')
293
305
 
294
- def insert_crypto_key(self, key, key_class, salt=None,
306
+ def insert_crypto_key(self, package, key, key_class, salt=None,
295
307
  iteration_count=0, module="<unknown>", additional_data=dict):
296
308
  if key is not None and key != '' and key != 'IA==':
297
309
  self.insert_ignore_one(
298
310
  table_name='crypto_key',
311
+ package=package,
299
312
  key=key,
300
313
  printable_key=self.get_printable(key),
301
314
  key_class=key_class,
@@ -309,13 +322,16 @@ class Crypto(ModuleBase):
309
322
 
310
323
  def __init__(self):
311
324
  super().__init__('Crypto', 'Hook cryptography/hashing functions')
325
+ self._package = None
312
326
  self._crypto_db = None
327
+ self._suppress_messages = False
313
328
  self.mod_path = str(Path(__file__).resolve().parent)
314
329
 
315
330
  def start_module(self, **kwargs) -> bool:
316
331
  if 'db_path' not in kwargs:
317
332
  raise Exception("parameter db_path not found")
318
333
 
334
+ self._package = kwargs['package']
319
335
  self._crypto_db = Crypto.CryptoDB(db_name=kwargs['db_path'])
320
336
  return True
321
337
 
@@ -324,6 +340,9 @@ class Crypto(ModuleBase):
324
340
  os.path.join(self.mod_path, "crypto.js")
325
341
  ]
326
342
 
343
+ def suppress_messages(self):
344
+ self._suppress_messages = True
345
+
327
346
  def key_value_event(self,
328
347
  script_location: ScriptLocation = None,
329
348
  stack_trace: str = None,
@@ -347,6 +366,7 @@ class Crypto(ModuleBase):
347
366
  iteration_count = received_data.get('iteration_count', None)
348
367
 
349
368
  self._crypto_db.insert_crypto_key(
369
+ package=self._package,
350
370
  key=key,
351
371
  key_class=key_class,
352
372
  salt=salt,
@@ -361,11 +381,13 @@ class Crypto(ModuleBase):
361
381
  hashcode = received_data.get('hashcode', None)
362
382
  key_class = received_data.get('classtype', "SecretKeySpec")
363
383
  self._crypto_db.insert_crypto(
384
+ package=self._package,
364
385
  hashcode=hashcode,
365
386
  algorithm=algorithm,
366
387
  init_key=key)
367
388
 
368
389
  self._crypto_db.insert_crypto_key(
390
+ package=self._package,
369
391
  key=key,
370
392
  key_class=key_class,
371
393
  module=module,
@@ -375,10 +397,24 @@ class Crypto(ModuleBase):
375
397
  elif module == "IvParameterSpec.init":
376
398
  bData = received_data.get('iv_key', None)
377
399
  key_class = received_data.get('classtype', "IvParameterSpec")
378
- # print("IV: %s" % bData)
400
+
401
+ offset = received_data.get('offset', None)
402
+ length = received_data.get('length', None)
403
+ if offset is not None and length is not None:
404
+ try:
405
+ offset = int(offset)
406
+ length = int(length)
407
+ if isinstance(bData, str):
408
+ bData = base64.b64decode(bData)
409
+ if offset + length <= len(bData):
410
+ bData = base64.b64encode(bData[offset:offset+length]).decode("UTF-8")
411
+ except:
412
+ pass
413
+
379
414
  self._crypto_db.update_crypto(iv=bData)
380
415
 
381
416
  self._crypto_db.insert_crypto_key(
417
+ package=self._package,
382
418
  key=bData,
383
419
  key_class=key_class,
384
420
  module=module,
@@ -393,12 +429,14 @@ class Crypto(ModuleBase):
393
429
  algorithm = received_data.get('algorithm', None)
394
430
 
395
431
  self._crypto_db.insert_crypto(
432
+ package=self._package,
396
433
  hashcode=hashcode,
397
434
  algorithm=algorithm,
398
435
  init_key=key
399
436
  )
400
437
 
401
438
  self._crypto_db.update_crypto(
439
+ package=self._package,
402
440
  hashcode=hashcode,
403
441
  flow='enc' if 'encrypt' in opmode else ('dec' if 'decrypt' in opmode else str(opmode)),
404
442
  key=key,
@@ -406,28 +444,32 @@ class Crypto(ModuleBase):
406
444
  )
407
445
 
408
446
  self._crypto_db.insert_crypto_key(
447
+ package=self._package,
409
448
  key=key,
410
449
  key_class=key_class,
411
450
  module=module,
412
451
  additional_data=received_data
413
452
  )
414
453
 
415
- Logger.print_message(
416
- level="W",
417
- message=f"Cipher init received\nHashcode: {hashcode}\nOpmode: {opmode}\nKeytype: {key_class}",
418
- script_location=script_location
419
- )
454
+ if not self._suppress_messages:
455
+ Logger.print_message(
456
+ level="W",
457
+ message=f"Cipher init received\nHashcode: {hashcode}\nOpmode: {opmode}\nKeytype: {key_class}",
458
+ script_location=script_location
459
+ )
420
460
 
421
461
  elif module == "cipher.doFinal":
422
462
  hashcode = received_data.get('hashcode', None)
423
463
 
424
464
  self._crypto_db.insert_crypto(
465
+ package=self._package,
425
466
  hashcode=hashcode,
426
467
  algorithm=None,
427
468
  init_key=None
428
469
  )
429
470
 
430
471
  self._crypto_db.update_crypto(
472
+ package=self._package,
431
473
  hashcode=hashcode,
432
474
  before_final=received_data.get('input', ''),
433
475
  after_final=received_data.get('output', ''),
@@ -435,24 +477,25 @@ class Crypto(ModuleBase):
435
477
  status="complete"
436
478
  )
437
479
 
438
- Logger.print_message(
439
- level="D",
440
- message=f"Cipher doFinal received\n{stack_trace}",
441
- script_location=script_location
442
- )
480
+ if not self._suppress_messages:
481
+ Logger.print_message(
482
+ level="D",
483
+ message=f"Cipher doFinal received\n{stack_trace}",
484
+ script_location=script_location
485
+ )
443
486
 
444
487
  elif module == "messageDigest.update":
445
488
  hashcode = received_data.get('hashcode', None)
446
489
  algorithm = received_data.get('algorithm', None)
447
490
  bInput = received_data.get('input', None)
448
- self._crypto_db.insert_digest(hashcode, algorithm, bInput, None, stack_trace=stack_trace)
491
+ self._crypto_db.insert_digest(self._package, hashcode, algorithm, bInput, None, stack_trace=stack_trace)
449
492
 
450
493
  elif module == "messageDigest.digest":
451
494
  hashcode = received_data.get('hashcode', None)
452
495
  algorithm = received_data.get('algorithm', None)
453
496
  bInput = received_data.get('input', None) # Se não existir teve um messageDigest.update antes
454
497
  bOutput = received_data.get('output', None)
455
- self._crypto_db.insert_digest(hashcode, algorithm, bInput, bOutput, stack_trace=stack_trace)
498
+ self._crypto_db.insert_digest(self._package, hashcode, algorithm, bInput, bOutput, stack_trace=stack_trace)
456
499
 
457
500
  hash_hex = ""
458
501
  if bOutput is not None:
@@ -465,12 +508,13 @@ class Crypto(ModuleBase):
465
508
  pass
466
509
 
467
510
  # Do not print TLS certificate verification hash
468
- if 'com.android.org.conscrypt.ConscryptEngine.verifyCertificateChain' not in stack_trace:
469
- Logger.print_message(
470
- level="D",
471
- message=f"Message digest\nAlgorithm: {algorithm}\nHash: {hash_hex}\n{stack_trace}",
472
- script_location=script_location
473
- )
511
+ if not self._suppress_messages:
512
+ if 'com.android.org.conscrypt.ConscryptEngine.verifyCertificateChain' not in stack_trace:
513
+ Logger.print_message(
514
+ level="D",
515
+ message=f"Message digest\nAlgorithm: {algorithm}\nHash: {hash_hex}\n{stack_trace}",
516
+ script_location=script_location
517
+ )
474
518
 
475
519
  return True
476
520
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frida-fusion
3
- Version: 0.1.11
3
+ Version: 0.1.12
4
4
  Summary: Hook your mobile tests with Frida
5
5
  Author-email: "Helvio Junior (M4v3r1ck)" <helvio_junior@hotmail.com>
6
6
  Maintainer-email: "Helvio Junior (M4v3r1ck)" <helvio_junior@hotmail.com>
File without changes
File without changes
File without changes
File without changes