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

举报
梦想橡皮擦 发表于 2023/01/08 16:08:24 2023/01/08
【摘要】 需求调研中秋到了,又到了在家庭群发祝福语的时候了,如何发,才能成为家里老人面前最精彩的那一人,深深的困扰着橡皮擦,知道我发现了下面这个小程序,有解了!这风格简直太熟悉了,四大姑三大姨不一直在发送这些【美丽的】图片么,当打开图片的详情之后,发现下图更加确定了,我必须要采集一下这个小程序。 需求分析通过简单的抓包,提炼需求如下所示:抓取封面图,重点为获取接口响应数据抓取详情页文案,解码加密参数...

需求调研

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

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

需求分析

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

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

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

image.png

请求的地址是:

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 文件。
该文件在微信文件管理的目录中。

image.png

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

image.png

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

image.png

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

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

image.png

解密之后的文件如下所示。

image.png

拿到该文件之后,就可以对其反编译操作,图示如下。

image.png

反编译成功出现下述弹窗。

image.png

此时在目标目录出现一个文件夹,进入即可发现相应的代码文件。

image.png

下图是解包之后的源码。

image.png

② 分析源码

接下来打开源码文件,很容易就分析到其目标数据,顺带也可以看到其加密参数 sign 的来源,即 a.Data.sign

image.png

简答查找源码,得到 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()

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

image.png

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

总结

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

image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。