某个manifest文件用adx和apktool均不能反编译,用jadx打开是这样的
仔细一看说的应该是字符串的起始位置不对,应该是0x654,实际上是0x650
但确实不太了解manifest的结构于是搜了一下相关的解决办法但都没法解决这个manifest文件的问题,于是乎决定自己把manifest的格式看一遍
这里参考的是MindMac 大佬写的文章中的格式,贴一个大佬的图
从头开始配合 010 editor提供的模板进行分析
检验了一下都是没问题的
String Chunk 的标识,值为 0x001C0001 没问题
String Chunk的大小:0x6b38 没问题
string chunk内容区间 (0x08开始 加上面的大小): 0x08 - 6b40 没问题
字符串个数 :395个 从offset中的个数和实际个数检查都 没问题
字符串起始位置:这里要注意字符串其实位置实际上是1ch中的偏移加0x8(即stringChunk的起始位置)
即0x64c + 0x8 = 0x654
这里其实就出现了jadx里报错的0x654
去看一下0x654的内容,确实是一个字符串,但是发现前面有4个字节在manifest的模板里是找不到的
看了其他几个正常反编译的manifest也发现string offsets后面应该直接跟string pool(实际的字符串内容),因为大多数manifest都没有style所以style pool offset的偏移item是没有的
所以感觉应该是这4个00 导致的问题
因为可能是这4个字节的问题所以直接将其删除
但是删除会影响
整个文件大小: 0xf6a84 - 0x4 = 0xf6a80
String Chunk的大小: 0x6b38h - 0x4 = 0x6b34
然后恢复真正的stringPooloffset:0x648
将三个字段修复好后脱到jadx中 反编译成功~
总结下反编译失败的原因就是在string offsets和string pool中间加了4个00 然后修改:
整个文件大小加4
String Chunk的大小加4
stringPooloffset的大小加4
从而导致jadx反编译失败,但安卓系统的解析应该不会受到影响
所以一个manifest防护的思路就诞生了
不过目前的思路只能是打包后一个apk后将manifest文件拿出来进行修改后重新打包进行签名
具体脚本写到附件里了
用法可见:
https://github.com/Sp1keeeee/manifestGuard
https://bbs.pediy.com/thread-194206.htm
https://bbs.pediy.com/thread-272045.htm
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
试了下把字符串个数改成396也行,不用改那么多
这个和工具解析方式有关 工具可能是顺序执行的 最终实际上需要修正偏移
iamshy 试了下把字符串个数改成396也行,不用改那么多
随风而行aa 不错
https://gitee.com/qq247321453/axml-editor可以试试我这个,不少加固修改字符串都会多几个00。
StringChunk类里面有读取方法
我是一只马鹿 https://gitee.com/qq247321453/axml-editor可以试试我这个,不少加固修改字符串都会多几个00。StringChunk类里面有读取方法