首页
社区
课程
招聘
[原创]企业微信逆向分析之——自己二维码——静态分析
2020-7-5 13:38 12592

[原创]企业微信逆向分析之——自己二维码——静态分析

2020-7-5 13:38
12592

使用工具

顶部Activity(app)
ddms
jadx
xposed类框架

分析方法

静态分析

技术点

接口采用动态代理方式替换

跟踪界面

利用顶部Activity分析Activity类:com.tencent.wework.friends.controller.FriendsShareWxCardActicity
顶部activity

 

ddms分析截图

分析资源id

com.tencent.wework:id/ex2
android.widget.ImageView

 

资源id

 

public static final int ex2 = 2131303929;
资源id被使用

 

资源id被使用

 

this.gAJ = (ImageView) findViewById(R.id.ex2);

 

setImageBitmap

 

setImageBitmap 被引用位置

 

setImageBitmap被引用

最终代码定位位置

最终代码定位位置1
最终代码定位位置1
可调用方法1:ContactService.getService().GetMyQRCodeImageWithStyle(eQB2, z, new ICommonResultDataCallback() {

 

最终代码定位位置2:
最终代码定位位置2

 

可调用方法2:ContactService.getService().GetMyQRCodeImage(false, new IGetCorpAdminInfoCallback()

 

经过上面分析有这2个方法都可以获取自己的二维码

获取二维码的hook代码

注意点有用这里使用企业微信涉及到了一个接口,所有实现起来需要借助java 的代码模式来实现。

 

企业微信该接口的定义
ICommonResultDataCallback接口

package com.tencent.wework.foundation.callback;

public interface ICommonResultDataCallback {
    void onResult(int i, byte[] bArr);
}

实现方式

//public interface ICommonResultDataCallback {
            //    void onResult(int i, byte[] bArr);
            //}
            Class cls_todoProxy = XposedHelpers.findClass("com.tencent.wework.foundation.callback.ICommonResultDataCallback", this.classLoader);
            InvocationHandler invocationHandler = new InvocationHandler() {
                public Object invoke(Object obj, Method method, Object[] objArr) throws Throwable {
                    try {
                        if ("onResult".equals(method.getName())) {
                            int code = (int) objArr[0];  // if (i != 0) 获取自己二维码失败  0:成功
                            byte[] bArr = (byte[]) objArr[1];                            
                            iQrcodeCallback.onGetQrcode(code, bArr);//这里可以实现自己的逻辑比如保存到文件或发送的你需要的位置
                        }
                    } catch (Throwable th) {
                        th.printStackTrace();
                    }
                    return null;
                }
            };
            Object obj_ContactService = ContactHelper.getInstance().getContactService(this.classLoader);
            //public void GetMyQRCodeImageWithStyle(int i, boolean z, ICommonResultDataCallback iCommonResultDataCallback)
            //ContactService.getService().GetMyQRCodeImageWithStyle(eQB2, z, new ICommonResultDataCallback()

            try {
                XposedHelpers.callMethod(obj_ContactService, "GetMyQRCodeImageWithStyle", new Class[]{Integer.TYPE, Boolean.TYPE, cls_todoProxy}, new Object[]{Integer.valueOf(0), Boolean.valueOf(isMyOrOhterMean), Proxy.newProxyInstance(this.classLoader, new Class[]{cls_todoProxy}, invocationHandler)});
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            }

企业微信数据存储叨叨-大家一起来叨叨

在分析企业微信过程中发现存在类似微信的数据库,而且结构几乎一样,存储模式是按企业区分不同的私有目录,可奇怪的是所有存储数据好像都不是存放在这里。

 

而且好像也没有存储在普通的sqlite数据库中,普通sqlite好像只是存放bugly的数据,可以肯定的一点是在断网的情况下,企业微信app还是可以展示数据,所有它不可能是采用全部存储在服务器。 难道它采用了新的方式进行存放,或缓存技术。 看来要花时间好好学习一下企业微信的数据存储。
sqlite加密数据库接口

/data/user/0/com.tencent.wework/MicroMsg/d2ce8f4dd074c254b3e9b31f51297964/EnMicroMsg.db;1参数sqlite密码:b3a5da2;4参数805306368;6参数0
 /data/user/0/com.tencent.wework/MicroMsg/d2ce8f4dd074c254b3e9b31f51297964/EnMicroMsg.db;1参数sqlite密码:b3a5da2;4参数805306368;6参数0
 /data/user/0/com.tencent.wework/MicroMsg/d2ce8f4dd074c254b3e9b31f51297964/WxExpt.db;1参数sqlite密码:b3a5da2;4参数805306368;6参数0
 /data/user/0/com.tencent.wework/MicroMsg/d2ce8f4dd074c254b3e9b31f51297964/AppBrandComm.db;1参数sqlite密码:b3a5da2;4参数805306368;6参数0

严重说明

 

本文的目的只有一个就是学习逆向分析技巧,如果有人利用本文技术进行非法操作带来的后果都是操作者自己承担,和本文以及本文作者没有任何关系


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞3
打赏
分享
最新回复 (11)
雪    币: 2719
活跃值: (1502)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
Vn小帆 2020-7-5 14:15
2
0
企业微信的数据库  也是  放在本地    只不过 是通过 so 层读取的   跟  微信 有点不一样
雪    币: 451
活跃值: (1603)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
younghare 1 2020-7-5 17:59
3
0
Vn小帆 企业微信的数据库 也是 放在本地 只不过 是通过 so 层读取的 跟 微信 有点不一样
EnMicroMsg.db  、AppBrandComm.db、WxExpt.db中没有看到对应的数据。难道是存放在其他数据库文件?
雪    币: 212
活跃值: (61)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
相逢相识相知 2020-7-13 22:45
5
0
企业微信数据库在data\data\com.tencent.wework\app_data\Profiles\长字符串,这个文件夹下,又分为多个,文件夹,每个文件夹存放了对应的数据,存放消息的在Message1/info.db
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
yinhanlei 2020-9-22 10:20
6
0
请问,Android手机企业微信的数据库秘钥怎么去获取?
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
yinhanlei 2020-9-22 10:20
7
0
Vn小帆 企业微信的数据库 也是 放在本地 只不过 是通过 so 层读取的 跟 微信 有点不一样
请问,Android手机企业微信的数据库秘钥怎么去获取?
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_foyotena 2020-9-22 12:38
8
0
企业微信有啥搞的,直接找官方要api就是
雪    币: 598
活跃值: (1252)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ty1937 2021-3-15 12:15
9
0
请问,Android手机企业微信的数据库秘钥怎么去获取?
雪    币: 1282
活跃值: (1342)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
初学逆向 1 2021-6-22 19:12
10
0
你好 我想问下企业微信如何进行抓包
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_myvyymum 2022-4-1 14:46
11
0
企业微信数据库密码是不可见字符
雪    币: 1396
活跃值: (1887)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NSky99 2022-4-1 15:08
12
0
请问,查看active的是什么工具。
游客
登录 | 注册 方可回帖
返回