Android改造者之路 10 · 改造者(大结局)
第 10 章 改造者(大结局)
续写章节|沿用「原木」系列的武侠讲解体,非原作者(dayeve)作品
前情提要
那天晚上,师傅破天荒地给我倒了杯酒。
“从第一章到第八章,我教你的一直是’能不能’。今天考的是’该不该’。你过了。”
“在您之前,我教过三个人。第一个学完就去做灰产,进去了。第二个嫌来钱太慢,跑了。第三个技术比我还好,接了个单子,出了事,到现在都没出来。”
“所以后来我改了教法——先教技术,最后考人心。”
“技术好的我有的是办法教出来。但一个会说’不’的人,我教不出来——只能等。”
剧情片段
导演: 兵器、心法、破关、抉择——都齐了。
导演: 大结局,就叫——改造者。
剧情片段
前情提要
一、师傅走了
第二天早上,我起得很晚。
桌上摆着早点,还热着。灶上的水刚烧开,冒着气。
师傅不在。
我以为他去阁楼了,跑过去推门——阁楼里空荡荡的,四面墙上的纸还在,灯灭着。
我在屋里屋外找了一圈,没有。
回到桌边,才发现早点下面压着一张纸。就一行字,字很丑:
阁楼归你了。灯别灭。
——别学我,学你自己。
我捏着那张纸,在桌边坐了很久。
灶上的水烧干了,发出刺啦一声。
二、改造者手册
阁楼里,师傅留了一样东西。
不是秘籍,不是工具——是一叠钉好的纸,整整齐齐几十页,封面写着三个字:
改造者手册
扉页上是他的字:
“从你进门第一天,我就在写这个。写到昨天,写完了。”
“前八章是’术’,第九章是’心’。这一本是’图’——免得你将来忘了路。”
我翻开第一页。
他把这十章所有的东西,都画成了一张图。
全景图
┌─────────────────────────────────────────────────────┐
│ Android 世界 │
│ 开发者 · 改造者 · 神造者 │
│ 潜伏者 · 潜造者 · 保卫者 │
│ (改造者 = 唯一中立) │
└─────────────────────────────────────────────────────┘
│
┌────────────────────┼────────────────────┐
↓ ↓ ↓
【明体质】 【学招式】 【借兵器】
第01章 第02章 第03章
APK 结构 smali 撕码利剑流 藏兵阁十器
· assets · 12 种属性变化 · 拆/观/炼/活
· lib / META-INF · 10 种流式功法 · MT/ApkTool/jadx
· res / Manifest · 逆向七心法 · Frida/Xposed
· classes.dex · 抓包
· resources.arsc
│
↓
【走闭环】第04章
拆 → 看 → 改 → 装 → 签 → 验
│
┌───────────────┴───────────────┐
↓ ↓
【遇关卡】第05章 【破关卡】第06章
六道关 破关六法
验身/秤重/迷魂 接管结果
铁甲/照妖/云端 而非理解过程
│ │
└───────────────┬───────────────┘
↓
【问源头】第07章
正向基础 · ClassLoader
dexElements · 读 AOSP
↓
【自己造】第08章
Hook 原理 · ArtMethod
写 Frida / 写 Xposed
↓
【问自己】第09章
不是"能不能",是"该不该"
各章要点速查
| 章 | 关键一句 | 必须记住的东西 |
|---|---|---|
| 01 明体质 | 知己知彼 | APK = 压缩包;classes.dex 是代码本体,Manifest 是指挥,arsc 是 id 账本 |
| 02 学招式 | 只懂其形不算懂 | 12 种属性标记(V/Z/B/S/I/J/C/String/F/D/[/L);10 种功法;逆向七心法 |
| 03 借兵器 | 兵器是用的不是供的 | 四区:拆 / 观 / 炼 / 活;jadx 看、ApkTool 改、MT 手机一把梭 |
| 04 走闭环 | 八成时间花在找地方 | 六步:拆→看→改→装→签→验;zipalign 先于 apksigner |
| 05 遇关卡 | 只提高成本,不绝对拦住 | 六道关:签名 / CRC / 混淆 / 加固 / 环境 / 服务端 |
| 06 破关卡 | 接管结果,别理解过程 | const/4 v0, 0x1;Hook 数据源;断网测服务端 |
| 07 问源头 | 万法归宗 | ClassLoader → dexElements:壳 / 插件化 / 热修复 / Xposed 同源 |
| 08 自己造 | 自己写一遍才是你的 | Hook = 改 ArtMethod 入口;Frida 注入 agent,Xposed 改 Zygote |
| 09 问自己 | 技术管"能不能" | 接活之前,先看清楚要改的是什么 |
| 10 改造者 | 中立不是不得罪 | 中立 = 自己选,自己承担 |
三条铁律(师傅写在最后一页)
一、只改你有权利改的东西。 自己写的、明确授权的、或者纯粹为了学习研究的。
二、不动别人的钱、别人的号、别人的数据。 账号、支付、隐私、公共资源的分配——这些都是雷区。
三、不传播成品。 可以写文章、可以讲原理、可以教方法。但别把改好的包发出去。
——“你发出去的那一刻,就不再是学习了。”
三、灯
我把阁楼的灯重新点上。
四面墙的手抄纸在灯光下泛黄,密密麻麻,像一片沉默的星图。
我第一件事不是继续看——是接着抄。
师傅抄了二十年。我抄到第三个月的时候,忽然明白了他为什么要手抄。
因为手抄的时候,你抄不快。
你得一个字一个字看,看清楚每个类名,看清楚它上面是谁、下面调了谁。用眼睛扫过去的,留不下;用手写下来的,才进脑子。
第五个月,我在墙上贴了第一张自己画的调用关系图。
第八个月,有人从网上找到我,问能不能帮他改个东西。
我按师傅教的问了三个问题:
- 这是谁的 app?
- 你想改掉什么?改了以后谁会受影响?
- 这个数据,是本地算的还是服务器给的?
第三个人答不上第二个问题。
我没接。
四、我的三条规矩
第一年年底,我在阁楼的门后钉了张纸,写了自己的三条规矩。
不是师傅那三条——那三条我照单全收了,钉在旁边。
这三条是我自己的:
一、先问"为什么改",再问"怎么改"。
二、凡是涉及别人公平的东西,一律不碰。
排队的、抢号的、分配的、名额的——这些改了,就是从别人手里拿。三、能写文章的,就不发包。
你以为你在帮一个人,其实你在给一百个人发一把不知道会捅向哪里的刀。
钉完之后,我坐在矮凳上看了很久。
师傅那张"阁楼归你了,灯别灭"的字条,就压在砚台下面。
五、那些年
后来的几年,android 的世界变了好多。
- Dalvik 早就没了,ART 换了好几代
- 加固从一代壳做到了三代,VMP 越来越难啃
- Frida 成了标配,也成了照妖君重点盯的对象
- 大厂把越来越多的逻辑搬到了服务端——云端君赢了大半壁江山
- Xposed 老了,LSPosed 接了班
攻与防的世界还是那个攻与防的世界。
道长一尺,魔长一丈。
我在阁楼里一年一年地抄,墙上贴满了,我就往天花板上贴。
偶尔有人找上来,有的我帮了,有的我劝回去了。
我从来没接过一单涉及别人公平的单子。
六、门外的人
第十年的某个晚上。
外面下着雨,我正踩着凳子往天花板上贴最后一张图——是 ART 的 ArtMethod 结构,我花了半年才把它理清楚。
有人敲门。
我下来开门。
门口站着个年轻人,二十出头,浑身湿透,手里提着个布包。
布包的样子,我太熟了。
"请问,"他有点局促,“您是……改造者?”
我看了他一眼。
“你是来学改造的?”
他用力点头,眼睛亮得厉害。
我让他进来,给他倒了杯热水,等他暖过来。
他一边擦头发一边说,说得很急——说他在网上看到我的文章,说他特别想学,说他已经自己折腾了半年,改过好几个 app,还改成功了一个。
"我改过什么?"他有点得意,“我把一个游戏的金币改成无限了,还改过一个视频 app,把会员标志点亮了。”
我点点头,没说话。
他把布包往桌上放,就要打开。
"等等。"我说。
他愣住了。
"在打开那个之前,"我说,“先回答我一个问题。”
“您问。”
我看着他。
灯光下,他的眼睛跟当年的我一模一样。
“你为什么想改?”
他张了张嘴,显然没准备过这个问题。
"我……我觉得很酷?"他试探着说。
我笑了。
"不着急。"我把他那杯水往前推了推,“慢慢想。”
“想清楚了再告诉我。”
“想不清楚——”
我指了指门外那条黑漆漆的路。
“门在那边。”
他端着水杯,坐在那儿,愣愣地看着桌面。
雨还在下。
阁楼里的灯亮着,四面墙从头到脚贴满了纸,一直贴到天花板。
我踩上凳子,把最后那张 ArtMethod 贴好,跳下来,拍了拍手上的灰。
七、终
很多很多年前的一个夜晚,一款名为 android 的系统诞生于世。
它以开源的方式及不懈的努力,短短几年就打开了属于自己的市场,并在全球受到不少企业家的喜爱。
小小的铁盒,却有着大千世界的宏观,聚各武学于一身。
从此 android 有了两个世界观,名为 root 与 unroot 的世界。
也从此,这个世界里多了一派人,他们擅长于改造技术,将他人写成的程序改造成符合自己需求的模样。
他们叫改造者。
改造者是唯一中立的存在。
中立的意思不是"两边都不得罪"。
中立的意思是——你得自己选,然后自己承担。
攻与防的世界还在继续,适者生存的世界也还在继续。
而在某个角落,一间快要塌掉的阁楼里,灯还亮着。
灯下坐着两个人。
一个在想。
一个在等。
(全文完)
附:十年后的一点补充
(写在这一叠纸的最后,是我自己的字,不是师傅的。)
这十年里,有几件事变了,我补在这儿,免得后来人走弯路:
- Frida 不是万能的。越来越多的 app 会检测它,遇到重度防护,Xposed 模块反而更稳
- 脱壳越来越难。一代壳基本见不到了,VMP 类的东西,投入产出比极低,不值得
- 服务端化的趋势不可逆。真正值钱的逻辑都在云端,本地能改的越来越只剩"显示"
- 但底层的东西没变:ClassLoader 还是那个 ClassLoader,
dexElements还是那个dexElements,ArtMethod还是那个ArtMethod - 所以师傅说的"万法归宗"是对的——框架会换,工具会旧,招式会过时,根基不会
最后一句,是师傅那张字条背面的字。我是在他走后第三年才发现的,字迹很淡:
"我教你的都会过时。
我考你的那道题,永远不会。"
剧情片段
导演: ……
助理: 导演?
导演: (揉眼睛)灯灭了吧?
助理: 灭了。
导演: 收工。
剧情片段


