微信小程序 Spdier - OfferShow 反编译逆向(一)

这篇具有很好参考价值的文章主要介绍了微信小程序 Spdier - OfferShow 反编译逆向(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信小程序 Spdier - OfferShow 反编译逆向(一)



前言

本文需要使用到的工具有:
Charles抓包工具、夜神模拟器、微信开发者工具、wxapkg反编译工具CrackMinApp;
提示:需要安装好Charles和夜神模拟器并配置好App抓包环境,以及安装好微信开发者工具 / 反编译工具CrackMinApp
Charles&夜神模拟器安装教程:https://blog.csdn.net/EXIxiaozhou/article/details/127767808
微信开发者工具 / 反编译工具CrackMinApp 下载安装:https://blog.csdn.net/EXIxiaozhou/article/details/128110468
该文章涉及到App抓包以及微信小程序反编译逆向等相关的Spider技术


提示:以下是本篇文章正文内容,下面案例可供参考

一、任务说明

1.尝试反编译分析出js_code参数的生成方式,用来获取token

微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向

2.将小程序搜索出来的数据保存至本地excel

微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向

二、微信小程序抓包 - 分析

1、打开Charles抓包工具,启动模拟器,进入微信
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向
2、搜索小程序offershow,打开进入,岗位搜索,输入关键词:“python”
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向
3、生成token接口分析,接口url:https://www.ioffershow.com/V4/silent_login
提示:第一次打开,需要请求这个接口提交js_code参数才能拿到token,headers添加一个token即可风雨无阻
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向
4、刷新token接口分析,小程序每隔一段时间会刷新token
接口url:https://www.ioffershow.com/V4/refresh_token
请求该接口时,提交当天服务器返回的任意一个token,即可请求成功获得新的token;
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向
下图使用postman工具模拟请求刷新token接口,Postman API测试工具 基本使用:https://blog.csdn.net/EXIxiaozhou/article/details/128333884
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向
5、search_salary、根据关键词进行接口请求,url:https://www.ioffershow.com/V4/search_salary
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向
可以看到返回的json数据
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向

三、wxapkg反编译 - 分析

1.在夜神模拟器获取微信程序员的包

1.1 获取wxapkg的地址

方式一、直接全局搜索文件后缀(.wxapkg)
点击右侧的任意处,再点击右上侧的三个点,选择搜索,输入.wxapkg
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向
方法二、一般具体的文件目录地址是:/data/data/com.tencent.mm/MicroMsg/{一串16进制字符}/appbrand/pkg/
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向

1.2 删除wxapkg文件重新生成

区分那些包是属于offershow小程序

  • 1.需要将微信的OfferShow小程序清除掉,再退出微信
  • 2.将原来已经生成的所有wxapkg文件删除
  • 3.重新登录微信,再次打开小程序再生成新的wxapkg文件
  • 4.再次打开模拟器存放wxapkg文件的目录,里面出现的wxapkg文件都属于OfferShow

1.3 复制wxapkg文件至windows目录,用来反编译调试

路径:/data/data/com.tencent.mm/MicroMsg/e8b469b0e57e32dd18d1293036fc556f/appbrand/pkg/
左侧找到windows本地目录,右侧找到模拟器存放wxapkg文件的目录,长按文件选择复制即可,全部复制;
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向

2.使用CrackMinApp对.wxapkg文件进行反编译

1、将.wxapkg文件复制到CrackMinApp-master\wxapkg目录;
微信开发者工具 / 反编译工具CrackMinApp 下载安装:https://blog.csdn.net/EXIxiaozhou/article/details/128110468微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向
2、
将三个.wxapkg文件依次反编译,区分主包和依赖包,真正的小程序包大小1M左右,而依赖包大小2、3M甚至更多,将依赖包复制放入主包;
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向
反编译之后的主包
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向

3.使用微信开发者工具打开反编译好的主包开始调试

微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向

4.分析结果

我调试到最后,发现js_code的加密代码被隐藏了,到此结束,如果有大佬知道加密方式的话,欢迎在评论处指教,非常感谢;
我的做法是手动复制当天服务器返回的token去请求刷新token的接口,拿到最新的token去请求查询薪资的接口,最后将数据保存至xlsx;

四、运行结果

输出xlsx文件
微信小程序逆向工具,Spider篇,微信小程序,小程序,python,爬虫,小程序逆向

五、示例代码

import os
import time
import requests
import pandas as pd


class OfferShow(object):
    def __init__(self):
        # 当天的任意token
        self.ord_token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTAwNDI2MSwibmlja25hbWUiOiJcdTcwZWRcdTVmYzNcdTc1MjhcdTYyMzciLCJleHAiOjE2Njk2NDY0OTEsIm9yaWdfaWF0IjoxNjY5NjQ1ODkxfQ.cWukvcTzgtQGyIVjzRT4Lr2Dcm1Y3Nnfov-bEX0QwfY'
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Linux; Android 7.1.2; SM-G9810 Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 MMWEBID/5551 MicroMessenger/8.0.30.2260(0x28001E3A) WeChat/arm32 Weixin NetType/WIFI Language/zh_CN ABI/arm32 MiniProgramEnv/androidUser-Agent	Mozilla/5.0 (Linux; Android 7.1.2; SM-G9810 Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 MMWEBID/5551 MicroMessenger/8.0.30.2260(0x28001E3A) WeChat/arm32 Weixin NetType/WIFI Language/zh_CN ABI/arm32 MiniProgramEnv/android',
            'content-type':	'application/x-www-form-urlencoded',
            'token': self.ord_token,
            'Accept-Encoding': 'gzip,compress,br,deflate'
        }
        self.xueli = ''
        self.result_file_path = 'OfferShow_salary.csv'

    def get_token(self):
        refresh_token_url = 'https://www.ioffershow.com/V4/refresh_token'
        form_data = {
            'token': self.ord_token
        }
        token_response = requests.post(url=refresh_token_url, headers=self.headers, data=form_data)
        token = token_response.json()['data']['token']
        print("token获取成功:", token)
        return token

    def search_salary(self, keyword):
        salary_url = 'https://www.ioffershow.com/V4/search_salary'
        from_data = {
            'content': keyword,
            'ordertype': 2,
            'search_priority': 3,
            'part_school': '',
            'xueli': self.xueli,
            'year': ''
        }
        salary_response = requests.post(url=salary_url, headers=self.headers, data=from_data)
        json_data = salary_response.json()['data']
        for item in json_data:
            content = f"{keyword},{item['id']},{item['company'].replace(',', ',')},{item['position'].replace(',', ',')}" \
                      f",{item['salary'].replace(',', ',')},{item['city'].replace(',', ',')}," \
                      f"{item['hangye'].replace(',', ',')},{item['xueli']},{item['salarytype']},{item['score']},{item['time']}"
            content = content.replace('\n', '').replace('\n', '') + '\n'
            self.csv_save(content=content)
            print("写入成功:", content, end='')

    def create_csv_file(self):
        if os.path.exists(self.result_file_path) is False:
            with open(file=self.result_file_path, mode='w', encoding='utf-8') as fis:
                fis.write('关键词,薪资ID,公司,岗位,薪资,城市,行业,学历,薪资类型,可信度,发布时间\n')

    def csv_save(self, content):
        with open(file=self.result_file_path, mode='a+', encoding='utf-8') as fis:
            fis.write(content)

    def csv_save_as_xlsx(self):
        """ 读取csv文件将结果写入xlsx """
        filename_prefix = os.path.splitext(self.result_file_path)[0]  # 切割文件路径以及后缀
        df = pd.read_csv(self.result_file_path, encoding='utf-8', dtype='object')
        df.to_excel(f"{filename_prefix}.xlsx", index=False)
        print("csv 转 xlsx 成功!\n", end='')

    def runs(self, keyword_list):
        self.create_csv_file()
        token = self.get_token()
        self.headers['token'] = token
        for keyword in keyword_list:
            self.search_salary(keyword=keyword)
            time.sleep(0.25)
        self.csv_save_as_xlsx()


if __name__ == '__main__':
    keywords_list = [
        'Python', 'Java', 'Php', 'JavaScript', 'Go', 'R语言', 'MATLAB', 'C++', 'C#', '后端', '前端', '算法', '人工智能',
        '软件测试', 'IT运维', '数据库', 'VisualBasic'
    ]  # 需要搜索的关键词
    obj = OfferShow()
    obj.runs(keywords_list)

总结

以上就是今天要讲的内容,本文仅仅简单介绍了微信小程序Spider的基本流程,也留下了一些bug,不过最后是拿到了想要的数据,关于其他的微信小程序Spider案例,请来我的主页查看;文章来源地址https://www.toymoban.com/news/detail-796304.html

到了这里,关于微信小程序 Spdier - OfferShow 反编译逆向(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【微信小程序】HBuilderX新建微信小程序编译报错,提示工具的服务端口已关闭。要使用命令行调用工具,请在下方输入 y 以确认开启,或手动打开工具 -> 设置 -> 安全设置,将服务端口开启。

    今天初学uniapp框架,想尝试开发一个微信小程序,用HBuilderX新建了一个空白的模板程序,编译运行后报错如下: [微信小程序开发者工具] [error] IDE service port disabled. To use CLI Call, please enter y to confirm enabling CLI capability, or manually open IDE - Settings - Security Settings, and set Service Port On

    2024年02月11日
    浏览(39)
  • 微信小程序逆向解密

    WeChatAppEx.exe 版本:2.0.6609.4 以融智云考学生端为例。 网上已经有关于微信小程序解密的非常优秀的文章,本着学习的目的便不参考相关内容。 笔者水平实在有限,如发现纰漏,还请读者不吝赐教。 工具:火绒剑 首先看看打开一个小程序微信做了点什么,对微信进行火绒行为

    2024年02月11日
    浏览(49)
  • 微信小程序逆向

    微信小程序逆向 大致思路:抓包分析–加密参数查找–小程序源码获取–分析加密逻辑 返回结果json中,data都是加密数据,初看一看为base64。 微信包名:com.tencent.mm 小程序源码:/data/data/com.tencent.mm/MicroMsg/项目/appbrand/pkg 我用的夜神模拟器(nox_adb): ls -l 查看时间 发现aaba04b

    2024年02月16日
    浏览(45)
  • 微信小程序逆向分析

    WeChatAppEx.exe 版本:2.0.6609.4 以融智云考学生端为例。 网上已经有关于微信小程序解密的非常优秀的文章,本着学习的目的便不参考相关内容。 笔者水平实在有限,如发现纰漏,还请读者不吝赐教。 如涉及侵权,请联系作者处理。 工具:火绒剑 首先看看打开一个小程序微信

    2024年01月16日
    浏览(38)
  • 微信小程序逆向之终极教程

    (1)手机或者模拟器打开USB调试,adb进入下面目录 打开小程序,adb命令行内使用 ls -l 语句查看时间最新的就是该小程序匿名存放wxapkg包的位置。如: 打开新的cmd使用下面命令,把wxapkg包存放位置推到当前电脑的D盘下 使用还原工具即可:https://download.csdn.net/download/weixin_511

    2024年02月16日
    浏览(45)
  • 微信小程序逆向踩坑日记

    1、首先解包,用UnpackMiniApp.exe进行解密,报错:小程序ID获取失败,无法解密。  解决方法:用的另外一个大佬的解密工具(听说只有电脑的有加密,手机的没有,如果加密失败,可以尝试才模拟器上找到对应的小程序包直接进行反编译)。https://codeload.github.com/superBiuBiuMan/

    2024年02月16日
    浏览(43)
  • 微信小程序前端加解密逆向分析

    某小程序渗透测试项目,测试时发现请求包内容进行了加密 小程序文件目录: 使用网易Mumu模拟器,开启root权限,安装手机微信并访问指定小程序,然后打开RE文件管理器,在 data/data/com.tencent.mm/MicroMsg 会生成一个md5加密命名的文件夹,在该文件夹下的 appbrand/pkg 目录下找到

    2024年02月05日
    浏览(56)
  • 逆向获取微信小程序源码教程

    最近看上了一个小程序,想着走走捷径,以下是我的步骤。 1.安装安卓模拟器,我用的是夜神   2.拿包 打开微信,运行微信小程序,然后打开文件管理器,根据时间顺序定位到小程序目录 /data/data/com.tencent.mm/MicroMsg/{{一串32位的16进制字符串名文件夹}}/appbrand/pkg/{{随机名}}_{{今

    2024年02月10日
    浏览(57)
  • Android Spider JDAX-GUI 反编译工具下载使用以及相关技术介绍

    反编译工具有很多种,我推荐JADX,后续有更好的反编译工具我会继续补充 jadx 本身就是一个开源项目,源代码已经在 Github 上开源了 官方地址:https://github.com/skylot/jadx zip下载地址:https://github.com/skylot/jadx/releases/tag/v1.4.4 Windows系统我建议走上方的zip下载链接进行下载 Java 1.8

    2023年04月08日
    浏览(43)
  • 微信小程序编译.wxml文件编译错误

    [ WXML 文件编译错误] ./pages/mine/wallet.wxml Bad value with message 1 | view 刚开始找了半天都没发现错误,后面才发现原来是我写页面的时候,插值语法忘记换成后端传过来的数据了, 无语子- - 。 把插值语法中的中文改掉就不会报错了,不过不同原因都会报这个错误,错误原因大部分

    2024年02月15日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包