对微信的二次打包学习1:重打包

原创 2015年11月18日 11:03:40

抱着学习的心态,从官网上了下了一个weixin.apk.

版本是:6.3.7


使用Apktool解压weixin.apk没有,但是重新编译会报如下错:

yc@yc:~/temp2$ java -jar apktool/apktool.jar b weixin_622
I: Using Apktool 2.0.1
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Building resources...
/home/yc/temp2/weixin_622/res/values/public.xml:165: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/public.xml:497: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/public.xml:674: error: invalid symbol: 'if'

/home/yc/temp2/weixin_622/res/values/public.xml:2828: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/public.xml:3004: error: invalid symbol: 'if'

/home/yc/temp2/weixin_622/res/values/public.xml:4635: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/public.xml:4811: error: invalid symbol: 'if'

/home/yc/temp2/weixin_622/res/values/public.xml:9957: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/public.xml:10133: error: invalid symbol: 'if'

/home/yc/temp2/weixin_622/res/values/public.xml:10426: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/public.xml:10602: error: invalid symbol: 'if'

/home/yc/temp2/weixin_622/res/values/public.xml:10891: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/public.xml:11067: error: invalid symbol: 'if'

/home/yc/temp2/weixin_622/res/values/public.xml:11527: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/public.xml:11703: error: invalid symbol: 'if'

/home/yc/temp2/weixin_622/res/values/attrs.xml:319: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/drawables.xml:176: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/drawables.xml:353: error: invalid symbol: 'if'

/home/yc/temp2/weixin_622/res/values/layouts.xml:166: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/layouts.xml:342: error: invalid symbol: 'if'

/home/yc/temp2/weixin_622/res/values/strings.xml:165: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/strings.xml:357: error: invalid symbol: 'if'

/home/yc/temp2/weixin_622/res/values/colors.xml:165: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/colors.xml:341: error: invalid symbol: 'if'

/home/yc/temp2/weixin_622/res/values/dimens.xml:165: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/dimens.xml:341: error: invalid symbol: 'if'

/home/yc/temp2/weixin_622/res/values/styles.xml:613: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/styles.xml:1806: error: invalid symbol: 'if'

/home/yc/temp2/weixin_622/res/values/ids.xml:64: error: invalid symbol: 'do'

/home/yc/temp2/weixin_622/res/values/ids.xml:240: error: invalid symbol: 'if'

Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [/tmp/brut_util_Jar_6791269599430861131.tmp, p, --forced-package-id, 127, --min-sdk-version, 15, --target-sdk-version, 22, --version-code, 622, --version-name, 6.2.5.54_re87237d, -F, /tmp/APKTOOL3962896442063820550.tmp, -0, arsc, -I, /home/yc/apktool/framework/1.apk, -S, /home/yc/temp2/weixin_622/res, -M, /home/yc/temp2/weixin_622/AndroidManifest.xml]
    at brut.androlib.Androlib.buildResourcesFull(Androlib.java:459)
    at brut.androlib.Androlib.buildResources(Androlib.java:397)
    at brut.androlib.Androlib.build(Androlib.java:285)
    at brut.androlib.Androlib.build(Androlib.java:256)
    at brut.apktool.Main.cmdBuild(Main.java:225)
    at brut.apktool.Main.main(Main.java:84)
Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [/tmp/brut_util_Jar_6791269599430861131.tmp, p, --forced-package-id, 127, --min-sdk-version, 15, --target-sdk-version, 22, --version-code, 622, --version-name, 6.2.5.54_re87237d, -F, /tmp/APKTOOL3962896442063820550.tmp, -0, arsc, -I, /home/yc/apktool/framework/1.apk, -S, /home/yc/temp2/weixin_622/res, -M, /home/yc/temp2/weixin_622/AndroidManifest.xml]
    at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:419)
    at brut.androlib.Androlib.buildResourcesFull(Androlib.java:445)
    ... 5 more
Caused by: brut.common.BrutException: could not exec command: [/tmp/brut_util_Jar_6791269599430861131.tmp, p, --forced-package-id, 127, --min-sdk-version, 15, --target-sdk-version, 22, --version-code, 622, --version-name, 6.2.5.54_re87237d, -F, /tmp/APKTOOL3962896442063820550.tmp, -0, arsc, -I, /home/yc/apktool/framework/1.apk, -S, /home/yc/temp2/weixin_622/res, -M, /home/yc/temp2/weixin_622/AndroidManifest.xml]
    at brut.util.OS.exec(OS.java:89)
    at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:413)
    ... 6 more



看来是利用了aapt的特性,用java关键字来作name,导致不能编译,但是运行用的是id,所以运行没有问题。

这个问题如何破呢?最简单的就是将name中的do与if都替换掉。貌似也可以修改aapt,忽略掉do与if。

当然替换是多简单的事,进入res目录,进行替换:

yc@yc:~/temp2/weixin_622/res$ sed -i 's/"if"/"if_yc"/g' `grep '"if"' . -rl`
yc@yc:~/temp2/weixin_622/res$ sed -i 's/"do"/"do_yc"/g' `grep '"do"' . -rl`
两个命令就把绝大部分的替换掉了,剩下的一些零碎手工修改就可以了。


修改完成后再来尝试重新打包:

yc@yc:~/temp2$ java -jar apktool/apktool.jar b weixin_622
I: Using Apktool 2.0.1
I: Checking whether sources has changed...
I: Checking whether resources has changed...
I: Building resources...
I: Building apk file...
I: Copying unknown files/dir...
打包编译成功!


下一步再来修改一下包名:

将包名修改为com.tencent.mm.want_fuck"

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" 
package="com.tencent.mm.want_fuck" platformBuildVersionCode="19" platformBuildVersionName="4.4.2-1456859">

然后再把Manifest.xml中的所有 ". 都替换为 "com.tencent.mm.


重新打包编译,安装运行试

比较神的是竟然后面就没有遇到签名验证,包名验证等一系列问题,很顺利的登录了。

感觉顺利的太过火了。。


运行截图:





grep了下,还是有很多地方会取签名信息。

到这步也至少能够打造一个简单的自己的微信版本了。


先记录到此。


对微信的二次打包学习2:安装多个微信

继上一篇,实现了重打包。 那打包后是不是就意味着我们能够在手机上面安装多个微信了呢? 还是用是目前官方最新版本6.3.7来试验。 安装打包后的APK会提示provider conflic...
  • XXOOYC
  • XXOOYC
  • 2015年11月19日 14:06
  • 2303

apktool反编译重编译微信6.3.7

使用apktool2.0.0-RC2反编译重编译微信6.3.7成功,过程如下: 1.反编译过程很顺利 2.重编译报如下错误: D:\android\apktool>apktool.bat b w...
  • xpb1980
  • xpb1980
  • 2016年08月22日 17:36
  • 8012

打安卓包,更换包名 的 三个 关键点 微信登录接入流程

应公司要求,要更改包名   原项目含微信sdk 改包名的话集中在三个地方更改, (1)java的类包 rename   (2)微信接口包   包名.wxapi   (3)AndroidMani...
  • zhanghow
  • zhanghow
  • 2017年01月20日 00:14
  • 970

微信Android资源混淆打包工具,如何让应用安装包立减1M

微信中的资源混淆工具主要为了混淆资源ID长度(例如将res/drawable/welcome.png混淆为r/s/a.png),同时利用7z深度压缩,大大减少了安装包体积,同时也增加了逼格,提升了反破...
  • Tencent_Bugly
  • Tencent_Bugly
  • 2015年10月16日 10:16
  • 2145

微信5.3反编译及修改打包

最近有时间研究了一下微信的反编译及重编译。 注意:本教程主要供初学者了解一下,APK的组成及打包步骤,高手绕路。 1. 重新编译后的程序可以运行,但是不要登录,如果登录,则会被腾讯网站识别...
  • nightstar84
  • nightstar84
  • 2016年03月31日 22:22
  • 1354

实例解读AndroidManifest.xml

随手找了一份文件进行解读 内容如下
  • protoss_penguin
  • protoss_penguin
  • 2016年07月13日 00:15
  • 2966

Android逆向之旅---解析编译之后的AndroidManifest文件格式

一、前言今天又是周六了,闲来无事,只能写文章了呀,今天我们继续来看逆向的相关知识,我们今天来介绍一下Android中的AndroidManifest文件格式的内容,有的同学可能好奇了,AndroidM...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2016年01月23日 12:52
  • 22209

获取apk的版本号versionCode apk的版本名称VersionName

需求:开发中经常有需求获取apk文件的版本号,和版本名称,比如确定一下上传到应用市场的apk是不是最新的apk,检查更新的时候也要确保后台的apk文件为新的apk。 行不通的...
  • TheMeLove
  • TheMeLove
  • 2016年10月14日 16:35
  • 5975

Android SDK目录及版本号区别

今天又有人问Tools,Build-Tools,Platform-tools有什么区别,是干嘛的? 现在对SDK目录做一下总结阐述!SDK目录add-ons这里面保存着附加库,第三方公司为andro...
  • aiynmimi
  • aiynmimi
  • 2016年03月31日 17:25
  • 33770

微信授权登陆接入第三方App(步骤总结)Android

微信授权登陆接入第三方App(步骤总结) 这几天开发要用到微信授权的功能,所以就研究了一下。可是微信开放平台接入指南里有几个地方写的不清不楚。在此总结一下,以便需要的人。 很多微信公众平台的应用如...
  • jolin678
  • jolin678
  • 2016年01月15日 15:34
  • 42821
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对微信的二次打包学习1:重打包
举报原因:
原因补充:

(最多只允许输入30个字)