Frida Android hook native层__system_property_get的最终方案
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Frida Android hook native层__system_property_get的最终方案,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2045字,纯文字阅读大概需要3分钟。
内容图文
![Frida Android hook native层__system_property_get的最终方案](/upload/InfoBanner/zyjiaocheng/1135/36bdf23ea09a45aaa12399a97546ee90.jpg)
记录这个问题的起因是,在hook时遇到了修改内容长度,超过原长度时,会出现显示不全的问题。
比如把nexus 5改成nexus 100,只会显示nexus 1。
所以去读了下源码
int __system_property_read(const prop_info *pi, char *name, char *value) { unsigned serial, len; for(;;) { serial = pi->serial; while(SERIAL_DIRTY(serial)) { __futex_wait((volatilevoid *)&pi->serial, serial, 0); serial = pi->serial; } len = SERIAL_VALUE_LEN(serial); memcpy(value, pi->value, len + 1); if(serial == pi->serial) { if(name != 0) { strcpy(name, pi->name); } return len; } } } int __system_property_get(constchar *name, char *value) { const prop_info *pi = __system_property_find(name); if(pi != 0) { return __system_property_read(pi, 0, value); } else { value[0] = 0; return0; } }
可以看到源码中get调用了read来读value,传进去了find返回的指针,但是name给的是0,所以在read中没法直接判断读的是哪个key,还是要hook get。
而长度的限制来自read内部的len实现,不能通过改参数的办法修改,所以用了个别扭的方法先修改了read返回值的长度,再修改get的value,脚本如下:
Interceptor.attach(Module.findExportByName("libc.so", "__system_property_read"), { onEnter: function (args) { //sLog("__system_property_read onEnter " + Memory.readCString(args[0])); }, onLeave: function (retval) { //sLog(retval) retval.replace(0x5b);//修改read的返回值 } }); var str = "" var args2 = ""; Interceptor.attach(Module.findExportByName("libc.so", "__system_property_get"), { onEnter: function (args) { str = getStr(args[0]); args2 = ptr(args[1]); }, onLeave: function (retval) { if (str) { if (str.indexOf("ro.serialno") != -1) { var before = getStr(args2) putStr(args2, "05b3c6d30a280000") sLog(str + " " + before + " 改成 " + getStr(args2)); } } } });
其中hook read的返回值长度不是乱写的,因为system_properties.h源码中有限制最大长度
#define PROP_NAME_MAX 32 #define PROP_VALUE_MAX 92
hex(92) = ‘0x5c‘
所以我把read的返回值改成了0x5b,减了1,肯定也够用了。
源码全文参考
https://android.googlesource.com/platform/bionic/+/0d787c1fa18c6a1f29ef9840e28a68cf077be1de/libc/bionic/system_properties.c
https://android.googlesource.com/platform/bionic/+/49f0a8f23bba188466c6ee3652858ef4da228c6f/libc/include/sys/system_properties.h
原文:https://www.cnblogs.com/xirtam/p/10875993.html
内容总结
以上是互联网集市为您收集整理的Frida Android hook native层__system_property_get的最终方案全部内容,希望文章能够帮你解决Frida Android hook native层__system_property_get的最终方案所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。