【爬虫逆向分析实战】某笔登录算法分析——本地替换分析法

前言

作者最近在做一个收集粉币的项目,可以用来干嘛这里就不展开了😁,需要进行登录换算token从而达到监控收集的作用,手机抓包发现他是通过APP进行计算之后再请求接口的,通过官网分析可能要比APP逆向方便多,但是通过这几天的观察我并没有头绪,这篇文章草稿创建了接近一个月了,无从下笔,借助了人工智能也没有达到效果,可见它的难度不一般(也可能是我JS基础太过薄弱的原因),本次我们用一种分析方法慢慢的瓦解击破他的层层逻辑!

JS启动分析

这里从网站入手,原因如下:

  • 没有验证码
  • JS结构清晰

在这里插入图片描述
观察不难发现,密码是被加密的
在这里插入图片描述
必定是通过js进行加密的,我们查看启动器
在这里插入图片描述
发现有以下几个关键JS
在这里插入图片描述
第一感觉是,main为主方法,其他的是用来调用的,encrypt应该是用于加密的方法,通过上面的启动器证实了main.js的确是优先启动的

找到main.js搜索password
密码通过this.encrypt()进行加密的
在这里插入图片描述

var n = {
phone: this.phone,
verification: this.verification,
password: this.encrypt(this.password)
};

找到encrypt()方法

encrypt(n) {
return window.encrypt(this.publicKey, n)
}

需要用到一个参数publicKey
在这里插入图片描述
到这里我们基本搞清楚了,登录时将原密码,进行调用window.encrypt(this.publicKey, n)加密

猜想

猜测n为原密码,如何证实呢?有很多人想说观察代码的调用,这当然可以,但如果是复杂的代码或者加密的你还能看吗?
这里用了一个浏览器自带的功能本地替换,可以无视代码加密,为什么这么说,因为代码加密最后还是要被执行,不能执行的代码加密了有啥用呢??

我们找到main.js将n弹窗显示

     encrypt(n) {alert(n);return encrypt(this.publicKey, n)}

在这里插入图片描述
替换到本地启用后,我们进行登录模拟,看看有没有效果?
在这里插入图片描述
在这里插入图片描述
这里将我的登录密码弹出来了,猜想正确!

顺藤摸瓜

有了刚刚的思想,我们直接找encrypt.js,因为在main.js中最后调用了

 return encrypt(this.publicKey, n)

而在main.js中没有其他方法了 ,在encrypt.js我们找到了相关方法

 av.encrypt = function(aG, z) {var t = new N();t.setPublic(a(aG), "10001");return ai(t.encrypt(z))}

代码是否运行到这里,和刚刚一样验证一下就可以了
在这里插入图片描述

发现又调用了新的方法ai(t.encrypt(z))

 function ai(aG) {var z;var aH;var t = "";for (z = 0; z + 3 <= aG.length; z += 3) {aH = parseInt(aG.substring(z, z + 3), 16);t += ad.charAt(aH >> 6) + ad.charAt(aH & 63)}if (z + 1 == aG.length) {aH = parseInt(aG.substring(z, z + 1), 16);t += ad.charAt(aH << 2)} else {if (z + 2 == aG.length) {aH = parseInt(aG.substring(z, z + 2), 16);t += ad.charAt(aH >> 2) + ad.charAt((aH & 3) << 4)}}while ((t.length & 3) > 0) {t += Y}alert(t);return t}

我们在修改代码将t进行弹窗显示,重新来一遍整个登录过程,观察最后的加密密码是否与请求的一致

模拟登录测试

在这里插入图片描述
在这里插入图片描述
经过对比是一致的,由于我们的环境是python,接下来借助GPT进行代码转换

代码转换

通过将涉及到的函数调用方法进行罗列,通过人工智能改写

var publicKey='ANKi9PWuvDOsagwIVvrPx77mXNV0APmjySsYjB1/GtUTY6cyKNRl2RCTt608m9nYk5VeCG2EAZRQmQNQTyfZkw0Uo+MytAkjj17BXOpY4o6+BToi7rRKfTGl6J60/XBZcGSzN1XVZ80ElSjaGE8Ocg8wbPN18tbmsy761zN5S';
var n='密码'
encrypt(publicKey, n)encrypt(aG, z) {var t = new N();t.setPublic(a(aG), "10001");return ai(t.encrypt(z))}function a(aI) {alert("经过");var aG = "";var aH;var t = 0;var z;for (aH = 0; aH < aI.length; ++aH) {if (aI.charAt(aH) == Y) {break}v = ad.indexOf(aI.charAt(aH));if (v < 0) {continue}if (t == 0) {aG += aF(v >> 2);z = v & 3;t = 1} else {if (t == 1) {aG += aF((z << 2) | (v >> 4));z = v & 15;t = 2} else {if (t == 2) {aG += aF(z);aG += aF(v >> 2);z = v & 3;t = 3} else {aG += aF((z << 2) | (v >> 4));aG += aF(v & 15);t = 0}}}}if (t == 1) {aG += aF(z << 2)}return aG}function ai(aG) {// alert(aG);var z;var aH;var t = "";for (z = 0; z + 3 <= aG.length; z += 3) {aH = parseInt(aG.substring(z, z + 3), 16);t += ad.charAt(aH >> 6) + ad.charAt(aH & 63)}if (z + 1 == aG.length) {aH = parseInt(aG.substring(z, z + 1), 16);t += ad.charAt(aH << 2)} else {if (z + 2 == aG.length) {aH = parseInt(aG.substring(z, z + 2), 16);t += ad.charAt(aH >> 2) + ad.charAt((aH & 3) << 4)}}while ((t.length & 3) > 0) {t += Y}alert(t);return t}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01-使用Git操作本地库,如初始化本地库,提交工作区文件到暂存区和本地库,查看版本信息,版本切换命令等

Git的使用 概述 Git是一个分布式版本控制工具, 通常用来管理项目中的源代码文件(Java类、xml文件、html页面等)进行管理,在软件开发过程中被广泛使用 Git可以记录文件修改的历史记录并形成备份从而实现代码回溯, 版本切换, 多人协作, 远程备份的功能Git具有廉价的本地库,方便…

colorThief.js获取图片主色调,用来做banner的背景不错

colorthief - npm 视频教学 图片调色盘【渡一教育】_哔哩哔哩_bilibili 官方说明 Color Thief

syslog定期rotate和限制其size的配置方法ubuntu上

1。 修改 “/etc/logrotate.d/rsyslog” &#xff08;解决权限问题和添加大小限制&#xff09; 添加&#xff1a;su root syslog 和 size <最大的size> 例如 200M /var/log/syslog {su root syslogrotate 7dailymissingoknotifemptydelaycompresscompresssize 500Kpostr…

开源图床Qchan本地部署远程访问,轻松打造个人专属轻量级图床

文章目录 前言1. Qchan网站搭建1.1 Qchan下载和安装1.2 Qchan网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar云端设置2.2 Cpolar本地设置 3. 公网访问测试总结 前言 图床作为云存储的一项重要应用场景&#xff0c;在大量开发人员的努力下&#xff0c;已经开发出大…

1094.拼车

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;1094. 拼车 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 第一次遍历原数组获得每个站点有多少人上车或下车并将数据存放在 stops 数组中。第二次遍历 stops 数组计算每个站点是否超出容量…

如果你想成为一名提示词工程师(Prompt Engineer),这款工具你不能错过

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 前言 我们知道&#xff0c;如果想要通过AI得到更好更精确的答案&#xff0c;那么提示词Prompt的好坏至关重要。 因此&#xff0c;提示词工程师这个岗位应运而出。…

第一节:认识微服务

一、微服务技术对比 Dubbo SpringCloudSpringCloudAlibaba注册中心zookeeper、Redis Eureka、ConsulNacos、Eureka服务远程调用Dubbo协议Feign&#xff08;http协议&#xff09;Dubbo、Feign配置中心无SpringCloudGateway、ZuulSpringCloudConfig、Nacos服务网…

qemu网络通信

TAP&#xff08;官网参考地址&#xff09; TAP&#xff0c;即Tunneling traffic access point&#xff0c;是一种在Linux上使用的虚拟网卡技术&#xff0c;它可以为应用程序提供安全的网络连接。可以利用TAP搭建桥接网络&#xff0c;bridge两端分别为host和qemu虚拟机。 安装…

力扣 790. 多米诺和托米诺平铺(一维dp)

题目描述&#xff1a; 有两种形状的瓷砖&#xff1a;一种是 2 x 1 的多米诺形&#xff0c;另一种是形如 "L" 的托米诺形。两种形状都可以旋转。 给定整数 n &#xff0c;返回可以平铺 2 x n 的面板的方法的数量。返回对 109 7 取模 的值。 平铺指的是每个正方形都…

具有标记和笔记功能的文件管理器TagSpaces(续)

熟悉老苏的读者都知道&#xff0c;老苏通常只是推荐软件&#xff0c;并简单介绍如何运行它们&#xff0c;而具体的功能则需要读者自行研究。这种方式让老苏能够在工作之余&#xff0c;还能保持每周发布 4 篇的更新。 然而&#xff0c;这种方式也存在明显的缺点。由于老苏没有深…

通义千问 Qwen-7B-Chat-Int4 模型本地化部署

如需在本地或离线环境下运行本项目&#xff0c;需要首先将项目所需的模型下载至本地&#xff0c;通常开源 LLM 与 Embedding 模型可以从 HuggingFace 下载。 以本项目中默认使用的 LLM 模型 THUDM/ChatGLM2-6B 与 Embedding 模型 moka-ai/m3e-base 为例&#xff1a; 下载模型…

WordPress采集器自动采集发布的工具

WordPress作为最受欢迎的内容管理系统之一&#xff0c;其强大的功能和灵活性使其成为许多网站、博客和电子商务平台的首选。WordPress采集器自动采集发布内置采集规则是一项备受关注的功能&#xff0c;让用户可以轻松收集并发布内容。WordPress采集器自动采集发布内置采集规则的…

「Verilog学习笔记」自动贩售机1

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 自动贩售机中可能存在的几种金额&#xff1a;0&#xff0c;0.5&#xff0c;1&#xff0c;1.5&#xff0c;2&#xff0c;2.5&#xff0c;3。然后直接将其作为状态机的几种状…

面试数据库八股文十问十答第二期

面试数据库八股文十问十答第二期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1.MySQL的主从复制 MySQL的主从复制是什么&#xff1f;MySQL主从复制是一种常见的…

11.28~11.29基本二叉树的性质、定义、复习;排序算法;堆

完全二叉树&#xff08;Complete Binary Tree&#xff09;是一种特殊的二叉树结构&#xff0c;它具有以下特点&#xff1a; 所有的叶子节点都集中在树的最后两层&#xff1b;最后一层的叶子节点都靠左排列&#xff1b;除了最后一层&#xff0c;其他层的节点数都达到最大值。 …

网络基础:网络通信基础

目录 1.网络通信基本单位 2.网络通信基础 3.调制技术 4.解调技术 5.载波调制 6.编码技术 6.1基本编码 6.2应用型编码 1.曼彻斯特编码 2.差分曼彻斯特编码 3.MLT-3编码 4.mB/nB编码 1.网络通信基本单位 Byte&#xff08;字节&#xff09;是用于计量存储容量的一种…

nginx怎么携带参数重定向

在NGINX中&#xff0c;可以使用location指令和rewrite指令来携带参数进行重定向。 首先&#xff0c;可以使用location指令根据请求的URL匹配到一个特定的位置块。然后&#xff0c;在位置块中使用rewrite指令将请求重定向到另一个URL&#xff0c;并携带参数。 下面是一个示例配…

【开发PaaS】基于Postgresql的开发平台Supabase

Supadase是开源的。我们选择可扩展的开源工具&#xff0c;使其易于使用。 Supadase不是Firebase的1对1映射。虽然我们正在构建Firebase提供的许多功能&#xff0c;但我们不会以同样的方式进行&#xff1a; 我们的技术选择大不相同&#xff1b;我们使用的一切都是开源的&#…

xilinx系列FPGA基于VIVADO的pin delay列表生成说明

目录 1 概述2 示例平台3 操作说明4 注意事项 xilinx系列FPGA基于VIVADO的pin delay列表生成说明 1 概述 本文用于讲诉xilinx系列FPGA基于VIVADO的pin delay列表生成说明&#xff0c;以及一些注意事项&#xff0c;为FPGA设计人员探明道路。 Pin delay 即FPGA内部die到pin的延时…

L1-009:N个数求和

目录 ⭐题目描述⭐ ⭐分析 ⭐程序代码 运行结果 ⭐文案分享⭐ ⭐题目描述⭐ 本题的要求很简单&#xff0c;就是求N个数字的和。麻烦的是&#xff0c;这些数字是以有理数分子/分母的形式给出的&#xff0c;你输出的和也必须是有理数的形式。 输入格式&#xff1a; 输入第一行给出…