<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文所有MHG使用 MHG 替代~
本次爬蟲採集的案例是MHG,該站點貌似本身就遊走在法律的邊緣。
站點地址直接檢索即可進入,在該目標站點,橡皮擦發現了 eval 加密的雙重用法。
頁面所有點位都無太大難點,而且漫畫超多,但是當點選詳情頁的時候,發現加密點位了。
https://i.看評論區.com/ps1/u/17287/cmdty/%E7%AC%AC01%E8%AF%9D/3.jpg.webp?e=1654230046&m=T-uqjbcgI-eyVGgsIsnjLw
其中比較關鍵的就是引數 m
,其餘引數都比較容易猜到其含義。
%E7%AC%AC01%E8%AF%9D
:第一話;e
:時間戳。找到下一頁按鈕點選事件,然後在下述位置新增斷點。
通過該斷點偵錯,發現引數在頁面載入時已經生成,繼續尋找的意義不大,接下來要更換思路。
全域性檢索關鍵字 m=
,檢視所有搜尋結果之後,最終定位到 config.js
檔案,即下圖程式碼高亮位置。
如下所示,這程式碼一眼看上去就能猜測是 eval
加密,但是其關鍵資訊,例如 window["x65x76x61x6c"]
還是存在加密,下面我們優先解決該值。
window["x65x76x61x6c"](function(i, k, a, n, m, an) { m = function(a) { return (a < k ? "" : m(window["x70x61x72x73x65x49x6ex74"](a / k))) + ((a = a % k) > 35 ? window["x53x74x72x69x6ex67"]["x66x72x6fx6dx43x68x61x72x43x6fx64x65"](a + 29) : a["x74x6fx53x74x72x69x6ex67"](36)) } ; if (!''["x72x65x70x6cx61x63x65"](/^/, window["x53x74x72x69x6ex67"])) { while (a--) an[m(a)] = n[a] || m(a); n = [function(m) { return an[m] } ]; m = function() { return '\x77x2b' } ; a = 1 } ;while (a--) if (n[a]) i = i["x72x65x70x6cx61x63x65"](new window["x52x65x67x45x78x70"]('\x62' + m(a) + '\x62','x67'), n[a]); return i }('x72 x41x3dx28x78x28x29x7bx72 x6cx69x74"]('x7c'), 0, {}));
別看上述程式碼長,但是當我使用線上工具解密之後,得到了下面一段程式碼。
function(f){return LZString.decompressFromBase64(this).split(f)}
但是這裡並沒有前文的關鍵字引數 m=T-uqjbcgI-eyVGgsIsnjLw
,接下來我們在原始碼中檢視一下,看是否存在關鍵性資訊。
得到的程式碼段如下所示
window["x65x76x61x6c"]( (function (p, a, c, k, e, d) { e = function (c) { return ( (c < a ? "" : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) ); }; if (!"".replace(/^/, String)) { while (c--) d[e(c)] = k[c] || e(c); k = [ function (e) { return d[e]; }, ]; e = function () { return "\w+"; }; c = 1; } while (c--) if (k[c]) p = p.replace(new RegExp("\b" + e(c) + "\b", "g"), k[c]); return p; })( 'U.k({"F":i,"E":"D","C":"i.a","B":A,"z":"f","y":["1.a.b","2.a.b","3.a.b","4.a.b","5.a.b","6.a.b","7.a.b","8.a.b","9.a.b","%x%w%v%c%t%G%d%g%h%r.4.1%q.a.b","%p%j%o%c%j%n%c%l%I%d%H%P%d%g%h.a.b"],"J":W,"Y":11,"Z":"/12/u/X/V/f/","10":1,"S":"","R":Q,"O":0,"N":{"e":M,"m":"T-L-K"}}).s();', 62, 65, "D41hWAODmwO4FMBGlgFECs6CcJA03gAwCMgu9HACCRwAQlgMzbYBMVAHNcAJYC20AIgEMALgOCtWIbADFg2DmgBswJriasWwSACcEASQB2nIbLqSAwjT7oALMABmnADYIAzsADG+gdwTAMGVgB2YI9OABNgFE53YEBIm0ANvMAQt0BavUBbtUivH0jwsTYsViUHQxcACwQIhABPADUAcWgXXRd9cAAZOGAAVwBHcCR3aF1gIgUMayY6AgJrJRdHTR0AN10I1it/IMCJfQQADyEVyMcAe3cAawB9dxjgAGUAWQAJD24woUr7AUcXXyJAtUCwGc+k0whKwBcIiEnTcmhcRCAA="[ "x73x70x6cx69x63" ]("x7c"), 0, {} ) );
此時關鍵資訊逐漸出現,我們重點解密該程式碼段即可。
直接使用 eval 函數解析上述程式碼,發現出現如下錯誤。
但是 x65x76x61x6c
可以解碼為 eval
。
console.log('x65x76x61x6c') 16:42:45.372 VM251:1 eval
但是下述這段程式碼出現了問題。
在結合剛才我們得到的一個莫名的加密函數。
function(f){return LZString.decompressFromBase64(this).split(f)}
可以試著用 Python 解密一下上述程式碼段,而且 Python 中恰好有同名第三方模組。
pip install lzstring
直接解密加密字串即可。
import lzstring x = lzstring.LZString() decompressed = x.decompressFromBase64( 'D41hWAODmwO4FMBGlgF加密字串AA=') print(decompressed)
得到的資訊如下所示,變得越來越清楚了。
||||||||||jpg|webp|E5|E9||第01話|A1|B5|39921|8B|imgData|88||9F|9B|E6|29|2821|preInit|93||9C|BD|E4|files|cname|558777|cid|bpic|沉默的庭園|bname|bid|81|85|86|finished|eyVGgsIsnjLw|uqjbcgI|1654230046|sl|prevId|8D|558778|nextId|block_cc||S
MH|cmdty|false|17287|len|path|status||ps1
此時還是無法得到最終的答案,然後可以看到程式碼結構發現下述規律,即程式碼出現了相似的部分,並且都是 eval。
細心環節,將程式碼一點點翻譯成可逆向的
將 lzstring
解密字串,然後手動使用 split
函數進行分隔,因為上述程式碼 x73x70x6cx69x63
解析出來竟然是 splic
函數。
谷歌開發者工具的控制檯中執行下述程式碼即可。
"||||||||||jpg|webp|E5|E9||第01話|A1|B5|39921|8B|imgData|88||9F|9B|E6|29|2821|preInit|93||9C|BD|E4|files|cname|558777|cid|bpic|沉默的庭園|bname|bid|81|85|86|finished|eyVGgsIsnjLw|uqjbcgI|1654230046|sl|prevId|8D|558778|nextId|block_cc||SMH|cmdty|false|17287|len|path|status||ps1".split(
"|"
);
得到的資訊如下所示。
[ "", "", "", "", "", "", "", "", "", "", "jpg", "webp", "E5", "E9", "", "第01話", "A1", "B5", "39921", "8B", "imgData", "88", "", "9F", "9B", "E6", "29", "2821", "preInit", "93", "", "9C", "BD", "E4", "files", "cname", "558777", "cid", "bpic", "沉默的庭園", "bname", "bid", "81", "85", "86", "finished", "eyVGgsIsnjLw", "uqjbcgI", "1654230046", "sl", "prevId", "8D", "558778", "nextId", "block_cc", "", "SMH", "cmdty", "false", "17287", "len", "path", "status", "", "ps1", ];
然後將其替換到上述 JS 中,使用解密工具直接線上解析。
SMH.imgData({ bid: 39921, bname: "沉默的庭園", bpic: "39921.jpg", cid: 558777, cname: "第01話", files: [ "1.jpg.webp", "2.jpg.webp", "3.jpg.webp", "4.jpg.webp", "5.jpg.webp", "6.jpg.webp", "7.jpg.webp", "8.jpg.webp", "9.jpg.webp", "%E4%BD%9C%E5%93%81%E9%A1%B5%2821.4.1%29.jpg.webp", "%E6%8B%9B%E5%8B%9F%E5%88%86%E9%85%8D%E9%A1%B5.jpg.webp", ], finished: false, len: 11, path: "/ps1/u/17287/cmdty/第01話/", status: 1, block_cc: "", nextId: 558778, prevId: 0, sl: { e: 1654230046, m: "T-uqjbcgI-eyVGgsIsnjLw" }, }).preInit();
此時,一些關鍵引數都已經得到了,例如 e
的值,m
的值。
以上就是Python爬蟲eval實現看漫畫漫畫櫃mhgui實戰分析的詳細內容,更多關於Python爬蟲eval看漫畫的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45