对WXin执行回插入代码后的回编译操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oqzuser1q2w3e4r5t/article/details/88165756

话说在前头,对微信的反编译只是出于不得已为之,我一直觉得任意破坏他人成果不好,所以我不也不敢滥用。出于自己比较小白的技术,我参考了众多同行资料,我没有一一记录和收藏,可惜。

一、研究背景

这次的反编译没有丝毫想冒犯的意思,只是想做些研究,毕竟在APP端众多应用都对微信进行模仿,我也想了解一下

反编译后的那种语言模式。

二、研究目的

在微信代码中添加activity,强制改变其跳转界面,不破坏其原有代码结构,只加入新的代码。

三、使用工具

我使用的工具如下:

使用工具:ShakaApkTool2.0.0

微信版本:weixin6.3.9 (太高的版本我是不敢尝试的)

四、研究过程

1、对微信反编译

我曾使用apktool d 来对微信进行反编译,结果报出了未知资源的错误。一顿思考后,决定放弃对于res端的反编译,布局文件放至assests中去实现

2、反编译后的文件路径

 

 

 以上标红的地方就是我要修改的地方。

 

  1. 由于无法将资源文件放入res,所以调用assets方法中的xml文件进行布局,唯一的要求,就是使用的xml必须是生成APK 解压出来的。
  2. smail中放入我的代码,如图所示

3、又插入了aidl远程

 

4、 注册 

5、修改跳转项

原来的代码

修改后的代码 

微信的登录方法大家应该很熟悉,闪屏页----登录/注册选择页---输入号码界面

我在寻找它的跳转页的时候用了相当笨的方法:

我通过adb logcat 打出的日志来判断它的启动次序 然后自己打开文件去搜索的,如果有更好的方法,希望赐教

LauncherUI----SplashActivity---WelcomeSelectView----MobileInputUI

最后我在WelcomeSelectView中找到了它的跳转代码,使它跳转到我的Activity上,我加入了SActivity,如上图。

6、修改包名就不用说了,因为我在写插入代码的时候,起了和WX一样的包名 ,所以省了不少事

7、插入布局文件

感谢这位博主所提到的,跳过id完成布局加载就可以实现了,不会我得按照如下链接修改一下自己要添加的项目文件内容

https://blog.csdn.net/qq_28844947/article/details/76714065#commentBox

assest包下添加的xml文件必须是编译后的xml文件,就是生成的apk 解压后得到的xml文件 否则它会报资源找不到的错误

过程如下:

1、将想要插入的xml编好,生成apk,从当前路径下取出apk解压 将layout导入至assets文件夹下

2、 assets的图标要和res图标相同 代表被识别到了,事先在gradle文件夹中加入

这个我觉得不必担心了,WX已经有assets文件夹了,你只需要确保xml文件名字是对的就可以了。

更改后 只要xml路径没有问题 即可正常运行。

8、回编译

如果使用apktool b  进行回编译我会报这个错误,应该是对于资源文件的处理出了问题,这么一大段,让人很纠心

所以我换成ShakaApktool 来回编

它的特性如下:

  1.  增加res资源没有被arsc引用,没有生成id,就会丢失问题
  2. -增加String Style 中连续`;`引发解析错误修正
  3. -添加选项[df|default-framework]参数,使用默认的框架资源文件
  4. -添加选项 [mc|more-recognizable-characters]显示更多的可识别字符.比如中文,不在以\uxxxx编码显示,而是直接显示中文.让smali更容易读
  5. -添加选项[fui|fuck_unkown_id],对未知ID,强制处理
  6. -添加选项[ir|ignore_res_decode_error],忽略资源decode异常
  7. -添加选项[n9|no-9png] 参数,不解析.9格式的资源
  8. -添加选项[fnd|fuck-not-defined-res] 参数
  9. 支持标准资源名的`Public symbol drawable/? declared here is not defined.`异常打包
  10. 不支持带点资源名的打包
  11. -添加选项[xn|xml_attribute_name_correct] 参数

我觉得因为有了标红的特性所以,它才能顺利回编吧,我也没有研究它到底帮了什么处理,因为时间不够。

9、报错了--我上网查到解决方法,确实解决了问题

不过,估计得改好几次

 

 10、回编译成功

 11、取出APK做签名

12、进行签名后的APK,我放在模拟器上安装都安装不上

考虑是因为签名不一致的原因,被拒绝初始化APP了,有两个办法,都是参考网上给出的建议,但是我只用了第一个

  

  1. 到应用商城下载最新微信 APK 先登录一下,成功后卸载,再安装自己的应用,缓存不用清理
  2. 我在网上查到可以将手机中syste路径下的libjvm.so中一行校验签名的那句去掉,我没试过,但是这样应该行的通
  3. 这个方法也适用于微信旧版本的处理,虽然办法有点那啥,反正我的目的只要插入成功就可以

13、如果无法获取到微信的错误日志

可以通过下面这个类的一个方法,使其显示log信息,其实adb logcat就差不多了

时间有点长了,我只记得是在XLogSetup这个类中修改了一个boolean选项

14、补充一下,我在反编译自己的demo时候有报错

下一步通过apktool d 命令的时候报错

 

解决方法:

工程sdk版本从28降到了25  可以成功编译

有以下几点需要注意:

1、assets中插入已经编译好的xml文件

2、smail中加入我要添加的Activity  修改包名 不能漏掉要修改项 不能有一点错误 

3、配置文件中加入注册信息

4、不管出现什么问题 只要报错就有解决的希望 一点一点弄就可以了

最终:插入一个SActivity,一个工具类,一个Service ,和一个aidl文件包,在微信未进行登录前可以正常运行,这算是阶段性的胜利吧!安装我自己的微信,运行完成,可以正常登录,这算是成功了吧!

右下角的我的WX即是我的标志,终于可以结束了,呼呼!

猜你喜欢

转载自blog.csdn.net/oqzuser1q2w3e4r5t/article/details/88165756