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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1712|回复: 10
收起左侧

[Android 原创] 静态分析逆向 B站 大积分新请求签名

[复制链接]
kittylang 发表于 2024-4-2 13:14
本帖最后由 kittylang 于 2024-4-8 07:52 编辑

前言

起因是 MikuFans 某个活动进行了版本升级,之前的不能用了,抓包分析后发现有个 task_sign 需要逆向 app ,所以有了这篇文章

静态分析(Static Analysis)是指在不运行代码的情况下,采用词法分析、语法分析等各种技术手段对程序文件进行扫描并生成程序的反汇编/反编译代码,然后阅读反汇编/反编译代码来掌握程序功能的一种技术。

静态分析是最简单的了,适合我们这种萌新。

本次分析的目标是 MikuFans,由于他没有加壳,适合没有经验的萌新(比如我)直接上手。

反编译代码使用 jadx 工具,jadx 官方下载地址:https://github.com/skylot/jadx/releases

寻找关键代码

直接搜索关键词 task_sign 试试,得到如下三条结果

task_sign

三条结果都是类似的,只有三条可以一一点击查看,我这里看着第三条有个 activity(活动),所以先选择了他。

completeTask call

发现 task_sign 是名为 completeTask 方法的形參之一,简单观察发现,就在上面几行就有这个方法的调用。

OGVActivityApiService

可以看到 completeTask 是在 OGVActivityApiService.b.a 中调用的。

我们尝试搜索一下这个调用的代码,搜索 OGVActivityApiService.b.a 或者 OGVActivityApiService。注意忽略大小写,指不定调用时就变小写开头了(当然也不一定),学过面向对象的语言基本都知道吧。

OGVActivityApiService search

确实搜索到了 b.a 的调用,而且参数个数和我们想要的是一致的。点进去看看

task_sign

似乎已经接近答案了。

分析代码

這是方法調用的實參列表

OGVActivityApiService.b.a(r5, r6, r7, r8, r9, r10, r11, r12, r13)

這是調用的方法的形參列表

OGVActivityApiService.b.a(OGVActivityApiService oGVActivityApiService, String str, String str2, String str3, String str4, String str5, Continuation continuation, int i2, Object obj)

這是 completeTask 方法的形參列表

completeTask(@nullable @Query("position") String str, @Nullable @Query("task_id") String str2, @Nullable @Query("token") String str3, @Nullable @Query("timestamp") String str4, @Nullable @Query("task_sign") String str5, @NotNull Continuation<? super c<Unit>> continuation);

completeTask 的实参列表就省略,虽然他有一堆的类似于 i & 1 != ? null : str 的三目运算,但是怎么想都知道只有返回 str 才能得到结果啊

我們將上面几個列表相應的位置一一對應,得到以下關係

r5 oGVActivityApiService

r6 str position

r7 str2 task_id

r8 str3 token

r9 str4 timestamp

r10 str5 task_sign

r11 continuation

r12 i2

r13 obj

可以看出,r10task_sign,這是本次逆向的目標,r8token,這是已知的,r9timestamp 這個也是已知的。

分析簡化得到以下僞代碼

r10 = md5(r14.$timestamp + '這是固定值,我這裏不放出來了' + r8).toString('hex');

java.lang.String r9 = r14.$timestamp 可知,第一処的 r6 實際上就是請求中的 timestamp,為已知。

第二処的 r6 是固定值,為已知。

第三處的 r8token,為未知。

所以僞代碼應該是這樣的:

task_sign = md5(timestamp + '這是固定值,我這裏不放出來了' + token).toString(
  'hex'
);

最终结果

最後轉化爲實際 Node.js 代碼

import crypto from 'crypto';

const md5 = (str) => crypto.createHash('md5').update(str).digest('hex');

const sign = (timestamp, token) =>
  md5(timestamp + '這是固定值,我這裏不放出來了' + token);

或者 python 寫法

import hashlib

def sign(timestamp, token):
  return hashlib.md5((timestamp + '這是固定值,我這裏不放出來了' + token).encode('utf-8')).hexdigest()

免费评分

参与人数 7吾爱币 +13 热心值 +7 收起 理由
sivion + 1 + 1 谢谢@Thanks!
luliucheng + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
tomhex + 1 + 1 热心回复!
52bit + 1 + 1 谢谢@Thanks!
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
文西思密达 + 1 + 1 谢谢@Thanks!
xiong256824 + 1 我很赞同!

查看全部评分

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

艾莉希雅 发表于 2024-4-2 17:32
MikuFans,好开
快回来吧我的MikuFans
yinxing 发表于 2024-4-2 16:58
 楼主| kittylang 发表于 2024-4-2 18:16
hgt123 发表于 2024-4-2 19:49
yinxing 发表于 2024-4-2 16:58
静态分析逆向 MikuFans 某活动新请求签名 [修改]

支持  看下 了解一下 很不错 值得学习
zbby 发表于 2024-4-3 00:52
碧诗又复活力(bushi
Risoac 发表于 2024-4-3 09:05
很明显我没看懂 单纯支持一下
52bit 发表于 2024-4-3 11:23
支持一下大佬
jujiaomubiao 发表于 2024-4-5 10:39
牛,大神,仰望的存在
janken 发表于 2024-4-5 21:15
大佬六六六!!!
您需要登录后才可以回帖 登录 | 注册[Register]

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

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

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

GMT+8, 2024-4-25 03:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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