前言

第一次听到微信多开大概在2013年,一个做微商的朋友,问我能不能做一个微信安卓版的多开程序,我觉得挺有意思估计也不难,便研究起来。研究后也发现其实也有一些技术难点,和了解到的一些微信的安全策略,写出来与大家分享,不足之处多多指教。

0x00 多开思路

从Android开发角度来说,拥有不同包名的2个应用,Android系统会认为是2个应用,所以微信

多开的思路是修改微信的包名,让安卓系统认为这是2个应用,从而达到多开的目的。

0x01 工具准备

系统环境是OS X 10.11

apktool 2

dex2jar

JD-GUI

baksmali & smali

0xED

Sublime Text

0x02 APK解包与分析

使用apltool进行解包,我们可以看到一些关键的文件和目录:

AndroidManifest.xml文件

assets目录(微信插件和一些资源文件)

lib目录(封装好的二进制类库,so文件)

res目录(图片,布局,字符串等资源)

smali目录(微信源码)

0x03 应用名称修改

要制作多开的微信,也许我们需要把应用修改一个名称,以便使用的时候和原版的区分,找到

以下文件:

res/values/strings.xml

修改app_name 和 launcher_name,比如:微信01、wechat01、超级微信、搜客微信等等

0x04 包名修改

查看AndroidMainfest.xml的manifest节点package属性,得知微信的包名为: com.tencent.mm。

我们需要修改包名,我们将使用这个包名作为示例:com.tendk01.mm(dk是多开的意思;01是序号需要的话可以制作更多的多开版本;包名可以随便起但是最好保持包名跟原版长度一致,避免一些奇怪的问题出现。)

做过Android开发或者Java开发的都知道每一个“包”对应一个真实的文件夹,除了修改 AndroidMainfest.xml文件还需要将smali/com/tencent文件夹名修改为tendk01。

0x05 smali文件基础修改(调用)

我们先来看一个smali文件的几个代码片段:

一个smali文件的开头:

.class public final Lcom/tencent/mm/a/a;

.super Ljava/lang/Object;

.source "SourceFile"

smali文件关于“com.tencent.mm”的引用:

sput-object v0, Lcom/tencent/mm/a/a;->coh:[C

.line 76

const/16 v0, 0x100

new-array v0, v0, [I

.line 78

sput-object v0, Lcom/tencent/mm/a/a;->coi:

.field private static final coh:[C

.field private static final coi:[I

在文件中可以看到很多com/tencent/mm的代码,我们既然修改了包名,也要将所有的该包下 面所有的定义以及调用全部修改好(用sublime text的简单的查找替换即可解决问题),例 如:

com/tencent/mm 修改为 com/tendk01/mm

com.tencent/mm 修改为 com.tendk01.mm

0x06 微信插件调用修改

微信的插件封装在/assets/preload目录下的jar文件和so文件里,你们看到的可能是这样子的:

com.tencent.mm.plugin.mutidex.jar.0

libvoipCodec.so

com.tencent.mm.plugin.mutidex.jar.1

libvoipCodec_v7a.so.0

libvoipCodec_v7a.so.1

libvoipCodec_v5.so

libvoipCodec.so

仔细观察,这种带有0和1结尾的文件,仔细观察一下便可会发现0结尾的文件都是1M大小,显然原来的文件是按照1M进行分隔的,我们修改之前,需要先将他们合并回一个完整的文件,参考Linux的split和cat命令,合并猴进行解包,然后需要按照0x05的步骤进行修改。

0x07 *.so文件修改

在/lib/armeabi目录下的so文件,封装了很多JNI的方法,由于包名的修改,也需要同步修改

JNI方法的调用。 关于so文件的修改,用一般的16进制编辑器即可,查找替换:

com.tencent 修改为 com.tendk01

com/tencent 修改为 com/tendk01

com_tencent 修改为 com_tendk01

但是有一点需要注意的,so文件这样修改完,还不能用的,会提示找不到修改后的方法。

方法名明明已经修改好了,和smali也是对应的,为什么会提示找不到方法呢? 其实so文件本

质上是一个arm架构的elf文件,如果了解elf的文件结构,便知道问题在哪里。

简单来说,在elf文件的开头有一段hash用来快速寻找文件内的方法位置,如果方法名修改了, hash不对应则找不到方法的位置。

根据这个原理,我写了一个小工具来辅助修改so文件,该项目已开源在github:https://github.com/chinaameri...,在此提供修改流程图和思路,如果大家有兴趣可以一期研究修改。

修改so文件hash的流程图:

0x08 smali文件进阶修改(防封&注入)

前面我们通过查找替换的方式来对smali文件进行过简单的修改,现在我们需要深入的修改smali文件,以达到绕过微信检测机制和注入我们自己的代码的目的:

基于我研究的这个版本的微信(wechat400.apk),虽然比较老,但是官方已经有防止篡改的机制在代码里了,若修改多开不bypass微信的防篡改机制则会很快被封号。经过分析,得知检测手段是通过应用签名来和服务器的保存的签名来比对,若重新打包签名则会改变,在特定的情况就执行检测,确认当前的微信客户端程序是合法的且没有被修改。

我们需要做以下的工作来绕过微信监测机制:

获取官方微信的应用签名信息(字符串形式)

替换所有调用获取签名的系统方法为我们自己写的方法(详见0x09)

如果可以我们还要把微信强制更新的提示给阉割掉:

修改com.tendk01.mm.sandbox.updater.AppUpdaterUI.smali,代码如下:

.method public onResume()V

.locals 0

.prologue

invoke-super {p0}, Landroid/app/Activity;->onResume()V

invoke-virtual {p0},

Lcom/tence01/mm/sandbox/updater/AppUpdaterUI;->finish()V

return-void

.end method

直接给他finish掉,成功阉割。

0x09 编写希望注入微信的代码

新建一个Android项目,如图:

MockDevice.java用于模拟虚假的设备ID,虚假的签名

SyncTask.java用于同步微信用户的信息到第三方API

provider包里面的是是若干ContentProvider,可用于接收微信App传递的数据

编写好后编译成apk,反编译该apk获取MockDevice.smali和SyncTask.smali(混淆为a.smali)文件,并放入微信的smali源码文件夹里面,如图:

0x0A APK打包、签名、安装、测试

生成自己的android签名(需保存好该签名)

使用apktool重新将微信打包好

使用自己的android签名对打包好的apk签名

安装登录一切正常,见图

0x0B 微信自动化脚本

利用Android的测试框架,可以对微信进行模拟人工自动化操作(市面上所有微商神器自动化

的原理)。

为了测试开发方便,引入robotium测试框架,可以做到打开某个界面、查找某个按钮、在某个文本框输入内容、获取界面信息等等操作。

0x0C 提出几个问题供大家思考

微信还可以采用什么方式防止微信程序被篡改?

我用于研究的该多开版本(wechat400.apk),地理位置发送始终失败,仍未解决。

0x0D 掌握这些技术可以做什么?

窃取用户信息

自动化完成加人、关注、点赞等操作

获取公众号文章阅读量、点赞量等数据

制作插件:如自动打飞机、自动抢红包等

0x0E 对微信团队说的话

该文章仅仅是对技术的研究和探讨,希望不会收到律师信。微信团队一直在努力维护微信这个生态圈,期待加入更多的技术手段来完善应用安全,祝一切顺利。

0x0F 给安卓用户的建议

建议不要从乱七八糟的应用市场下载应用,尽量在官方渠道下载,避免下载到被篡改过的应用,不知道这些程序在背后注入了什么代码,若隐私泄露或者经济损失就不好了。

为Android购买多个改装微信,从制作一个“微信多开版”看微信安全相关推荐

  1. 数字信号 fft c源码_如何制作一个简单的人体动态识别微信小程序(附源码)

    知乎小白第一次写专栏,还请多指教. 先放成果. GitHub源码: lrioxh/HAR-applet-of-Wechat​github.com b站演示视频: 居然不需要服务器?!如何制作一个简单的 ...

  2. H5版仿制微信跳一跳小游戏,网页版仿微信跳一跳小游戏源码,实现了跳一跳的基本核心功能

    H5版仿制微信跳一跳小游戏,网页版仿微信跳一跳小游戏源码,实现了跳一跳的基本核心功能 完整代码下载地址:H5版仿制微信跳一跳小游戏,网页版仿微信跳一跳小游戏源码 运行截图 Project setup ...

  3. 仿京细菜谱微信小程序源码云开版

    仿京细菜谱微信小程序源码云开版,不需要域名和服务器即可搭建小程序,直接导入开发者工具即可上传审核. 源码下载:仿京细菜谱微信小程序源码云开版-小程序文档类资源-CSDN下载

  4. 微信要求的android版本是多少,微信发布7.0.15安卓正式版:微信号可以更改,但必须满足条件...

    5月28日,微信安卓版 7.0.15 正式版发布,主要新增了深色模式可不跟随系统功能,可单独设置.此外,在微信内点击新消息通知,当前浏览的网页.小程序等将自动收为浮窗;可在群聊附件栏中直接发起&quo ...

  5. 用Android微信聊天记录 制作一个词云(python)

    在看完了如何做词云的教程,试用微信聊天记录做一个demo练手.关于词云,网上有大量的教程,可随意参考,注意python的版本问题即可. 微信聊天记录导出 用到的工具是一款微信聊天记录查看软件,分享如下 ...

  6. 从一个程序员的角度看——微信小应用

    前言: 最近初步了解了一下微信小应用,APP端的同事也非常感兴趣,于是在公司内部做了一个小小的分享,分享的过程中有很多讨论内容,大家也是非常感兴趣和有自己的看法,当时"混乱"的场面 ...

  7. 为Android购买多个改装微信,分享外面高价售卖的修改微信号方法 亲测成功 仅限安卓手机...

    分享外面在高价售卖的微信号修改方法 亲测成功 仅限安卓手机 这个方法今天在外面看到很多人在代修改,转卖方法!小编觉得还是有必要发出来让大家去动手尝试一下! 实际上这个修改微信号的功能在内测版微信就可以 ...

  8. android全屏命令,微信全屏表情指令2020安卓版-2020微信满屏幕表情指令软件v7.0.19 清爽版-007游戏网...

    2020微信满屏幕表情指令软件,是本站独家才有的一款微信表情代码APP,无需进行特别的技巧,就可以让你们在平常或者过年的期间正常的使用,享受个性化的表情带来的无限互动乐趣. 微信表情雨2020有效词有 ...

  9. 微信jssdk ajax 获取签名,【Golang版】微信access_token、jsapi_ticket、signature签名算法生成示例,开箱即用...

    # WXToken 项目地址:[https://github.com/henson/WXToken](https://github.com/henson/WXToken) 因为手上有一个项目需要用到微 ...

  10. 【Android Studio学习】第一篇、制作一个拥有登录和注册功能的简易APP

    目录 第一部分.前言 1.目标效果 2.准备知识 第二部分.详细步骤 1.新建Empty工程 ​2.添加资源文件 3.搭建注册界面 4.搭建登录界面 5.编写注册界面和登录界面的代码 6.设置APP初 ...

最新文章

  1. python3.6+pytorch-cpu+Pycharm环境下的PyTorch配置方法
  2. golang x509包 数字证书相关介绍
  3. vb小工具-----txt转为excel
  4. 汇编-函数调用的理解
  5. java什么时候创建进程,Java创建进程
  6. 在Intellij IDEA里面配置Tomcat和Websphere Application Server
  7. 谷歌浏览器(chrome) —— 扩展应用程序
  8. Sass:@error
  9. ztree的select设置,完笔
  10. 信息论基础 thomas 2nd ed
  11. Pspice的文本输入方法
  12. go decimal 使用方法
  13. “百度有啊”可以访问了,大家预测一把其前景如何?
  14. 多重if-else的精简方式
  15. 锂离子电池种类介绍和分类
  16. 超详细超快的免费图床设置教程
  17. ROS1云课→18一键配置
  18. 什么是继承,什么是多态,方法的重载和覆盖有何区别?
  19. 来自一位普通博导带学生的所做所思:博士该这么读!
  20. 麦芒6会升级鸿蒙吗,恭喜麦芒6!今日起开始升级安卓8.0+EMUI 8.0

热门文章

  1. MySQL可视化工具推荐
  2. 迅雷对非会员进行下载限速的解决方案
  3. AE CC2018/64位安装步骤及各种出现问题!!(真的装了好久)
  4. C语言 知识点总结完美版
  5. mysql 查看二进制_查看mysql二进制文件(binlog文件)
  6. [译] iOS 11:机器学习人人有份
  7. python win32api教程_解放双手——python win32api 入门
  8. 产品配件类目税目分类_商品类别税率一览表
  9. Python教学视频(四)输入语句和基础算术运算符
  10. Go程序设计语言 第1章 入门