360儿童卫士APP分析
0x0.前言
APP版本:V8.2.4.2961
工具:burpsuite,xposed,frida,儿童手表
0x1.接口分析
这里我们设置好burp和模拟器的代理

但是当我们通过短信验证码登录时会一直卡死登录不上,当关闭代理后成功登录,猜测这里肯定有问题。


登录成功后,我们再开启代理看看如何!

这里我们之间点开了计步,可以看到显示网络连接异常,猜测这里进行代理的防护等保护。我们使用 xposed的JustTrustMe模块成功突破SSL Pinning!

这时可以看到我们已经成功抓取到流量!

0x2.数据解密
通过上面的分析我们已经可以成功抓取数据包了,但是通过分析request和response,我们可以看出报文及逆行了加密。


这里我们猜测使用了AES对报文进行了加密,可以使用hook的方式获得AES加解密使用的key和iv。我们这里使用frida hook框架完成对java中aes加解密的函数的hook,获得加解密使用的key和iv。frida的 hook代码如下:
#coding: utf-8from __future__ import print_functionimport fridaimport sysimport jsonimport time# 对结果进行输出def on_message(message, payload):if(message['type'] == 'send'):rec_data = json.loads(message['payload'])if rec_data['my_type'] == 'IV':print("偏移 :: {}".format(payload.decode('utf-8')))print(" ")elif rec_data['my_type'] == 'KEY':print("密钥 :: {}".format(payload.decode('utf-8')))else:print(message)else:print(message)# 使用js hook key和iv相关的代码js_code = """Java.perform(function x() {var secret_key_spec = Java.use("javax.crypto.spec.SecretKeySpec");secret_key_spec.$init.overload("[B", "java.lang.String").implementation = function (x, y) {send('{"my_type" : "KEY"}', new Uint8Array(x));return this.$init(x, y);}var iv_parameter_spec = Java.use("javax.crypto.spec.IvParameterSpec");iv_parameter_spec.$init.overload("[B").implementation = function (x) {send('{"my_type" : "IV"}', new Uint8Array(x));return this.$init(x);}});"""giao= frida.get_usb_device().attach('com.qihoo360.antilostwatch') # 这里attach要进行hook的应用script = giao.create_script(js_code)script.on("message", on_message)script.load()sys.stdin.read()
android开启frida的服务端
adb connect 127.0.0.1:21503adb shellcd data/local/./frida-server-14.1.3 # 成功开启frida的服务端程序
电脑端开启frida hook代码
adb forward tcp:27042 tcp:27042python3 aes.p

这时我们运行应用就可以hook出当前接口的aes的iv和key。

可以看到我们每次请求都能获得对应的key和iv 接下来我们使用aes相关解密脚本进行解密,解密脚本如下:
#!/usr/bin/python# -*- coding: utf-8 -*-import base64from Crypto.Cipher import AESfrom urllib import parseAES_SECRET_KEY = '408584e272555742c389c757adf88c83' #此处16|24|32个字符IV = "3eaba802a4759002"# padding算法BS = len(AES_SECRET_KEY)pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)unpad = lambda s: s[0:-ord(s[-1:])]class AES_ENCRYPT(object):def __init__(self):self.key = AES_SECRET_KEYself.mode = AES.MODE_CBC#加密函数def encrypt(self, text):cryptor = AES.new(self.key.encode("utf8"), self.mode, IV.encode("utf8"))self.ciphertext = cryptor.encrypt(bytes(pad(text), encoding="utf8"))return base64.b64encode(self.ciphertext)#解密函数def decrypt(self, text):decode = base64.b64decode(text)cryptor = AES.new(self.key.encode("utf8"), self.mode, IV.encode("utf8"))plain_text = cryptor.decrypt(decode)return unpad(plain_text)if __name__ == '__main__':aes_encrypt = AES_ENCRYPT()e = "cvlbCumK/20nwRugGDDRaNI5TbdViSbx7ap47BdfeYAAYxsIMcPNAYF8FkJvsHG04a7DlWaqar6Y1wV5enxlFOonM5JHRZMRAFSMkD7K+4FAIRK7VO7RRSCOa+b3cPG2izB/5AS2jqEuZht1Zcbh0I5FR0U8WuOHCYxps3eg8mEUTRN72bbJqys26mg5zFroVyBYPeZjKUmgvSx9I4tZqKiBywnsY/canmlyuYw8A0k="d = bytes.decode(aes_encrypt.decrypt(e))print("decrypt data: {0}".format(d))
运行解密脚本进行解密,解密结果如下:
(sec) PS E:\sec-code> python .\aes-cbc-pkcs5padding.pydecrypt data: ts=1608172163734&m2=4f557a3814d4d5b709b2e6786dc5596d&operation=install&device_id=1c6be70cfe6d089b&seed=2073b5a480e26ab18be355a7a371fffc&package=cn.kuwo.wearkwbook
可以看到我们已经成功将数据解密!

end
招新小广告
ChaMd5 Venom 招收大佬入圈
新成立组IOT+工控+样本分析 长期招新
欢迎联系admin@chamd5.org

关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 中法友谊蕴山水 7904350
- 2 你以为的进口尖货 其实早已国产了 7808092
- 3 劲酒如何成了年轻女性的神仙水 7711844
- 4 盘点2025大国重器新突破 7619260
- 5 “两人挑一担 养活半栋楼” 7519967
- 6 中美合拍《我的哪吒与变形金刚》首播 7426871
- 7 美军承认:击落美军战机 7333434
- 8 尖叫之夜直播 7238497
- 9 下周降温更猛还有大范围雨雪 7137001
- 10 周末去哪玩?雪场“不打烊” 7044242







Chamd5安全团队
