diff --git a/androscalpel/src/instructions.rs b/androscalpel/src/instructions.rs index ad28a6d..69a0dfb 100644 --- a/androscalpel/src/instructions.rs +++ b/androscalpel/src/instructions.rs @@ -4010,7 +4010,7 @@ impl MoveObject { } #[new] - pub fn new(from: u16, to: u16) -> Self { + pub fn new(to: u16, from: u16) -> Self { Self { from, to } } diff --git a/test.py b/test.py index e42c35a..968582c 100644 --- a/test.py +++ b/test.py @@ -82,8 +82,6 @@ new_apk = Apk() for dex in dex_raw: new_apk.add_dex_file(dex) -print(f"{new_apk == apk=}") - # print("[+] Repackage") # @@ -97,7 +95,65 @@ print(f"{new_apk == apk=}") # ) -def cmp(a, b): +def cmp(a, b, req=0): + if req > 6: + return + if type(a) == dict: + cmp_dict(a, b, req) + elif type(a) == list: + cmp_list(a, b, req) + else: + cmp_other(a, b, req) + + +def cmp_other(a, b, req=0): + ident = " " * req for f in dir(a): if getattr(getattr(a, f), "__call__", None) is None: - print(f"{f}: {getattr(a, f) == getattr(b, f)}") + eq = getattr(a, f) == getattr(b, f) + print(f"{f'{ident}{f}: ':<150}{eq}") + if not eq: + cmp(getattr(a, f), getattr(b, f), req + 1) + + +def cmp_dict(a, b, req=0): + ident = " " * req + keys_a = set(a.keys()) + keys_b = set(b.keys()) + if keys_a != keys_b: + print(f"{ident}a.keys() != b.keys()") + for key in keys_a & keys_b: + eq = a[key] == b[key] + print(f"{f'{ident}{str(key)}: ':<150}{eq}") + if not eq: + cmp(a[key], b[key], req + 1) + + +def cmp_list(a, b, req=0): + ident = " " * req + la = len(a) + lb = len(b) + if la != lb: + print(f"{ident}len(a) != len(b)") + for i in range(min(la, lb)): + eq = a[i] == b[i] + print(f"{f'{ident}{str(i)}: ':<150}{eq}") + if not eq: + cmp(a[i], b[i], req + 1) + + +apk_eq = new_apk == apk +print(f"apk are equals: {apk_eq}") +if not apk_eq: + cmp(new_apk, apk) + +mid = IdMethod( + "setAction", + IdMethodType( + IdType("Landroidx/navigation/NavDeepLink$Builder;"), + [IdType("Ljava/lang/String;")], + ), + IdType("Landroidx/navigation/NavDeepLink$Builder;"), +) +m = apk.classes[mid.class_].virtual_methods[mid] +nm = new_apk.classes[mid.class_].virtual_methods[mid]