一、查找還原斷點
此逆向只針對以下網站:https://www.vivo.com.cn/service/authenticityCheck/index
1.選着事件中創建canvas打上斷點
2.拖動滑塊再請求一次后,會斷在此處
3.走到4420行就會出現混淆的圖片,還有一個h值,這個就是我們需要重組圖片的數組值
4.從堆棧中去找到我們需要生成h的代碼,發現h傳入的是一個下划線_,再往前找
5.需要在此處再打上斷點尋找,重新滑動請求一個
6.這次找到了,就是這個i,生成的代碼也在上面,然后就是扣代碼了
二、如何使用nodejs,將扣出的代碼還原圖片
使用npm安裝canvas
const {createCanvas, Image} = require('canvas') var path = require('path'); var fs = require("fs"); // 創建canvas var canvas = createCanvas(400, 200) var ctx = canvas.getContext('2d') var img = new Image() img.onload = () => ctx.drawImage(img, 0, 0) img.onerror = err => { throw err } img.src = 'p1.jpg' //加載混淆的圖片 // 替換數組生成代碼 function ii(r, t) { let i; // console.log(r) if (r.length) return r.includes(t); for (var a = 0, o = r[(i = 'ht' + "gnel", i.split("").reverse().join(""))]; a < o; a++) if (r[a] === t) return !0; return !1 } function Ir(r) { for (var t = [], n = 0; n < r.length; n++) { var e = r.charCodeAt(n); if (32 === n) break; for (; ii(t, e % 32);) e++; t.push(e % 32) } return t } tt = function (e) { return Ir(e['o']); } // 這個參數在請求獲取圖片地址時獲取 e={"o":"dingxiang651e04883e4b75fa6e2c692cee057d59"} //# 請求圖片地址時獲取 console.log(tt(e)) var t = tt(e) //替換數組 var v = 12 var f = 200 n = function (r, n) { var e = r * v , i = v; 32, ctx.drawImage(img, e, 0, i, f, n * v, 0, i, f) } function u(t, n) { for (var o = 0, r = 32, i = []; o < r; o++) i[o] = n(t[o], o); return i } function restore() { u(t, n) canvas.createPNGStream().pipe(fs.createWriteStream(path.join(__dirname, 'newp1.png'))) // 生成本地圖片(指定文件名) } restore()