美文网首页
Android 调起浏览器需求引发的故事

Android 调起浏览器需求引发的故事

作者: 雁过留声_泪落无痕 | 来源:发表于2021-08-13 15:18 被阅读0次

背景


PM:这儿有一个需求,调起 XXX 浏览器显示一个网页链接(网页内容较特殊,内嵌 webview 不满足需求)。
程序狗:这还不简单,三分钟搞定!

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
intent.setPackage("xxx");
startActivity(intent);

完事儿~
测试:啊,你这个有点问题啊~你打开浏览器后用户可以自由切换网页呢~下面工具栏上那么多按钮都可以随便点。。。
程序狗:。。。
测试:不行!你得优化下~
程序狗:这个搞不定啊~
测试:不可能!XXX 浏览器高度定制化,肯定有方法可以去掉工具栏!
程序狗:那是 PC 版的,Android 版的没提供接口~
测试:我不信。。。
程序狗:Android 传参是靠 Intent 和 Extra 的,巴拉巴拉。。。
测试:我不管!

是不是日了狗了,是你你怎么办?也是出于好奇吧,遂开始了下面艰难旅程。

艰难旅程 - 逆向破解


  1. 提取浏览器 apk,查看 MainActivity,看看如何处理 Intent 的,倒是接收了几个参数,但是根本没有哪个参数是控制工具栏的显示与否啊,简直就是坑!

  2. 继续看代码,发现工具栏添加的地方是一个单一入口,还是比较好屏蔽的,于是直接一通修改 smali 文件,重新编译、签名、测试,终于去掉了这个工具栏。

测试:你这属于逆向破解啊,不行,有风险!
程序狗:。。。

艰难旅程 - 正向编译


  1. 几经周转,从某个地方得到了 xxx 浏览器的源码,欣喜若狂

  2. 赶紧导入 AS,开始 sync,build,,,发现编译不过

  3. 原来,代码并不完全,工程也是 java 和 c 混合编译的,仔细看发现有些 c 代码并不存在

  4. 怎么办?程序狗岂会轻易放弃(一舔到底?)

  5. 想了好久,终于柳暗花明,没有 c,有 so 不也是一样吗?

  6. 紧急打开 AS,gradle 中去掉 c 编译相关的部分,从 apk 中直接提取出 so 放入工程

  7. 哼哼,这次总行了吧,奶奶的~

  8. 幻想着~"0 errors, 0 warnings."

  9. 卧槽,硕大的 build failed... 再次映入眼帘

  10. 再看,尼玛,居然还有 java 类也不存在,这不是坑爹吗?

  11. 扣脑壳,,,无招,再扣。。。旁边小姐姐都看不下去了,就这几根,再扣就掉完啦~

  12. 没办法,还得扣~嗯,和 so 一样的原理不就可以了,仔细整理,发现少的 java 主要在一个包下,于是打算从 apk 反编译来补全这个包下的代码

  13. 我勒个大草,反编译的代码直接复制过来简直就是灾难,各种奇怪副号,AS 直接就给你标红了,很红很红的那种,根本编译不过~硬着头皮修改了几个类,不行,再这样毛就更少了

  14. 再扣脑壳,哈哈~那就不用源码,直接用 class 文件呗。遂从 apk 提取 dex,从 dex 提取 jar 包,把 jar 包中多余的 class 文件删除,只留目标 class 文件,然后把 jar 包放到 libs 目录下作为依赖~

  15. gradlew assembleDebug,狠狠敲一个回车(注意此处有声音),开始编译,这次再不行,老子直播吃屎!

  16. 幻想着~"0 errors, 0 warnings."

  17. 尼玛,有屎么,我买点。。。

  18. 再次 build failed

  19. 为什么呢?仔细分析,发现拿到的 apk 是 release 版本的,在编译的过程中,好些类的方法都被删除了,直接采用了内联的方式,甚至有些类(工具来,只有 static 方法)都被直接删除了,所以再源码中自然也就找不到这些类的方法了,故报错

  20. 这次是真没法了,可以放弃么??

  21. 天无绝人之路,偶然间从某个地方得到了一个浏览器的 debug 包,赶紧从 debug 版本的 apk 中提取对应的 class 文件,放到 AS 中

  22. 小心翼翼地开始编译

  23. 小心脏砰砰砰,,,

  24. 卧槽!居然编译通过了,泪流满面啊。。。。

  25. 安装,运行,一切 OK

  26. 于是乎,绝大部分源码在手,你想干什么都可以了,哼哼(坏笑)

  27. 对面小姐姐诧异地看过来,该不是误会了什么吧。。。

相关文章

网友评论

      本文标题:Android 调起浏览器需求引发的故事

      本文链接:https://www.haomeiwen.com/subject/yendbltx.html