《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]才能正常解析一个方法出来。。我不知道哪里出了问题,所以来发帖求教。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)