中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔

138 阅读3分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情

需求调研

中秋到了,又到了在家庭群发祝福语的时候了,如何发,才能成为家里老人面前最精彩的那一人,深深的困扰着橡皮擦,知道我发现了下面这个小程序,有解了!

中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔

这风格简直太熟悉了,四大姑三大姨不一直在发送这些【美丽的】图片么,当打开图片的详情之后,发现下图更加确定了,我必须要采集一下这个小程序。

中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔

需求分析

通过简单的抓包,提炼需求如下所示:

  1. 抓取封面图,重点为获取接口响应数据
  2. 抓取详情页文案,解码加密参数

接下来就是对该小程序进行抓包,得到如下内容:

中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔

请求的地址是:

https://www.ezhizhu.com/app/index.php?i=35&t=0&v=1.1.0&from=wxapp&c=entry&a=wxapp&do=listdata&&m=tc_bestgood

但是请求参数中包括了一个 sign 参数,碰到这种情况使用普通手段已经无法解决了,需要使用解包手段。 PC 端小程序解包程序使用 小锦哥 小程序工具

解包实战

点击目标 PC 端目标小程序,然后在本地找到 __APP__.wxapkg 文件。 该文件在微信文件管理的目录中。

中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔

进入到该目录之后,跳转到 WeChat Files 文件中,然后寻找 Applet 文件夹。

中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔

小程序文件夹在新版本的微信中以 wx 开头,然后进入文件夹得到一个数字目录,进入即可找到 APP.wxapkg 文件。

中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔

① 使用小程序工具进行解密

安装小程序解包工具之后,按照下图选择对应文件,然后选择解密后的保存路径,点击开始解密即可。

中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔 解密之后的文件如下所示。 中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔 拿到该文件之后,就可以对其反编译操作,图示如下。 中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔 反编译成功出现下述弹窗。 中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔 此时在目标目录出现一个文件夹,进入即可发现相应的代码文件。 中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔 下图是解包之后的源码。 中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔

② 分析源码

接下来打开源码文件,很容易就分析到其目标数据,顺带也可以看到其加密参数 sign 的来源,即 a.Data.sign中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔 简答查找源码,得到 sign 的加密函数,如下所示。

 Sign: function() {
        var t = Math.round(new Date().getTime() / 1e3), a = this.md5("taichengagressor@2018#Y2MyZTlmYmUxMWY5MjJkODg4MTM2ODQ2MjE3MTFmZWI5OTg=#" + t);
        this.Data.sign = a, this.Data.timestamp = t;
    },

将其转换为对应的 Python 代码时,得到如下内容:

import requests
import time
import hashlib
headers = {
    "Host": "www.ezhizhu.com",
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 MicroMessenger/7.0.4.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF"
}
t = int(time.time())
a = hashlib.md5(("taichengagressor@2018#Y2MyZTlmYmUxMWY5MjJkODg4MTM2ODQ2MjE3MTFmZWI5OTg=#"+str(t)).encode('utf8')).hexdigest()

data = {
    "timestamp": t,
    "sign": a,
    "page":1
}

接下来编写完整的请求代码:

import requests
import time
import hashlib
headers = {
    "Host": "www.ezhizhu.com",
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 MicroMessenger/7.0.4.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF"
}
t = int(time.time())
a = hashlib.md5(("taichengagressor@2018#Y2MyZTlmYmUxMWY5MjJkODg4MTM2ODQ2MjE3MTFmZWI5OTg=#"+str(t)).encode('utf8')).hexdigest()

data = {
    "timestamp": t,
    "sign": a,
    "page":1
}

def r():
    res = requests.post(
        'https://www.ezhizhu.com/app/index.php?i=39&t=0&v=1.1.0&from=wxapp&c=entry&a=wxapp&do=listdata&&m=tc_bestgood',data = data,headers=headers,verify=False)
    print(res.text)

if __name__ == '__main__':
    r()

运行代码,得到下图所示内容:

中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔

当看到 JSON 响应串时,任务已经完成。

总结

写到这里,该小程序已经对我们已经没有秘密可言了,剩下的就是简单的 Python 代码处理数据了,本文的重点应放在小程序解包与反编译上,如果掌握了本部分内容,后面所有的小程序都可以使用相同的手法解决,拿它的接口。

在这里插入图片描述