首页
社区
课程
招聘
[原创]两个简单的前端加密逆向
发表于: 2022-7-19 15:05 1776

[原创]两个简单的前端加密逆向

2022-7-19 15:05
1776

两个站点都是比较简单的前端加密,也都是朋友喊来练练手的,不过Trace这款工具还是不错的吧

推荐一下六边形战士的Github工具:https://github.com/CC11001100/ast-hook-for-js-RE

image-20220719143710909

Ps: 站点一比较敏感,码的比较厚,见谅

image-20220719135404844
点击登录后可以抓到请求包
image-20220719135558840

这里的password参数被加密了,看password后面的%3D,可能会是Base64

但是无法解密

最近在看雪论坛看到了一款Chrome插件,正好试试

后面会发现这款插件比较鸡肋,比如手动搜关键字,也可能是我不太会用

走一遍登录流程先触发一下加密函数
image-20220719135818064
开启调试

登录之前这里的password还是没有值的,随便输入账号密码点击登录,再次获取
image-20220719135916096
这里给出了一个JS,过去搜PASSWORD关键字

image-20220719140100423
来到这个JS搜索password关键字定位到了这一行,这里4四个关键字,为什么要定位到这一行,我们可以来看一下其他的关键字



光从定义上看就肯定比第四个password有价值,所以在这里打下断点

image-20220719140256772
在这里下一个断点,然后输入账号密码点击登录
image-20220719140400727
这里直接拦截了,但是还有个验证码环节所以把这里放通
image-20220719140451379
输入验证码点击登录之后还是会拦在这里,单步往下跟
image-20220719140523737
从上图中可以看到,在请求登录之前有一个/sso/image/loginCertTiket请求,这个请求是干什么用的,后面再说,继续跟
image-20220719140553900
会发现这里对这个接口请求了,并且传入了一个uid的参数,在burp中可以看到
image-20220719140648447
这里会返回一个ticket,然后再次单步会返回v
image-20220719140750553
此时继续单步就会来到login的前端页面
image-20220719140826995
然后继续单步调试,注意看一下这里的前端代码
image-20220719140907143
首先就是可以看到调用了loginCertTiket();那肯定就是刚刚的请求的那个接口,返回的ticket,肯定在这里有一些用处,仔细一点可以看到,下面已经调用了加密密码的函数了,encryptByDES
image-20220719140929391
注意这段代码,首先如果ticketlogin不等于Errororr,并且用.trim函数移除password里面的空白字符不等于空给的话 然后!=不等于 空 就会走下面的加密逻辑
继续单步调试
image-20220719141000599
这个ticketlogin是不是很眼熟,这里就是之前请求/sso/image/loginCertTiket返回的值,接下来就会走encryptByDES函数,并且传入我们输入的明文密码,和ticketlogin,那么也就是key
image-20220719141028871
鼠标放在这个函数上面可以跳转过去,接着看

跳到这个函数这里就已经很明显了,接收一个message,一个key,message就是我们的密码明文,key就是ticketlogin,可以看一下这里的加密模式,ECB,那么DES ECB模式是不需要我们输入vi偏移量解密的,那么这里就好办了,先继续单步往下调

走过这个函数之后,password的值就变成密文了,那么现在开始解密

上面说到 DES加密算法的ECB模式,我们只需要有KEY和密文就可以解密了,不需要输入VI的,那么直接找个在线加密解密站点就行了
跳转中...
找了半天就这个好用一点

这是密文,直接带进去解密

解密成功,记得填充选上pkcs7padding即可

登录的时候post参加密,打断点,搜关键字的方式调

我这里是搜关键字找到前端加密的JS

看一眼AES加密,打断点点击登录可以看到原始的JSON

其实到这里啥也不用看了,decrypt函数写在下面了

下面decrypt函数的参数e很明显就是明文

然后转hex赋值给a,然后转base64赋值给n,然后下面r调用o.a.AES.decrypt
这里需要3个参数,密文,密钥,AES加密的参数
可以看到这里传入的

n就是上面明文转完base64的密文,o.a.enc.Utf8.parse(i.a.myStar)就是密钥,然后就是CBC的偏移,然后就是CBC模式,最后就是pkcs7填充,那直接调这里的函数就可以解密了
最后的解密调用

image-20220719141416527

因为这里的函数都是返回值,所以直接把函数当成参数传进去,调用的时候自动会有返回值,所以解密成功

 
 
 
POST /sso/login HTTP/1.1
Host: UzzJu.com
Cookie: JSESSIONID=25752E4A682189EC6DC0C4167CC5EC37; _dd_s=logs=1&id=04d084df-52b7-4f88-a61d-b24e3f310741&created=1655369736789&expire=1655371261240
Content-Length: 306
Cache-Control: max-age=0
Sec-Ch-Ua: " Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "macOS"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.115 Safari/537.36
Origin: https://UzzJu.com
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://UzzJu.com
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
 
username=123&password=yfLv9%2By4WIY%3D&tiketlogin=M9GU90LH
POST /sso/login HTTP/1.1
Host: UzzJu.com
Cookie: JSESSIONID=25752E4A682189EC6DC0C4167CC5EC37; _dd_s=logs=1&id=04d084df-52b7-4f88-a61d-b24e3f310741&created=1655369736789&expire=1655371261240
Content-Length: 306
Cache-Control: max-age=0
Sec-Ch-Ua: " Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "macOS"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.115 Safari/537.36
Origin: https://UzzJu.com
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://UzzJu.com

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 4
支持
分享
最新回复 (7)
雪    币: 864
活跃值: (5124)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
u秀
2022-7-21 14:49
0
雪    币: 94
活跃值: (544)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你这码打的,跟打了码一样
2022-7-21 15:53
0
雪    币: 452
活跃值: (6128)
能力值: ( LV12,RANK:580 )
在线值:
发帖
回帖
粉丝
4
GJHSQGD 你这码打的,跟打了码一样
啊 有漏吗 如果有漏的话 请告诉我 马上删除 谢谢
2022-7-21 18:52
0
雪    币: 94
活跃值: (544)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5

你第一个网站,截图下边代码框里的,不知道跟你分析的是不是同一个网站,是个博客
第二个网站调试解密的第一张图,漏了登录框,爱康

最后于 2022-7-22 13:44 被GJHSQGD编辑 ,原因:
2022-7-22 10:16
0
雪    币: 452
活跃值: (6128)
能力值: ( LV12,RANK:580 )
在线值:
发帖
回帖
粉丝
6
GJHSQGD 不知道是不是同一个网站,代码框里 下边的截图有一张漏了登录框,爱康
具体在哪张图呢?感谢提示 我看一下
2022-7-22 10:27
0
雪    币: 1392
活跃值: (5172)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
7
UzJu 具体在哪张图呢?感谢提示 我看一下
Host:
2022-7-22 13:52
0
雪    币: 1552
活跃值: (1288)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
8
所以t2SearchImprint("string")跟手动搜索关键词,哪个好?
区别是啥?
2022-7-25 16:48
0
游客
登录 | 注册 方可回帖
返回
//