首页
社区
课程
招聘
[求助]Android中使用LD_PRELAD拦截函数
发表于: 2014-11-14 22:55 5808

[求助]Android中使用LD_PRELAD拦截函数

2014-11-14 22:55
5808
问题描述:

我的Android应用希望hook libc.so中的一些函数,比如socket, strmcp。

于是我写了一个hack.c,编译成so,用于拦截:
hack.so
  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <android/log.h>
  4 #define TAG "hookJavaMethod"
  5 
  6 int strcmp(const char *s1, const char *s2) {
  7     __android_log_print(ANDROID_LOG_INFO, TAG, "hack function invoked.s1=<%s> s2=<%s>\n", s1, s2);
  8     return 0;
  9 }


同时,还有一个在java层System.loadLibrary的so(System.loadLibrary(main.so))

在这个so里,我在jin_onload里去设置环境变量ld_preload:

JNIEXPORT jnit jni_onload(JavaVM * jvm, void *reserved){
   setenv("LD_PRELOAD", "/data/data/com.example.hellojni/lib/hack.so");
   return JNI_VERSION_1_4;
}



希望拦截掉我后续的strcpm函数调用,可是完全不起作用,不知道为什么,求解~

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
那个得load 的时候才有用。 你现在程序都跑起来了,这个变量没有用的。
2014-11-14 23:12
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你的意思是android应用起来时,libc.so已经加载进来了,再设置LD_PRELOAD是没有作用的对么。

那不是没有办法,在程序运行过程中拦截掉函数调用么?
2014-11-14 23:18
0
游客
登录 | 注册 方可回帖
返回
//