首先,它们中的一些直接访问存储器,这意味着一些地址,例如
0xff5ff080
,0xff5ff0a8
已被硬编码到程序中。其次,我在加载的库和wget本身中找不到它们。第三,更奇怪的是,通过传递参数(IARG_MEMORYREAD_EA)
来获取所访问内存的虚拟地址。我得到了地址,例如0xffffffffff5ff080
,0xffffffffff5ff0a8
等,它们都不属于程序的存储空间。有人建议我一些建议吗?。
#1 楼
这是来自vDSO的代码,内核将其映射到每个进程,而不是wget二进制文件。您可能可以通过检查/proc/<pid>/maps
文件来弄清楚。这是我在IDA中获得的
gettimeofday
的内容:.text:FFFFFFFFFF700D17 mov rbx, 0FFFFFFFFFFDFF000h
.text:FFFFFFFFFF700D1E lsl r11d, eax
.text:FFFFFFFFFF700D22 xor r15d, r15d
.text:FFFFFFFFFF700D25 mov r10d, r11d
.text:FFFFFFFFFF700D28 mov r9d, ds:0FFFFFFFFFF5FF080h
.text:FFFFFFFFFF700D30 test r9b, 1
.text:FFFFFFFFFF700D34 jnz loc_FFFFFFFFFF700FDF
.text:FFFFFFFFFF700D3A mov rax, ds:0FFFFFFFFFF5FF0A8h
.text:FFFFFFFFFF700D42 mov r13d, ds:0FFFFFFFFFF5FF088h
.text:FFFFFFFFFF700D4A mov [rdi], rax
.text:FFFFFFFFFF700D4D mov edx, ds:0FFFFFFFFFF5FF088h
.text:FFFFFFFFFF700D54 mov r14, ds:0FFFFFFFFFF5FF0B0h
似乎PIN的反汇编程序选择不对地址进行符号扩展(在操作码中以4字节编码的地址)。
评论
非常感谢Igor Skochinsky,您真的过得很愉快。我以前从未听说过vDSO。
– Ta Thanh Dinh
13年11月21日在8:44
评论
您有这些指令的操作码字节吗?什么是EIP?是在wget二进制文件本身中还是在共享对象之一中?谢谢,但是EIP似乎很正常。我已编辑问题以添加EIP值。这些指令位于二进制文件本身中。
看来您跳入了一条指令之间。意味着您的反汇编程序将操作码解释为完全错误的。例如,当您通过模糊检查覆盖寄信人地址时,就会发生这种情况。
谢谢,我怀疑这是问题所在。因为在发生这种情况之前,我看到了一个间接跳转:“ jmp qword ptr [rip + 0x21388a]”,在经过几条指令后,它们都变得混乱了。
不幸的是,通过记录其静态跟踪,即在模糊之前,我发现这些指令存在。如果您想看一眼,请在此处提供此跟踪信息