【js逆向】某习通座位预约加密分析(新手向)

查看 36|回复 2
作者:Schwarz   
前言
之前写过图书馆预约抢座,那个时候虽然有加密参数,但是没有校验加密,就放在服务器上自动运行,但是突然有一天开始校验,导致有一天差点没地方学习
作为一个懒货和考研党,怎么可能忍?为了我宿舍里的儿子们不用早起蹲点抢位置,于是乎开始下面的逆向旅途
本人是个新手,虽然以前是web渗透的,但是对js逆向并不熟悉,如果有什么说的不对的地方请各位斧正
目标
学某通图书馆座位预约系统
每个学校不同可能参数也不同,下面是个样例
选座界面:
https://office.xxxx.com/front/third/apps/seatengine/select?id=xxxx&day=2023-06-03&backLevel=2&seatId=xxx
过程
打开选座界面,刚F12打开调试界面就发现有反调试,直接两个一律不在此处暂停


Pasted image 20230603184141.png (61.86 KB, 下载次数: 0)
下载附件
2023-6-3 22:33 上传

首先提交一次预约请求,很明显,以下请求就是这次逆向的主体


Pasted image 20230603183623.png (28.24 KB, 下载次数: 0)
下载附件
2023-6-3 22:33 上传

https://office.xxxx.com/data/apps/seatengine/submit?roomId=1901&startTime=18%3A30&endTime=19%3A00&day=2023-06-03&captcha=&seatNum=022&token=818a0f43a1a64bc98acb3f572fb64336&enc=4e66e0f4a1f3db313ad08288b9c379da
经过小小的测试,token在进入页面就自带,直接爬取网页源代码就可以获得,所以主要的目标是enc
首先通过xhr提取断点


Pasted image 20230603183950.png (53.85 KB, 下载次数: 0)
下载附件
2023-6-3 22:33 上传

当我们断上点了,准备在调用栈一层一层往前找参数来源


Pasted image 20230603185010.png (92.58 KB, 下载次数: 0)
下载附件
2023-6-3 22:33 上传

看到传递的参数,但还要往前找到来源


Pasted image 20230603223631.png (292.31 KB, 下载次数: 0)
下载附件
2023-6-3 22:36 上传

很明显这是混淆的一个函数,后面传的参数是所有其他参数字段,大概率enc就是来源于这里


Pasted image 20230603192628.png (96.65 KB, 下载次数: 0)
下载附件
2023-6-3 22:35 上传

找一下这个函数的来源,点击直接跳转


Pasted image 20230603193622.png (37.73 KB, 下载次数: 0)
下载附件
2023-6-3 22:35 上传



Pasted image 20230603193749.png (73.65 KB, 下载次数: 0)
下载附件
2023-6-3 22:37 上传

好家伙,往上一看,专门加密过了,还有个网址,作为一个小白,还真不知道这个加密,去网上仔细搜索了一波,发现还是挺流行的一个免费加密,看了几个解密的文章,看的头昏脑胀,作为一个懒货,自然是不可能直接开始从头解密的


Pasted image 20230603193825.png (50.16 KB, 下载次数: 0)
下载附件
2023-6-3 22:38 上传

接下来,就请出调试断点大法,当然猜也是必不可少的
由上面就知道_0x6d646b应该就是主要的加密函数,毕竟调用的就是这个函数,又从网上的解密文章得知,该版本加密特征分几段,最下面一段就是被加密的源代码,那么这里的代码从define开始就是被加密的源代码了


Pasted image 20230603195255.png (51.97 KB, 下载次数: 0)
下载附件
2023-6-3 22:38 上传

本人出身是物联网,后来自学web渗透,对js并不是很熟悉,还好最近AI崛起,我直接询问chatgpt,发现define(...这一句是下面需要引用库,控制台已查询,是md5库,不出意外是MD5


Pasted image 20230603200030.png (33.03 KB, 下载次数: 0)
下载附件
2023-6-3 22:39 上传

为了节省时间,我尝试能不能直接一站到底,我在_0x6d646b函数中尝试寻找关键点,如果找不到,就需要一步一步调试了,幸运的是,发现调用md5的地方,果断断了点,重新提交


Pasted image 20230603200843.png (31.17 KB, 下载次数: 0)
下载附件
2023-6-3 22:39 上传

看着这行字符串,很明显是前面所有url中的参数添加进来进行重新排列拼接,感觉这不就来了
"[captcha=][day=2023-06-03][endTime=19:00][roomId=1901][seatNum=022][startTime=18:30][token=xxx][%sd`~7^/>N4!Q#){'']"


Pasted image 20230603201331.png (49.32 KB, 下载次数: 0)
下载附件
2023-6-3 22:39 上传

直接往前追溯_0x4aaee5_中的函数,发现就是个废话函数,直接就是md5加密就行,不过是为了混淆添加了几步
为了确保这里排列的顺序不变,又多试了几次,发现顺序是一样的,那么接下来就毫无悬念了,毕竟虽然混淆十分令人害怕,好几百行代码,但是最后就是个最简单的md5加密,直接进行Python复现
from Crypto.Hash import MD5
def getEnc(today, endTime, seatNum, startTime, token):  
content = "[captcha=][day={}][endTime={}][roomId=1901][seatNum={}][startTime={}][token={}][%sd`~7^/>N4!Q#){'']".format(  
today, endTime, seatNum, startTime, token)  
result = MD5.new()  
result.update(content.encode('utf-8'))  
return result.hexdigest()
传参进去发现,确实和enc一样
这样某通图书馆预约座位系统被我们扒光了,又可以愉快的抢座预约了,考研党永不为奴

下载次数, 下载附件

libw   

jsjiamiv5和v6好像都可以被直接还原了:https://github.com/NXY666/Jsjiemi
minibeetuaman   

这种程度的混淆可以用AST还原,目前的攻坚都在jsvm上了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部