首页
社区
课程
招聘
[原创]注入安卓进程,并hook java世界的方法
2014-3-28 14:16 189209

[原创]注入安卓进程,并hook java世界的方法

2014-3-28 14:16
189209
收藏
点赞1
打赏
分享
最新回复 (161)
雪    币: 132
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
luyikk 2014-4-24 17:38
51
0
http://bbs.pediy.com/attachment.php?attachmentid=88656&stc=1&d=1398332237

大神这个是什么情况~ 无法打开DLL OPEN后 返回地址为 0

求帮助~
上传的附件:
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2014-4-24 18:32
52
0
这个inject模块是不太好用滴
网上还有很多的实现版本,你可以试试看
雪    币: 230
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
lasvegas 2014-4-25 12:46
53
0
玩的越来越彻底了
雪    币: 70
活跃值: (64)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
yiyiguxing 1 2014-4-25 20:23
54
0
别的进程注入都没什么问题,zygote注入后,detach会有问题。看了提示,invalid parameter。试了几种方法解决都没成功,不知什么原因。
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuwll 2014-5-12 08:58
55
0
可能我理解的不深,不知到把一个java方法改为native方法后,然后再去怎么做?hook不是要跑完自己写的程序,然后再回到原程序中嘛,这个hook方案的话,怎么对接??
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2014-5-12 21:04
56
0
对接的情况还没有考虑到
雪    币: 370
活跃值: (1181)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
ThomasKing 6 2014-5-14 08:44
57
0
谢谢楼主分享啊,受教了!
雪    币: 0
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuwl 2014-5-15 14:40
58
0
楼主考没考虑将 对接那部分做出来呢??这个方式的hook感脚比字节吗的注入的隐藏效果更好。。或许做出来,会有更多的应用。。。
雪    币: 255
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小龙飞 2014-5-16 09:47
59
0
mark一下 有空学习
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2014-5-21 19:08
60
0
对接其实也是可以做的,我现在也在完善这个方案,有结果了我再放出来
雪    币: 0
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuwl 2014-5-22 09:59
61
0
嗯,一起加油,我回头也要想想有关对接的问题,回头一起讨论讨论!
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JackyYu 2014-5-29 21:15
62
0
Hi:楼主,请教下,为啥我找不到 #include "android_runtime/AndroidRuntime.h"呢?
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2014-5-30 23:16
63
0
你看下/jni/include/android_runtime/AndroidRuntime.h
看下这里包含了没有
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
specter117 2014-6-4 18:53
64
0
顶起 感谢楼主分享
雪    币: 22
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bfire 2014-6-13 14:14
65
0
art::mirror::ArtMethod *GetNativeMethod(JNIEnv *jenv){
        jclass clazzTarget = jenv->FindClass("java/lang/Object");
        if (ClearException(jenv)) { //编译 这个不识别,少了什么 header啊?
                ALOG("Exception","GetNativeMethod[Can't find class:%s in bootclassloader","java/lang/Object");
        }

        jmethodID method = jenv->GetMethodID(clazzTarget,"notifyAll","()V");
        if(method==NULL){
                ALOG("Exception","GetNativeMethod[Can't find method:%s","notifyAll");
                return false;
        }
        return reinterpret_cast<art::mirror::ArtMethod*>(method);
}
雪    币: 225
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
filly 1 2014-6-13 23:04
66
0
先留个mark
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2014-6-14 20:58
67
0
少了什么头文件吧,找找加上去
雪    币: 95
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
losted 2014-6-17 13:33
68
0
要调用原来的方法,可以借鉴这段代码
void* thread = dvmFindClass("Ljava/lang/Thread;", 0);
   
    const void* sleep = (const void*)dvmFindDirectMethodByDescriptor(thread, "sleep", "(J)V");
    if(sleep)
        LOGD("GetMethod sleep succeed %x", sleep);
    else
        LOGD("GetMethod sleep failed");
   
    jmethodID mirrorSleep = (jmethodID)malloc( METHODSIZE );
    memcpy((void*)mirrorSleep, sleep, METHODSIZE);
   
    Method *method = reinterpret_cast<Method *>(mirrorSleep);
   
    method->clazz = reinterpret_cast<ClassObject *>(clazz);
    method->name = "classLoaded";
   
    modifyMethodAttribute(mirrorSleep);
    dvmUseJNIBridge((void*)mirrorSleep, funcPtr);
   
   
    long rtnValue;
    dvmCallMethod(self, mirrorSleep, 0, (void*)&rtnValue, data);
    dvmClearException(self);
   
    free(mirrorSleep);
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2014-6-17 18:28
69
0
我的而方法是这样,直接内存拷贝存起来
        uint mlen = sizeof(Method);
        Method *oldMeth = (Method*)malloc(mlen);
        memcpy(oldMeth,method,mlen);
        info->odlMethod = oldMeth;
        info->curMethod = method;
调用原来的方法就把内存拷回去,再hook一次
        memcpy(hi->curMethod,hi->odlMethod,mlen);

        jmethodID om = (jmethodID)hi->curMethod;
        jenv->CallVoidMethod(me,om,gDevice_Sensors);

        ClassMethodHook(jenv,&baiduhookInfos[0]);
雪    币: 123
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wawt 2014-6-17 18:40
70
0
这个一定要学习的!
雪    币: 123
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kmsmxpro 2014-6-20 09:23
71
0
mark  学习下
雪    币: 244
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ShadoWWinL 2014-6-20 14:06
72
0
有个疑问

modifyMethodAttribute
具体修改了Method那些属性dvmCallMethod调用是不是还得恢复过来。

还有这是是调用静态的sleep如果是非静态的。那么this指针如何获得
也就是dvmCallMethod第三个参数如何获得?
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fujiangren 2014-6-26 09:56
73
0
那么高级,欣赏ing
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fujiangren 2014-6-26 09:58
74
0
那么高级 欣赏ing 一直想找个 c/C++ 的源代码学习学习
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xyzAA 2014-6-26 20:27
75
0
学习了,谢谢
游客
登录 | 注册 方可回帖
返回