【Js逆向】浅析前端加解密

admin 2024年1月25日13:07:33评论20 views字数 2149阅读7分9秒阅读模式

本文是挖洞高手「Ness_a」分享的技术文章,公众号旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。

【Js逆向】浅析前端加解密

Ness_a

三年甲方安全工作经验,负责漏洞挖掘、安全体系架构、IOT安全,是多家众测平台的核心测试人员,蝉联多家SRC年榜TOP。

【Js逆向】浅析前端加解密

很多Web、H5、APP、小程序为了增加攻击成本和安全性,会把Request及Response的数据进行加密,这种加密原理其实无非就是在Js文件中调用 1个或者多个Js文件(或函数),把原有的明文信息,按照Js中的加密逻辑生成密文,但这种方式也是可逆的。

本文是我结合实际案例总结出来的一个比较“笨”但是有效的方法,即找到加密位置、copy加密函数、微调直接跑,这个方法其实可以应对大多数的前端加解密,希望对小伙伴们有所借鉴。

【Js逆向】浅析前端加解密

【Js逆向】浅析前端加解密

分析目标

【Js逆向】浅析前端加解密

该H5应用为例,抓包查看,可以看到里面无论响应包或是请求包关键信息都直接是密文。

【Js逆向】浅析前端加解密

遇到这种情况,有几个关键步骤:
1.初步分析是何种加密,RSA、AES或者Base64加盐;
2.加密关键字搜索;
3.F12根据API直接断点调试,逐步跟进堆栈(对于APP的话可能需要逆向APK了,对于微信小程序的话需要找到本地的缓存js);
4.整理记录加密流程中调用到的函数;
5.提取出关键函数并变形。
接下来逐步分析加密过程:
1.观察bdata中数据,data、key一眼AES,既然是AES那就首先要联想到如下内容:
(1)AES必带密钥
(2)去寻找AES密钥是否写死(硬编码)
(3)如果AES为动态key,找到具体AES函数,分析运行流程
2.既然已知是AES加密,那么直接F12大法,搜索关键字如:AES、AESKEY等,刚好在某js文件里直接找到了相关函数:

【Js逆向】浅析前端加解密

分析该函数,就是刚刚提到过的动态key,既然如此,肯定有其他函数调用了getAesKey(),那先把getAesKey()copy出来,放在txt。
3.已经找到了getAesKey函数,继续跟进调用到这个函数的位置,继续F12大法。

【Js逆向】浅析前端加解密

第一个搜索结果,一眼引入依赖,直接pass。
第二个就是刚刚那个函数忽略。
直接看第三个搜索

【Js逆向】浅析前端加解密

大致看下判断很像数据加密的一环,依旧txt待宰。
第四个搜索结果如下,直接看到了关键特征bdata,放回。

【Js逆向】浅析前端加解密

4.细致分析doPostRequest函数,把其中涉及到的所有自定义函数提取出来后,再次放在txt备忘,同时也方便做逻辑梳理(所以说分析算法和细致化渗透时,txt备忘很关键)
里面自定义函数如下:
GetAesKey--encryptData--sendPost--decrypt
翻译为中文:
获取AES密钥、加密数据、发送数据、解密
根据调用的函数名,合理猜测,直接就是主函数,类似于C语言中的main,做各种函数调用,同时也是程序入口。

【Js逆向】浅析前端加解密

那就去一步步调试看下,一旦定位到关键主函数,笨方法就是直接全打上断点,一个个去看去分析各种函数会生成什么样的值。

【Js逆向】浅析前端加解密

先看入参,传进来了一个API接口并命名为url,data数据就为明文body,这个时候回想一下我们的目标是什么?我们想要的是可以直接明文输入,然后js直接把我们的明文加密为后端可识别密文,于是思路就变为,直接在doPostRequest函数做改动,然后自行输入url和明文,再直接加密输出。
继续跟进看下,url就是直接拼接成baseurl+api没啥好说的,把data数据打印出来看下,然后分析这个API接口所在的js文件函数,发现里面lgParam和ipAdr就是一个固定的值,不管是请求哪个API都要带上,lgParam里面是session,ipAdr是IP地址,IdentNo和Itype就是这个API中必填的请求参数。

【Js逆向】浅析前端加解密

继续跟进,调用aesKey函数就直接拿到一个aesKey密钥。

【Js逆向】浅析前端加解密

继续跟进,可以看到这里调用了encryptData函数并且传入了两个值,一个是data一个是aesKey,所以我们定位到了初步加密的地方和函数。

【Js逆向】浅析前端加解密

其实到这里基本就可以结束了,因为满足了几个要素:
(1)明文可控
(2)可以对明文直接进行加密
后面要做的就是继续跟进函数,把所有doPostRequest函数中有调用到的函数例如:encryptData等等全部copy出来,再把这些子函数调用到的其他函数全都copy出来,然后再改改格式,就可以了,类似于apk的hook。
最后的脚本就类似如下,写了个start函数用来传参也就是api和明文body,然后其他需要输出的关键参数值加上console.log,再引用doPostRequest函数,最后调用start函数就ok了。

【Js逆向】浅析前端加解密

最后输出如下:

【Js逆向】浅析前端加解密

【Js逆向】浅析前端加解密

【Js逆向】浅析前端加解密

总结

【Js逆向】浅析前端加解密

目前很多行业Web端、移动端都开始卷前端加密,很多师傅们遇到了加密传参就直接pass掉,转头看下个资产,但其实有些厂商会抱有“做了加密传输,我很安全”这种侥幸心理,所以只要解出加密逻辑,很可能多站通用、多漏洞产出。
从攻击层面来说,一切前端参数加密都是可逆的,关键点如下:
1.找到加密位置 
2.分析加密逻辑  
3.copy所有加密流程相关函数 
4.做好hook和console.log 
5.run!
从防御层面来说,要拒绝信任一切用户传参,哪怕是做了各种加密,从底层(服务端)做好安全管控。

 

 

原文始发于微信公众号(i春秋):【Js逆向】浅析前端加解密

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月25日13:07:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【Js逆向】浅析前端加解密http://cn-sec.com/archives/2429213.html

发表评论

匿名网友 填写信息