Python 实现「食行生鲜」签到领积分的脚本如何编写?

https://mp.weixin.qq.com/s/M_zbszwC7EWEQLqtRlFnWg

非广告。。。不知道有多少用「食行生鲜」的。。。

用过「食行生鲜」的同学应该知道,每天可以在食行生鲜签到,签到可以领到 20 积分,在购物时可以抵 2 毛钱。钱虽少,但是积少成多,买菜时可以抵扣一两块钱还是不错的。

另外,有大神能看出来登录密码是怎么加密的吗?

页面输入的 000000,登录时加密成了 98a53578bd74e150


Python 实现「食行生鲜」签到领积分的脚本如何编写?

5 回复

js 加密?看代码啊


要写一个食行生鲜的签到脚本,核心就是模拟登录和发送签到请求。这里给你一个使用 requests 库的基础框架。你需要自己找到关键的接口和参数。

import requests
import time
import hashlib
import json

class ShiHXianSigner:
    def __init__(self, username, password):
        self.username = username
        self.password = password
        self.session = requests.Session()
        # 这里需要设置正确的User-Agent,模拟手机APP
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        }
        self.session.headers.update(self.headers)

    def login(self):
        """模拟登录,获取必要的token或cookie"""
        # 1. 首先需要分析登录流程
        # 通常需要先访问一个页面获取初始token或验证码
        # init_url = "https://api.xxx.com/get_token"
        # init_resp = self.session.get(init_url)
        # token = init_resp.json().get('token')

        # 2. 构造登录参数(密码可能需要加密)
        # 这里密码加密方式需要逆向分析APP或网页
        # encrypted_pwd = self._encrypt_password(self.password)

        login_data = {
            'username': self.username,
            'password': self.password, # 可能是加密后的
            # 'token': token,
            # 其他必要参数...
        }

        # 3. 发送登录请求
        # login_url = "https://api.xxx.com/login"
        # resp = self.session.post(login_url, data=login_data)
        # if resp.json().get('code') == 200:
        #     print("登录成功")
        #     return True
        # else:
        #     print(f"登录失败: {resp.text}")
        #     return False

        # 这里是示例,实际需要替换
        print(f"模拟登录: 用户名 {self.username}")
        # 假设登录成功,保存必要的cookie
        return True

    def sign(self):
        """执行签到操作"""
        # 签到接口地址需要抓包分析
        sign_url = "https://api.xxx.com/member/sign" # 示例URL,需要替换

        # 通常需要携带时间戳、签名等参数
        timestamp = int(time.time() * 1000)
        # 签名算法需要逆向分析
        # sign_str = self._generate_sign(timestamp)

        sign_data = {
            'timestamp': timestamp,
            # 'sign': sign_str,
            # 其他必要参数...
        }

        try:
            # resp = self.session.post(sign_url, data=sign_data)
            # result = resp.json()
            # 模拟响应
            result = {'code': 200, 'msg': '签到成功', 'data': {'points': 10}}

            if result.get('code') == 200:
                print(f"签到成功! 获得积分: {result.get('data', {}).get('points', 0)}")
                return True
            else:
                print(f"签到失败: {result.get('msg')}")
                return False
        except Exception as e:
            print(f"请求异常: {e}")
            return False

    def _encrypt_password(self, password):
        """密码加密函数(示例)"""
        # 具体加密方式需要逆向分析,可能是MD5、AES或自定义算法
        # 例如: return hashlib.md5(password.encode()).hexdigest()
        return password

    def _generate_sign(self, timestamp):
        """生成请求签名(示例)"""
        # 通常是将参数按规则排序后拼接,加上密钥,再做MD5或SHA256
        # 例如: sign_str = f"param1=value1&param2=value2&key=secret{timestamp}"
        # return hashlib.md5(sign_str.encode()).hexdigest()
        return ""

def main():
    # 替换为你的账号密码
    USERNAME = "your_phone_number"
    PASSWORD = "your_password"

    signer = ShiHXianSigner(USERNAME, PASSWORD)

    # 1. 登录
    if not signer.login():
        print("登录失败,程序退出")
        return

    # 2. 签到
    signer.sign()

if __name__ == "__main__":
    main()

关键步骤说明:

  1. 抓包分析:这是最关键的。用Fiddler、Charles或浏览器开发者工具,抓取手机APP或网页的登录和签到请求。找到真实的API接口地址(login_url, sign_url)。
  2. 分析参数:仔细看登录和签到POST请求里的所有参数(Form DataPayload)。特别注意像 signtokentimestamp 这种动态的、用于验证的参数。
  3. 破解加密:密码和签名(sign)大概率被加密了。你需要分析JavaScript代码或反编译APP,找到加密算法(常见的是MD5、SHA、AES,或者自定义的)。把对应的加密逻辑用Python实现(代码里的 _encrypt_password_generate_sign 函数)。
  4. 处理Cookie/Session:用 requests.Session() 保持会话,登录后的cookie会自动管理。
  5. 模拟请求头User-Agent 很重要,设置成对应手机APP的。可能还需要 RefererX-Requested-With 等头。

一句话建议: 核心在于逆向分析它的登录和签到接口,搞定参数加密就能写出来。

刚刚看了下密码加密,不是很难,js 加密代码 如下,把末行 get_pwd 第一个参数替换成自己的密码就行了:
https://raw.githubusercontent.com/EngiGu/python-login-with-JS/master/shihangshengxian/pwd.js

多谢了

回到顶部