吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8601|回复: 48
收起左侧

[Android 原创] 某猫小说sign简单分析

  [复制链接]
公过水蚊 发表于 2020-11-22 19:56
本帖最后由 公过水蚊 于 2020-11-23 11:11 编辑

1、前言  逆向萌新,闲来无事,找了个app练习一下,这次案例是某猫免费小说,特开一贴用来记录一下分析过程。(ps:本篇分析的APP版本为4.0.0)

2、APP抓包分析用Fiddler对目标app进行抓包,抓包结果如下:


主要找sign的生成过程,打开jadx搜索代码"sign",把可能会生成sign的方法都给hook,再发送一次请求看生成sign的方法在哪。一些包名有huawei,meizu这些的可以直接过滤掉。


代码如下:
[Asm] 纯文本查看 复制代码
function main(){
    Java.perform(
        function(){
            /*
            var e = Java.use('anet.channel.strategy.dispatch.e');
            e.a.overload('java.util.Map').implementation = function(v1,v2){
                console.log('dispatch')
                return this.a(v1,v2);
            }

            var p = Java.use('com.bytedance.sdk.openadsdk.core.p');
            p.a.overload('java.lang.String', 'java.lang.String').implementation = function(v1,v2){
                console.log('openadsdk');
                return this.a(v1,v2);
            }

            var c = Java.use('com.km.repository.net.a.a.c');
            c.intercept.implementation = function(v1){
                console.log('repository');
                return this.intercept(v1);
            }
            
           var c = Java.use('com.kmxs.reader.download.a');
           c.c.overload('java.lang.String').implementation = function(v1){
                console.log('reader...');
                console.log('v1:', v1);
                var sig = this.c(v1);
                console.log('sig:', sig);
                return sig;
           }*/
           
           // 生成sig方法
            var a = Java.use('com.km.core.b.a');
            a.a.overload('java.lang.String').implementation = function(v1){
                console.log('core.....');
                console.log('v1:', v1);
                var sig = this.a(v1);
                console.log('sig:', sig);
                return sig;
            }
            /*
            var a = Java.use('com.km.repository.net.b.a');
            a.d.overload().implementation = function(){
                console.log('repository.....');
                var sig = this.d();
                console.log('sig:', sig);
                return sig;
            }*/
        }
    )
}

setImmediate(main)

运行脚本查看


多次请求对比可以看到,headers里面的sign是固定的,生成sign的参数都是头部信息里的。url的sign主要由page页数决定。知道这些就可以用frIDA rpc进行调用。

3、frida rpc进行调用并尝试请求找到刚才hook到的方法。


跳到a方法的声明查看下


再深入看刚才sign()方法,可以看到加密过程是在so文件里,这里就不去分析加密过程了,直接rpc调用就可以了。


构建参数使用rpc调用sign生成后使用python请求进行验证,代码如下:
[Python] 纯文本查看 复制代码
import frida
import sys
import uuid
import requests

rpc_sig_js = """
rpc.exports = {
    getsig: function(str){
        var sig = '';
        Java.perform(
            function(){
                var a = Java.use('com.km.core.b.a');
                sig = a.a(str);
            }
        )
        return sig;
    }
}

"""

def on_message(message, data):
    if message['type'] == 'send':
        print("[*] {0}".format(message['payload']))
    else:
        print(message)


def process_script(parse):
    """启动frida rpc"""
    process = frida.get_remote_device().attach('com.kmxs.reader')
    script = process.create_script(rpc_sig_js) 
    script.on('message', on_message) 
    script.load()
    sig = script.exports.getsig(parse)
    return sig

def get_headers():
    """生成headers参数sign,返回组装好的headers"""
    u = str(uuid.uuid4())
    # header请求sign生成参数 
    h_sign = 'AUTHORIZATION=\
app-version=40000\
application-id=com.kmxs.reader\
brand=google\
channel=qm-xiaomi_lf\
client-id=79b101a4c922edfa\
device-id=2020112023043231b16f0157e713801955886211dbcfdb017201340dee7bb7\
hardware-id=ffffffff-eff3-95ad-0000-0000010e8b41\
imei=867686020207104\
is-white=0\
mac=A0:8D:16:F3:87:76\
model=Nexus 6P\
oaid=\
platform=android\
reg=\
sys-ver=6.0.1\
trusted-id=DuIeA8U6wmfOJw7D2Rqs/JpyGmn4sYtvJiZs/BOd1VR15C+Efah4kyPwraT1RZuQBXU7RSTen/1Z2auWSGAqi9kQ\
uuid={}\
wlb-imei=867686020207104\
wlb-uid=867686020207104'.format(u)

    # print(h_sign)
    head_sig = process_script(h_sign)

    headers = {
        "wlb-imei": "867686020207104",
        "hardware-id": "ffffffff-eff3-95ad-0000-0000010e8b41",
        "mac": "A0:8D:16:F3:87:76",
        "uuid": u,
        "client-id": "79b101a4c922edfa",
        "oaid": "",
        "app-version": "40000",
        "platform": "android",
        "trusted-id": "DuIeA8U6wmfOJw7D2Rqs/JpyGmn4sYtvJiZs/BOd1VR15C+Efah4kyPwraT1RZuQBXU7RSTen/1Z2auWSGAqi9kQ",
        "reg": "",
        "device-id": "2020112023043231b16f0157e713801955886211dbcfdb017201340dee7bb7",
        "AUTHORIZATION": "",
        "imei": "867686020207104",
        "is-white": "0",
        "brand": "google",
        "application-id": "com.kmxs.reader",
        "wlb-uid": "867686020207104",
        "sys-ver": "6.0.1",
        "channel": "qm-xiaomi_lf",
        "model": "Nexus 6P",
        "sign": head_sig,
        "QM-it": "1605888000",
        "QM-ii": "2018866918",
        "User-Agent": "webviewversion/40000",
        "Host": "api-bc.wtzw.com",
        "Connection": "Keep-Alive",
        "Accept-Encoding": "gzip"
    }
    return headers

def get_page():
    """翻页"""
    headers = get_headers()
    p_sign = 'gender=1&page_no=3'
    sig = process_script(p_sign.replace('&', ''))
    page_url = 'https://api-bc.wtzw.com/api/v3/recommend/high-score?{}&sign={}'.format(p_sign, sig)

    response = requests.get(page_url, headers=headers)
    if response.status_code == 200:
        print(response.text)

if __name__ == "__main__":
    get_page()

运行查看结果:


4.结论可以看到请求成功,这app的sign分析还是挺简单的,其中的sign加密算法在so文件里,等后续研究研究。

免费评分

参与人数 7威望 +1 吾爱币 +24 热心值 +7 收起 理由
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zhhshhh + 1 + 1 我很赞同!
佚名RJ + 1 + 1 写的不错,这是一整套的分析流程呀,很适合学习使用,很感谢!
柯里昂热 + 1 用心讨论,共获提升!
小佩奇1415 + 1 用心讨论,共获提升!
深海天空 + 1 + 1 我很赞同!
zyhewsd + 1 + 1 谢谢@Thanks!

查看全部评分

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

 楼主| 公过水蚊 发表于 2021-3-12 17:40
听风没有雨 发表于 2021-3-12 14:58
新人不懂就问,找sign 是为了啥?

每次请求都需要sign,找到sign后就可以模拟请求了
Hmily 发表于 2020-11-23 10:07
格式有些乱,大概从哪复制过来的,尽我所能编辑了下,但还是不太好看,楼主看自己再编辑修改下,代码可以用代码框处理一下,或者论坛支持markdown格式也行。
芽衣 发表于 2020-11-24 11:20


奇怪了,为什么我发七猫小说爆破sign的时候没看见你这帖子呢??

在审核吗?


芽衣 发表于 2020-11-24 11:30
Hmily 发表于 2020-11-23 10:07
格式有些乱,大概从哪复制过来的,尽我所能编辑了下,但还是不太好看,楼主看自己再编辑修改下,代码可以用 ...

https://bbs.pediy.com/thread-263670.htm


应该从这里复制过来的
caleb110 发表于 2020-11-24 11:44
多谢分享,来学习啦
wxbb979 发表于 2020-11-24 12:15
wow好厉害啊 努力学习ing
cuizb2583 发表于 2020-11-24 12:47
支持分享,虽然不太懂
深海天空 发表于 2020-11-24 13:14
支持分享,谢谢.
小佩奇1415 发表于 2020-11-24 13:21
去学习康康
清平道长 发表于 2020-11-24 13:54
谢谢楼主的努力。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 15:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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