frida-fusion 0.1.20__tar.gz → 0.1.21__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.
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/PKG-INFO +1 -1
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/__meta__.py +2 -2
- frida_fusion-0.1.21/frida_fusion/modules/log/log.js +83 -0
- frida_fusion-0.1.21/frida_fusion/modules/log/log.py +73 -0
- frida_fusion-0.1.21/frida_fusion/modules/tls_unpinning/__init__.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion.egg-info/PKG-INFO +1 -1
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion.egg-info/SOURCES.txt +3 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/LICENSE +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/README.md +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/__init__.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/__main__.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/args.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/config.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/exceptions.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/fusion.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/libs/__init__.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/libs/color.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/libs/database.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/libs/helpers.js +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/libs/logger.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/libs/scriptlocation.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/module.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/__init__.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/android_setings/__init__.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/android_setings/settings.js +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/android_setings/settings.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/crypto/__init__.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/crypto/crypto.js +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/crypto/crypto.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/hermes_injector/__init__.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/hermes_injector/hermes_hook.js +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/hermes_injector/hermes_injector.js +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/hermes_injector/hermes_injector.py +0 -0
- {frida_fusion-0.1.20/frida_fusion/modules/shared_preferences → frida_fusion-0.1.21/frida_fusion/modules/log}/__init__.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/okhttp_logging/okhttp-logging.js +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/okhttp_logging/okhttp-logging.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/reflection/reflection-stalker.js +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/reflection/reflection-stalker.py +0 -0
- {frida_fusion-0.1.20/frida_fusion/modules/tls_unpinning → frida_fusion-0.1.21/frida_fusion/modules/shared_preferences}/__init__.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/shared_preferences/shared_preferences.js +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/shared_preferences/shared_preferences.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/tls_unpinning/frida_multiple_unpinning.py +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion.egg-info/dependency_links.txt +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion.egg-info/entry_points.txt +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion.egg-info/requires.txt +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion.egg-info/top_level.txt +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/pyproject.toml +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/setup.cfg +0 -0
- {frida_fusion-0.1.20 → frida_fusion-0.1.21}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frida-fusion
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.21
|
|
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.
|
|
1
|
+
__version__ = '0.1.21'
|
|
2
2
|
__title__ = "Frida Fusion"
|
|
3
3
|
__description__ = "📱 frida-fusion - runtime mobile exploration"
|
|
4
4
|
__url__ = "https://github.com/helviojunior/frida-fusion"
|
|
5
|
-
__build__ =
|
|
5
|
+
__build__ = 0x3a1fd58
|
|
6
6
|
__author__ = "Helvio Junior (M4v3r1ck)"
|
|
7
7
|
__author_email__ = "helvio_junior@hotmail.com"
|
|
8
8
|
__license__ = "GPL-3.0"
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// log.js
|
|
2
|
+
// Intercept android.util.Log.*
|
|
3
|
+
|
|
4
|
+
setTimeout(function () {
|
|
5
|
+
|
|
6
|
+
Java.perform(function () {
|
|
7
|
+
var Log = null;
|
|
8
|
+
try {
|
|
9
|
+
Log = Java.use("android.util.Log");
|
|
10
|
+
} catch (err) {
|
|
11
|
+
fusion_sendMessage('E', `Class android.util.Log not found: ${err}`);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
var methods = ['d', 'i', 'w', 'e', 'v', 'wtf', 'println'];
|
|
16
|
+
|
|
17
|
+
function argToStr(a) {
|
|
18
|
+
try {
|
|
19
|
+
if (a === null || a === undefined) return String(a);
|
|
20
|
+
// alguns objetos Java têm toString() seguros
|
|
21
|
+
return a.toString();
|
|
22
|
+
} catch (e) {
|
|
23
|
+
try { return JSON.stringify(a); } catch(_) { return '[unprintable]'; }
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
methods.forEach(function (m) {
|
|
28
|
+
if (typeof Log[m] === 'undefined') return;
|
|
29
|
+
|
|
30
|
+
var overloads = Log[m].overloads;
|
|
31
|
+
for (var j = 0; j < overloads.length; j++) {
|
|
32
|
+
(function (ov, methodName, idx) {
|
|
33
|
+
// guarda referência à implementação existente (pode ser null)
|
|
34
|
+
var origImpl = ov.implementation;
|
|
35
|
+
|
|
36
|
+
ov.implementation = function () {
|
|
37
|
+
var args = [];
|
|
38
|
+
for (var k = 0; k < arguments.length; k++) args.push(arguments[k]);
|
|
39
|
+
|
|
40
|
+
// tenta extrair tag/msg conforme padrões conhecidos
|
|
41
|
+
var tag = args.length > 0 ? argToStr(args[0]) : "";
|
|
42
|
+
var msg = args.length > 1 ? argToStr(args[1]) : "";
|
|
43
|
+
var extra = "";
|
|
44
|
+
if (args.length === 3 && typeof args[0] === 'number') {
|
|
45
|
+
extra = "priority=" + args[0] + " ";
|
|
46
|
+
tag = argToStr(args[1]);
|
|
47
|
+
msg = argToStr(args[2]);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
fusion_sendKeyValueData('android.util.Log', [
|
|
51
|
+
{ key: "Level", value: m },
|
|
52
|
+
{ key: "Tag", value: tag },
|
|
53
|
+
{ key: "Message", value: msg },
|
|
54
|
+
{ key: "RawArgs", value: args }
|
|
55
|
+
]);
|
|
56
|
+
|
|
57
|
+
// se quiser enviar para o host:
|
|
58
|
+
// send({type: "log", level: methodName, tag: tag, msg: msg, rawArgs: args});
|
|
59
|
+
|
|
60
|
+
// chama implementação original se for uma função válida
|
|
61
|
+
try {
|
|
62
|
+
if (origImpl && typeof origImpl === 'function') {
|
|
63
|
+
return origImpl.apply(this, arguments);
|
|
64
|
+
} else {
|
|
65
|
+
// fallback seguro:
|
|
66
|
+
// a maioria dos métodos Log.* retorna int (0 em caso de "ok")
|
|
67
|
+
// retornar 0 evita crashes quando não há implementação original
|
|
68
|
+
return 0;
|
|
69
|
+
}
|
|
70
|
+
} catch (callErr) {
|
|
71
|
+
// captura qualquer erro ao chamar a implementação original
|
|
72
|
+
fusion_sendMessage('E', `Erro ao chamar implementação original de Log.${methodName}: ${callErr}`);
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
})(overloads[j], m, j);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
fusion_sendMessage('W', "Hook android.util.Log to: " + methods.join(", "));
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
}, 0);
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import os.path
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from frida_fusion.libs.logger import Logger
|
|
5
|
+
from frida_fusion.libs.database import Database
|
|
6
|
+
from frida_fusion.libs.scriptlocation import ScriptLocation
|
|
7
|
+
from frida_fusion.module import ModuleBase
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class AndroidLog(ModuleBase):
|
|
11
|
+
def __init__(self):
|
|
12
|
+
super().__init__('Log', 'Hook android.util.Log.* functions')
|
|
13
|
+
self._package = None
|
|
14
|
+
self._suppress_messages = False
|
|
15
|
+
self.mod_path = str(Path(__file__).resolve().parent)
|
|
16
|
+
|
|
17
|
+
def start_module(self, **kwargs) -> bool:
|
|
18
|
+
if 'db_path' not in kwargs:
|
|
19
|
+
raise Exception("parameter db_path not found")
|
|
20
|
+
|
|
21
|
+
self._package = kwargs['package']
|
|
22
|
+
return True
|
|
23
|
+
|
|
24
|
+
def js_files(self) -> list:
|
|
25
|
+
return [
|
|
26
|
+
os.path.join(self.mod_path, "log.js")
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
def suppress_messages(self):
|
|
30
|
+
self._suppress_messages = True
|
|
31
|
+
|
|
32
|
+
def key_value_event(self,
|
|
33
|
+
script_location: ScriptLocation = None,
|
|
34
|
+
stack_trace: str = None,
|
|
35
|
+
module: str = None,
|
|
36
|
+
received_data: dict = None
|
|
37
|
+
) -> bool:
|
|
38
|
+
|
|
39
|
+
if 'android.util.Log' in module:
|
|
40
|
+
level = received_data.get('level', "I")
|
|
41
|
+
if level is None:
|
|
42
|
+
level = "I"
|
|
43
|
+
message = received_data.get('message', '')
|
|
44
|
+
tag = received_data.get('tag', '')
|
|
45
|
+
if tag is None or tag.strip() == '':
|
|
46
|
+
tag = None
|
|
47
|
+
try:
|
|
48
|
+
received_data['rawargs'] = json.loads(received_data.get('rawargs', ''))
|
|
49
|
+
except Exception:
|
|
50
|
+
pass
|
|
51
|
+
|
|
52
|
+
# raw_args = received_data.get('rawargs', '')
|
|
53
|
+
|
|
54
|
+
if not self._suppress_messages:
|
|
55
|
+
Logger.print_message(
|
|
56
|
+
level=level.upper(),
|
|
57
|
+
message=f"{message}",
|
|
58
|
+
script_location=ScriptLocation(
|
|
59
|
+
file_name=tag,
|
|
60
|
+
line=f"{script_location.file_name}:{script_location.line}",
|
|
61
|
+
function_name=script_location.function_name
|
|
62
|
+
) if tag is not None else script_location
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
return True
|
|
66
|
+
|
|
67
|
+
def data_event(self,
|
|
68
|
+
script_location: ScriptLocation = None,
|
|
69
|
+
stack_trace: str = None,
|
|
70
|
+
received_data: str = None
|
|
71
|
+
) -> bool:
|
|
72
|
+
# Nothing by now
|
|
73
|
+
return True
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frida-fusion
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.21
|
|
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>
|
|
@@ -33,6 +33,9 @@ frida_fusion/modules/hermes_injector/__init__.py
|
|
|
33
33
|
frida_fusion/modules/hermes_injector/hermes_hook.js
|
|
34
34
|
frida_fusion/modules/hermes_injector/hermes_injector.js
|
|
35
35
|
frida_fusion/modules/hermes_injector/hermes_injector.py
|
|
36
|
+
frida_fusion/modules/log/__init__.py
|
|
37
|
+
frida_fusion/modules/log/log.js
|
|
38
|
+
frida_fusion/modules/log/log.py
|
|
36
39
|
frida_fusion/modules/okhttp_logging/okhttp-logging.js
|
|
37
40
|
frida_fusion/modules/okhttp_logging/okhttp-logging.py
|
|
38
41
|
frida_fusion/modules/reflection/reflection-stalker.js
|
|
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
|
{frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/android_setings/__init__.py
RENAMED
|
File without changes
|
{frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/android_setings/settings.js
RENAMED
|
File without changes
|
{frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/android_setings/settings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/hermes_injector/__init__.py
RENAMED
|
File without changes
|
{frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/hermes_injector/hermes_hook.js
RENAMED
|
File without changes
|
{frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/hermes_injector/hermes_injector.js
RENAMED
|
File without changes
|
{frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/hermes_injector/hermes_injector.py
RENAMED
|
File without changes
|
|
File without changes
|
{frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/okhttp_logging/okhttp-logging.js
RENAMED
|
File without changes
|
{frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/okhttp_logging/okhttp-logging.py
RENAMED
|
File without changes
|
{frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/reflection/reflection-stalker.js
RENAMED
|
File without changes
|
{frida_fusion-0.1.20 → frida_fusion-0.1.21}/frida_fusion/modules/reflection/reflection-stalker.py
RENAMED
|
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
|