最近研究了下android的反编译技术,从学校图书馆借了本《Android软件安全与逆向分析》,作者写的确实很用心。我试着反编译了下当当读书2.2.1版本。
查看当当读书的classes.dex文件,截图如下:

前8个字节是固定的“64 65 78 0a 30 33 35 00”,代表“dex\n035\0”,紧接着4个字节“03 e9 ae 3d”代表利用Adler32算法算出的校验和,从0x0~0x10f共20个字节是采用SHA-1计算出的签名。
“4c 11 31 00” 4个字节代表整个classes.dex文件的大小,利用windows自带的计算器计算一下16进制“31114c”转为10进制为“3215692”字节,右键-》属性,我们发现大小就是3.06MB。

接下来4字节为DexHeader大小0x70(112)个字节,目前是固定的。“78 56 34 12”代表大小端标志,后面8个字节都为0表明为静态链接。
“ac 10 31 00”为map_off值,这个字段主要从文件头开始到map数据的长度,通过这个索引就可以找到map数据。暂时还没看明白。。。
“7e 58 00 00”为字符串个数,转为10进制为22654个。
接下来又是0x70,dexheader的大小,说明“string_ids”从0x70处开始,即“fa 73 25 00 ……”,根据这两个值,算出string_ids从0x70开始,在(0x70 + 0x587e * 4)= 0x16267处终止??
由“fa 73 25 00”知,第一个String Data 在0x2573fa处,貌似不对啊,0x2573fa处的值为00 啊?????是我算错了,还是混淆后就这样?
[培训]科锐逆向工程师培训第53期2025年7月8日开班!