0x01
首先,莫名其妙的原因导致自己的机场全挂了。因此在短期内急需一个梯子,给我日常上Github,后来根据某粉红色app的推荐🐶,但是每次只有30分钟的使用时间,所以很是麻烦。
所以我使用apktools这个工具去逆向获取代码,分析他限时的代码。
0x02
起初,我关键词搜索相关的money,httpUtil,post,get等。都找不到分析的入口。一度怀疑它是不是加了壳,而且按照一般情况下的安卓app开发,都会有MainActivity这个。但是我找了半天都没有,一直在androidx下去找,后面别人跟我说试试搜索支付界面的一些关键词。果不其然,搜索支付成功,就找到了相关逻辑。后续,分析代码过程中,通过JByte这个工具,改字节码。改了半天都没用,索性直接抓包分析。
0x03
最后代码如下:
# des模式 填充方式 ECB加密方式
from pyDes import des, PAD_PKCS5, ECB
import base64
import requests
import json
import random
#need: pyDes
dictKey = '0123456789abcdefghijklmnopqrstuvwxyz'
def getRandomIMEI():
return ''.join(random.sample(list(dictKey),16))
def getLink():
v='0.9'
imei = 'di:{}'.format(getRandomIMEI())
id_ = 6 #小于6的是vip节点
user = random.randint(2800000,2899999)
cid = random.randint(0,9) #节点
url = 'http://示例IP:示例端口/api/user/getserver'
headers = {}
postdata = {}
KEY1= '密钥1'
KEY2 = '密钥2'
postdata['v'] = v
postdata['imei'] = imei
postdata['id'] = id_
postdata['user'] = id_
postdata['cid'] = cid
headers['User-Agent'] = 'okhttp/4.2.2'
headers['Content-Type'] = 'application/x-www-form-urlencoded'
response = requests.post(url,data=postdata,headers=headers).text
raw_data = base64.b64decode(response)
des_obj = des(KEY1, ECB, KEY1, padmode=PAD_PKCS5)
data = json.loads(des_obj.decrypt(raw_data).decode())
print('ret:{0}\nlocation:{1}\nping:{2}'.format(data['ret'],data['location'],data['ping']))
link = base64.b64decode(data['link'])
des_link = des(KEY2, ECB, KEY2, padmode=PAD_PKCS5)
print('Link:{}'.format(des_link.decrypt(link).decode()))
if __name__ == "__main__":
getLink()
while True:
pass