首页
社区
课程
招聘
[求助]请教Dex文件格式解析问题
发表于: 2015-8-2 17:31 6391

[求助]请教Dex文件格式解析问题

2015-8-2 17:31
6391
《Android 软件安全与逆向分析》这本书在讲解DexClassData时很简略,只说了u4是LEB128编码的东西。 DexClassData中的几个指针成员指什么地方也没提。
typedef struct DexClassData {
    DexClassDataHeader header;
    DexField*          staticFields;
    DexField*          instanceFields;
    DexMethod*         directMethods;
    DexMethod*         virtualMethods;
} DexClassData;


网上查的资料显示:
encoded_field[static_fields_size]..... 我就依葫芦画瓢下了下面代码:
DexClassData *cdata;
			cdata=(DexClassData *)&f.pBuffer[f.ClassDefs[i].classDataOff];
			u=f.GetClassMethodSize(cdata);
			for (int y = 0; y < u; y++)
			{
				DexMethod *df; 
				u4 uid;
				df=f.GetClassMethod(cdata);
				uid=readU4Leb128(&df[y].methodIdx);

				u2 classId;
				u2 protoId;
				u4 nameIdx;
				DexTypeList *list;

				classId=f.Method_ids[uid].classIdx;
				protoId=f.Method_ids[uid].protoIdx;
				nameIdx=f.Method_ids[uid].nameIdx;
.....................................................................

这段代码会崩溃,UID在转换后是一个极大的值。
只有当 y=0时,也就是df[0]才能正常解析一个方法出来。。我不知道哪里出了问题,所以来发帖求教。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 6918
活跃值: (9134)
能力值: ( LV17,RANK:797 )
在线值:
发帖
回帖
粉丝
2
贴上寻址代码:
DexField *CDexFile::GetClassStaticField(DexClassData *classdef)
{
	char *pbuf;
	pbuf=(char *)classdef;
	return (DexField *)&pbuf[sizeof(DexClassDataHeader)];//越过DexClassDataHeader
}
DexField *CDexFile::GetClassField(DexClassData *classdef)
{
	char *pbuf;
	pbuf=(char *)GetClassStaticField(classdef);
	return (DexField *)&pbuf[GetClassStaticFieldSize(classdef)*sizeof(DexField)];
}
DexMethod *CDexFile::GetClassMethod(DexClassData *classdef)
{
	char *pbuf;
	pbuf=(char *)GetClassField(classdef);
	return (DexMethod * )&pbuf[GetClassFieldSize(classdef)*sizeof(DexField)];
}
DexMethod *CDexFile::GetClassVirtualMethod(DexClassData *classdef)
{
	char *pbuf;
	pbuf=(char *)GetClassMethod(classdef);
	return (DexMethod *)&pbuf[GetClassMethodSize(classdef)*sizeof(DexMethod)];
}
2015-8-2 17:33
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
只贴出这点代码,大家很难帮你分析原因,最好上传测试工程和DEX文件。
Google有DEX格式的详细说明的。
010Editor是分析二进制文件的一个神器,里面有DEX格式的模板,自己参考一下。
2015-8-2 21:46
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
是不是UID没有正确解码
2015-8-2 22:37
0
雪    币: 6918
活跃值: (9134)
能力值: ( LV17,RANK:797 )
在线值:
发帖
回帖
粉丝
5
哦哦哦,谢谢。我用的是WinHex
2015-8-3 13:40
0
雪    币: 206
活跃值: (840)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
可以参考dexdump源码
2015-8-3 14:16
0
游客
登录 | 注册 方可回帖
返回
//