酷狗app signature

举报
冬晨夕阳 发表于 2022/03/29 23:22:38 2022/03/29
【摘要】 本文案例是酷狗app的signature分析。 文章目录 参数分析Frida hook生成示例 参数分析 所用环境:夜神模拟器7.0.0.6 ,系统版本安卓5,酷狗版本10.6....

本文案例是酷狗app的signature分析。


参数分析

所用环境:夜神模拟器7.0.0.6 ,系统版本安卓5,酷狗版本10.6.5 (模拟器推荐版本)
在这里插入图片描述

用Ak反编译后,在工程搜索中检索关键词 signature

在这里插入图片描述

发现检索出了很多的结果,根据经验判断signature和md5相关,所以更换检索词,检索 “md5” , 又是一大堆结果

在这里插入图片描述

此时快速定位参数位置的话,可以使用objection从内存中定位。或者通过frida输出当前所有使用md5的方法

在内存中所有已加载的方法中搜索包含特定关键词的方法:android hooking search methods [search_name]

经过一番人工操作,签名在 com.kugou.common.utils.ba 的b方法中生成


Frida hook

启动frida,查看应用名 com.kugou.android
在这里插入图片描述

编写hook代码

这里类中有很多同名b方法,所以需要overload重载。另外确定类型是String,所以参数类型为 ‘java.lang.String’

重载是指在同一个类内定义了多个相同的方法名称,但是每个方法的参数类型和参数的个数都不同。

在调用方法重载的函数编译器会根据所填入的参数的个数以及类型来匹配具体调用对应的函数。

import frida, sys

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


jscode_hook = """
Java.perform(
    function(){
            console.log("1. start hook");
            var ba = Java.use("com.kugou.common.utils.ba");
            if (ba != undefined) {
                console.log("2. find class");
                ba.b.overload('java.lang.String').implementation = function (a) {
                    console.log("计算参数a: " + a);
                    var res = ba.b(a);
                    console.log("计算result:" + res);
                    return res;
                }
            }
    }
)
"""

process = frida.get_usb_device().attach('com.kugou.android')
script = process.create_script(jscode_hook)
script.on('message', on_message)
print('[*] Hook Start Running')
script.load()
sys.stdin.read()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

运行hook代码
在这里插入图片描述

把输出的参数通过md5加密一下,和result进行验证

在这里插入图片描述

验证结果相同。signature即是参数进行拼接处理后的md5结果。

参数的开头和结尾加上了都OIlwieks参数。


生成示例

import time
clienttime = round(time.time())
dfid='10wxeO4AE9lK0Ek13L1LrvgC'
mid='304291870705239990160554795323375833919'
extdata='8616f71390c954c3f52bf53841fa4518'
uuid='cc133b26f7e7c93a89a4f7309002ddb2'
appid='1005'
schash='0930c43952c442a194129d20f48182fc'
code='fc4be23b4e972707f36b8a828a93ba8a'
clientver='10659'
mixsongid='274337675'
clienttoken='5841e1d4296732bd0015f52838bdae21bbfe0ded81d1960f0db7edae4d11f4fb'
ver='10'
kugouid='1887484938'
childrenid = '82117948'
p = '2'
pagesize = '20'
OIlwieks = '28dk2k092lksi2UIkp'

sign_params = f'OIlwieks{OIlwieks}appid={appid}childrenid={childrenid}clienttime={clienttime}clienttoken={clienttoken}clientver={clientver}code={code}dfid={dfid}extdata={extdata}kugouid={kugouid}mid={mid}mixsongid={mixsongid}p={p}pagesize={pagesize}uuid={uuid}ver={ver}OIlwieks{OIlwieks}'

import hashlib
m = hashlib.md5()
m.update(sign_params.encode(encoding='UTF-8'))
sign = m.hexdigest()
print(sign)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

文章来源: blog.csdn.net,作者:考古学家lx,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_43582101/article/details/120821077

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。