Xposed & frida 新版本某信发消息

本文详细描述了作者通过逆向工程研究某信新版本发送文字消息功能的过程,包括使用DDMS追踪事件,Jadx查找代码,以及利用Frida和ASsmali进行动态调试,最终实现了对关键方法的Hook和操作。

最近在研究新版本某信发消息功能,下面先把发文字消息的逆向流程分享一下,有不足之处,请各位大佬指正。

工具

 jadx
 DDMS
 Frida
 AS smali动态调式

第一步 还是老方法,用DDMS跟踪发消息时的点击事件。

在这里插入图片描述

然后去jadx里查这块代码。

在这里插入图片描述

没反编译出来onClick里的代码。可以去MT管理器里看看。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

找出来是个接口。右键查找用例,去看这个接口的实现类。

在这里插入图片描述

看到只有这一个类,实现了这个接口。

在这里插入图片描述

现在主要分析这个g6方法。

在这里插入图片描述

为了确认一下,下面用AS动态调试

在这里插入图片描述

然后进入下面的g方法里。

在这里插入图片描述

去DDMS里找这个run方法里的调用流程。也可以AS动态调试。我这里用的DDMS,还方便点。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

// 在java空间中加载
 Java.perform(function () {
     if (Java.available) {//判断是否在java空间
         let u = Java.use("ie0.u");
         u["$init"].overload('java.lang.String', 'java.lang.String', 'int', 'int', 'java.lang.Object').implementation = function (str, str2, i15, i16, obj) {
             console.log(`u.$init is called: str=${str}, str2=${str2}, i15=${i15}, i16=${i16}, obj=${obj}`);
             this["$init"](str, str2, i15, i16, obj);
             // printStacks("send text==========")
         };

hook到了创建ie0.u对象的构造方法,所传的参数。

在这里插入图片描述

然后就是想办法调用hd0.b0类里的g方法。方法里第一个参数传上面构造好的ie0.u对象,第二个参数传0

看到它是个动态方法。所以先要把hd0.b0对象拿到,才能调这个方法。

在这里插入图片描述

let SQLiteDatabase = Java.use("com.tencent.wcdb.database.SQLiteDatabase");
           SQLiteDatabase["insertWithOnConflict"].implementation = function (str, str2, contentValues, i15) {
               console.log(`SQLiteDatabase.insertWithOnConflict is called: str=${str}, str2=${str2}, contentValues=${contentValues}, i15=${i15}`);
               let result = this["insertWithOnConflict"](str, str2, contentValues, i15);
               console.log(`SQLiteDatabase.insertWithOnConflict result=${result}`);
               let content = contentValues.get("content");
               console.log(`content ====>${content}`);
               if (content == null) {
                   return result;
               }
               if (content.toString() === 'sendtext') {//对方发来sendtext后,再回复他
                   let talker = contentValues.get("talker");
                   console.log(`talker ====>${talker}`);
                   let uObj = Java.use("ie0.u").$new(talker, '测试0', 1, 0, null);
                   Java.choose("hd0.b0",{
                       onComplete: function(){},
                       onMatch: function(instance){// 遍历所有的对象并调用
                           instance.g(uObj,0);
                       }
                   })
               }
  
               return result;
  
           };

运行frida脚本,测试成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值