如何快速定位native方法在对应so中的位置
来源:互联网 发布:旅行社地接计调软件 编辑:程序博客网 时间:2024/06/07 12:12
转自:http://www.jianshu.com/p/03800b72a367
前言
在逆向的时候,有些应用有一大堆的so,而且都是提前加载好,有的so甚至做了处理,很难看出函数名。本文讲述的方法可以快速定位:
- native方法的实现在哪个so中
- 在so中的哪个位置
原理
我们知道,在使用native方法之前,需要先load对应的so。 在load so的时候,其实就是dlopen该so。 不管你是否主动注册了方法映射,系统都是通过dlsys来获取对应的实现函数,并将其和java层的method关联起来,具体参见Dalvik虚拟机原理及Xposed hook原理
在调用native方法时,通过桥接的方式来调用:
DalvikBridgeFunc bridge = gDvmJni.useCheckJni ? dvmCheckCallJNIMethod : dvmCallJNIMethod;
其实就是dvmCallJNIMethod
。
ok,在这个函数中,我们可以将方法名和对应的底层函数地址打印出来即可:
ALOGI("invoke native method %s, addr:%p", method->name, method->insns);
日志如下:
就这么简单。
但是还有几个地方得说一下:
- 这个
addr
是运行时候的虚拟地址,如何知道是哪个so呢?
这就需要使用ida调试一下,当断点断下来时,按G
跳转到这个地址,你将会在左侧看出是加载了哪个so,将这个地址减去这个so的加载基地址,就可以获取到函数在so中的地址了。
还有另外一种获取基址且不需要调试的方法,直接查看/proc/$pid/maps映射
- 如何添加打印的代码?
两种选择:编译源码和native hook。
编译源码见ubuntu14.04编译Android4.4源码
native hook见Android Inline Hook 详解
0 0
- 如何快速定位native方法在对应so中的位置
- 如何在Linux ELF格式的文件(可执行binary,以及so文件)中定位到对应的函数位置
- 如何混合native办法在so库函数对应关系
- Visual studio 快速定位打开文件在项目中的位置
- 如何定位OOPS信息在源文件中的位置
- eclipse mybatis 实现快速定位对应的xml位置 MyBatipse
- 如何快速定位Android内存泄漏位置
- 如何在vs2008,vs2010的解决方案管理器中快速定位文件位置
- 如何在Android源码里查找Java中native方法对应的C++实现
- 如何定位PLSQL程序包中的错误位置?
- 如何在iframe上定位鼠标位置
- 定位单词在字符串数组中的位置
- JS定位光标在textarea中的位置
- JNI搭建:native方法注册或NDK中的方法对应
- JNI搭建:native方法注册或NDK中的方法对应
- JNI搭建:native方法注册或NDK中的方法对应
- 分散在不同文件夹中的.h文件如何在VC2010中得到快速定位并打开?
- 如何检测死锁并快速定位死锁位置
- java中Excel导出
- Android Studio 及 Eclipse 导出生成签名apk包方法
- 《Python Web开发实战》踩地雷记17/3/25
- linux命令之hostname
- CC2530基础实验五 ADC转换实验
- 如何快速定位native方法在对应so中的位置
- 使用skimage.color.rgb2hsv时的一些注意事项
- ValueAnimator的简单介绍和使用
- 《深入理解java虚拟机》读书笔记:java内存区域
- 访问本地环境时出现The requested URL / was not found on this server.
- java——Scanner类
- 不通的页面,点击导航改变背景色--(代码优化后)
- 2017跟着小虎玩着去软考--项目管理师上午考试试题之二(解析2016下半年项目管理师上午试题5-7题)
- 30岁前阅读让你少奋斗十年