我正在分析的 Android 应用程序调用本机库以生成特定值。这是来自 SMALI(反编译 Java)的本地库函数声明的示例:
.method private native createAlgorithmSolver(II)J
.end method
.method private native solveAlgorithm(Ljava/lang/String;IJ)[I
.end method
这是有道理的。createAlgorithmSolver 接受两个整数,并返回一个长整数。solveAlgorithm 接受 32 个字符的字符串,例如“SM1r0WeJH6qxdfNua2zg7t8ITwQUZYn5”,它接受一个 int 和一个 long,并返回一个 int 数组。
当我用 IDA Hex-rays 反编译器反编译实际的“.so”文件时,我得到这个:
createAlgorithmSolver(int a1, int a2, unsigned int a3, int a4)
solveAlgorithm(int a1, int a2, int a3, unsigned int a4, signed int a5)
当我将“Retargetable Decompiler”(https://retdec.com)与 Python 伪代码一起使用时,我得到以下函数声明:
def createAlgorithmSolver(a1, a2):
def solveAlgorithm(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17):
是什么导致了这些奇怪的差异?