能力值:
( LV2,RANK:10 )
|
-
-
2 楼
这日志已经说的很清楚了,文件路径错误(dex_cache != dex_file),后面是检查路径的那一行代码。话说你都能hook了 也顺便把检查路径的那行代码也hook了不就行了
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
jmethodID mtd_mark = env->GetStaticMethodID(javaClass, "nativeMark", "()V");
if (!mtd_mark)
return -1;
size_t startAddress = (size_t) mtd_mark;
size_t targetAddress = (size_t) mark;
void* art_work_around_app_jni_bugs = ptr_art_work_around_app_jni_bugs();
// if (art_work_around_app_jni_bugs) {
// targetAddress = (size_t)art_work_around_app_jni_bugs;
// }
int offset = 0;
bool found = false;
size_t addr = 0;
while (true) {
addr = startAddress + offset;
if (addr == targetAddress) {
found = true;
break;
}
offset += 4;
if (offset >= 100) {
LOGW("Ops: Unable to find the jni function.");
break;
}
}
env->UnregisterNatives(javaClass);
env->DeleteLocalRef(javaClass);
if (found) {
if (!isArt) {
offset += (sizeof(int) + sizeof(void *));
}
LOGW("Hoho, Get the offset : %d.", offset);
return offset;
}
楼主,这个地方去获取本地函数和java函数的偏移一直报错,为什么不直接HookopenDexFile这个函数
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
请问作者你解决问题了么?内存加载dex不是主要用在加密dex文件内从中解密得到byte[]直接内存中加载么,怎么传到进这个DexFile::OpenMemory里面啊。。看你的demo是mmap一个class.dex文件做的。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
他这个是三星的rom,没源码都不知道hoot那个函数,原生的没有这个检查的
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
楼主,你试过6.0么,照着你的试了下6.0,,崩了
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
崩在opemmemory函数里面
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
代码目前还在完善中,后面会用不同的方案实施,这里就不一一回答了,原来的方案的确会有不少问题,但至少Hook JNI 方法应该是没有问题的。至于在什么情况下出问题,请说一下设备环境吧,有空我去测试一下。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
随便找了两个6.0的手机,一个华为的,一个小米的,直接参照你的demo代码,加上api23的处理,调用libart.so中的DexFile::OpenMemory(const uint8_t* base,...)函数,两台手机都崩来在openmemory函数内部,似乎是地址出错了,比如小米MAX:
11-30 15:35:54.195 533-533/? A/DEBUG: pid: 11195, tid: 11224, name: Thread-153 >>> com.test.shellapp <<<
11-30 15:35:54.195 533-533/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xfe9cec1e
11-30 15:35:54.209 533-533/? A/DEBUG: r0 f5418ed0 r1 00000000 r2 00000000 r3 00000002
11-30 15:35:54.209 533-533/? A/DEBUG: r4 e042e424 r5 ab5f73d0 r6 12d1bfa0 r7 e042e410
11-30 15:35:54.209 533-533/? A/DEBUG: r8 001839f0 r9 df5ee00c sl 716d0c18 fp fe9cec1e
11-30 15:35:54.209 533-533/? A/DEBUG: ip f74c45dc sp e042e3c0 lr f7495e89 pc f513509c cpsr 80030030
11-30 15:35:54.213 533-533/? A/DEBUG: backtrace:
11-30 15:35:54.213 533-533/? A/DEBUG: #00 pc 0016109c /system/lib/libart.so (_ZN3art7DexFile10OpenMemoryEPKhjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPNS_6MemMapEPKNS_10OatDexFileEPS9_+43)
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
请问楼主你hookjni(opendexnative)是想把cookie返回给java层的DexFile么?我直接用调用
openmemory得到cookie,直接返回给java层的classloader(参照4.*版本的实现),似乎没啥问题(三星手机还是碰到你文章提到的错误(defineclass失败),感觉这里怎么也绕不过去,路住了)
如果你有什么新思路,能否共享下?我qq9770825.多谢
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
6.0很简单,so easy
|
能力值:
( LV9,RANK:160 )
|
-
-
12 楼
大神。请问hook openDexFileNative 是hook系统调用的。还是自己调用 的
|
能力值:
( LV3,RANK:20 )
|
-
-
13 楼
skyun
大神。请问hook openDexFileNative 是hook系统调用的。还是自己调用 的
当然是系统, 把自己加载好的返回给系统
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
如果是多个Dex文件要在内存里进行加载,需要多次调用并获取cookie吗
|
能力值:
( LV1,RANK:0 )
|
-
-
15 楼
请问作者你解决问题了么
最后于 2019-9-2 14:25
被mb_acxlveya编辑
,原因:
|
|
|