当前位置:   article > 正文

某物小程序sign逆向-记录_error: magic number is not correct!

error: magic number is not correct!

某物小程序sign逆向-记录

评估了一下,逆向某物小程序要比APP简单,这篇文章主要记录一下小程序的反编译过程和sign的逆向。

小程序逆向的过程(以pc端小程序为例):

  • 找到所需的接口、参数
  • 找到小程序的wxapkg
  • 解密小程序包(有些wxapkg有加密)
  • 反编译小程序
  • 找加密函数(扣js)
  • 测试接口

分析接口及接口参数

在这里插入图片描述

这个接口就是我们需要的,主要加密参数是sign,这个sign所有接口都要用到的,data加密也是要用到sign的,后面会写一篇data的解密。目标找到了,接下来的就是反编译,找到加密的js。

找到小程序的wxapkg

截图的就是我们要找的路径及wxapkg包。
在这里插入图片描述
如果不确定文件夹对应的小程序,就把下面这些文件夹删了,重新启动微信小程序就会生成一个新的文件。
在这里插入图片描述

解密小程序包

有些小程序包是有加密的,比如在反编译时提示:
在这里插入图片描述

Error: Magic number is not correct!
  • 1

像这个提示说明小程序有加密了,用下面这个解密工具可以解密
在这里插入图片描述
解密成功的包在wxpack文件夹里面
解密工具的下载:

https://wwu.lanzoub.com/ieCOG03v1u4f  密码:dusv
  • 1

反编译

wxappunpacker下载地址:

https://gitee.com/ksd/wxappUnpacker
  • 1

先安装node.js
下载wxappunpacker 进入这个目录后 运行cmd 执行命令

npm install
npm install esprima    
npm install css-tree    
npm install cssbeautify    
npm install vm2    
npm install uglify-es    
npm install js-beautify
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

以上都安装好就可以反编译小程序了
反编译命令:

node wuWxapkg.js 包的路径
  • 1

在这里插入图片描述
注:反编译出来的文件会在wxapkg包当前的路径下

找加密函数(扣js)

sign长度是32的,可以大胆猜测一下是否是md5加密的,在js文件里搜索md5关键词发现只有一个文件有md5相关的。
在这里插入图片描述
定位到这个文件后,一个个看,发现下面这里非常可疑。
在这里插入图片描述
经过分析md5加密的值是把提交的dict转换成字符串 + 一个常量。
改写成python:


def get_sign(data):
    data_str = ''
    for i in sorted(data):
        data_str += i + str(data[i])
    print(data_str)
    res = data_str + "反编译js中找到这个常量"
    h1 = hashlib.md5()
    h1.update(res.encode(encoding='utf-8'))
    sign = h1.hexdigest()
    return sign
    
 data = {"tabId":"","limit":20,"lastId":3,"platform":"h5","version":"4.73.0","isVisitor":"false","newAdvForH5":"true"}
get_sign(data)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

当然,这只是我们的猜想,接下来还要校验我们的猜想是否正确。

测试接口

经过测试我们的猜想是没问题的,完整代码:

import requests
import hashlib

def get_info():
    headers = {
        'Host': 'app.dewu.com',
        'Connection': 'keep-alive',
        'AppId': 'wxapp',
        'SK': '换成自己抓包的数据',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat',
        'appVersion': '4.4.0',
        'content-type': 'application/json',
        'platform': 'h5',
        'wxapp-route-id': '[object Undefined]',
        'Referer': 'https://servicewechat.com/wx3c12cdd0ae8b1a7b/340/page-frame.html',
    }
    data = {"tabId":"","limit":20,"lastId":3,"platform":"h5","version":"4.73.0","isVisitor":"false","newAdvForH5":"true"}
    sign = get_sign(data)
    data["sign"] = sign
    print(data)
    response = requests.post('https://app.dewu.com/api/v1/h5/index/fire/index', headers=headers, verify=False,json=data)
    print(response.text)


def get_sign(data):
    data_str = ''
    for i in sorted(data):
        data_str += i + str(data[i])
    print(data_str)
    res = data_str + "反编译js中找到"
    h1 = hashlib.md5()
    h1.update(res.encode(encoding='utf-8'))
    sign = h1.hexdigest()
    return sign

get_info()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

在这里插入图片描述

现在某物小程序的大部分接口提交data以及返回的数据都是加密,同时也要用到这个sign,后面会写一篇关于data的解密。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/298519
推荐阅读
相关标签
  

闽ICP备14008679号