某項(xiàng)目前端js抓包解密
前言
1、做某項(xiàng)目測試的時(shí)候,大家都知道肯定上來就抓包,接著就是一臉懵逼,發(fā)現(xiàn)數(shù)據(jù)包全部都是加密的,那咋辦啊肯定下一個(gè)啊。
一、js調(diào)試
1、進(jìn)入正題啊,我這里抓的是發(fā)送短信接口的數(shù)據(jù)包,從數(shù)據(jù)包中可以看到總共有5個(gè)參數(shù),分別為bizData、encryptKey、timestamp、signature、Key,5個(gè)參數(shù),通過參數(shù)應(yīng)該能猜到bizData參數(shù)就是主要加密的內(nèi)容、我們要看的明文應(yīng)該就在里面,然后兩個(gè)key我們先不管,timestamp參數(shù)一看就知道是時(shí)間戳了,那signature參數(shù)看名字應(yīng)該是簽名的意思。

2、接著我們打開開發(fā)者工具,然后打開全局搜索,搜索bizData參數(shù),感覺第一個(gè)應(yīng)該是。
3、然后大概看了一下,n應(yīng)該就是加密以后的結(jié)果,再追蹤一下n,發(fā)現(xiàn)通過上面生成的,接著在該處設(shè)置斷點(diǎn)
4、然后就一直下一步看他怎么生成的,中間跳的步驟就省略了,直接找到關(guān)鍵代碼處,代碼中直接就顯示e應(yīng)該就是加密前的明文,接著看上面有個(gè)AES,猜測應(yīng)該就是AES加密、再看下面$e.key = t,感覺t應(yīng)該就是秘鑰了。
5、果然在下面對t有定義,加密方式就是AES,接著e就是加密前的明文,那t應(yīng)該就是秘鑰了,然后再看下面iv偏移量是Be,但是Be怎么生成的在上面有定義 Be = Ie.a.enc.Utf8.parse('1234567812345678'),那Be就是1234567812345678了應(yīng)該是固定的,模式下面也寫著是CBC,那所有條件都找到了。
6、我們找一個(gè)有AES加密解密網(wǎng)站,填入秘鑰和iv偏移量,成功解密出數(shù)據(jù),接著修改明文里面的參數(shù)再加密,發(fā)現(xiàn)報(bào)錯(cuò)了、那應(yīng)該還有個(gè)signature簽名需要解密。
二、簽名解密
1、同樣操作,直接全局搜signature簽名,找到該處發(fā)現(xiàn)s應(yīng)該是生成簽名的地方,然后在s處設(shè)置斷點(diǎn),看代碼好像是SHA256加密的,那a就是加密前的數(shù)據(jù)了。
2、然后一直下一步,發(fā)現(xiàn)加密前的a出來了,其實(shí)仔細(xì)看一下應(yīng)該能發(fā)現(xiàn)a是有規(guī)律的,是通過encryptKey+signMethod+timestamp+bizData+salt拼接的,看代碼 a += r[e]就是生成的過程。
3、然后找到SHA256網(wǎng)站加密一下,發(fā)現(xiàn)結(jié)果是對的,接著寫腳本就完事了。師傅們小弟剛學(xué),多給點(diǎn)建議啊。














浙公網(wǎng)安備 33010602011771號