免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:图灵Python学院
本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。第一次接触安卓逆向写的很烂,后面有机会再全部重写。
工具下载:
链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3
提取码:6tw3
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:31.安卓逆向-抓包-实战4
上一个内容里通过hook找到的方法成功得到了authorization的值,然后本次分析它的值怎么来到,我们需要找一个方法对它进行模拟调用,然后得到authorization的值,然后调用请求
首先打开jadx-gui并把apk拖进去,然后来到下图位置,也就是上一个内容结尾的位置,然后开始分析
然后当前的请求是get请求,如下图红框,所以进入到 getSignString方法里
首先对它进行hook看看它的入参和返回值
然后如下图可以看到,它的入参是一个请求和一个map
然后改一下代码让它把map里的数据打印出来,然后发现map没打印东西,这说明map里没有东西,是一个空的,然后这个方法返回值是我们想要的,然后方法也很长,所以从后往前分析
Map取值的代码
var key = map2.keySet()
var it = key.iterator()
var r = ""
while(it.hasNext()){var keystr = it.next()var valuestr = map2.get(keystr)console.log(`map key->${keystr}`)console.log(`map value->${valuestr}`)r += valuestr
}
如下图从下往上分析,看返回值的值哪里来的
首先返回值的值来自于Base64编码,如下图红框,然后编码的内容是 str2 + ":" + SHA1ToString,首先看str2的值哪来的
如下图红框str2的值来源
首先hook JniClient.GetAppId方法,它是一个native方法
然后复制为Frida片段,hook之后会发现它没有被执行
然后再hook下图红框的方法 getHttpAppId
然后下图红框的方法getHttpAppId,可以看出值全是写死的
然后复制为Frida片段
它的返回值如下图是一个写死的字,然后现在str2的值找到了,接下来再找 SHA1ToString 的值哪来的
然后发现它的值来自于sha1加密,如下图红框
然后对它进行hook,看看它的入参
如下图它的入参是请求参数和一个加密的数据
经过hook下图红框的方法看出,加密的数据也是写死的
它的代码如下图红框,所以加密的数据直接写死
现在的结构:写死加密的数据+请求入参,然后20180111_android:写死加密的数据+请求入参进行base64加密
然后20180111_android这样东西可以通过对参数进行base64解密也能拿到,如下图
然后获取参数,首先使用Charles(青花瓷)复制url
然后通过工具把参数提取出来
然后它的参数是排过序的,通过下图红框位置的数据对比请求后面的参数看出来的
使用Python进行排序,如下图
然后排序玩加密
import base64
import hashlibparams = {"condition": "","refer": "homepage","containerType": "0","from": "search_result","cityId": "370101","page": "1"
}
so="".join([f"{key}={params[key]}" for key in sorted(params.keys())])
# print(so)
so1 = "d5e343d453aecca8b14b2dc687c381ca"+so
sha1 = hashlib.sha1()
sha1.update(so1.encode())
res = sha1.hexdigest()
print(res)
auth = base64.b64encode(("20180111_android:"+res).encode('utf-8'))
总结:
通过一边逆向一般hook得到参数的方式一步一步得到想要的东西,然后通过逆向分析代码的逻辑然后使用Python代码进行欢迎