对WXin执行回插入代码后的回编译操作
话说在前头,对微信的反编译只是出于不得已为之,我一直觉得任意破坏他人成果不好,所以我不也不敢滥用。出于自己比较小白的技术,我参考了众多同行资料,我没有一一记录和收藏,可惜。
一、研究背景
这次的反编译没有丝毫想冒犯的意思,只是想做些研究,毕竟在APP端众多应用都对微信进行模仿,我也想了解一下
反编译后的那种语言模式。
二、研究目的
在微信代码中添加activity,强制改变其跳转界面,不破坏其原有代码结构,只加入新的代码。
三、使用工具
我使用的工具如下:
使用工具:ShakaApkTool2.0.0
微信版本:weixin6.3.9 (太高的版本我是不敢尝试的)
四、研究过程
1、对微信反编译
我曾使用apktool d 来对微信进行反编译,结果报出了未知资源的错误。一顿思考后,决定放弃对于res端的反编译,布局文件放至assests中去实现
2、反编译后的文件路径
以上标红的地方就是我要修改的地方。
- 由于无法将资源文件放入res,所以调用assets方法中的xml文件进行布局,唯一的要求,就是使用的xml必须是生成APK 解压出来的。
- 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 来回编
它的特性如下:
- 增加res资源没有被arsc引用,没有生成id,就会丢失问题
- -增加String Style 中连续`;`引发解析错误修正
- -添加选项[df|default-framework]参数,使用默认的框架资源文件
- -添加选项 [mc|more-recognizable-characters]显示更多的可识别字符.比如中文,不在以\uxxxx编码显示,而是直接显示中文.让smali更容易读
- -添加选项[fui|fuck_unkown_id],对未知ID,强制处理
- -添加选项[ir|ignore_res_decode_error],忽略资源decode异常
- -添加选项[n9|no-9png] 参数,不解析.9格式的资源
- -添加选项[fnd|fuck-not-defined-res] 参数
- 支持标准资源名的`Public symbol drawable/? declared here is not defined.`异常打包
- 不支持带点资源名的打包
- -添加选项[xn|xml_attribute_name_correct] 参数
我觉得因为有了标红的特性所以,它才能顺利回编吧,我也没有研究它到底帮了什么处理,因为时间不够。
9、报错了--我上网查到解决方法,确实解决了问题
不过,估计得改好几次
10、回编译成功
11、取出APK做签名
12、进行签名后的APK,我放在模拟器上安装都安装不上
考虑是因为签名不一致的原因,被拒绝初始化APP了,有两个办法,都是参考网上给出的建议,但是我只用了第一个
- 到应用商城下载最新微信 APK 先登录一下,成功后卸载,再安装自己的应用,缓存不用清理
- 我在网上查到可以将手机中syste路径下的libjvm.so中一行校验签名的那句去掉,我没试过,但是这样应该行的通
- 这个方法也适用于微信旧版本的处理,虽然办法有点那啥,反正我的目的只要插入成功就可以
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执行回插入代码后的回编译操作相关推荐
- 【pytest】概述pytest——setup、teardown方法和conftest中的fixture用法,来执行测试用例的前置/后置条件语句操作
大家好,我是好学的小师弟.今天和大家分享下-在pytest中的前置/后置操作. 所谓的前置/后置操作,就是在测试用例执行前,你预先要执行的一些步骤:在测试用例执行完毕后,你要执行的一些数据清理/备份工 ...
- cefsharp执行完js代码后获取返回值问题
CefSharp相关操作 Task<CefSharp.JavascriptResponse> t = mychrome.GetBrowser().MainFrame.EvaluateScr ...
- idea修改代码后没有重新编译_SpringBoot中实现代码修改之后的自动更新与热加载...
在实际的开发过程中,我们经常修改代码之后,手动的重启项目,查看修改效果.那么有没有一种方式能够快速的.自动的帮我们将修改代码自动更新,避免手动重启,从而提高开发效率呢?是有的,对于这个功能很多人对功能 ...
- 七种MYSQL插入数据后返回自增主键ID的方法
我们都知道,mysql中的insert插入之后会有返回值,返回的是影响的行数,也就是说,成功插入一条数据之后返回的是1,失败则返回0.那么,很多时候我们都想要得到最后插入的id值,下面七种方法均可,结 ...
- mysql c接口返回自增id_详解mysql插入数据后返回自增ID的七种方法
引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...
- mysql 新增返回主键自增id_详解mysql插入数据后返回自增ID的七种方法
引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...
- mysql插入数据后返回自增id
mysql插入数据后返回自增id 使用<insert 中的useGeneratedKeys 和 keyProperty 两个属性 在Mybatis Mapper文件中添加属性 useGenera ...
- Vue3 使用@antv/g6 流程图编译代码后加载多个dom问题
问题描述: npm run build打包代码后,运行编译后的代码,点击路由跳转到对应页面 图表没有在对应的位置展示,打开 Elements发现居然有两个,但是刷新页面就会变成1个,奇怪的是不编译代码 ...
- 哈希表_实现插入、删除、查找元素操作(链地址法解决冲突)
这几天用在写代码(实际上是为了补作业)的时间明显比以前多了,在这过程中也 发现了自己由于前期的训练太少,导致很多基础的语法都不熟悉,有很长的时间都用在了debug上.很多问题写的时候记得,过后又忘了, ...
最新文章
- 产业|一文读懂自动驾驶汽车产业链上下游
- 用几条shell命令快速去重10G数据
- IPC进程间通信 D-Bus(Desktop Bus)快速入门(以libdbus-glib库为例)
- zuul默认的路由规则及禁用路由规则
- linux 文件及目录结构体系
- git 分支的创建和切换
- Hadoop核心生态
- 【Spark】Spark 报错 error writing stream metadata exitcode=1073741515
- data的值 如何初始化vue_【Vue 原理】Vue 是如何代理 data、methods 和 props 的?
- 电子元器件选型——电阻
- tomcat日志配置(停止日志或修改日志路径)
- 【机器学习】有监督学习,无监督学习,半监督学习和强化学习
- POJ 3764 DFS+trie树
- Pollard Rho算法分解因数
- How to cover an IE windowed control (Select Box, ActiveX Object, etc.) with a DHTML layer.
- 地图切片的概念与原理
- golang切片简介
- 狂野之刃服务器微信群,魔兽世界怀旧服狂野之刃 狂野之刃获取方法
- 百度地图js简单路径规划
- 仿个人税务 app html5_假个税APP蹭热点窃信息防不胜防,你千万别下载错了!