前言自己本身是一个学习两年网络安全的小白师傅,想想两年来都没有系统的学习过,所以将自己的理解与相关的课程做一个结合,以文字+图片的形式呈现给大家。
学习内容【基础入门】第63天:JS应用&算法逆向&三重断点调试&调用堆栈&BP插件发包&安全结合
学习目录1.如何找到加密算法
2.如何逆向加密算法
3.真实案例演示
4.补充
正式开始知识点一:如何找到加密算法首先我们需要认识一个F12的面板。
通过快捷键或者F12都可以快速的进入到这个面板。(这里用的是谷歌,为什么不用其他的浏览器呢?因为其他的我没用明白,每个浏览器按键不同~)
我个人是比较喜欢将停靠侧放在下面的。
因为这样看到的信息最多,也不会遮挡你的页面。
接下来我们需要认识三个东西,作用域,调用堆栈,XHR断点。
不着急,我们结合真实案例来讲讲:
首先点击网络,然后筛选,你想看的数据包
一般数据包都是看这个即可,当然还是建议全部看的,因为有些请求并不是xhr
主要就看三个,标头,荷载,响应。他们三就是:请求头,请求正文、响应包
随便输入一个电话号码以及密码
可以看到,不管是手机号还是密码,都被加密了。这导致的就是这个登录口你没法去使用账号密码爆破。
那怎么解决这个加密呢?最简单的情况就是,他使用了md5加密或者base64加密。这个我们人人都会,直接找个在线网站破解就好了。
但这个网站显然不是这两种的任何一种加密方式(不信可以去试试)
那怎么办?怎么找?有没有简单易上手的方法?
有的有的,先教一种门槛较低的方式,也是我个人觉得最好用的方式。但是教之前我们还需要理解登录框的数据提交逻辑。
那怎么办?怎么找?有没有简单易上手的方法?
有的有的,先教一种门槛较低的方式,也是我个人觉得最好用的方式。但是教之前我们还需要理解登录框的数据提交逻辑
引用小迪:
怎么理解?简单来说,客户端:就是我们自己。服务端:就是网页
我们输入账号密码-> 浏览器接受到我们的账号密码-> 根据js进行加密-> 发送到对方的服务器(网页)
服务器接收数据-> 对我们的数据进行解密-> 判断我们的数据解密后是否正常-> 正常就返回正常结果(否则返回报错)
那么我们需要寻找的是什么呢?我们需要寻找的是:“根据js进行加密-> 发送到对方的服务器(网页)”之间的代码。能理解吧,只要我们在它发送到对方服务器之前拦住它,不就可以截获到它是如何加密的吗?
怎么寻找呢?直接搜接口名字:
那么这里就是搜/Vip/LoginResult
右键这个top,然后点击在所有文件中搜索。如果你在下面区域右键(cf.aliyun.com)的话,就是指定域名,会导致你搜索的JS范围不全。
这个功能就是JS代码的全局搜索功能。
是不是就看到了这里的接口,那么就可以给他打上断点。
在这里进行右键
这样就成功添加了,这个时候我们再点击一下登录试试。
是不是就在这里停下来了,这里的代码是什么意思?ajax其实就是提交数据的函数,那么我们一开始需要找的函数是哪里?
根据js进行加密-> 发送到对方的服务器(网页),那么我们在他提交数据之前打上一个断点,不就可以观察到,它是如何加密数据的吗?
所以现在我们应该向上看,还是向下看?(思考后再看下面的图片)
当然是向上看啊,都说了是之间了~
通过这里查看,原文账号密码是不是有了
那么下面是什么意思呢?看不懂?交给AI。(其实看注释大家也能猜到在干什么吧~)
这行的关键是哪里?encrypt.encrypt(numMobile):调用加密对象encrypt的方法,对手机号进行加密(可能是AES/RSA等算法)。
那接下来怎么办,当然是验证encrypt.encrypt(numMobile)是不是一个加密的算法,numMobile在前面看到了var numMobile = $("#numMobile").val();
那么它其实就只是在做一个声明,numMobile=手机号
知识点二:如何逆向加密算法直接去控制台试试:
有些时候会提示没有声明:
那就全局搜索encrypt,你看这里是不是就有一个var,这就是声明
然后继续这样做就好了
你看,这个加密格式,是不是一模一样。我们是不是就找到了它的加密函数。
那么之后我们要怎么做?是不是只需要将13717045566替换为我们的字典,就可以进行一个正常的爆破了?
主播主播,我不会啊,这要怎么替换?别急,下面会讲,我们得先了解完各个方法。
懂了第一个方法,我们还有第二方法:调用堆栈
这有一个启动器,这里写的是请求调用堆栈。那么看这个的时候,需要注意一个细节:从下往上看,而不是从上往下看。
最下面那个是第一个执行的,最上那个是最后一个执行的。
懂了执行顺序以后,我们就需要寻找执行的方法了。观察调用栈名,你看ajax,我们前面提到过,是提交数据的函数名。Login一看就是登录的函数名,那么我们点击一下Login试试看。
就会成功的发生跳转:
然后我们再按照刚刚的方法进行打断点,是不是就可以找到了加密逻辑了?
知识点三:逆向算法,字典爆破,真实案例接下来还有2种方法:
但另外两种方法将是补充,我们现在学习了,如何找到加密的逻辑。那么接下来应该做什么呢?找到加密的函数,以及利用加密的函数进行解密。
怎么做?
一样的,首先添加断点。然后呢,选择我们加密的函数
鼠标的光标放到选中的函数上:
那么这里就有详细的函数位置了:
点击后会进行跳转:
这里就跳转到函数的位置了,那么为什么说它是加密函数呢?
我们滑动到最下面(文章发布时间是有效的)
看到这个JSEncrypt这个没有,看看之前encrypt是怎么声明的:
然后进行调用:
那么所以我们要调动这个加密函数,是不是其实很简单。
首先将这段内容
全选复制,然后去到一个js的在线网站,或者你们有js环境可以在本地复现:
https://www.wetools.com/js-run
然后学习它的声明方式,是不是就可以成功的对自己的字典进行加密了呢?
什么你说不会?
那我教你一个最简单的方式:
deepseek你好,请你根据这段代码写一个脚本,能将1.txt中的每行内容都根据这个进行加密,加密公钥参数是:***
加密公钥参数在哪?
在这个声明的上面,否则会出现加密格式不一致的情况,就用不了啦。比如同样是两碗水,一碗你加酱油,一碗你加蜂蜜,味道是不同的。
那么代码里那里有用这个公钥呢?
所以发现刚刚的演示的问题没有。刚刚演示没有引用公钥,但格式看起来是不是一样的?
所以,一定要提供正确的公钥,也是逆向算法中很重要的一步,一般都会在前端的js里,因为前端加密嘛
所以正确的演示应该是:
第二种方式呢?就是使用BP插件的一个方式了:
要准备两个东西:
1.js环境
2.本地插件
首先是js环境:https://phantomjs.org/download.html
下载好后配置环境变量:
然后打开cmd,输入:phantomjs
这样就算是成功了
然后下载bp的插件:https://github.com/c0ny1/jsEncrypter
然后进行导入:
选择jar文件点击确定即可。
这样就ok了,然后打开你解压的插件的目录:
找到这个文件打开它:
一步是加密算法的js脚本,一步是处理函数:
怎么做?很简单的啦,我们前面不是找到了一个加密算法的js文件嘛?直接另存为:
存储到你下载插件的那个文件夹
这样就引用成功啦,那怎么编写调用加密函数进行的代码呢?
保存,以后呢,就要运行了:
你要在目录上面输入cmd
确保你打开的文件夹,是你插件下载的文件夹。
然后输入命令phantomjs phantomjs_server.js
成功运行了,打开BP,点击连接测试:
这样就成功了,其实到这一步你在复制到字典了就好了,因为下一步容易出现插件卡死的情况……
但其实也相当麻烦了,不如第一种方法,让AI给你写一个加密的脚本。
然后继续,找到数据包
选择好后开始攻击:
你看这样是不是就加密了?
OK到这里,我们就完成了!!!
恭喜你,学会了一种最简单的JS算法加密逆向的方式方法!!!
知识点四:补充首先补充多两种找到加密算法逻辑的方法:
方法一:标签断点法
这里也找到了一个可以用的案例,之前申通那个登录案例就不可以用了(不信去试试)
https://account.hpc.sjtu.edu.cn/#/login
打开F12,先点击1,再将鼠标放置到2
然后右键你选中的这个“登录”的标签
将子树修改,和属性修改都勾选上。然后我们随便输入一个账号密码点击登录
就成功断下来了。
但问题就出在这里,即使断下来了,我也没法找到它的加密算法。但在小迪视频里面它是找到了加密算法,应该是时间过于久远了,网站的前端做了更改的结果。这里我也没有在网上找到较好的案例,所以就只是做一个补充,并不能确定是否可以用。
第二个方法:XHR断点法
使用这个方法的条件是:是否为xhr请求
这里就是xhr请求,符合条件。怎么做呢?比如你想找到这个登录口的函数方法,你就可以去复制它的接口。
Vip/LoginResult就是接口。复制以后呢,就点击源代码/来源
要选择top,而不是下面,一定要选择top
添加这个接口,然后我们就可以直接点击登录啦
这里就会断下来,但这种断点办法,并不会让你直接找到函数,而是需要你去发起程序(调用堆栈)里继续寻找
然后点击这个Login就好了。
这样看来是不是调用堆栈这个方式是万能的,非常的好用。
nonono,你们去做大量的复现后,一定会碰到这种情况。
比如这里,去学信网进行一个登录,你想找它的登录函数
一看,傻眼了,怎么只有发起程序链,我的跳转呢????嗯,我也不知道,只是我复现的时候遇到过这种情况,想告诉大家不要慌,因为我也不会~
总结这章主要是讲了如何去逆向一个JS加密的完整过程,案例只有一个,所以并不能涵盖绝对多数的情况,只能凑合着看,让大家从0到1,知道这个JS逆向到底应该是如何做的,第一步、第二步、第三步应该干什么。但其实后面还有很多的情况会发生,比如打不开f12,或者f12调试没有作用,等等开发做的防护,这都是会遇到的情况,只能在后期多多学习,多多加油。最后,祝大家天天开心、快快乐乐。