网络黑客信息平台网:360儿童护卫APP剖析
APP版本号:V8.2.4.2961
专用工具:burpsuite,xposed,frida,儿童智能手表
这儿大家设定好burp和手机模拟器的代理
可是在我们根据手机验证码登陆的时候会一直卡住登陆不上,当关掉代理后取得成功登陆,猜测这儿毫无疑问有什么问题。
登录成功后,大家再开启代理看一下怎样!
这儿彼此之间点开过记步,能够见到表明数据连接出现异常,猜测这儿开展代理的安全防护等维护。大家应用xposed的JustTrustMe控制模块取得成功提升SSL Pinning!
这时候能够见到大家早已取得成功爬取到总流量!
根据上边的剖析大家早已能够取得成功爬取数据文件了,可是根据剖析request和response,我们可以看得出报文格式及逆向行驶了数据加密
这儿大家猜测应用了AES对报文格式开展了数据加密,能够应用hook的方法得到AES加解密应用的key和iv。大家这儿应用frida hook架构进行对java中aes加解密的涵数的hook,得到加解密应用的key和iv。frida的hook编码以下:
#coding: utf-8
from __future__ import print_function
import frida
import sys
import json
import 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:21503
adb shell
cd data/local/
# 取得成功开启frida的服务器端程序流程
pc端开启frida hook编码
adb forward tcp:27042 tcp:27042
python3 aes.py
这时候大家运作运用就可以hook出当今插口的aes的iv和key
能够见到大家每一次要求都能得到相匹配的key和iv
下面大家应用aes有关解密脚本制作开展解密,解密脚本制作以下:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import base64
from Crypto.Cipher import AES
from urllib import parse
AES_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_KEY
self.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/20nwRugGDDRaNI5TbdViSbx7ap47BdfeYAAYxsIMcPNAYF8FkJvsHG04a7DlWaqar6Y2wV5enxlFOonM5JHRZMRAFSMkD7K 4FAIRK7VO7RRSCOa b3cPG2izB/5AS2jqEuZht1Zcbh0I5FR0U8WuOHCYxps3eg8米EUTRN72bbJqys26mg5zFroVyBYPeZjKUmgvSx9I4tZqKiBywnsY/canmlyuYw8A5k="
d = bytes.decode(aes_encrypt.decrypt(e))
print("decrypt data:{0}".format(d))
运作解密脚本制作开展解密,解密結果以下:
(sec) PS E:\\sec-code> python .\\aes-cbc-pkcs5padding.py
decrypt data: ts=1608172163734&m2=4f557a3814d4d5b709b2e6786dc5596d&operation=install&device_id=1c6be70cfe6d089b&seed=2073b5a480e26ab18be355a7a371fffc&package=cn.kuwo.wearkwbook
能够见到大家早已取得成功将数据信息解密!
0431试验室建立于2019年,是吉林信睿互联网网络信息安全有限责任公司的关键安全性科学研究精英团队,致力于物联网技术和互联网技术的最前沿安全性防御技术性科学研究,有着丰富多彩系统漏洞发掘工作经验,曾向小米手机、百度搜索等中国大型企业数次递交网络安全问题计划方案,有着业内出色的安全性剖析精英团队,核心人物均有很多年从业安全性科学研究的工作经验。自始至终以“技术革新发展趋势”为关键,以“维护保养网络信息安全”为总体目标,持续提升专业技术人员功底,讲解最前沿安全生产技术,抵挡大量的不明网络信息安全威协。