javascript
JS逆向实战26——某店ua模拟登陆
聲明
本文章中所有內(nèi)容僅供學(xué)習(xí)交流,抓包內(nèi)容、敏感網(wǎng)址、數(shù)據(jù)接口均已做脫敏處理,嚴(yán)禁用于商業(yè)用途和非法用途,否則由此產(chǎn)生的一切后果均與作者無關(guān),若有侵權(quán),請聯(lián)系我立即刪除!
目標(biāo)
目標(biāo)網(wǎng)站
aHR0cHM6Ly9kLndlaWRpYW4uY29tL3dlaWRpYW4tcGMvbG9naW4=
目標(biāo)
獲取登錄接口 UA 參數(shù)加密,UA參數(shù)經(jīng)過了OB混淆加密
其他
**本文更新于2023/11/13 **
與之前版本不太一樣的是增加了phone和password 以及CountryCode的加密。
ps: 上一次發(fā)的文章中有個錯誤。我的賬號和密碼加密沒有添加公鑰 導(dǎo)致請求失敗。
還有的就是對ua的某些值的校驗。
其他參數(shù)加密
如上圖所示:除了ua是我們本文需要研究的。還有幾個參數(shù)也是需要我們給逆向逆出來的。
分別為:
- phone
- countryCode
- password
- wdtoken
我們直接搜索 countryCode
如上圖所示。這里就直接顯示出了加密的位置。后面就一直跟棧一直扣就行了。很簡單。
跟到這個地方。把這一整個JSEncrypt 文件保存下來。然后簡單補(bǔ)兩個環(huán)境。
具體代碼如下:
JSEncrypt.js
window = global;
navigator={
appName:'Netscape'
}
...
login_encrypt.js
window = global;
var JSEncrypt =require("./JSEncrypt.js")
var v = new JSEncrypt()
_encrypt = function (e) {
return e ? v.encrypt(e + "") : ""
}
getCountryCode = function (e) {
return Number(e.split("-")[0])
}
function encrypt_up(t){
return _encrypt(t)
}
function encrypt_CountryCode(){
return _encrypt(getCountryCode("86-Z"))
}
// i = window.getUa()
// phone = _encrypt(17772231096)
// countryCode = _encrypt(getCountryCode("86-Z"))
// password = _encrypt("1323123213")
//
// console.log(phone,countryCode,password)
至于wdtoken
其實是通過某個請求set_cookie得來的。
抓包分析
研究完其他參數(shù)。我們可以來搞UA了。
在剛剛的抓包過程中。我們已經(jīng)找到了加密位置。
可以看到 ua加密賦值給了i 。i最后再通過URL編碼。得到了網(wǎng)頁上呈現(xiàn)的UA。
進(jìn)棧之后
可以看到 這就是個標(biāo)準(zhǔn)的OB混淆啊。至于什么是OB混淆,自己搜搜資料。這里貼一個官網(wǎng)地址: https://obfuscator.io/#upload
簡單來說就是一個免費且高效的 JavaScript 混淆器。使代碼更難復(fù)制,并防止其他人竊取代碼。
可以通過AST的方式。或者是工具的方法去給解混淆。
這里我通過
https://tool.yuanrenxue.cn/decode_obfuscator
模式2 的方式去解混淆。
代碼分析
解混淆后的主要代碼如下
確實到這邊已經(jīng)一目了然了。
這里簡單來看看 _0x2e98dd 和 _0x420004
_0x2e98dd:
_0x420004:
如此一來。可以得到一下如此結(jié)論
UA參數(shù)由三部分組成。最后通過gzip壓縮然后btoa(base64)加密。
- _0x7dfc34 這個值很簡單。通過JS生成的時間戳
- _0x1722c3(_0x2e98dd) 這部分是瀏覽器的環(huán)境代碼
- _0x1722c3(_0x420004) 這部分是鼠標(biāo)軌跡以及一些是否點擊的鼠標(biāo)環(huán)境。
- 最后通過gzip壓縮 然后base64 加密。
var _0x261229 = _0x1722c3(_0x2e98dd) + "|" + _0x1722c3(_0x420004) + "|" + _0x7dfc34["toString"](16);
_0x261229 = btoa(_0x570bef["gzip"](_0x261229, {
"to": "string"
}));
參數(shù)分析
這里扣代碼其實很簡單。因為已經(jīng)脫混淆了。缺什么補(bǔ)什么就行了
這里需要注意的是最后通過zip壓縮 然后base64加密的那部分函數(shù)代碼。
這里可以通過兩種方法去補(bǔ)全。
- 扣代碼(最穩(wěn)定且最容易出正確結(jié)果的)
- 因為是gzip壓縮算法,可以直接套庫。
代碼
我們把所有值帶入
誒 發(fā)現(xiàn)為什么是參數(shù)錯誤呢?
哦我的天哪。好像并沒有看上去那么簡單。經(jīng)過我無間斷的測試。我發(fā)現(xiàn)ua確實是沒問題的。
而真正出問題的是 phone 和password 這個rsa加密。
我們網(wǎng)上去找。
按步驟去跟棧 最后發(fā)現(xiàn)在初始化V的時候。還有個地方設(shè)置了個公鑰。我并沒有發(fā)現(xiàn)。所以導(dǎo)致請求的時候 老是參數(shù)錯誤。
設(shè)置完公鑰后。重新請求。
然后就可以了。搞的時候感覺很難。真正寫出來。感覺好簡單。。。
可以關(guān)注我的微信公眾號。
某些文章,核心代碼,以及提前更新都在微信公眾號上。
總結(jié)
以上是生活随笔為你收集整理的JS逆向实战26——某店ua模拟登陆的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TiDB binlog故障处理之drai
- 下一篇: JUC并发编程(终章)各种锁的理解