- 参考 Boris 大佬的这篇文章
- 参考崔佬的这篇文章
- 生成
requirements.txtpipreqs reverse_practice --encoding=utf8 --force
- 由于
node_modules太大,且默认是可以被上传的。所以我们需要创建一个.gitignore文件,目的是忽略上传某个文件或者文件夹。 - 步骤如下:
创建
.gitignore文件cd reverse_practice touch .gitignore创建好文件之后,在里边添加需要忽略的目录和文件即可
- 忽略规则如下:
target //忽略这个target目录 angular.json //忽略这个angular.json文件 log/* //忽略log下的所有文件 css/*.css //忽略css目录下的.css文件
- 克隆本项目至本地
- git clone git@github.com:liyf-code/reverse_practice.git
- 准备
python运行环境(version: 3.9.1)- cd reverse_practice
- pip3 install -r requirements.txt
- 准备
nodejs运行环境(version: 14.17.3)- cd reverse_practice
- npm install
- curl转python代码,提高开发效率: curlconverter
- 1024程序员开发工具箱: 1024tools
个别网站的逆向思路及步骤,记录在py文件中
| 网站名称 | 网站url地址 | 文档 | 项目位置 |
|---|---|---|---|
| 欧科云链 | 链接 | 点击跳转 | oklink |
| 房天下 | 链接 | 点击跳转 | passport_fang |
| 企名片 | 链接 | 点击跳转 | qimingpian |
| 天翼云 | 链接 | 点击跳转 | ctyun |
| 猿人学 | 链接 | yuanrenxue | |
| 巨潮资讯-数据中心 | 链接 | webapi | |
| MyToken | 链接 | 点击跳转 | mytokencap |
| 新榜资讯 | 链接 | newrank | |
| 粉笔网 | 链接 | fenbi | |
| 福建省公共资源交易-交易信息 | 链接 | 点击跳转 | ggzyfw_fujian |
| 犀牛数据 | 链接 | 点击跳转 | xiniu |
| 全国建筑市场监管公共服务平台 | 链接 | 点击跳转 | jzsc |
| 得物(m.poizon.com) | 链接 | 点击跳转 | dewu |
| 网易云 | 链接 | music163 | |
| 易车网 | 链接 | 点击跳转 | yiche |
| 巴比特-快讯 | 链接 | 点击跳转 | 8btc |
| 加密解密-APP喵 | 链接 | appmiu | |
| 艺恩 | 链接 | endata | |
| 中国招投标公共服务平台 | 链接 | ctbpsp | |
| 37网手游 | 链接 | 点击跳转 | my_37 |
| 中国·国家地名信息库 | 链接 | dmfw_mca | |
| 看准网 | 链接 | kanzhun | |
| 崔佬搭建的练习网站 | 链接 | scrape_spa2 | |
| 浙江省核酸采样点查询 | 链接 | 点击跳转 | hsddcx |
| 酷我音乐 | 链接 | music_kuwo | |
| 领导留言板 | 链接 | 点击跳转 | liuyan |
| 全国核酸检测机构查询 | 链接 | 点击跳转 | bmfw |
| 美食优惠聚合 | 链接 | 点击跳转 | waitpay |
| 查策网 | 链接 | chacewang | |
| 裁判文书响应数据解密 | 链接 | cpws | |
| 搜狐详情页图片地址解密 | 链接 | 点击跳转 | souhu |
| 黑猫投诉 | 链接 | tousu_sign | |
| 猎聘 | 链接 | 点击跳转 | liepin |
以下汇总常用的hook代码,来源于公众号文章 JS 逆向之 Hook,吃着火锅唱着歌,突然就被麻匪劫了!
-
Hook cookies
(function () { 'use strict'; var cookieTemp = ''; Object.defineProperty(document, 'cookie', { set: function (val) { if (val.indexOf('__dfp') != -1) { debugger; } console.log('Hook捕获到cookie设置->', val); cookieTemp = val; return val; }, get: function () { return cookieTemp; }, }); })();
-
Hook headers
(function () { var org = window.XMLHttpRequest.prototype.setRequestHeader; window.XMLHttpRequest.prototype.setRequestHeader = function (key, value) { if (key == 'safe') { debugger; } return org.apply(this, arguments); }; })();
-
Hook URL
(function () { var open = window.XMLHttpRequest.prototype.open; window.XMLHttpRequest.prototype.open = function (method, url, async) { if (url.indexOf("login") != -1) { debugger; } return open.apply(this, arguments); }; })();
-
Hook JSON.stringify
(function() { var stringify = JSON.stringify; JSON.stringify = function(params) { console.log("Hook JSON.stringify ——> ", params); debugger; return stringify(params); } })();
-
Hook JSON.parse
(function() { var parse = JSON.parse; JSON.parse = function(params) { console.log("Hook JSON.parse ——> ", params); debugger; return parse(params); } })();
-
Hook eval
(function() { // 保存原始方法 window.__cr_eval = window.eval; // 重写 eval var myeval = function(src) { console.log(src); console.log("=============== eval end ==============="); debugger; return window.__cr_eval(src); } // 屏蔽 JS 中对原生函数 native 属性的检测 var _myeval = myeval.bind(null); _myeval.toString = window.__cr_eval.toString; Object.defineProperty(window, 'eval', { value: _myeval }); })();
