我目前正在分析 x86 中的反汇编库文件 (.so)。有一个函数被调用get_random_key,我无法理解它。这不仅很奇怪,而且我个人认为由于内存限制,这甚至是不允许的。这是它的代码(用 IDA 反汇编):
sub_685 proc near ; CODE XREF: get_random_keyp
mov ecx, [esp+0]
retn
sub_685 endp
public get_random_key
get_random_key proc near ; CODE XREF: get_generated_key+15p
call sub_685
add ecx, 1AFFh
lea eax, [ecx+3Ch]
retn
get_random_key endp
从我在这里看到它加载堆栈顶部的内容,向其添加 0x1AFF(6911!!) 然后将其解释为指针并向其添加 0x3C 并返回。这是一个相当小的库,很可能它最初是用 C 编写的。我想不出任何会产生这样的东西的代码。在我看来,这会导致 9/10 次出现分段错误。这是一个通过 Java 加载到 android 应用程序中的库,大小约为 6kb。
我很高兴对这个功能的每一个提示:)