如何检测.so文件中的Java字符串?

时间:2012-08-02 16:26:58

标签: java reverse-engineering nasm disassembly

我正在重新编译Java程序,我有以下方法:

public static native String getMyString(String s);

getMyString在mylibrary.so中实现,如下所示:

; Scrambler::getMyString(char  const*)
EXPORT _ZN9Scrambler18getMyStringEPKc
_ZN9Scrambler18getMyStringEPKc
LDR             R1, =(mystring - 0x14FC8)
PUSH            {R4-R6,LR}
ADD             R1, PC  ; "mystring"
MOV             R4, R0
BLX             strcasecmp
CMP             R0, #0
BNE.W           loc_150FC

最终在

LDR             R5, =(unk_6AE24 - 0x14FD8)
ADD             R5, PC

此处R5似乎是返回值。

unk_6AE24如下所示:

                                              27
68 5D 6D 06 3F 10 6D 26  32 10 56 12 06 3F 32 5D
12 27 26 4B 0D 5D 27 4B  6E 0D 2B 06 32 5D 68 24
3F 32 06 24 70 56 00 63  69 4C 1D 06 5A 7F 0C 34
1E 67 3B 63 32 5F 16 1D  34 5F 1E 32 42 69 18 49
3F 51 49 0C 1F 0C 0E 77  2F 44 69 7F 5A 0C 0B 34
0C 34 1C 24 32 5F 7F 00  00 00 00 1D 30 3B 5F 30

IDA建议,有问题的字符串是27 68 5D 6D或“'h] m”,但我有疑虑。当我使用c ++很久以前,字符串过去以0结尾,这将使返回值为27 68 5D 6D 06 3F 10 6D 26 32 10 56 12 06 3F 32 5D 12 27 26 4B 0D 5D 27 4B 6E 0D 2B 06 32 5D 68 24 3F 32 06 24 70 56。或者我们可以谈论java字符串,它可能有自己的格式。

getMyString会返回哪种字符串?

1 个答案:

答案 0 :(得分:1)

  

getMyString会返回什么类型的字符串?

它将返回java.lang.String,您可以从声明中获得。

实际的角色数据(可能)将是一个重定向。 (String可能是指向char数组和大小的指针。请记住,在Java中,char是16位。

无论如何,你还想做什么?在getMyString返回后立即设置断点并查看调试器中的返回值会更容易。