某广告SDK流量加解密-请求

今天刚好在看某甲广告sdk,发现他请求跟响应的数据都是加密的,于是跟了一下,做个记录。

样本的话,随便那个apk都行,现在基本99%应用都集成了穿山甲

请求

先找一个sdk中请求广告的函数开始跟(sdk文档更新日志 - 穿山甲广告平台

 可以看到反射调用com.bytedance.sdk.openadsdk.TTC5Proxy类的loadFeed函数,通过对该函数进行静态追踪,在com.bytedance.sdk.openadsdk.core.r类中看到几个打包函数,其中a函数较为可疑,如下:

 

hook该函数,得到其返回的数据

 发现其数据很可能就是发包的参数,先抓包验证一下

 果然,a函数的返回数据就是发包的参数,现在对a函数进行详细分析:

 通过上面的代码能看到,发包参数中加密字段message的值就在str3中

 str3 是由 2 拼接上 k2 再拼接上 a2 所得,现在先来解析k2,k2由函数k返回所得

 从k函数可知,a.a函数返回若不为空则a.a函数的返回值就是k,若a.a函数返回空,则b.a的返回值为k,现在hook  a.a函数

 上过上图能看到,k确实是由a.a函数返回所得,对a继续追踪,发现其会产生一个8位的随机数然后将该随机数传进j.a处理

 

如下图,可知,通过for循环依次去除每一个随机数,然后将随机数进行切割,先取出随机数的低字节,然后以低字节的前4位为下标和后4位为下标 依次从{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}中取出两个数放进新的数组,这样8位随机数,就会取出16个数字组成一个新的数组,然后以字符串形式返回

 现在开始跟踪a2的获取过程

 通过上图能看到,a2由a.a函数返回,该函数接受2个参数,第一个是jSONObject2,第二个是以k2作为参数的 f 函数的返回值

通过下图的代码能看出,f 函数的返回值为将k2的前8位与后八位对换后的字符串

 第一个参数 jSONObject2 的内容具体为如下

{
    "abtest":{
        "version":"3372976",
        "external_ab_vid":"",
        "param":"{\"settings\":{\"enable_go_endcard_detail_page\":true}}",
        "tob_ab_sdk_version":""
    },
    "request_id":"60fcd629-057b-4405-b9ff-3f006c21e289",
    "ad_sdk_version":"3.3.0.1",
    "source_type":"app",
    "app":{
        "appid":"5052795",
        "name":"一键清理管家",
        "package_name":"com.xiaoniu.master.cleanking",
        "version_code":"41",
        "version":"2.7.0",
        "is_paid_app":false,
        "apk_sign":"B2:65:82:41:27:BC:27:92:F7:BC:53:5F:39:D8:E9:C8:59:2D:0B:76"
    },
    "device":{
        "android_id":"8d44a9d0a44d2c5a",
        "uuid":"09309f69-4db0-449e-9c65-31276727f541",
        "ssid":"<unknown ssid>",
        "wifi_mac":"02:00:00:00:00:00",
        "power_on_time":"595812973",
        "rom_version":"miui_V11_V11.0.3.0.QFLCNXM",
        "sys_compiling_time":"1605014317000",
        "type":1,
        "os":1,
        "os_version":"10",
        "vendor":"Xiaomi",
        "model":"Redmi 7",
        "language":"zh",
        "conn_type":1,
        "mac":"BC:7F:A4:DF:75:D4",
        "screen_width":720,
        "screen_height":1369,
        "oaid":"eafdf6a207b5b8b",
        "free_space":9662951424,
        "applog_did":"2296200784252815",
        "sec_did":"",
        "orientation":2
    },
    "user":{

    },
    "ua":"Mozilla\/5.0 (Linux; Android 10; Redmi 7 Build\/QKQ1.191008.001; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/83.0.4103.101 Mobile Safari\/537.36",
    "ip":"10.251.203.124",
    "adslots":[
        {
            "id":"945974395",
            "prime_rit":"",
            "show_seq":0,
            "adtype":5,
            "render_method":1,
            "accepted_size":[
                {
                    "width":640,
                    "height":320
                }
            ],
            "pos":3,
            "is_support_dpl":true,
            "is_origin_ad":true,
            "ad_count":1
        }
    ],
    "ts":1636350263,
    "req_sign":"098fc4d6f21607923d46622664f7e35d"
}

在a 函数中 首先对参数二,进行AES加密得到密钥,然后用此密钥对参数一进行加密,加密规则为如下

 通过以上加密得到的值即为 a2

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值