1234下一页
返回列表 发布新帖

[教程] [某小说旗下漫画SFSecurity逆向记录]

1022 38
发表于 2025-3-14 21:06:29 来自手机 | 查看全部 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 梓澄qwq 于 2025-4-28 11:05 编辑

某天心血来潮,弄了个书源,爬某平台的漫画

既然这样,那么第一步肯定就是抓包了
先MT看看


Image_253721469837199.webp

APP有某数字加固,不慌,通过一些手段绕过SSL检查,开始抓包

我们看看请求

https://api.*****.com/search/comics/result/new?q=血姬与骑士&expand=comics,typeName,authorName,intro,latestchaptitle,latestchapintro,tags,sysTags&sort=hot&page=0&size=12&systagids=&isFinish=-1&updateDays=-1

这里没啥特殊的

我们再看看请求头
有一个Authorization头,但分析了好几次后,发现是固定的,所以我们也写死就行
还有一个叫SFSecurity头,里面包含了一个随机的uuid,时间戳和deviceToken
nonce=1DD2FC4E-15C0-4FA7-AD33-599B8483B9A9&timestamp=1741955967576&devicetoken=5B1883D9-D7E9-BAD4-A60F-DF82A415E432&sign=6A92026619F3C78EAC36270E729C5EBB

那么我们的目标就很明确了,那便是拿下sign参数
32位HEX,盲猜MD5
经过一些奇奇怪怪的操作之后,我们成功把数字加固脱了下来
进dex分析


Image_254728232629567.webp

看到了一些奇怪的东西

上面的clinit里加载了二进制库libsfdata.so,所以算法大概率就在这里面
我这里没有电脑,所以是纯手机处理(其实我看过ida,一so有壳,二被混淆了,静态分析超级难)
我们先readelf一下

    47: 0000000000021a4c 21584 FUNC    GLOBAL DEFAULT   10 _ZN3MD59transformEPKh
    49: 0000000000020bdc   900 FUNC    GLOBAL DEFAULT   10 _ZN3MD5C2Ev
    97: 0000000000028c44    92 FUNC    GLOBAL DEFAULT   10 _Z3md5Ss
   109: 00000000000283fc  1632 FUNC    GLOBAL DEFAULT   10 _ZNK3MD59hexdigestEv
   113: 0000000000026e9c  1584 FUNC    WEAK   DEFAULT   10 _ZN3MD52HHERjjjjjjj
   444: 0000000000027aa4  2392 FUNC    GLOBAL DEFAULT   10 _ZN3MD56updateEPKhj
后面省略

发现了大量的MD5相关,所以MD5无疑
因为APP有数字加固,所以我决定自己搓一个APP,模拟调用函数
写APP这一步省略

那么,上frida吧

编写Hook脚本


  1. Java.perform(function () {
  2.     console.log('hook start');
  3.     var checkInterval = 1000;
  4.     var maxAttempts = 20;

  5.     var attempt = 0;
  6.     // 因为我APP逻辑问题,so不是启动时加载,所以需要这一步
  7.     var interval = setInterval(function () {
  8.         attempt++;
  9.         var module = Module.findBaseAddress('lib**data.so');
  10.         if (module) {
  11.             clearInterval(interval);
  12.             console.log('lib**data.so loaded at: ' + module);
  13.             hookFunction();
  14.         } else if (attempt >= maxAttempts) {
  15.             clearInterval(interval);
  16.             console.log('Failed to load lib**data.so within the given attempts');
  17.         }
  18.     }, checkInterval);

  19.     function hookFunction() {
  20.         var funcAddress = Module.findExportByName('lib**data.so', '_ZN3MD56updateEPKhj');
  21.         if (!funcAddress) {
  22.             console.log('Function _ZN3MD56updateEPKhj not found'); // 这是MD5最关键的MD5Update函数
  23.             return;
  24.         }
  25.         console.log('Function address: ' + funcAddress);

  26.         Interceptor.attach(funcAddress, {
  27.             onEnter: function(args) {
  28.                 // C++成员函数的第一个参数是this指针
  29.                 // 后续参数为数据指针和数据长度
  30.                 var thisPtr = args[0];
  31.                 var dataPtr = args[1];
  32.                 var dataLength = args[2].toInt32();

  33.                 console.log('\nMD5::update called');
  34.                 console.log('this:', thisPtr);
  35.                 console.log('dataPtr:', dataPtr);
  36.                 console.log('dataLength:', dataLength);

  37.                 // 检查指针有效性
  38.                 if (!dataPtr.isNull() && dataLength > 0) {
  39.                     // 读取前N个字节(防止数据过长)
  40.                     var readSize = Math.min(dataLength, 512);
  41.                     var rawData = Memory.readByteArray(dataPtr, readSize);
  42.                     console.log('Data:', rawData);
  43.                 } else {
  44.                     console.log('Invalid data pointer or length');
  45.                 }
  46.             }
  47.         });
  48.     }
  49. });
复制代码

就酱紫,我们成功拿到了MD5哈希前的明文

1DD2FC4E-15C0-4FA7-AD33-599B8483B9A917419559675765B1883D9-D7E9-BAD4-A60F-DF82A415E432后面保密

一看,这不就是前面三个参数拼上一个固定的盐吗

最后经过测试,抓取的盐是正确的,那么我们的工作便顺利完成了


评分

参与人数 5源币 +105 贡献 +14 收起 理由
洛璃 + 20 + 2 水平!
另一个书友圈 + 5 淡定,我来学习!
河鹅和 + 20 + 2 赞一个,好评!
shusan + 50 + 8 源社区,有您更精彩!
壬二酸 + 10 + 2 源社区,有您更精彩!

查看全部评分

fw一只而已,不必在意qwq

评论38

壬二酸Lv.15星光赞助(未赞助不可申请) 发表于 2025-3-14 21:08:56 来自手机 | 查看全部
好厉害。谢谢澄子
回复

使用道具 举报

天天的鸟蛋蛋Lv.14 发表于 2025-3-14 21:20:08 来自手机 | 查看全部
橙子,牛批。
回复

使用道具 举报

xunxunLv.4 发表于 2025-3-14 21:26:47 来自手机 | 查看全部
看不懂 但好厉害 夸夸
回复

使用道具 举报

李七夜Lv.4星光赞助(未赞助不可申请) 发表于 2025-3-14 21:27:59 来自手机 | 查看全部
看不懂,但是感觉很牛逼
回复

使用道具 举报

我是萝卜Lv.14 发表于 2025-3-14 21:30:31 | 查看全部
绝绝子。厉害哒

回复

使用道具 举报

落雪Lv.4 发表于 2025-3-14 21:34:15 来自手机 | 查看全部
大佬厉害
回复

使用道具 举报

小白菜Lv.2 发表于 2025-3-14 21:35:51 来自手机 | 查看全部
漫画的盐xw*******
是对的  详情 回复
发表于 2025-3-14 23:09
回复

使用道具 举报

轻风吹过77Lv.4 发表于 2025-3-14 21:47:56 来自手机 | 查看全部
感谢分享
回复

使用道具 举报

青蛙Lv.4星光赞助(未赞助不可申请) 发表于 2025-3-14 21:52:31 来自手机 | 查看全部
太厉害了,都是看不懂的代码
回复

使用道具 举报

回复

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

本版积分规则

投诉/建议联系

ysqbbs@outlook.com

未经授权禁止转载,复制和建立镜像,
如有违反,追究法律责任
  • 关注公众号
  • 添加QQ群
Copyright © 2001-2025 源社区 版权所有 All Rights Reserved.
关灯 在本版发帖
扫一扫添加QQ群
返回顶部
快速回复 返回顶部 返回列表