返回列表 发新帖

[求助问答] 帮忙完善未分析so的底层算法

[复制链接]

5

主题

225

回帖

749

积分

初中生

Rank: 3Rank: 3

金币
400
好评
1
信誉
100

考神MT论坛新人

发表在  2026-6-1 03:10:11 | 显示全部楼层 | 阅读模式  来自 重庆
本帖最后由 fc1314 于 2026-6-1 03:12 编辑

https://bbs.binmt.cc/thread-166156-1-1.html 楼主分享,但是我想更进一步
APP下载:https://bbs.binmt.cc/thread-166572-1-1.html



我现在分析出他接口的列表页面的算法以及,mp3的的地址算法。但是实际请求这个mp3的时候他有很强的验证


列表与mp3地址的算法如下

  1. //
  2. // Decompiled by Jadx - 604ms
  3. //
  4. package com.funny.wizardnotebook.core.net;

  5. import java.util.Base64;
  6. import javax.crypto.Cipher;
  7. import javax.crypto.spec.SecretKeySpec;
  8. import kotlin.Metadata;
  9. import kotlin.jvm.internal.Intrinsics;
  10. import kotlin.text.Charsets;

  11. @Metadata(d1 = {"\u0000\u0014\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\u000e\n\u0002\b\u0003\bÆ\u0002\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002J\u0016\u0010\u0003\u001a\u00020\u00042\u0006\u0010\u0005\u001a\u00020\u00042\u0006\u0010\u0006\u001a\u00020\u0004¨\u0006\u0007"}, d2 = {"Lcom/funny/wizardnotebook/core/net/DesDecryptor;", "", "()V", "decrypt", "", "encryptedText", "secretKey", "app_normalRelease"}, k = 1, mv = {1, 8, 0}, xi = 48)
  12. public final class DesDecryptor {
  13.     public static final DesDecryptor INSTANCE = new DesDecryptor();

  14.     private DesDecryptor() {
  15.     }

  16.     public final String decrypt(String str, String str2) {
  17.         Intrinsics.checkNotNullParameter(str, "encryptedText");
  18.         Intrinsics.checkNotNullParameter(str2, "secretKey");
  19.         byte[] bytes = str2.getBytes(Charsets.UTF_8);
  20.         Intrinsics.checkNotNullExpressionValue(bytes, "getBytes(...)");
  21.         SecretKeySpec secretKeySpec = new SecretKeySpec(bytes, "DES");
  22.         Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
  23.         cipher.init(2, secretKeySpec);
  24.         byte[] doFinal = cipher.doFinal(Base64.getDecoder().decode(str));
  25.         Intrinsics.checkNotNullExpressionValue(doFinal, "decryptedData");
  26.         return new String(doFinal, Charsets.UTF_8);
  27.     }
  28. }
复制代码
java解析代码


请求地址解析出来的结果
http://58.49.146.24:30102/api/bu ... 1jpg0m4gq2a3zt.json
[
        {
                "id": "48c9a4f05c671a7b28e9a2ba32bb320d",
                "albumId": "01k1rg2vys131jpg0m4gq2a3zt",
                "publishTime": 1753426637000,
                "title": "杨洋邀你来听影视原著,提前解锁大结局",
                "sort": 0,
                "coverPath": "cover/track/default.webp"
        },
        {
                "id": "6ee6af09df35c4e9b9348fe4220ceaf2",
                "albumId": "01k1rg2vys131jpg0m4gq2a3zt",
                "publishTime": 1648615731000,
                "title": "《凡人修仙传》预告",
                "sort": 1,
                "coverPath": "cover/track/default.webp"
        }
]

  1. package cn.com.oyat.idea.test;

  2. import cn.hutool.http.HttpUtil;
  3. import cn.hutool.json.JSONObject;
  4. import cn.hutool.json.JSONUtil;

  5. import javax.crypto.Cipher;
  6. import javax.crypto.spec.SecretKeySpec;
  7. import java.nio.charset.StandardCharsets;
  8. import java.util.Base64;

  9. public class AppDecrypt {
  10.     // 固定映射关系
  11.     private static final String TYPE_1 = "DnvVswKW";
  12.     private static final String KEY_1  = "rThYzbEp";

  13.     private static final String TYPE_2 = "czXzSZjk";
  14.     private static final String KEY_2  = "AEEkTXLK";

  15.     /**
  16.      * 对外统一入口,等价原 CryptoLib.decryptData
  17.      * @param encType 接口返回的 encType
  18.      * @param encData 接口返回的 encData(Base64密文)
  19.      * [url=home.php?mod=space&uid=134981]@Return[/url] 解密后的明文
  20.      */
  21.     public static String decrypt(String encType, String encData) {
  22.         String key;
  23.         if (TYPE_1.equals(encType)) {
  24.             key = KEY_1;
  25.         } else if (TYPE_2.equals(encType)) {
  26.             key = KEY_2;
  27.         } else {
  28.             return "";
  29.         }
  30.         return desEcbDecrypt(encData, key);
  31.     }

  32.     /**
  33.      * 原生 DesDecryptor 逻辑:DES/ECB/PKCS5Padding + Base64 + UTF-8
  34.      */
  35.     private static String desEcbDecrypt(String encryptedText, String secretKey) {
  36.         try {
  37.             // 1. 密钥转 UTF-8 字节
  38.             byte[] keyBytes = secretKey.getBytes(StandardCharsets.UTF_8);
  39.             SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "DES");

  40.             // 2. 初始化 DES/ECB/PKCS5Padding 解密器
  41.             Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
  42.             cipher.init(Cipher.DECRYPT_MODE, keySpec);

  43.             // 3. Base64 解码
  44.             byte[] base64Decode = Base64.getDecoder().decode(encryptedText);

  45.             // 4. DES 解密
  46.             byte[] decBytes = cipher.doFinal(base64Decode);

  47.             // 5. UTF-8 转字符串
  48.             return new String(decBytes, StandardCharsets.UTF_8);
  49.         } catch (Exception e) {
  50.             e.printStackTrace();
  51.             return "";
  52.         }
  53.     }

  54.     // 测试示例
  55.     public static void main(String[] args) {
  56.         // 替换成你抓到的真实数据
  57.         //String bodystr=HttpUtil.get("http://210.16.182.232:11001/api/business/v1/album/analysis/01k1rg2vys131jpg0m4gq2a3zt/48c9a4f05c671a7b28e9a2ba32bb320d.json");

  58.         String bodystr="{\n" +
  59.                 "  "body": {\n" +
  60.                 "    "encType": "DnvVswKW",\n" +
  61.                 "    "encData": "rnrmucwHziTUOd/+JO26xkaXTzyTGj4Lh5A+CSxcq/r9qC1ebDQyBX81/s60QWFkYcD2FCK2s3zW7HVNXgmXQpvSLqebxcdCaJV3BbeiKG/oysktMaYydkT+2agCRPss9PjjBWozfDwBPL7KOt7ZXcrhAsfCLeTAxpI7fFJLdbqHKBVnQqYr1zEUqXmvEueBtWPuSNZxs7JLHpdxO2ulVm+kNf2UNS5Cq9kDysMOjPU="\n" +
  62.                 "  },\n" +
  63.                 "  "code": 1001,\n" +
  64.                 "  "message": "successed",\n" +
  65.                 "  "processingTime": 0,\n" +
  66.                 "  "requestTime": 0\n" +
  67.                 "}";
  68.         JSONObject jsonObject= JSONUtil.parseObj(bodystr);
  69.         JSONObject jsonbody= jsonObject.getJSONObject("body");

  70.         String result = decrypt(jsonbody.getStr("encType"), jsonbody.getStr("encData"));
  71.         System.out.println("解密结果:\n" + result);
  72.     }
  73. }
复制代码


我在实际请求的时候,就碰到了这里面的sign1-sign7的参数算法,我搞不定


AI分析参数如下

[td]
字段
入参 1
调用链路
sign1资源路径 (去首 /)getSign2(path)
sign2资源路径 (去首 /)getSign4(path)
sign3客户端时间戳getSign5(timestamp)
sign4固定串 + 时间戳XXOO(getNewSign4(), timestamp)
sign5固定串 + 时间戳XXOO(getNewSign5(), timestamp)
sign6时间戳 + 时间戳XXOO(getSign6(timestamp), timestamp)
sign7固定串 + 时间戳XXOO(getSign7(), timestamp)

个人分析结果

http://track-yqts.umeng-nlog.com/01k1rg2vys131jpg0m4gq2a3zt/48c9a4f05c671a7b28e9a2ba32bb320d.mp3


psign: 1af6e5f4689a5459f196d35ebb5cd855 固定

userId: 7c83f252783d58a754db669f7776cf78  固定

sign2: $$886c842f8ab8ab2f5dafe0a89f119657$$  不固定

sign1: $$af04c7caf0da25f2c0b8d1020746a7ed$$ 不固定

sign4: YlJbRUBVelVPAAAFBCgyFw5DRkg9XRgdXFtXBDQJARwIFjgBEm1dXhsnPEkCBx9Tf0gPClEdWT0xNzAmBxU7CgtGHkFaeDIXDkNGSD1dGB1cW1c1JQgHGS0JIhEcHENdGTUhCFVBXxNzBFZeWVBWJjIWCwYWDmUWFh5RQFhiZ0gVTRNKJwwbUUJLRSA8CQoXXBYkSRhAXQQBeSVdAloeDCkVGFxXXlA1IQgMB1wWJEkYQF0EAXklXQJaHgwpFRhcV15QMj8MEwUXAWUWFh5RQFhiZ0gVTRNKJwwbQlxGGDYyFgZbAQpnBAtfBgYYImsETBkbBzkWE1xZHEY7fwQRGERRZhNBUx9eXDYhFgkbGzoqCx1AX1tRLH0WDFkTFyZTTR9GClR7PwwBBhUGJBccHENdGTUhCFVBXxNzBFZeWVBBPX4IDBsbESQXV0FfHlQmPlNXWARdKkoVW1JGWjYWCAEQFiAlBgtLQEYbJzxJAgcfU39IDwpRHVk9MREXKgcCLgsmXlFLWiEnSxAaXgQ5CE8GHUQNNXwJChcGESYVFVNJV0cLPwwXEFwWJEkYQF0EAXklXQJaHgwpEBRXXlUYJyMcTQYdSSoXFFdRUFx5JVICWh4MKTcqYUVCRTshEU0GHUkqFxRXUVBceSVSAloeDCkGC1NDWkYwOEsQGl4EOQgcU1JbGCJkBEwZGwcoFwBCRF1ZPTFLEBpeBDkIHFNSWxgiZARMGRsHOwQXVVxXUzg6FRMQFks4ClVTQl9QNTEMTgNFBGQJEFBAXkF5MQQQEFwWJEkYQF1XVDY6SBVCE0onDBtAQ1hbPX0WDFkTFyYAGFBZH0NjMkoPHBAXOA8XW29TWzAhCgoRCks4ClVTQl9QNTEMTgNFBGQJEFBDVVY7IQBNBh1JKhcUV1FQXHklUgJaHgwpERAfXV1bPScKEVsBCmcEC19VU1c9fhNUFF0JIgcMX1VcUnkgFRpbAQo= 不固定
sign3: 817002610720613046731 不固定


sign6: YlJbRUBVelVPAAAFBChgV1tNQFdyVgUABk4EY2tVUUVDVX1XSQUB 不固定

sign5: YlJbRUBVelVPAAAFBChjUgJDFwYvBktQAVYDYzcHV0xEVSkEGwADUQw1MgBRRQ== 不固定

sign7: YlJbRUBVelVPAAAFBChgV1tNQFdyVg==  不固定




主要是不会逆向 libcryptolib.so文件在 lib/arm64-v8a/libcryptolib.so 里面,这个核心算法如果。就查最后一部分析出so文件,这个app就宣告完结。求大佬们帮帮我,给我插装信息也许,帮我分析算法也想,麻烦了




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

5

主题

225

回帖

749

积分

初中生

Rank: 3Rank: 3

金币
400
好评
1
信誉
100

考神MT论坛新人

发表于 2026-6-1 10:35:11 | 显示全部楼层  来自 重庆
没人啊
回复

使用道具 举报

64

主题

3258

回帖

9169

积分

硕士生

Rank: 6Rank: 6

金币
2189
好评
21
信誉
104

MT论坛帅哥MT论坛新人考神MT论坛最佳新人

发表于 2026-6-1 10:36:38 来自手机  | 显示全部楼层  来自 江苏
本帖最后由 qeruiop 于 2026-6-1 10:38 编辑

用ai+ida mcp
回复

使用道具 举报

5

主题

225

回帖

749

积分

初中生

Rank: 3Rank: 3

金币
400
好评
1
信誉
100

考神MT论坛新人

发表于 2026-6-1 10:43:17 | 显示全部楼层  来自 重庆

主要是不会啊
回复

使用道具 举报

8

主题

633

回帖

3657

积分

大学生

Rank: 5Rank: 5

金币
1841
好评
2
信誉
101
发表于 2026-6-1 15:09:32 来自手机  | 显示全部楼层  来自 安徽
本帖最后由 2432629 于 2026-6-1 15:11 编辑

论坛有教程https://bbs.binmt.cc/thread-160537-1-1.html
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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