duangsuse::Echo
719 subscribers
4.28K photos
130 videos
583 files
6.49K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
我再看看其中有什么关联(

根据我亲手数的结果, minSdkVersion flag 是数组中第 20 个

我猜测是与 name 有联系
接下来尝试验证
这是 resmap id 表
debuggable 的 name 是 129
0x70020101 (targetSdkVersion flag) 是数组中第 26
所以接下来我会调试 axmleditor 来获得 targetSdkVersion 的更多信息
数组的第 `26` 个是 targetSdkVersion.
但是, debuggable 居然是 string pool 中的第 129 个, 这意味着如果我要暴力添加到 129 个的话.... 累死, 否则就要动手写代码, 我可不希望花费额外的时间.
duangsuse::Echo
但是, debuggable 居然是 string pool 中的第 129 个, 这意味着如果我要暴力添加到 129 个的话.... 累死, 否则就要动手写代码, 我可不希望花费额外的时间.
duangsuse 想到了一个办法:
直接在数组后面增加一项 debug flag
然后直接把原引用 debuggable 的字符串改到相应的字符串
不过担心这样可能不能成功

于是又一个办法:
尝试交换 debuggable 与某方便添加的 string, 然后更新其引用

因为不同 API level 的 Android 对 axml 处理都基本一样, 如果第一个方法成功, duangsuse 就直接开始下一步工作了
duangsuse 决定是这个 roundIcon 了!
先添加 flag
🌚
这是第 38 个 flag.
接下来我会更新由于新插入 4 字节而变化的 section size 和 file size
resmap 部分开始于第 6684 个字节
80 01 80 00
9c 00 00 00
本来是 0x0000009c 个字节, 分成 4 字节(合一字)部分有 39
其中 Header 占了 2 字
也就是说数组长度为 37
检验正确。

现在将其改为 (flip (int->hex (* (+ 38 2) 4)))
(int->hex 160) 是`0xa0` (0x000000a0)

新值为 0xa0000000
OK
接下来更新文件大小, 增加 4 个字节
1)最开始的两个字节是0x0003,表示这个块包含了一个完整的xml文件。接着两个字节是0x0008,表示该块头的长度有8个字节,除去这4个字节,整个头还剩下4个字节。接下来的4个字节0x00000684,表示整个块的大小,也就是该xml文件的大小。