1. 为什么要做逆向


正常我们访问一个网站是由html css js 文件组成的,下图是某网站的正常访问。
当然我们也可以看到是谁调用了这个请求执行了什么(2图为某网站登录链接)

分析URL

我们可以看到这个链接他的请求参数,传输方式等。我们可以看到左图和右图的差距;同样的请求方式和fromdata会有这样的差距。如果有些经验的同学就会去找相关js了

如何快速查找js

  • 我们可以在搜索查找或者链接js调用中查找相关js
  • 可以看到出现了两个搜索到的结果

如何分析调用及复写js

如何准确无误的找到相关加密以及调试

我们在找到相关js后需要去找到一些疑似加密的函数,比如哈希,base64等
还可以从链接调用开始着手,这都是可以的。并没有一定哪种更加简便。这是其中的一个加密函数被我提取出来了。像这种加密很少的js我们可以用python复写,但是一旦加密函数过于庞大就需要将js抽取出用python+node或是webdriver来执行相关函数。

python复写hmac加密

import hmac
def get_singa_true(timestamp):sha1 = hmac.new("d1b964811afb40118a12068ff74a12f4".encode('utf8'), digestmod='sha1')sha1.update("password".encode('utf8'))sha1.update("c3cef7c66a1843f8b3a9e6a1e3160e20".encode('utf8'))sha1.update("com.zhihu.web".encode('utf8'))sha1.update(str(timestamp).encode('utf8'))return sha1.hexdigest()

另外一个混淆加密函数的查找

查找方法方式和调试技巧


  • 下面是我提取出的另外一个加密函数大概有400多行

  • 这个函数因为使用了windows对象,所以构造了相关的函数

这么大的混淆加密js我们如何处理呢?

  • 400行的混淆js用python复写其实也不是不能,但是开发时间和破解效率都是一个很关键的问题

  • 如果说开发时间紧急,那么此时我们就需要使用其他的方式来执行这段js

**第一种:**使用selenium+webdriver来执行本地文件,然后调用本地html上的js运行
**第二种:**使用python下的库exec.js来调用node来执行

如何验证这个混淆加密函数是否有效?

我们可以将这个js函数写到一个空白的html中,再用console.log进行调试。查看是否结果相同


使用node执行混淆js


使用node执行混淆js

上面几图中分别有如下几个坑

  1. 他会判断window对象是否为undifined
  2. 一个浏览器aotb的解码函数,需要从node中找到对应函数
  3. 需要构造一个windows对象,和部分变量;函数

相关代码

测试混淆加密函数

import execjs, osos.environ["EXECJS_RUNTIME"] = "Node"
IMAGE_LIST = [[17, 25.1875], [44, 28.1875], [69, 28.1875], [93, 25.1875], [109, 28.1875], [140, 26.1875],[177, 13.1875]]def get_js(js_location):f = open(js_location, 'r', encoding='UTF-8')line = f.readline()htmlstr = ''while line:htmlstr = htmlstr + lineline = f.readline()return htmlstrdef get_encrypt(ctx, all_args):return ctx.call('get_encrypt', all_args)if __name__ == '__main__':all_args = "client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&grant_type=password&timestamp=1551496362379&source=com.zhihu.web&signature=b92f67a96cc1fde5db2a93ed87a482a6ceda29ee&username=%2B8613252798967&password=123456qwe&captcha=&lang=cn&ref_source=homepage&utm_source="ctx = execjs.compile(get_js('jiami.js'))post_ctx = ctx.call("Q", all_args)print(post_ctx)

倒立图片的验证码坐标

import requests, json, base64,urllib.parse
from io import BytesIO
from PIL import Image
IMAGE_LIST = [[17, 25.1875], [44, 28.1875], [69, 28.1875], [93, 25.1875], [109, 28.1875], [140, 26.1875],[177, 13.1875]]def get_image_addr(img_str):if "," in img_str:img_str = img_str.replace(",", ",")img_list = img_str.split(",")captcha = {"img_size": [200, 44], "input_points": []}for i in img_list:captcha['input_points'].append(IMAGE_LIST[int(i) - 1])return captchaurl = "https://www.zhihu.com/api/v3/oauth/captcha?lang=cn"headers = {"Referer": "https://www.zhihu.com/signup?next=%2F","User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36","x-requested-with": "fetch",}response = session.get(url, headers=headers)print(response.text)response = session.put(url, headers=headers)print(response.status_code)content = json.loads(response.content.decode())image = Image.open(BytesIO(base64.b64decode(content['img_base64'])))image.show()captcha = input("请输入图片验证码 倒立图片请输入第几个文字以,为间隔(输入数字)")image.close()captcha = get_image_addr(captcha)captcha = urllib.parse.quote(json.dumps(captcha).replace(" ", ""))url = "https://www.zhihu.com/api/v3/oauth/captcha?lang=cn"response = session.post(url, headers=headers, data={"input_text": captcha})print(response.text)

爬虫做js逆向分析的思路相关推荐

  1. QAX答题页面js逆向分析(二)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.通过前端js解密,获取答案 二.通过Python,模拟请求完成自登录到答题的所有操作. 1.引入库 2. 程序结构 ...

  2. Python爬虫之Js逆向案例(6)-某道翻译

    Python爬虫之Js逆向案例(6)-有道翻译 声明:某道翻译加密逆向分析仅用于研究和学习,如有侵权,可联系删除 大家好,距离上次分享js逆向案例已经有一个月了,在这期间每次在快要揭秘出来时.整理文章 ...

  3. 轻JS逆向分析“攒经验”项目之某交易所Sign加密参数逆向分析

    最近忙着在搞大数据相关的东西,没什么太多时间去研究复杂的JS,所以给大家来几个练手的网站"攒攒经验"吧!这次出的系列是<轻JS逆向分析"攒经验"项目> ...

  4. python3爬虫进阶JS逆向学习(十一)

    目的 目的:JS逆向的学习与交流 目标:分析咪咕音乐参数 目标网址:https://music.migu.cn/v3 // 若有侵权,请联系作者删除,谢谢! 思路分析 一.内容概览 二.请求参数分析 ...

  5. Python爬虫之Js逆向案例(2)-某乎搜索

    Python爬虫之Js逆向案例(2)-知乎搜索 声明:某乎加密逆向分析仅用于研究和学习 大家好,今天继续分享关于某乎关键词搜索接口为案例的Js逆向实战.如果你是一名新手,而且还没有来得及看上一篇< ...

  6. JS逆向分析新浪某站登录处RSA加密

    文章目录 前言 RSA加解密 核心思想 Pyhon实现 NoPadding 新浪网实战 JS加密分析 JS函数调试 Py调用脚本 BurCrypto爆破 插件介绍 实战案例 总结 前言 在渗透测试过程 ...

  7. Python爬虫:利用JS逆向抓取携程网景点评论区图片的下载链接

    Python爬虫:利用JS逆向抓取携程网景点评论区图片的下载链接 1. 前言 2. 实现过程 3. 运行结果 1. 前言 文章内容可能存在版权问题,为此,小编不提供相关实现代码,只是从js逆向说一说到 ...

  8. Python爬虫之Js逆向案例(8)-某乎x-zst-81之webpack

    声明:某乎加密逆向分析仅用于研究和学习,如有侵权,可联系删除 大家好,相信各位童鞋通过上期<Python爬虫之Js逆向案例(7)-知hu最新x-zse-96之rpc方案>这篇文章了解了什么 ...

  9. Python爬虫:从js逆向了解西瓜视频的下载链接的生成

    前言 最近花费了几天时间,想获取西瓜视频这个平台上某个视频的下载链接,运用js逆向进行获取.其实,如果小编一开始就注意到这一点(就是在做js逆向时,打了断点之后,然后执行相关代码,查看相关变量的值,结 ...

最新文章

  1. 重磅开源!所有的李航老师《统计学习方法》算法代码实现!!!
  2. 《例说8051:单片机程序设计案例教程》——2-4 指令格式
  3. cmake的使用--目标的编译附源码
  4. 【学术相关】海外博士一般朝九晚五,国内博士动辄十几个小时科研时间。为什么普遍认为海外博士水平比较高?...
  5. sdch: chrome支持的新HTTP传输压缩算法
  6. 利用Python工具进行打包功能
  7. 写作是最好的学习方法
  8. mysql into outfile语法_select into outfile
  9. SAE J1939学习笔记(一)
  10. 李航老师《统计学习方法》第二版第十一章课后习题答案
  11. 人工智能知识全面讲解:最简单的神经元模型
  12. 浅谈中国古代服饰纹样中礼制精神的体现
  13. pyqt5 选择打开文件夹与读取文件夹图片列表
  14. 秋招一个半月流水账+招银网路科技offer
  15. 双稳态电路的两个稳定状态是什么_555时基电路内部结构及其工作原理
  16. python基础螺旋线
  17. 厦门防腐木生产厂家厦门木天木屋运营模拟实盘周记20220915
  18. ZDM2004工具式绘图软件v1.7 for AutoCAD2004 1CD(水电版)
  19. GB9706.1-2007名词解释:电气间隙、爬电距离,绝缘、接地等
  20. MATLAB如何读取文件中的数据(全网最简便)

热门文章

  1. java实现地图导航功能吗_Java web实现百度地图导航
  2. 简单答题系统(判断题)
  3. 常见的树形结构(一)
  4. LibSVM中的松弛变量和惩罚因子
  5. Ubuntu18.04 realsenseD435i深度摄像头外参标定的问题
  6. Batch Normalization + Internal Covariate Shift(论文理解)
  7. IntelliJ IDEA 注册码(phpstorm等IDE)
  8. VMware -- 克隆虚拟机
  9. python 监控手机屏幕_Python 让手机实现监控功能的办法,解决一些困扰一些人很久的比如偷情的信任问题...
  10. 理想世俗化:受挫的年轻一代 未来在哪里