大学生
新手小白
 
- 金币
- 1399
- 好评
- 4
- 信誉
- 100
   

|
本帖最后由 一个普通的人 于 2026-1-18 10:19 编辑
再次前言 在混淆哥的群里面发现了这个软件,叫黑盒助手,其实当时就被混淆哥秒杀了(太有石粒了),但是他没发思路,我就想研究一下。
今天闲着没事看了一下这个软件。
正文 通过mt管理器查看发现软件是一个iapp应用,此类应用数据不在dex中,所以不能按照常规软件思路。
根据我地道的抓包技术,成功抓到了数据,直接把
改成就可以了,但是这样有一个缺点,就是抓包软件必须一直留在后台,不然没效果,这时候可以直接内置进软件,不过我讲另一个方法。
通过mt管理器注入日志记录发现:c.b.a.a.h的e方法、c.b.a.a.w的n1和M0方法、d.a.b的j方法都有{"code":0,"msg":"卡密不存在"}的字样。
通过DeepSeek分析发现,卡密验证逻辑是这样的:用户输入卡密 → n1()方法处理 →
调用 c.b.a.a.h的e方法 发送网络请求 →
服务器返回验证结果 →
日志记录 →
返回给用户界面
网络请求逻辑是这样的:c.b.a.a.h的e方法 → 创建URL连接 →
h.j() 执行请求 →
获取服务器响应 →
返回给调用者
这时我突然想到:抓包抓到的就是网络请求,而我们修改抓包抓到的数据可以修改成功,那么直接修改e方法是否也能成功呢?
于是我打开e方法,由于这个软件是网络验证,不是写死在本地的,所以我们直接添加代码,拦截网络请求,把逻辑写在本地就可以了。
使用DeepSeek,写出一个这样逻辑的代码
- .method public static e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
- .registers 9
-
- # ========== 【新增】卡密验证拦截 ==========
- # 检查是否是卡密验证URL
- move-object v0, p0
-
- # 检查域名
- const-string v1, "zcj.qnga.cn"
- invoke-virtual {v0, v1}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
- move-result v1
-
- if-eqz v1, :cond_check_api
-
- goto :cond_continue
-
- :cond_check_api
- # 检查接口路径
- const-string v1, "use_imei.php"
- invoke-virtual {v0, v1}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
- move-result v0
-
- if-eqz v0, :cond_return_success
-
- goto :cond_continue
-
- :cond_return_success
- # 返回内置成功数据
- const-string p0, "{"code":1,"msg":"\u6fc0\u6d3b\u6210\u529f","data":{"end_time":"2099-12-31 23:59:59","type":"VIP","status":1}}"
-
- return-object p0
-
- :cond_continue
- # ========== 【结束】新增代码 ==========
-
- # 以下是原有代码,保持不变
- if-nez p2, :cond_4
- const-string p2, "utf-8"
- :cond_4
- move-object v3, p2
- :try_start_5
- new-instance v0, Ljava/net/URL;
- invoke-static {p0}, Lc/b/a/a/h;->p(Ljava/lang/String;)Ljava/lang/String;
- move-result-object p0
- .line 5
- .local v0, "00DA.java:5":V
- invoke-static {p0}, Lmt/LogB15A40;->a(Ljava/lang/Object;)V
- invoke-static {p0}, Lmt/Log83D09F;->a(Ljava/lang/Object;)V
- invoke-direct {v0, p0}, Ljava/net/URL;-><init>(Ljava/lang/String;)V
- invoke-static {v0}, Lc/b/a/a/h;->l(Ljava/net/URL;)Ljava/net/HttpURLConnection;
- move-result-object v1
- const/4 v4, 0x0
- const/4 v5, 0x0
- move-object v2, p1
- invoke-static/range {v0 .. v5}, Lc/b/a/a/h;->j(Ljava/net/URL;Ljava/net/HttpURLConnection;Ljava/lang/String;Ljava/lang/String;ZZ)Ljava/lang/String;
- move-result-object p0
- .line 6
- .local v0, "00DA.java:6":V
- invoke-static {p0}, Lmt/LogB15A40;->a(Ljava/lang/Object;)V
- invoke-static {p0}, Lmt/Log83D09F;->a(Ljava/lang/Object;)V
- return-object p0
- :try_end_26
- .catch Ljava/lang/Exception; {:try_start_5 .. :try_end_26} :catch_26
- :catch_26
- move-exception p0
- invoke-virtual {p0}, Ljava/lang/Exception;->printStackTrace()V
- const/4 p0, 0x0
- return-object p0
- .end method
复制代码
到这里签名安装就可以了。
这软件没有签名校验,没有加固,可以说非常适合练手,不过软件类型好像有点违规了(虽然这是一个空壳软件,专门骗人的),就先不发了。
这种软件基本上都是一个逻辑,学会举一反三就可以轻松拿捏
如果你有不懂的问题,或者有不同的思路,也可以提出,看看大家能不能玩出花来 |
|