准备工作
-
apktool
-
jadx
-
notepad++/sublime/其他好一点的文本编辑器
-
手机端可以下载一个Auto.js/开发者助手(补充准备)
-
准备好这些工具之后,就可以开始了。为了让文章表达的内容具备可操作性,将按顺序步骤说。
详细步骤
反编译微信
apktool d weixin673.apk
导入编辑器
将反编译后的文件夹整个拖入sublime text,找到res/values目录下的public.xml和strings.xml,分别打开备用。
反编译工具jadx-gui
使用jadx-gui打开weixin673.apk,等待反编译完成,如果你电脑配置大于8G,建议给jadx配置内存如图:
否则就需要单独解压出dex单独反编译了,后面分析起来超级麻烦,略过。
手机端操作
打开Auto.js,打开悬浮窗和它的辅助功能。
打开微信的界面,进入漂流瓶,就是这么个界面:
点击左边的扔一个,是这样的:
因为瓶子有2中类型,文字和语音。
我们先看文字的,点击左边图标切换到发送文字模式:
上面是一个文本编辑器,下面有个按钮。
体验一把,写几个字,然后点扔出去,瓶子就被装进瓶子扔出去了。
所以,入口就是扔出去
按钮。
Auto.js出场
看见右边那个圆球了没?点击,它会绘制一个UI界面,非常方便分析控件,选中**扔出去
**按钮,查看它的一些属性,我主要关注clickable
、enabled
、focusable
、id
、text
,重点是clickable
和id
、text
。
因为我分析的是目前2018.11.22最新版(6.7.3-1360),所以这个按钮的id = a62
文本编辑器
一开始打开的public.xml和strings.xml还记得吧,现在关注public.xml,搜索a62
,一定要找对:
复制id=0x7f1104c8
这段0x.......
的16进制值,转换成10进制:
复制转换后的10进制值,在jadx-gui中全局搜索text:
点击搜索结果,复制bottle_throw_btn
,再次全局搜索:
点击搜索结果,可以看到这个按钮初始化的地方。
猜想
文章前面体验了一把扔瓶子,点击瓶子就会把这条消息发出去,他肯定有一个点击事件,OnClickListener
,但是分析这个类的OnClick()
方法,并没有发现这个按钮的逻辑,这咋整?回到这个按钮初始化的地方,看到他有设置触摸事件setOnTouchListener
,如图:
它new ThrowBottleUI$2
,全局搜索这个类,看到:
case 1:
手指弹起,分支好像看到了,getText().toString().trim()
,第二个框,h.c cVar = new h.c(trim, this.ibL);
可疑的操作,把获取到的字符串传进去了,跟进去:
分析过微信的朋友看到这行代码,是不是很熟悉的味道?哈哈。
这里他au.Dk().a(new g(str), 0)
,我们再打开g
类:
红色标注的再往下应该就是xie议
级别的了,就不往下看了,毕竟仅做学习记录之用。
最后
那么微信的扔漂流瓶的功能是分析完了,用来写xposed模块,只需分析到此就行了,其实还有一个就是扔语音,这是一个简单又刺激的任务,提示: 就是最后那个g
类,它的第二个构造函数,我hook了它,打印出的第一个参数是语音文件的imgPath
, 第二个参数是语音时长(单位毫秒)
,那么实际上漂流瓶的内容就分析完了。
总结一下
- 逆向从控件出发,从简单的入口开始。
- 善于猜想,毕竟都是第一次。
- 把猜想付出实践,实践是检验真理的唯一标准。
- 那么最后不留联系方式了,有事漂流瓶联系。
- 请尊重原创,Javaer