前言
这次和紫星大佬组队,获得了猿人学-Android端爬虫比赛的第一名。
在此先说一句:紫星大佬牛逼!
比赛链接:https://appmatch.yuanrenxue.com/
获取key
第五题是双向认证,拿出珍藏的脚本tracer-keystore.js试试。
function hookKeystoreGetInstance() {
var keyStoreGetInstance = Java.use('java.security.KeyStore')['getInstance'].overload("java.lang.String");
keyStoreGetInstance.implementation = function (type) {
//console.log("[Call] Keystore.getInstance(java.lang.String )")
console.log("[Keystore.getInstance()]: type: " + type);
var tmp = this.getInstance(type);
keystoreList.push(tmp); // Collect keystore objects to allow dump them later using ListAliasesRuntime()
return tmp;
}
}
下载地址:https://github.com/FSecureLABS/android-keystore-audit/blob/master/frida-scripts/tracer-keystore.js
打开app,点击第五题,就出来bks证书的密码了。
bks到p12的转换
接着打开神器keystore-explorer,进行bks到p12的转换。
下载链接:https://keystore-explorer.org/downloads.html
打开clientCA.bks
输入前面hook到的密码
转成p12
导出证书
抓包
效仿以前抓soul包的方式,将较早之前生成的p12证书导入charles。
发现提示密码错误。
【PS:就在我还在对密码错误怀疑人生的时候,紫星巨佬说到:为啥一定要抓包?然后他就搞出结果了。。】
那换种思路,用神器r0capture试试。
下载链接:https://github.com/r0ysue/r0capture
运行神器后,请求流程自吐了出来。
POST请求
url是...:*/api/app5
Content-Type是application/x-www-form-urlencoded
User-Agent是okhttp/3.14.9
data是page=1
脚本书写
带上之前转化成功的p12证书,构造刚刚得到的请求,结果就呼之欲出了。
import requests_pkcs12
def get_page(page):
url = 'https://*.*.*.*:*/api/app5'
hd = {
'Content-Type':'application/x-www-form-urlencoded',
'user-agent': 'okhttp/3.14.9'
}
data = {
'page': page
}
resp = requests_pkcs12.post(url,
headers=hd, data=data, pkcs12_filename='1.p12',
pkcs12_password='**********', verify=False)
print(resp.json())
get_page(1)
答案呼之欲出了。
队友紫星大佬的52pojie:https://www.52pojie.cn/home.php?mod=space&uid=358970
紫星大佬的github:https://github.com/zixing131
本人收藏了很多优秀文章:https://github.com/darbra/sperm
本人还有些可复现的案例:https://github.com/darbra/sign