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