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

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

2014-3-28 14:16
190282
收藏
免费 7
支持
分享
最新回复 (161)
雪    币: 132
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
51
http://bbs.pediy.com/attachment.php?attachmentid=88656&stc=1&d=1398332237

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

求帮助~
上传的附件:
2014-4-24 17:38
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
52
这个inject模块是不太好用滴
网上还有很多的实现版本,你可以试试看
2014-4-24 18:32
0
雪    币: 230
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
53
玩的越来越彻底了
2014-4-25 12:46
0
雪    币: 70
活跃值: (74)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
54
别的进程注入都没什么问题,zygote注入后,detach会有问题。看了提示,invalid parameter。试了几种方法解决都没成功,不知什么原因。
2014-4-25 20:23
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
55
可能我理解的不深,不知到把一个java方法改为native方法后,然后再去怎么做?hook不是要跑完自己写的程序,然后再回到原程序中嘛,这个hook方案的话,怎么对接??
2014-5-12 08:58
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
56
对接的情况还没有考虑到
2014-5-12 21:04
0
雪    币: 370
活跃值: (1180)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
57
谢谢楼主分享啊,受教了!
2014-5-14 08:44
0
雪    币: 0
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
楼主考没考虑将 对接那部分做出来呢??这个方式的hook感脚比字节吗的注入的隐藏效果更好。。或许做出来,会有更多的应用。。。
2014-5-15 14:40
0
雪    币: 255
活跃值: (207)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
59
mark一下 有空学习
2014-5-16 09:47
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
60
对接其实也是可以做的,我现在也在完善这个方案,有结果了我再放出来
2014-5-21 19:08
0
雪    币: 0
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
嗯,一起加油,我回头也要想想有关对接的问题,回头一起讨论讨论!
2014-5-22 09:59
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
Hi:楼主,请教下,为啥我找不到 #include "android_runtime/AndroidRuntime.h"呢?
2014-5-29 21:15
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
63
你看下/jni/include/android_runtime/AndroidRuntime.h
看下这里包含了没有
2014-5-30 23:16
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
顶起 感谢楼主分享
2014-6-4 18:53
0
雪    币: 22
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
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);
}
2014-6-13 14:14
0
雪    币: 225
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
66
先留个mark
2014-6-13 23:04
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
67
少了什么头文件吧,找找加上去
2014-6-14 20:58
0
雪    币: 95
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
68
要调用原来的方法,可以借鉴这段代码
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);
2014-6-17 13:33
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
69
我的而方法是这样,直接内存拷贝存起来
        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]);
2014-6-17 18:28
0
雪    币: 123
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
70
这个一定要学习的!
2014-6-17 18:40
0
雪    币: 123
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
71
mark  学习下
2014-6-20 09:23
0
雪    币: 246
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
72
有个疑问

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

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