写点什么

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

作者:梦想橡皮擦
  • 2022 年 9 月 27 日
    河北
  • 本文字数:1625 字

    阅读完需:约 5 分钟

需求调研

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



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


需求分析

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


  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 requestsimport timeimport hashlibheaders = {    "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 requestsimport timeimport hashlibheaders = {    "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 代码处理数据了,本文的重点应放在小程序解包与反编译上,如果掌握了本部分内容,后面所有的小程序都可以使用相同的手法解决,拿它的接口。



发布于: 刚刚阅读数: 3
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
中秋发祝福?一套程序让你成为【相亲相爱一家人】群里最靓的仔_Python_梦想橡皮擦_InfoQ写作社区