如何通过frida获取模块偏移


#1

ios的模块加载到内存之后都会有一个偏移地址,通过lldb的image list -o 可以打印出来,缺点是需要启动debugserver;

那能否通过frida获取到呢?
或者其它的比较便捷的方法?


#2
session = device.attach(u'xxxx')
moduels = session.enumerate_modules()
moduels.sort(key = lambda item : item.base_address)
for module in moduels:
		outWrite('%-40s\t%-10s\t%-10s\t%s' % (module.name, hex(module.base_address), hex(module.size), module.path))

#3

#4

感谢回答
module.base_address获取的是偏移后的地址
即 偏移后的模块基地址 = 偏移前的模块基地址 + ASLR偏移
我是想通过frida来获取ASLR偏移


#5

直接使用 dyld 的 _dyld_get_image_* 系列函数

#include <stdio.h>
#include <mach-o/dyld.h>

int main()
{
	printf("%lx", _dyld_get_image_vmaddr_slide(0));
	return 0;
}

转换成 frida

➜  /tmp cc 1.c -o 1 && ./1
10e3000
➜  /tmp frida -f 1
     ____
    / _  |   Frida 10.6.26 - A world-class dynamic instrumentation framework
   | (_| |
    > _  |   Commands:
   /_/ |_|       help      -> Displays the help system
   . . . .       object?   -> Display information about 'object'
   . . . .       exit/quit -> Exit
   . . . .
   . . . .   More info at http://www.frida.re/docs/home/
Spawned `1`. Use %resume to let the main thread start executing!
[Local::1]-> addr = Module.findExportByName('dyld', '_dyld_get_image_vmaddr_slide')
"0x11ad262c4"
[Local::1]-> func = new NativeFunction(addr, 'ulong', ['ulong'])
function
[Local::1]-> func(0)
"192561152"
[Local::1]-> func(0).toString(16)
"b7a4000"
[Local::1]-> %resume
stdout> b7a4000
stderr>
stdout>
Process terminated
[Local::1]->

Thank you for using Frida!
➜  /tmp

#6

谢谢,受教了