某个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
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
试了下把字符串个数改成396也行,不用改那么多
这个和工具解析方式有关 工具可能是顺序执行的 最终实际上需要修正偏移
iamshy 试了下把字符串个数改成396也行,不用改那么多
随风而行aa 不错
d18K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8W2k6g2)9J5k6h3y4G2L8g2)9J5c8Y4q4I4x3U0b7%4x3K6t1I4y4o6f1K6i4K6u0r3j5i4S2E0L8q4)9J5k6r3g2V1K9i4c8G2M7R3`.`.可以试试我这个,不少加固修改字符串都会多几个00。
StringChunk类里面有读取方法
我是一只马鹿 af8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8W2k6g2)9J5k6h3y4G2L8g2)9J5c8Y4q4I4x3U0b7%4x3K6t1I4y4o6f1K6i4K6u0r3j5i4S2E0L8q4)9J5k6r3g2V1K9i4c8G2M7W2!0q4y4g2)9^5c8W2!0m8c8W2!0q4y4q4!0n7b7W2!0m8y4g2!0q4z5q4!0m8c8W2)9&6y4g2!0q4z5q4!0m8c8W2)9&6y4g2!0q4y4W2)9^5z5q4)9&6x3g2!0q4z5q4!0n7c8W2)9&6z5g2!0q4y4q4!0n7z5q4!0m8b7g2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4q4!0n7z5q4)9^5c8q4!0q4y4g2!0n7x3q4)9&6x3g2!0q4y4g2)9^5b7g2!0m8x3q4!0q4y4g2)9&6b7W2!0n7b7g2!0q4y4q4!0n7c8W2!0m8c8g2!0q4y4W2)9&6y4q4!0n7z5g2!0q4y4g2!0m8c8q4)9&6y4#2!0q4y4#2!0m8b7#2!0m8y4W2!0q4y4q4!0n7z5q4!0n7x3W2!0q4z5g2)9^5x3#2!0n7c8q4!0q4y4q4!0n7b7#2)9&6b7g2!0q4y4g2!0m8y4q4)9&6b7g2!0q4y4g2)9^5y4#2!0m8x3q4!0q4y4q4!0n7z5q4!0m8b7e0l9H3i4@1f1K6i4K6R3H3i4K6R3J5f1%4c8J5K9h3&6Y4b7$3S2#2L8X3E0Q4c8e0N6Q4b7U0q4Q4b7V1u0Q4c8e0W2Q4z5o6N6Q4z5p5y4Q4c8e0W2Q4z5f1c8Q4b7e0u0Q4c8e0k6Q4z5f1y4Q4z5o6W2Q4c8e0S2Q4b7f1k6Q4b7V1u0Q4c8e0g2Q4z5p5k6Q4z5e0k6Q4c8e0k6Q4z5e0k6Q4b7U0W2Q4c8e0k6Q4b7U0y4Q4z5e0f1`.