能力值:
( LV2,RANK:10 )
2 楼
谢谢楼主分享。。。。。。。。。。
能力值:
( LV2,RANK:10 )
3 楼
赞楼主博客,希望能一直写下去。
能力值:
( LV2,RANK:10 )
4 楼
分析的不错,话说楼主研究出来为什么偏移是16了?我自己写了个示例,发现他并不会按照8字节对齐啊,偏移是12。
能力值:
( LV4,RANK:50 )
5 楼
先收藏了 LZ请继续
能力值:
( LV2,RANK:10 )
6 楼
恩 先谢谢你的帮助,我在文中写了验证过程的,我现在的代码就是以偏移16做的,测试版本是4.4。用12的时候会提示找不到dex文件标识。容我再去看看
能力值:
( LV2,RANK:10 )
7 楼
16是ArrayObject的大小,
struct Object {
ClassObject* clazz;//4字节
u4 lock;//4字节
};
struct ArrayObject : Object {
u4 length;//4字节
u8 contents[1];//4字节。如果是12,这个变量存哪里?它的内容是指向dex的首地址。
}; 后面才是dex文件
能力值:
( LV2,RANK:10 )
8 楼
楼主能否 将你 Demo例子发出来分享一下
能力值:
( LV2,RANK:10 )
9 楼
感谢楼主分享 最近也在弄这个实现 用了楼主的代码确实跑通了 dex文件动态加载ok 指针确实需要好好研究下 不敢说自己曾经会过C了……
现在的问题是上层自定义的DexCloassLoader加载不出一些view类,虽然报的是xml解析失败,但是根本问题还在ClassLoder这儿,期待楼主的java部分。
能力值:
( LV2,RANK:10 )
10 楼
呃 我的问题搞定啦 自定义的DexClassLoder中的findClass方法没有使用super,父节点已经加载好的类找不到,修正后就搞定了,界面已弹出~
下面的问题就是这个方法只支持4.0~4.4? 通用性略差…… 继续探索……
能力值:
( LV2,RANK:10 )
11 楼
我按照lz说的实现了下, 发现我的情况很独特, 一下没明白为什么? 我把代码贴出来, 帮忙看看。
typedef uint32_t u4;
typedef uint64_t u8;
struct ClassObject;
struct Object {
struct ClassObject* clazz;
u4 lock;
};
struct ArrayObject : Object {
u4 length;
u8 contents[1];
};
unsigned char tmp[nArrLen]={........};//伪代码,dex数据
ArrayObject *ao=(ArrayObject *)malloc(nArrLen+16);
u4 args[] = { (u4)ao };
ao->length=nArrLen;
memcpy(ao->contents,tmp,nArrLen); [COLOR="Red"]//这个地方我必须这么写, 按照lz的偏移量去写都会提示文件头验证错误[/COLOR]
这个偏移到底是怎么算呢?
能力值:
( LV2,RANK:10 )
12 楼
我还在寻找自己对c指针认知的回忆中…… 原理还没弄清楚,但是我的结构是这样定义的:
typedef struct {
void* clazz;
u4 lock;
u4 length;
u1* contents;
}ArrayObject ;
能力值:
( LV2,RANK:10 )
13 楼
楼上,能否分享下你的java部分?
能力值:
( LV2,RANK:10 )
14 楼
你可以试试用偏移12 ,楼上有人说了这个问题,这个我也搞不明白了,我用你这个方法也可以,但是用12就会无法识别dex头。
能力值:
( LV2,RANK:10 )
15 楼
来晚了。。没帮上忙
能力值:
( LV3,RANK:20 )
16 楼
解密后在内存中,通过遍历该应用进程map表,在map表中相关heap区中搜索dex\n035标志也能找到,并拖出来
能力值:
( LV2,RANK:10 )
17 楼
我也是被领导赶鸭子上架才匆匆开始了解加壳的 好多地方细节还不明白 后面准备把这两个礼拜的内容整理成文章发出来 到时候共同讨论
能力值:
( LV2,RANK:10 )
18 楼
您能回复就很给面子啦 后面可能还有问题要请教~
能力值:
( LV2,RANK:10 )
19 楼
是的 这个方法不是不可解的 只是稍微增加分析难度
能力值:
( LV2,RANK:10 )
20 楼
你邮件说的那个传入参数 我使用的是dex文件 并不是odex的
能力值:
( LV2,RANK:10 )
21 楼
搞了好几天, 把代码看了大体都看了下, 终于实现了这个功能但是, 运行的时候, 会有些警告。 不知道为什么, 谁知道为啥?
01-13 19:13:51.524: E/dalvikvm(8297): Attempted to change 0x7590a76a; map is 0x0 - 0x0
01-13 19:13:51.524: D/dalvikvm(8297): NOTE: DEX page access change (->RW) failed
01-13 19:13:51.524: E/dalvikvm(8297): Attempted to change 0x7590a76a; map is 0x0 - 0x0
01-13 19:13:51.524: D/dalvikvm(8297): NOTE: DEX page access change (->RO) failed
01-13 19:13:51.524: E/dalvikvm(8297): Attempted to change 0x7590a71c; map is 0x0 - 0x0
01-13 19:13:51.524: D/dalvikvm(8297): NOTE: DEX page access change (->RW) failed
01-13 19:13:51.524: E/dalvikvm(8297): Attempted to change 0x7590a71c; map is 0x0 - 0x0
01-13 19:13:51.524: D/dalvikvm(8297): NOTE: DEX page access change (->RO) failed
01-13 19:13:51.524: E/dalvikvm(8297): Attempted to change 0x7590a756; map is 0x0 - 0x0
01-13 19:13:51.524: D/dalvikvm(8297): NOTE: DEX page access change (->RW) failed
01-13 19:13:51.524: E/dalvikvm(8297): Attempted to change 0x7590a756; map is 0x0 - 0x0
01-13 19:13:51.524: D/dalvikvm(8297): NOTE: DEX page access change (->RO) failed
能力值:
( LV2,RANK:10 )
22 楼
最近正好在研究dex
能力值:
( LV2,RANK:10 )
23 楼
static void Dalvik_dalvik_system_DexFile_openDexFile_bytearray(const u4* args,
JValue* pResult)
{
ArrayObject* fileContentsObj = (ArrayObject*) args[0];
.....
memcpy(pBytes, fileContentsObj->contents, length);
...
}
为什么是16 看看源码里面是怎么使用的应该会有答案
能力值:
( LV2,RANK:10 )
24 楼
学习,期待DEMO
能力值:
( LV2,RANK:10 )
25 楼
偏移12与16的问题我最近找到相关讨论了,这两个偏移都是对的,只是平台不同,16是arm平台的偏移,12是x86平台的偏移.希望对你有帮助