首页
社区
课程
招聘
[求助]微信重打包后总是crash,求解
发表于: 2017-1-24 09:43 10660

[求助]微信重打包后总是crash,求解

2017-1-24 09:43
10660
最近在开发一个自动抢红包的插件,首先把6.5.3版本的xposed插件和重打包版本都已经搞定了;前两天微信又发布了6.5.4版本,其中加入了一个timingIdentifier字段来防止自动抢红包,无奈加急搞了两个晚上,终于把xposed插件和重打包版本也弄出来了,但6.5.4重打包版本有一个问题,微信运行过程中总是闪退,看闪退日志貌似是与libdvm.so有关,对这一块了解不多,实在搞不出来,crash日志如下:

V(13806) SignalHander Entered  (jni crash monitor)
V(13806) On Thread start.  (jni crash monitor)
I(13806) before unwind signal thread  (crash)
F(13806) Process:            com.tencent.mm  (MicroMsg_Crash)
F(13806) Crash Thread:       14613(total:78)  (MicroMsg_Crash)
F(13806) Date/Time:          2107-01-23 +8.00 21:34:02.123  (MicroMsg_Crash)
F(13806) Live Time:          74s  (MicroMsg_Crash)
F(13806) Device:             R7007 android-18  (MicroMsg_Crash)
F(13806) Exception info:       (MicroMsg_Crash)
F(13806) Siginfo:            errno:0, pid:1608238039, uid:0, process:UNKNOWN  (MicroMsg_Crash)
I(13806) after unwind signal thread  (crash)
F(13806)   (MicroMsg_Crash)
F(13806) *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***  (MicroMsg_Crash)
F(13806) Build fingerprint: OPPO/R7007/R7007:4.3/JLxxxC/13xxxxxxxx67:user/release-keys  (MicroMsg_Crash)
F(13806) pid: 13806, tid: 14613  >>> com.tencent.mm <<<  (MicroMsg_Crash)
F(13806) signal 7 (SIGBUS), code 2 (BUS_ADRERR), fault addr 5fdbc3d7  (MicroMsg_Crash)
I(13806) after dump thread backtrace  (crash)
F(13806)   #00  pc 0x6efca  /system/lib/libdvm.so (dvmCanPutArrayElement+5)  (MicroMsg_Crash)
F(13806)   #01  pc 0x24918  /system/lib/libdvm.so (dvmAsmSisterStart+984)  (MicroMsg_Crash)
F(13806)   #02  pc 0x2e218  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)  (MicroMsg_Crash)
F(13806)   #03  pc 0x62df1  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+292)  (MicroMsg_Crash)
F(13806)   #04  pc 0x4f2bd  /system/lib/libdvm.so (???)  (MicroMsg_Crash)
F(13806)   #05  pc 0x5175d  /system/lib/libandroid_runtime.so (???)  (MicroMsg_Crash)
F(13806)   #06  pc 0x65c91  /system/lib/libandroid_runtime.so (android::NativeInputEventSender::receiveFinishedSignals(_JNIEnv*)+196)  (MicroMsg_Crash)
F(13806)   #07  pc 0x65d13  /system/lib/libandroid_runtime.so (android::NativeInputEventSender::handleEvent(int, int, void*)+50)  (MicroMsg_Crash)
F(13806)   #08  pc 0x15161  /system/lib/libutils.so (android::Looper::pollInner(int)+468)  (MicroMsg_Crash)
F(13806)   #09  pc 0x1520d  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92)  (MicroMsg_Crash)
F(13806)   #10  pc 0x6b6dd  /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)  (MicroMsg_Crash)
F(13806)   #11  pc 0x203cc  /system/lib  (MicroMsg_Crash)
F(13806) libdvm.so (dvmPlatformInvoke+112)  (MicroMsg_Crash)
F(13806)   #12  pc 0x50d97  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)  (MicroMsg_Crash)
F(13806)   #13  pc 0x29860  /system/lib/libdvm.so (???)  (MicroMsg_Crash)
F(13806)   #14  pc 0x2e218  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)  (MicroMsg_Crash)
F(13806)   #15  pc 0x630af  /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+350)  (MicroMsg_Crash)
F(13806)   #16  pc 0x6acd3  /system/lib/libdvm.so (???)  (MicroMsg_Crash)
F(13806)   #17  pc 0x29860  /system/lib/libdvm.so (???)  (MicroMsg_Crash)
F(13806)   #18  pc 0x2e218  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)  (MicroMsg_Crash)
F(13806)   #19  pc 0x62df1  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+292)  (MicroMsg_Crash)
F(13806)   #20  pc 0x4c97b  /system/lib/libdvm.so (???)  (MicroMsg_Crash)
F(13806)   #21  pc 0x4f133  /system/lib/libandroid_runtime.so (???)  (MicroMsg_Crash)
F(13806)   #22  pc 0x4fde3  /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*)+378)  (MicroMsg_Crash)
F(13806)   #23  pc 0x208f  /system/bin/app_process (???)  (MicroMsg_Crash)
F(13806)   #24  pc 0xd  (MicroMsg_Crash)
F(13806) 37  /system/lib/libc.so (__libc_init+50)  (MicroMsg_Crash)
F(13806)   #25  pc 0x1bd4  /system/bin/app_process (???)  (MicroMsg_Crash)
I(13806) after dump stack  (crash)
I(13806) after dump jni exception  (crash)
I(26894) Process com.tencent.mm (pid 13806) has died.  (ActivityManager)
D(26868) Process 13806 terminated by signal (7)  (Zygote)

6.5.4版本重打包时我做的手脚是:在classes.dex和classes2.dex这两个文件注入了一些代码
6.5.3版本重打包只是对classes.dex文件注入了代码,classses2.dex并没有修改

在6.5.3版本中,若是对classes2.dex也作修改,貌似也会出现闪退

我猜测难道是因为multi dex机制下,只能对classes.dex作修改?

实现想不透,求大神解疑~~~

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (23)
雪    币: 158
活跃值: (216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
跟mulitidex没关系,微信自己做了手脚
2017-1-26 10:49
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我用jadx反编译微信的源码,总是卡在
java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "pool-1-thread-3
这个,请问你有什么好办法吗?

我是想hook这个函数:com.tencent.mm.plugin.scanner.ui.BaseScanUI
将微信里的3个.dex单独用jadx可以反编译出源码,也可以找到ui这个目录,但是这个目录里面就是没有BaseScanUi这个类的文件
2017-2-1 19:42
0
雪    币: 1
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我也发现了这个问题,对dex2进行修改,在5.0以下的操作系统手机会出错,我感觉可能是微信对这类进行了检测,具体没在仔细看了,我做的6.2.23的是在5.0以上是不会崩溃的,如果哥们你研究出来了,通知我下 97561745,5.0 以上的手机加载模式不区分多个dex了,我感觉是在5.0以下的手机,然后去动态加载dex2的时候,对dex进行了验证
2017-2-3 17:38
0
雪    币: 4
活跃值: (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
第一次在论坛发贴写评论,怎么删除我自己写的评论?
2017-2-5 14:41
0
雪    币: 4
活跃值: (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
11111111111111111
2017-2-5 14:44
0
雪    币: 4
活跃值: (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你好,我使用了dex2jar和baksmali来对三个dex分别进行反编译,没有报错,也能找到BaseScanUi这个类。
jadx这个工具我没用过,猜测可能是jadx的一些bug导致部分类反编译失败,你可以试试dex2jar和badsmali,而且最好使用最新版本,因为一些老版本的存在bug,有时会反编译失败
2017-2-5 14:50
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
新年好!!! 请问 timingIdentifier 怎么获取??? 我研究了很长时间都找不到  望告知 或者说说思路  谢谢
2017-2-7 15:37
0
雪    币: 4
活跃值: (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
timingIdentifier是在用户点击红包时服务器返回的,此时还没有“开”红包,在“开”红包时再带上该字段,用来防止机器人自动抢红包。具体timingIdentifier的获取方法和代码位置在我的另一台电脑上,晚上下班后再给你
2017-2-7 15:53
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
非常感谢 如果方便 发送一下到我邮箱 392401273@qq.com
2017-2-7 16:32
0
雪    币: 4
活跃值: (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
微信6.5.4版本中,LuckyMoneyReceiveUI这个类(在6.5.4版本的第三个dex中)是打开红包的界面,在它的onCreate方法里会向服务器请求timingIdentifier字段。
具体的onCreate中的代码是b(new ae(i, this.hqi, this.hqk, getIntent().getIntExtra("key_way", 0), "v1.0"), false);

顺着上面的b()方法一直跟踪,会发现它个方法最终调用了com.tencent.mm.model.ak.vy().a(paramk, 0);,其中paramk就是上面的new ae(xxxx).

com.tencent.mm.model.ak.vy().a(new ae(xxxx), 0)这个方法调用实际上是向微信的后台发送一个网络请求,请求的参数是new ae(xxx),具体ae的构造参数不再详述,hook一下就能知道。

在ae这个类中,有一个方法是public final void a(int paramInt, String paramString, JSONObject paramJSONObject),它是网络请求返回时的解析函数,这个方法会从服务器返回的json中获取timingIdentifier

根据上面的分析,我写的获取timingIdentifier的xposed主要代码如下:

//模拟发送打开红包的请求,其中的sendid和wxpy通过hook ae类的构造方法可以得到具体内容
private static void sendOpen(ClassLoader classLoader, String wxpy, String sendid) {
                Class aeClass = XposedHelpers.findClass("com.tencent.mm.plugin.luckymoney.c.ae", classLoader);
                Object aeObject = XposedHelpers.newInstance(aeClass, 1, sendid, wxpy, 1, "v1.0");

                Object tempObject = XposedHelpers
                                .callStaticMethod(XposedHelpers.findClass("com.tencent.mm.model.ak", classLoader), "vy");
                XposedHelpers.callMethod(tempObject, "a", aeObject, 0);
        }

//hook住ae类中的网络请求解析函数,获得timingIdentifier
XposedHelpers.findAndHookMethod("com.tencent.mm.plugin.luckymoney.c.ae", classLoader, "a", int.class,
                                String.class, JSONObject.class, new XC_MethodHook() {

                                        @Override
                                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                                                super.afterHookedMethod(param);
                                                JSONObject jsonObject = (JSONObject) param.args[2];
                                                String timingIdentifier = jsonObject.optString("timingIdentifier");
                                                Log.i("Hack", "timingIdentifier: " + timingIdentifier);
                                        }
                                });
2017-2-7 20:20
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
非常受用 原理也讲的简单明了
2017-2-7 20:52
0
雪    币: 289
活跃值: (82)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢分享,很好,详细,学习了!
2017-2-8 21:44
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
你好我在重新打包的时候出了问题(因为关键字 do if),能告诉我怎么解决吗
2017-2-9 16:56
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
问题已找到,是我电脑的内存太小,用我朋友的电脑直接用jadx-gui反编译出了源码,谢谢
2017-2-9 17:17
0
雪    币: 4
活跃值: (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
你操作的步骤是什么?
2017-2-9 18:30
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
就是反编译后 直接打包(apktool b weixin),能加下我QQ吗  87203883  多谢
2017-2-10 09:34
0
雪    币: 4
活跃值: (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
抱歉,前几天有点事,没看论坛。我使用apktool对微信进行重打包时也会报错,上网查了一下,貌似是资源文件的问题,最后也没解决。我现在的重打包流程是:解压apk、修改dex、重新压缩、签名,由于我的需求只是修改dex文件,所以上面的流程能满足要求,但如果要修改资源文件或manifest文件,就必须要用apktool了,这个问题我现在也没解决
2017-2-13 08:55
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bwn
19
求加35068264
2017-2-27 13:42
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bwn
20
原因就出在动态加载dex了
2017-3-23 20:52
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bwn
21
checkSoftType2 这个本地方法,我发现崩溃之前调用了这个 ,感觉 问题就出在so层
2017-3-23 22:56
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bwn
22
at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:645) at android.app.ApplicationPackageManager.getApplicationInfo(Native Method) at com.tencent.smtt.utils.c.bu(Unknown Source) at com.tencent.smtt.sdk.p.a(Unknown Source) at com.tencent.smtt.sdk.p.aI(Unknown Source) at com.tencent.smtt.sdk.h.a(Unknown Source) at com.tencent.smtt.sdk.z.b(Unknown Source) 继续跟踪
2017-3-23 22:56
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bwn
23
文应志 我也发现了这个问题,对dex2进行修改,在5.0以下的操作系统手机会出错,我感觉可能是微信对这类进行了检测,具体没在仔细看了,我做的6.2.23的是在5.0以上是不会崩溃的,如果哥们你研究出来了,通知 ...
老兄 我也在搞
2017-3-23 22:59
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
嗨!兄弟,小弟我是一个新手,最近公司要搞微信相关的一些东西,请问,兄弟能指教下大概的流程吗。。。在此小弟非常感谢各位!
2017-4-27 17:08
0
游客
登录 | 注册 方可回帖
返回