吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1610|回复: 0
收起左侧

[Android 原创] Xposed新版本某信发消息

  [复制链接]
影月 发表于 2023-9-9 09:54
本帖最后由 影月 于 2023-9-9 12:33 编辑

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

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


QQ截图20230909120909.png

然后去jadx里查这块代码。
QQ截图20230909121148.png
没反编译出来onClick里的代码。可以去MT管理器里看看。

QQ截图20230909121240.png

QQ截图20230909121332.png

QQ截图20230909121414.png

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

QQ截图20230909121544.png

看到只有这一个类,实现了这个接口。
QQ截图20230909121649.png

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

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

9.png

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

10.png

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

12.png

13.png

14.png

15.png

[JavaScript] 纯文本查看 复制代码
// 在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对象的构造方法,所传的参数。

16.png

然后就是想办法调用hd0.b0类里的g方法。方法里第一个参数传上面构造好的ie0.u对象,第二个参数传0
看到它是个动态方法。所以先要把hd0.b0对象拿到,才能调这个方法。


17.png

可以从内存里取这个对象,然后再主动调用。代码如下:

[JavaScript] 纯文本查看 复制代码
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脚本,测试成功

免费评分

参与人数 3威望 +1 吾爱币 +22 热心值 +3 收起 理由
junjia215 + 1 + 1 谢谢@Thanks!
xxxesa6xxx + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
正己 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 14:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表