js逆向学习-1 逆向rsa简单加密

news/2024/12/11 14:43:40/文章来源:https://www.cnblogs.com/ArcherCY/p/18589602

RSA加密

Rsa加密包含一个key 和一个mode这个mode 默认 10001,也可以修改

观察发送的数据

首先点击登录
选择xhr这个筛选模块,可以看到这里面只有这个check的数据请求,

然后查看发送的数据,可以看到这里的密码是进行加密的

然后记录这些值

打断点

知道了请求和加密的数据,现在就是去断点调试这个流程
首先点击这个jquery-2.14,然后就会出现所有的栈,一般就先给send下一个断点

之后重新登录就会断下

之后看send下面的栈去找加密相关的
看到这里就可以看到是RSA的加密

补代码

接下来就是把加密的代码给弄出来也就是

var public_key="00bdf3db924714b9c4ddd144910071c282e235ac51371037cf89fa08f28b9105b6326338ed211280154c645bf81bae4184c2b52e2b02b0953e7aa8b25a8e212a0b";var public_length="10001";var rsa = new RSAKey();rsa.setPublic(public_key, public_length);var res = rsa.encrypt($('#password').val());

然后就是找这个代码缺什么就去找什么
首先就是public_key这个代码直接给出来的,mode也就是这里的length给出来的,然后下面的就是RSAKey(),这是new出来的对象,是一个原型对象,如果是实例对象的话就会比如这样命名

rsa.setpublic=function(){}

但是这里面并没有找到这个代码,所以下面的setpublic方法就是原型方法,
直接把鼠标放到这个函数上点击就会跳到函数的位置

可以看到这里并没有这个setpublic的函数,那么只能在原型里面,打开右边的隐藏分离式控制台,然后输入RSAKey.prototype 这个就是对象的原型,也可以直接在代码里面搜索到这个setpublic的方法


点击这个setpublic方法就会跳转到具体的函数

把这个js代码全部复制,放到刚刚摘出来的代码最顶端

用google浏览器新建一个js脚本

然后将这个补全的代码全部放到这个创建的脚本文件里面,点击运行,发现会报错

test:7 Uncaught ReferenceError: BigInteger is not defined


然后点击这个报错的位置就会跳转到报错代码行

然后去源代码里面找到这个代码行打上断点,寻找具体的代码也就是biginterger的位置
这个代码是从rsa.js复制的,那么就得去这个文件的相同位置打断点

然后运行网页,查看是否断住

然后把鼠标放到这个biginterger的位置就会出现这个代码的定义位置

点击跳转发现是跳转到了jsbn.js文件,然后把这个jsbn.js代码复制到我们创建的test.js的最上面,运行如果遇到这个错误

Uncaught TypeError: $(...).val is not a function

就修改这个代码

var res = rsa.encrypt($('#password').val());

var res = rsa.encrypt('123');

因为他解析步道这个#password,或者直接在刚刚源网页新开一个界面进行调试也可以
然后运行之后报错

jack:51 Uncaught ReferenceError: SecureRandom is not defined

然后使用相同的方法去找代码的具体位置
打上这个断点然后运行网页会断住

然后跳转到具体的代码,发现又是一个新的js文件,只有60几行,直接复制到刚刚创建的js文件的最上面

运行之后又有新的报错

rng_psize is not defined

然后点击这个报错位置,这里可以看到并不是函数和对象,而是两个变量之间的对比,定义变量一般用let或者var,我们直接去原网页进行全局搜索这个变量

然后就把这个定义的变量写入到我们创建的代码里面

如下

然后运行还是会报错

这个不是变量,就直接点击这个函数位置,然后去源代码全局搜索打上断点,直接定位代码具体文件位置


点击跳转

然后把这个文件代码直接复制到创建的文件最上面,直接运行

就能得到进过rsa加密的值

调试本地运行

直接拿到在线网站进行运行会报错

在进行本地运行调试的方法有两种
1 删除代码 删除的代码没有参与最后的计算
2 补上代码 参与了本地计算或者提交到服务器
然后我们开始去找到报错的代码进行分析

 if(navigator.appName == "Netscape" && navigator.appVersion < "5" && window.crypto) {// Extract entropy (256 bits) from NS4 RNG if availablevar z = window.crypto.random(32);for(t = 0; t < z.length; ++t)rng_pool[rng_pptr++] = z.charCodeAt(t) & 255;}  

可以直接扔给gpt进行读代码
这段代码的意思就是去检查是否浏览器的名字是否是Netscape,这个是很老的浏览器,并且检查浏览器的版本是否小于5,并且检查是否支持window.crypto对象,如果都满足就调用crypto.random(32)生成一个32字节长度的随机序列,遍历 z 中的每个字符,通过 charCodeAt(t) 获取其 ASCII 值,使用 & 255 保证结果在 0-255 的范围内(一个字节),将处理后的随机字节存入 rng_pool 数组中,rng_pptr 是一个指针,表示数组的当前写入位置,并递增。这段代码仅适用于非常古老的浏览器,并且在其他浏览器中为了兼容性,也不会被运行,所以可以删除

然后删除后执行又爆了这个错误

然后去定位代码段是这一段

if(j_lm && (navigator.appName == "Microsoft Internet Explorer")) {BigInteger.prototype.am = am2;dbits = 30;
}
else if(j_lm && (navigator.appName != "Netscape")) {BigInteger.prototype.am = am1;dbits = 26;
}
else { // Mozilla/Netscape seems to prefer am3BigInteger.prototype.am = am3;dbits = 28;
}

这个就是navigator.appName是否为设定的值然后执行对应的代码,如果不清楚流程,可以在这里写上debugger;然后运行,查看运行的结果,我用google进行测试

当运行到这个判断的时候就会出现这些结果就可以查看运行的流程,运行之后发现流程是走的第三步

  BigInteger.prototype.am = am3;dbits = 28;

那么直接把其他的代码删掉,直接运行

运行之后就不会报错,输入res变量就能得到加密后的结果

总结

流程就是找到加密的地方,然后先给请求打上断点,之后找到加密的代码,然后再看这些代码里面涉及的对象等其他变量是否存在,如果不存在就使用断点或者全局搜索去找到对象所在的js,然后复制整个代码到之前复制的加密代码的最上方,接下来添加一个测试js脚本,将代码复制进去并运行,根据报错进行寻找代码位置,然后复制到最上面,一直到没有报错为止,最后本地调试就根据报错进行删除和补代码,需要分析这个代码的流程,如果并没有参与到最后运行就直接删除吗,如果涉及到了,就直接在浏览器环境断点调试,保留用到的代码,最后尝试运行js代码

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

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

相关文章

瑞视通调试

1,红黄接电源正,黑接电源负 2,屏幕插头接VGA3.记录好卡号3.插入流量卡SIM插槽

添加时content-type要求为json格式

负载类似为 实际应该是:解决: headers: { content-type: application/json }export function addType(data) {return request({url: GLOBAL.LOGIN_SERVER + system/dict/type,method: post,data: data,headers: { content-type: application/json }}); }

智慧工地算法视频分析服务器关于视频监控系统比较常见的故障与解决方法

在现代视频监控系统中,摄像头作为捕捉图像的前端设备,其性能和稳定性至关重要。然而,即使摄像头本身性能卓越,整个监控系统的运行也可能因为网络、供电、兼容性等多种因素受到影响。为了确保监控系统能够稳定运行,及时排查和解决可能出现的问题是必不可少的。 本文将为您总…

双十二来袭!电商企业项目管理挑战如何解决?看板软件的优势凸显

双十二作为电商年度大促的重要节点,给电商企业带来了前所未有的项目管理挑战。究竟该如何破解呢?许多电商企业开始寻求高效的项目管理工具,看板软件的优势逐渐凸显。据商务部发布的最新数据,仅在家电领域,截至12月7日24时,已有2989.3万消费者参与了此次活动,共计购买八大…

IT运维实践:东方通V6简单上手高可用搭建

概述: TongHttpServer是一款高性能的服务代理中间件,支持OSI四层七层协议,可作为静态资源服务器、正向代理服务器、反向代理服务器、负载均衡服务器使用,支持带权轮询、IP哈希、最小连接、随机、哈希等多种负载均衡算法,满足企业构建高可用、高扩展性、高性能的应用服务集…

如何解决文档协作中的常见问题?

在现代企业中,文档协作管理已成为推动团队合作、提高工作效率和确保信息流畅传递的重要手段。随着全球化、远程办公以及数字化转型的不断推进,传统的文档管理模式已无法满足复杂的协作需求。团队成员间如何高效共享、编辑、修改以及反馈文档,成为了工作中亟待解决的问题。本…

论文解读《LightRAG: Simple and Fast Retrieval-Augmented Generation》

博客:https://learnopencv.com/lightrag 视频:https://www.youtube.com/watch?v=oageL-1I0GE 代码:https://github.com/HKUDS/LightRAG 论文:https://arxiv.org/abs/2410.05779 ​ - 时间:2024.10 ​ - 单位:University of Hong Kong、Beijing University of Posts and …

AspNetCore全局异常处理

AspNetCore全局异常处理 在开发ASP.NET Core应用程序时,全局异常处理是一个重要的概念。它允许我们集中处理应用程序中未捕获的异常,确保应用程序的稳定性和用户体验。 1. 为什么需要全局异常处理 全局异常处理的目的是为了:统一错误响应:确保所有错误都以统一的格式返回给…

一文详解ICT行业数字化转型与CRM应用解决方案

一、ICT行业发展趋势分析 过去二十年,ICT(信息与通信技术)行业完成了从传统通信向物联网、云计算、数字能源等领域深度融合的周期性转变,其涵盖的广泛的技术与服务,被用于处理、存储、传输和检索各种形式的信息。形成了由“云-网-安-算-存-端”组成的行业全产业链,其中的每个…

IO介绍-中

系统接口 块设备接口块设备:数据的存取和传输都是以数据块为单位的设备。典型的块设备是磁盘。该设备的基本特征是传输速率高,另一特征是可寻址,即能指定数据的输入源地址及输出的目标地址,可随机读写。磁盘设备通常采用DMA方式。 隐藏了磁盘的二维结构 将抽象命令映射为低…

用IDEA编译jar文件

1、选择项目结构2、改一下输出目录,再创建清单3、这里最好不换目录,直接点确定4、点文件夹按钮选择主类把右边编译输出拖到左边,然后点确定5、编译Artifacts选构建即可输出

ABB机械手IRB7600减速机维修间隙过大

要判断ABB机器人减速机是否需要更换轴、轴承或齿轮,可以从以下几个方面进行评估: - 噪音水平:如果减速机在运行时噪音突然增大,可能是部件磨损或损坏的迹象。 - 温度升高:如果ABB IRB7600机械手减速机在运行过程中温度升高超过制造商的建议值,可能是由于过载或…