这个解析器可以读取dex文件中的各个数据,比如string,field,method,class等。通过写这个解析器对dex文件格式有了比较清晰的认识,也算是为以后学习dex文件的混淆和加壳做准备把。

 

观看更多有关 的文章?

*

    2015年7月12日

    我想问一下,static_fields_size = self.DecUnsignedLEB128(self.dex)这段代码表示什么意思?DecUnsignedLEB128这个函数不是获取字符串长度么?怎么读取了static_fields_size的值?field_idx_diff = self.DecUnsignedLEB128(self.dex)中field_idx_diff 表示什么?

      burningcodes
      2015年7月14日

      DecUnsignedLEB128只是解码ULEB128的算法,因为size的值也是用ULEB128编码的,所以还得要用ULEB128解码,field_idx_diff是与上一个field的id的偏移,比如diff是0,1,2 那么真正的偏移则是0,0+1.0+1+2

      2015年7月14日

      谢谢你的回答,我前几天查了下官方手册,搞懂了之前的几个问题,我在本地运行过你的代码,在你的ReadString方法里面,有 while(count < string_count):
      #unpack返回的是一个元组,所以要用[0]来取出元组中的第一个元素
      DexStrOffList.append(struct.unpack("i",self.dex.read(4))[0])
      count+=1
      总是出现ile "D:\sublime_code\dex_parser.py", line 156, in ReadStrings
      struct.error: unpack requires a string argument of length 4这个错误,调试了一下午一直未通过,希望博主能够解答一下

        burningcodes
        2015年7月14日

        那个错误应该是读取的dex的长度问题,你在开始的地方先打印下dex总长度,在win下有可能没读全,我在linux下是可以直接跑的。

+
跳转到评论