前言
由于之前寫(xiě)過(guò)幾篇文章,但是個(gè)人不是很滿(mǎn)意,所以這次我打算把所有的知識(shí)匯總成一篇文章??赡軙?huì)有很多地方寫(xiě)的不是很好,歡迎大家評(píng)論指出,我后續(xù)修正。
個(gè)人vx:http://wc.ljlju.cn/4ZGETK
搶購(gòu)軟件原理
我們?cè)邳c(diǎn)擊搶購(gòu)按鈕的時(shí)候,會(huì)向平臺(tái)的服務(wù)器發(fā)送HTTP請(qǐng)求,這條HTTP請(qǐng)求會(huì)攜帶你的賬號(hào)信息(token或cookie)商品的id、數(shù)量、支付密碼等等發(fā)送到服務(wù)器。服務(wù)器接收到請(qǐng)求后,會(huì)進(jìn)行執(zhí)行搶購(gòu)的操作,然后再返回結(jié)果,告訴你是否搶購(gòu)結(jié)果(搶購(gòu)成功、庫(kù)存不足、服務(wù)器異常……)。
我們的搶購(gòu)軟件,就是跳過(guò)了點(diǎn)擊搶購(gòu)按鈕的步驟,直接向平臺(tái)服務(wù)器發(fā)送搶購(gòu)的HTTP請(qǐng)求,通過(guò)軟件的循環(huán)發(fā)送,可以實(shí)現(xiàn)一秒鐘發(fā)送幾十條幾百條搶購(gòu)的HTTP請(qǐng)求,只要有一條HTTP請(qǐng)求被平臺(tái)服務(wù)器處理成功并且返回結(jié)果為下單成功,則為搶到了商品。這種方式可比手動(dòng)或者連點(diǎn)器強(qiáng)很多!?。?/p>
查看和分析HTTP請(qǐng)求
這里我直接用某臺(tái)子進(jìn)行學(xué)習(xí)講解,大家切勿進(jìn)行非法的操作。
打開(kāi)下方網(wǎng)址:https://m.eryday.fun
點(diǎn)擊鍵盤(pán)的F12,彈出調(diào)試窗口
接下來(lái)大家點(diǎn)擊網(wǎng)絡(luò)
好了,這時(shí)候咋們點(diǎn)擊我的,然后隨便輸入手機(jī)號(hào)、輸入驗(yàn)證碼、點(diǎn)擊發(fā)送驗(yàn)證碼按鈕,這個(gè)時(shí)候我們可以觀察到有這么一個(gè)接口
這個(gè)就是你點(diǎn)擊獲取驗(yàn)證碼按鈕后,請(qǐng)求給后端的接口,我們接著點(diǎn)開(kāi)他
對(duì)于上圖我們一般需要關(guān)注的點(diǎn)有下面三個(gè):
- 請(qǐng)求的URL地址:https://m.eryday.fun/api/verify-code/send
- 請(qǐng)求方法:GET
- Content-type:application/json
這個(gè)是發(fā)送驗(yàn)證碼接口,用戶(hù)這時(shí)候還沒(méi)有登錄,所有請(qǐng)求頭并沒(méi)有token選項(xiàng),后面會(huì)給大家講到。
我們先點(diǎn)開(kāi)負(fù)載看看里面是什么內(nèi)容,負(fù)載里面的內(nèi)容就是請(qǐng)求體
通過(guò)觀察,我們發(fā)下了一下信息:
mobile:"13333333333" (我們輸入的手機(jī)號(hào))
id: "Jo9lbMldS5Gf6naD5KbAzA" (不確定是什么參數(shù))
type:1(類(lèi)型,這個(gè)應(yīng)該是固定的)
captcha:x526(我們剛剛輸入的驗(yàn)證碼)
我們?cè)冱c(diǎn)開(kāi)響應(yīng)看看里面的內(nèi)容
再點(diǎn)開(kāi)響應(yīng)可以看到登錄的結(jié)果
我們可以看到,這個(gè)就是點(diǎn)擊**”發(fā)送驗(yàn)證碼“按鈕后,接口返回的信息。通過(guò)返回信息我們可以知道這個(gè)驗(yàn)證碼是發(fā)送失敗的,因?yàn)槲覀兊氖謾C(jī)號(hào)輸入的比較6,觸發(fā)了風(fēng)控機(jī)制,接下來(lái)我們刷新頁(yè)面**輸入一個(gè)正常的手機(jī)號(hào)碼,再點(diǎn)擊發(fā)送驗(yàn)證碼按鈕,然后觀察觀察請(qǐng)求接口的情況。
上面框住的四條請(qǐng)求,就是我們從輸入手機(jī)號(hào)、驗(yàn)證碼到點(diǎn)擊發(fā)送驗(yàn)證碼按鈕這個(gè)過(guò)程的所有請(qǐng)求了,我們一一點(diǎn)開(kāi)請(qǐng)求,看看他們之間是否有聯(lián)系
相信大家已經(jīng)發(fā)下了,上面我們未知的id的數(shù)據(jù),就是獲取圖片驗(yàn)證碼之后的返回的id。到此,我們就分析明白了,這個(gè)網(wǎng)站發(fā)送驗(yàn)證碼的所有邏輯。接下來(lái)我們來(lái)縷一縷。
第一步:請(qǐng)求圖片驗(yàn)證碼接口,獲取圖片驗(yàn)證碼
請(qǐng)求URL:https://m.eryday.fun/api/captcha/graph
請(qǐng)求方法:POST
請(qǐng)求頭:content-type: application/json
請(qǐng)求體:{"type":1,"fontSize":20,"width":100,"height":40}
接口響應(yīng):
{
"code": "0",
"data": {
"id": "xV5ZjLU8QWS2wehcnNk1Mw",
"content": "data:image/png;base64,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"
},
"success": true,
"ext": {
"executionTime": "3",
"currentDate": "2023-04-14T00:02:42.023+08:00"
},
"msg": "操作成功"
}
第二步:發(fā)送驗(yàn)證碼
請(qǐng)求URL:https://m.eryday.fun/api/verify-code/send
請(qǐng)求方法:POST
請(qǐng)求頭:content-type: application/json
請(qǐng)求體:{"mobile":"13553232231","type":1,"captcha":"mhru","id":"xV5ZjLU8QWS2wehcnNk1Mw"}
接口響應(yīng):
{
"code": "0",
"data": null,
"success": true,
"ext": {
"executionTime": "390",
"currentDate": "2023-04-14T00:02:48.629+08:00"
},
"msg": "驗(yàn)證碼已發(fā)送到你的手機(jī),請(qǐng)查收"
}
通過(guò)簡(jiǎn)單的操作,我們就能分析出來(lái),這個(gè)平臺(tái)發(fā)送驗(yàn)證碼是請(qǐng)求了哪個(gè)接口,提交了拿些數(shù)據(jù)。那么我們?nèi)绻胪ㄟ^(guò)軟件的方式去實(shí)現(xiàn),那么原理就是我們也去請(qǐng)求這些接口,只是把mobile這個(gè)參數(shù)的值,改成我們自己輸入的手機(jī)號(hào),即可模擬發(fā)送該接口。寫(xiě)搶購(gòu)軟件也是一樣的道理,先找出點(diǎn)擊搶購(gòu)按鈕的接口參數(shù),我們?cè)谕ㄟ^(guò)軟件模擬出一樣的參數(shù),然后循環(huán)不斷的像平臺(tái)發(fā)送搶購(gòu)請(qǐng)求,從而達(dá)到快人一步的目的。
接下來(lái)我希望大家可以舉一反三,分析一下該平臺(tái)登錄接口的信息。
通過(guò)分析登錄的接口,我們就可以獲取到用戶(hù)的token的值,那么在后續(xù)的所有請(qǐng)求中,在請(qǐng)求頭攜帶該token,就相當(dāng)于是該用戶(hù)發(fā)起的請(qǐng)求,平臺(tái)是通過(guò)這個(gè)token,來(lái)關(guān)聯(lián)這個(gè)請(qǐng)求到底是哪個(gè)用戶(hù)發(fā)起的。
我們可以看到后續(xù)的請(qǐng)求都會(huì)在請(qǐng)求體攜帶這個(gè)x-token(不同網(wǎng)站不同的命名),用來(lái)判斷是哪個(gè)用戶(hù)和是否是登錄的狀態(tài)。
常見(jiàn)HTTP請(qǐng)求
一般的HTTP請(qǐng)求為GET和POST請(qǐng)求。通常可以這樣子理解,我需要向服務(wù)器獲取數(shù)據(jù)的則為GET請(qǐng)求,我要提交數(shù)據(jù)給服務(wù)器的為POST請(qǐng)求。
例如:
GET請(qǐng)求:獲取用戶(hù)信息、獲取商品信息。
PSOT請(qǐng)求:登錄賬號(hào)、下單商品。
HTTP請(qǐng)求又分為請(qǐng)求頭和響應(yīng)體
GET方式常見(jiàn)請(qǐng)求頭:
GET /login/person?name=liangjaing&password=123123 HTTP/1.1 //請(qǐng)求地址
Host: www.ljlju.cn //請(qǐng)求的目的地
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) //瀏覽器類(lèi)型
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive //可以不用理解
POST方式常見(jiàn)請(qǐng)求頭(application/x-www-form-urlencoded)
POST test/persion HTTP/1.1
Host: www.ljlju.cn
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded //請(qǐng)求類(lèi)型
Content-Length: 40
Connection: Keep-Alive
Cookie: xxxxxx
Token: xxxxxx //用戶(hù)身份標(biāo)識(shí) 拿到了token或者cookie就相當(dāng)于登錄了這個(gè)賬號(hào)
name=liangjiang&password=123123 //請(qǐng)求體
POST方式常見(jiàn)請(qǐng)求頭(application/json)
POST test/persion HTTP/1.1
Host: www.ljlju.cn
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/json //請(qǐng)求類(lèi)型
Content-Length: 40
Connection: Keep-Alive
Cookie: xxxxxx
Token: xxxxxx //用戶(hù)身份標(biāo)識(shí) 拿到了token或者cookie就相當(dāng)于登錄了這個(gè)賬號(hào)
{"name": "liangjiang", "mima": "123123"} //請(qǐng)求體
響應(yīng)體就是服務(wù)器處理的結(jié)果,一般成功的code值為200,搶購(gòu)的結(jié)果會(huì)在響應(yīng)體中展現(xiàn)出來(lái)。
{"success":false,"code":20001,"message":"賬戶(hù)密碼錯(cuò)誤","data":{}}
手動(dòng)模擬請(qǐng)求
如果我們最終是用易語(yǔ)言來(lái)編寫(xiě)搶購(gòu)軟件的話(huà),建議用精易編程助手來(lái)模擬請(qǐng)求。
軟件鏈接
https://wws.lanzouy.com/b0fft39wj
密碼:c5cx
我們只需要將上面分析出來(lái)的接口的信息,填進(jìn)去,點(diǎn)擊發(fā)送請(qǐng)求即可,下面我模擬獲取圖片驗(yàn)證碼的,請(qǐng)求體(提交數(shù)據(jù))可以先點(diǎn)擊查看源,再?gòu)?fù)制進(jìn)去
最后我們獲取到的響應(yīng)正文,和瀏覽器獲取到的響應(yīng)是一模一樣的,這個(gè)時(shí)候我們手動(dòng)復(fù)制content里面的內(nèi)容,data:image/png…然后瀏覽器打開(kāi),就能看到圖片驗(yàn)證碼,我們接著模擬發(fā)送驗(yàn)證碼的接口,將這次的圖片驗(yàn)證碼的id和正確的圖片驗(yàn)證碼作為提交數(shù)據(jù)。就可以模擬成功發(fā)送驗(yàn)證碼的請(qǐng)求。
這個(gè)時(shí)候我們的手機(jī)號(hào)成功接收到平臺(tái)的驗(yàn)證碼。
然后通過(guò)獲取的驗(yàn)證碼,再進(jìn)行模擬登錄接口,就能夠獲取到用戶(hù)的token,從而進(jìn)行后續(xù)的其他操作。這一步我就不演示了,希望大家可以舉一反三。
提前獲取搶購(gòu)接口
接下來(lái)講解怎么獲取搶購(gòu)的提前包
我們?cè)趯?xiě)搶購(gòu)接口的時(shí)候往往都得提前去獲取,接下來(lái)教大家一個(gè)百試百靈也是最簡(jiǎn)單的獲取提前包的方法
我們點(diǎn)進(jìn)去看看,記得分析接口。
我先說(shuō)抓提前包的思路
還是看這張圖,我們需要做的就是在返回結(jié)果這里動(dòng)手腳
首先我們要明白,是什么來(lái)控制網(wǎng)站的商品未寄售->寄售中->已售完這三個(gè)狀態(tài)的變化的,其實(shí)就是這個(gè)返回結(jié)果
當(dāng)我們點(diǎn)擊商品進(jìn)入商品詳情的時(shí)候,接口會(huì)返回該商品的所有信息,當(dāng)然也就包括了商品的寄售狀態(tài)
我們想要獲取提前包,那么就可以在第三步的時(shí)候,攔截服務(wù)器返回的接口數(shù)據(jù),將代表寄售狀態(tài)的數(shù)據(jù)改成寄售中,或者直接修改系統(tǒng)返回的寄售時(shí)間。本來(lái)系統(tǒng)設(shè)置該商品的寄售時(shí)間為下午2點(diǎn),那么我們把這個(gè)時(shí)間改成當(dāng)前時(shí)間,那么這樣子就可以獲取提前包了。
我們可以看看這個(gè)平臺(tái)的商品詳情的返回?cái)?shù)據(jù)
{
"code": "0",
"data": {
"id": "16",
"type": 1,
"itemsLevel": null,
"title": "KAJA紀(jì)念邀請(qǐng)盲盒 ",
"subtitle": null,
"mainImgUrl": "https://res10.eryday.fun/rs/product/20230405/aa0448d940058098.png",
"mainImg": {
"id": "89",
"sort": 0,
"path": "res10/rs/product/20230405/aa0448d940058098.png",
"url": "https://res10.eryday.fun/rs/product/20230405/aa0448d940058098.png",
"mediaType": 1,
"canDownload": false,
"isMain": false,
"props": {
"width": 1024,
"height": 1024
}
},
"markingPrice": null,
"price": 9.9,
"logicStatus": 4, // 邏輯狀態(tài) 重點(diǎn)關(guān)注
"startTime": "2023-04-09T20:00:00.000+08:00", //開(kāi)售時(shí)間 重點(diǎn)關(guān)注
"endTime": "2023-04-10T00:00:00.000+08:00",
"issueNumber": 5000,
"tags": [],
"author": "",
"authorImgUrl": null,
"issuer": "iFun官方",
"issuerImgUrl": "https://res10.eryday.fun/rs/content/20230220/7e64d39a4836b899.png",
"hasPreemption": true,
"preemptionDate": null,
"rebatePoint": "0",
"userCanPreemption": null,
"introImgUrls": [
"https://res10.eryday.fun/rs/product/20230409/7dd4a6ab4e2da912.png"
],
"detailHeaderMedia": {
"id": "96",
"sort": 0,
"path": "res10/rs/product/20230409/9141040f48f6a397.png",
"url": "https://res10.eryday.fun/rs/product/20230409/9141040f48f6a397.png",
"mediaType": 1,
"canDownload": false,
"isMain": false,
"props": {
"width": 1024,
"height": 1024
}
},
"detailMedias": [
{
"id": "95",
"sort": 0,
"path": "res10/rs/product/20230409/7dd4a6ab4e2da912.png",
"url": "https://res10.eryday.fun/rs/product/20230409/7dd4a6ab4e2da912.png",
"mediaType": 1,
"canDownload": false,
"isMain": false,
"props": {
"width": 1125,
"height": 4897
}
}
],
"purchaseNotes": "數(shù)字文創(chuàng)藏品為虛擬數(shù)字商品,而非實(shí)物。僅限年滿(mǎn)18周歲的中國(guó)大陸實(shí)名認(rèn)證用戶(hù)購(gòu)買(mǎi)。數(shù)字文創(chuàng)藏品的版權(quán)由發(fā)行方和原創(chuàng)作者擁有,除另行獲得版權(quán)擁有者書(shū)面同意外,用戶(hù)不得將數(shù)字文創(chuàng)藏品用于任何商業(yè)用途。本商品一經(jīng)售出,不支持退換。請(qǐng)勿對(duì)數(shù)字文創(chuàng)藏品進(jìn)行炒賣(mài)、場(chǎng)外交易、欺詐或以任何其他非法方式進(jìn)行使用。"
},
"success": true,
"ext": {
"executionTime": "3",
"currentDate": "2023-04-15T01:12:32.885+08:00"
},
"msg": "操作成功"
}
我們通過(guò)觀察,可以發(fā)現(xiàn)通過(guò)修改上面的兩個(gè)參數(shù)中的任意一個(gè),都可以修改商品的寄售狀態(tài),從而提前獲取搶購(gòu)接口。
這個(gè)時(shí)候,咋們的抓包神器就得出場(chǎng)了,由于fiddler安裝起來(lái)稍微復(fù)雜了一下下,這邊為了方便演示,就先用另外一個(gè)軟件,功能都是一樣的,目的就是為了在服務(wù)器放回?cái)?shù)據(jù)的這個(gè)階段,將這個(gè)請(qǐng)求給攔截住,然后修改里面的數(shù)據(jù),再將修改后的數(shù)據(jù)返回給平臺(tái)。
我們先在文本框里將返回?cái)?shù)據(jù)修改好,因?yàn)檫@個(gè)商品已經(jīng)是售完?duì)顟B(tài)了,所以改開(kāi)始寄售時(shí)間肯定是不行了,我們直接改商品狀態(tài),先把4改成1
{
"code": "0",
"data": {
"id": "16",
"type": 1,
"itemsLevel": null,
"title": "KAJA紀(jì)念邀請(qǐng)盲盒 ",
"subtitle": null,
"mainImgUrl": "https://res10.eryday.fun/rs/product/20230405/aa0448d940058098.png",
"mainImg": {
"id": "89",
"sort": 0,
"path": "res10/rs/product/20230405/aa0448d940058098.png",
"url": "https://res10.eryday.fun/rs/product/20230405/aa0448d940058098.png",
"mediaType": 1,
"canDownload": false,
"isMain": false,
"props": {
"width": 1024,
"height": 1024
}
},
"markingPrice": null,
"price": 9.9,
"logicStatus": 1,
"startTime": "2023-04-09T20:00:00.000+08:00",
"endTime": "2023-04-10T00:00:00.000+08:00",
"issueNumber": 5000,
"tags": [],
"author": "",
"authorImgUrl": null,
"issuer": "iFun官方",
"issuerImgUrl": "https://res10.eryday.fun/rs/content/20230220/7e64d39a4836b899.png",
"hasPreemption": true,
"preemptionDate": null,
"rebatePoint": "0",
"userCanPreemption": null,
"introImgUrls": [
"https://res10.eryday.fun/rs/product/20230409/7dd4a6ab4e2da912.png"
],
"detailHeaderMedia": {
"id": "96",
"sort": 0,
"path": "res10/rs/product/20230409/9141040f48f6a397.png",
"url": "https://res10.eryday.fun/rs/product/20230409/9141040f48f6a397.png",
"mediaType": 1,
"canDownload": false,
"isMain": false,
"props": {
"width": 1024,
"height": 1024
}
},
"detailMedias": [
{
"id": "95",
"sort": 0,
"path": "res10/rs/product/20230409/7dd4a6ab4e2da912.png",
"url": "https://res10.eryday.fun/rs/product/20230409/7dd4a6ab4e2da912.png",
"mediaType": 1,
"canDownload": false,
"isMain": false,
"props": {
"width": 1125,
"height": 4897
}
}
],
"purchaseNotes": "數(shù)字文創(chuàng)藏品為虛擬數(shù)字商品,而非實(shí)物。僅限年滿(mǎn)18周歲的中國(guó)大陸實(shí)名認(rèn)證用戶(hù)購(gòu)買(mǎi)。數(shù)字文創(chuàng)藏品的版權(quán)由發(fā)行方和原創(chuàng)作者擁有,除另行獲得版權(quán)擁有者書(shū)面同意外,用戶(hù)不得將數(shù)字文創(chuàng)藏品用于任何商業(yè)用途。本商品一經(jīng)售出,不支持退換。請(qǐng)勿對(duì)數(shù)字文創(chuàng)藏品進(jìn)行炒賣(mài)、場(chǎng)外交易、欺詐或以任何其他非法方式進(jìn)行使用。"
},
"success": true,
"ext": {
"executionTime": "3",
"currentDate": "2023-04-15T01:12:32.885+08:00"
},
"msg": "操作成功"
}
我們先設(shè)置系統(tǒng)代理,再攔截響應(yīng)
發(fā)現(xiàn)狀態(tài)改成了即將開(kāi)售,那么我們繼續(xù)改成2試試
成功點(diǎn)亮購(gòu)買(mǎi)按鈕,我們點(diǎn)擊立即購(gòu)買(mǎi)。就能夠獲取到搶購(gòu)的接口了。
按照上面的思路,去分析搶購(gòu)接口的請(qǐng)求參數(shù)、我們后續(xù)就可以通過(guò)軟件生成對(duì)應(yīng)的搶購(gòu)請(qǐng)求,然后批量發(fā)送。
請(qǐng)求URL:https://m.eryday.fun/api/order/trading
請(qǐng)求頭:
Accept: */*
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: keep-alive
Content-Length: 61
Content-Type: application/json
Cookie: cna=c4bf69feb31f409c960ec48a4ee23f74; acw_tc=0b68a81a16814951542354451e2d0c5a97f1af858edf8feda8a6d03f44f5ba
Host: m.eryday.fun
Origin: https://m.eryday.fun
Referer: https://m.eryday.fun/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/112.0.0.0
x-app-type: 100
x-appversion: 1.0.9
x-appversionnum: 119
x-device-id: 16814957461176540747
x-device-type: 10
x-token: xxxxxxxxxx--xxxxxxxxxxx // 這里會(huì)攜帶token
請(qǐng)求體:
{"pid":"16","traceId":"487c83c5-bf6e-4c21-a12a-1039a3b30696"}
這個(gè)pid就是商品id,可以通過(guò)瀏覽器的地址,有個(gè)product_details?id=16獲取
那么下面的這個(gè)traceId,應(yīng)該就是平臺(tái)的加密數(shù)據(jù)了,那么這個(gè)又是下面的知識(shí)點(diǎn)了,但是這個(gè)后面通過(guò)解密發(fā)現(xiàn)其實(shí)就是一個(gè)UUID,相當(dāng)于一個(gè)隨機(jī)的字符串,我們?cè)谑謩?dòng)模擬請(qǐng)求的時(shí)候可以隨便改幾個(gè)數(shù)據(jù),也可以發(fā)送成功
這樣子我們直接就拿到搶購(gòu)接口了。大家可以找找其他平臺(tái)練練手,這個(gè)還是很簡(jiǎn)單的。特別是該發(fā)售時(shí)間,建議先改這個(gè)。百分之99的平臺(tái)都可以通過(guò)這個(gè)方法提前獲取搶購(gòu)接口。
破解接口加密的幾種常用的方法
因?yàn)閿?shù)藏臺(tái)子都是趕鴨子上架的,大多數(shù)平臺(tái)的加密措施其實(shí)做的并不是很好,也很多根本沒(méi)有加密的,基本上的關(guān)于數(shù)藏平臺(tái)的加密方式,都是相對(duì)比較簡(jiǎn)單的。
下面是比較常見(jiàn)的加密方式和他的一些特征:
MD5加密
這種加密方式是不可逆的,一般用在登錄的時(shí)候,因?yàn)槭遣豢梢越饷艿?,所以?dāng)你登錄的時(shí)候?qū)⒚艽a通過(guò)一定的規(guī)則MD5加密之后,傳到服務(wù)器,服務(wù)器會(huì)從數(shù)據(jù)庫(kù)中獲取到你的密碼,然后用相同的規(guī)則進(jìn)行MD5加密(比如加一段特定的字符串),然后和你傳過(guò)來(lái)的MD5進(jìn)行比較,如果一致則登錄成功。
假設(shè)我的密碼是“123456”,一般網(wǎng)站做MD5加密的時(shí)候,會(huì)在密碼后面拼接一串字符串變成“123456liangjiang666”,然后對(duì)123456liangjiang666進(jìn)行MD5加密
加密后的數(shù)據(jù)為:b5f69f2a0b186354da715d6e80249e2b
這串加密的數(shù)據(jù)是無(wú)法解密的,但是不管加密123456liangjiang666多少次,最終的結(jié)果都是b5f69f2a0b186354da715d6e80249e2b
DES / AES 加密
DES 是一種使用密鑰加密的算法。該加密算法是一種對(duì)稱(chēng)加密方式,其加密運(yùn)算、解密運(yùn)算需要使用的是同樣的密鑰(一組字符串)即可。
這個(gè)加密方式我們一般需要關(guān)注這三個(gè)點(diǎn)
- Key:為 7 個(gè)字節(jié)共 56 位,是 DES 算法的工作密鑰
- Data:為 8 個(gè)字節(jié) 64 位,是要被加密或別解密的數(shù)據(jù)
- Mode:為 DES 的工作方式
在JS逆向的時(shí)候只需要找到key即可,這塊得在視頻講解。
RSA 加密
RSA 加密算法是一種非對(duì)稱(chēng)加密算法。
- 通過(guò)公鑰加密,使用私鑰解密。私鑰是通過(guò)公鑰計(jì)算生成的。假設(shè) ABC 三方之間互相要進(jìn)行加密通信,大家互相之間使用公鑰進(jìn)行信息加密,信息讀取時(shí)使用各自對(duì)應(yīng)的私鑰進(jìn)行信息加密
- 用戶(hù)輸入支付密碼會(huì)通過(guò) RSA 加密
JS逆向的時(shí)候找公鑰和私鑰,一般都會(huì)存在前端
base 64 偽加密
Base64 是一種使用 64 位字符來(lái)表示任意二進(jìn)制數(shù)據(jù)的方法。base64 是一種編碼方式而不是加密算法,只是看上去像是加密而已,上面說(shuō)到的圖片驗(yàn)證碼,就是base64編碼,這個(gè)無(wú)需解密,轉(zhuǎn)換一下即可。
對(duì)于上面的平臺(tái)的traceId加密其實(shí)就是上圖這段,讓我們問(wèn)問(wèn)chatgpt這是個(gè)啥玩意
我們用軟件生成一下就行了
搶購(gòu)軟件的編寫(xiě)
編寫(xiě)搶購(gòu)軟件,可以選擇很多語(yǔ)言,易語(yǔ)言、python、java啥的都是可以的,這塊我打算放在視頻上面講解,或者去看看我前面幾篇文章,我展示下用chatgpt寫(xiě)哈哈
直接拿下,用易語(yǔ)言編寫(xiě)的話(huà)直接軟件可以生成,非常方便
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-459026.html
后續(xù)以視頻的方式帶大家入手搶購(gòu)軟和撿漏軟
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-459026.html
到了這里,關(guān)于零基礎(chǔ)手把手教你寫(xiě)NFT搶購(gòu)軟的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!