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

一、研究背景

这次的反编译没有丝毫想冒犯的意思,只是想做些研究,毕竟在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即是我的标志,终于可以结束了,呼呼!

对WXin执行回插入代码后的回编译操作相关推荐

  1. 【pytest】概述pytest——setup、teardown方法和conftest中的fixture用法,来执行测试用例的前置/后置条件语句操作

    大家好,我是好学的小师弟.今天和大家分享下-在pytest中的前置/后置操作. 所谓的前置/后置操作,就是在测试用例执行前,你预先要执行的一些步骤:在测试用例执行完毕后,你要执行的一些数据清理/备份工 ...

  2. cefsharp执行完js代码后获取返回值问题

    CefSharp相关操作 Task<CefSharp.JavascriptResponse> t = mychrome.GetBrowser().MainFrame.EvaluateScr ...

  3. idea修改代码后没有重新编译_SpringBoot中实现代码修改之后的自动更新与热加载...

    在实际的开发过程中,我们经常修改代码之后,手动的重启项目,查看修改效果.那么有没有一种方式能够快速的.自动的帮我们将修改代码自动更新,避免手动重启,从而提高开发效率呢?是有的,对于这个功能很多人对功能 ...

  4. 七种MYSQL插入数据后返回自增主键ID的方法

    我们都知道,mysql中的insert插入之后会有返回值,返回的是影响的行数,也就是说,成功插入一条数据之后返回的是1,失败则返回0.那么,很多时候我们都想要得到最后插入的id值,下面七种方法均可,结 ...

  5. mysql c接口返回自增id_详解mysql插入数据后返回自增ID的七种方法

    引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...

  6. mysql 新增返回主键自增id_详解mysql插入数据后返回自增ID的七种方法

    引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...

  7. mysql插入数据后返回自增id

    mysql插入数据后返回自增id 使用<insert 中的useGeneratedKeys 和 keyProperty 两个属性 在Mybatis Mapper文件中添加属性 useGenera ...

  8. Vue3 使用@antv/g6 流程图编译代码后加载多个dom问题

    问题描述: npm run build打包代码后,运行编译后的代码,点击路由跳转到对应页面 图表没有在对应的位置展示,打开 Elements发现居然有两个,但是刷新页面就会变成1个,奇怪的是不编译代码 ...

  9. 哈希表_实现插入、删除、查找元素操作(链地址法解决冲突)

    这几天用在写代码(实际上是为了补作业)的时间明显比以前多了,在这过程中也 发现了自己由于前期的训练太少,导致很多基础的语法都不熟悉,有很长的时间都用在了debug上.很多问题写的时候记得,过后又忘了, ...

最新文章

  1. 产业|一文读懂自动驾驶汽车产业链上下游
  2. 用几条shell命令快速去重10G数据
  3. IPC进程间通信 D-Bus(Desktop Bus)快速入门(以libdbus-glib库为例)
  4. zuul默认的路由规则及禁用路由规则
  5. linux 文件及目录结构体系
  6. git 分支的创建和切换
  7. Hadoop核心生态
  8. 【Spark】Spark 报错 error writing stream metadata exitcode=1073741515
  9. data的值 如何初始化vue_【Vue 原理】Vue 是如何代理 data、methods 和 props 的?
  10. 电子元器件选型——电阻
  11. tomcat日志配置(停止日志或修改日志路径)
  12. 【机器学习】有监督学习,无监督学习,半监督学习和强化学习
  13. POJ 3764 DFS+trie树
  14. Pollard Rho算法分解因数
  15. How to cover an IE windowed control (Select Box, ActiveX Object, etc.) with a DHTML layer.
  16. 地图切片的概念与原理
  17. golang切片简介
  18. 狂野之刃服务器微信群,魔兽世界怀旧服狂野之刃 狂野之刃获取方法
  19. 百度地图js简单路径规划
  20. 仿个人税务 app html5_假个税APP蹭热点窃信息防不胜防,你千万别下载错了!

热门文章

  1. APDL电磁仿真学习中可能会遇到的问题1
  2. 西瓜书(周志华):什么是版本空间以及如何求取版本空间
  3. 遥感期刊论文速读2(2021年8月12日)
  4. 离职原因要如何写才能不引发纠纷
  5. AndroidStudio输入生日计算星座
  6. 香港大学计算机科学学制,香港大学CS 计算机科学专业解析
  7. 发布会签到系统_系统开发_创建项目及应用
  8. 虾米音乐穷X事件程序员怎么样呢?
  9. 初识、初使 MySQL
  10. 基于QT5实现的心率变异与心率减速力分析软件