碰到了使用com.orhanobut.hawk
对sp进行加密的应用,分析一下除了动态调试外如何直接解密
逆向的难度比较大,而且由于涉及到facebook的加密库,导致反编译后代码很难看,好在项目是开源的hawk
看一下这个项目的代码,本质上用的facebook的加密库conceal
这是封装在最外层的解密方法
这是内一层的,cipherTextBytes
就是密文,entity
可以理解为密文在hawk2.xml文件中对应的键名
这部分呢实际上是做了aes的GCM模式解密,需求的参数有key,iv,tag,data和密文
在CryptoConfig
中定义了密文各个参数的长度
因此一开始的result
的长度实际上就是真正的密文的长度,header
则是前14个字节,iv
是第3-14个字节,tag
是最后16个字节
那么中间的部分,也就是第15个字节开始到tag
之前,应该是真正的密文数据,现在就是不知道data到底是啥
根据之前的head
进行定位,使用start
方法对head
进行处理,跟一下发现是native函数
从这里可以看到,将header进行拆分,前2个字节是表示版本,其余的都是iv,最后又进行了update操作,将version和entity进行update,实际上这两个就是data
分析到这里也就清晰了,对于一段密文(字节数组m)来说,由5个部分组成
- iv,m[2:14]
- tag,m[-16:]
- key,sp中对应的键名
- enc_data(真正的密文),m[14:-16]
- data,m[:2]+key
最后在加上解密所需要的密钥即可解密,这里做一个演示,成功解密出数据
import base64
from Crypto.Cipher import AES
cipher_text = 'AQLqxQ/wZSQwUFgdOA6XjK0DKIcnneC4LCHBn9uMnIezNiWIX2FSc2Hl5Gi1LzjQttPI9P02h/lam+5kEXgtMwV3AdfRH6DkehmjCJy1bPGbUgA4JZ9lYGzgkPzg6k+lZrRGO1xJWK1ESKNIBm3oX+pvEy/nvWcxp64f/2X7/M17Gz29OZCFBp85Y7OXzGkJ0yVYGIYeLFxWjLwudWA='
cipher_key_name = '64_key_share_info'
key_text = 'rp6Fz0G8E6p7KzfJS0qg3Agyoek/GoRg12kAptH9VDo='
cipher_bytes = base64.b64decode(cipher_text.encode('utf8'))
entity_bytes = cipher_key_name.encode('utf8')
key_bytes = base64.b64decode(key_text.encode('utf8'))
iv = cipher_bytes[2:14]
tag = cipher_bytes[-16:]
data = cipher_bytes[:2]+entity_bytes
enc_data = cipher_bytes[14:-16]
cipher = AES.new(key_bytes,AES.MODE_GCM,iv)
cipher.update(data)
decrypt_data = cipher.decrypt_and_verify(enc_data,tag)
print(decrypt_data.decode('utf8'))
# {"appid":"1","content":"https://hideserver.kehuan.vip/info/share.html#您好请打开此条链接下载章鱼隐藏","status":2}
ForensicsTool已经集成
标签:分析,bytes,解密,cipher,key,密文,hawk,data From: https://www.cnblogs.com/WXjzc/p/18333142