about 3 years ago

最近8comic改了一次圖片網址產生的方式,這次不再是用|做分割,取而代之的是用一種似乎是他們自己發明的編碼方法。
而我們知道8comic的工程師一直都不怎麼強,看他們的js寫作風格可以略知一二,想必編碼方法應該也很好破解。

前言

一開始嘗試看懂js source code,但是minified的js畢竟不是那麼好理解,而且他們的code又不怎麼簡潔易懂,遂嘗試自己破解。

前情提要

我們都知道8comic的圖片網址是由sid, did, itemid等等組成
詳情可以參考 http://new.comicvip.com/js/nview.js 的最後幾行

document.getElementById("TheImg").src = "http://img" + sid + ".8comic.com/" + did + "/" + itemid + "/" + num + "/" + img + ".jpg";

而其中sid, did是從加密的code中提供,會寫在每一個漫畫頁面的source html裡面
itemid是漫畫的編號,如海賊王是103
num是第幾話
而img的規則是 "漫畫頁數_code" ,也是由code產生,至於產生方法就不贅述,可以參考此篇

原本編碼

原本的編碼方式相當簡單,他是用|進行分隔,只要split by '|'就可以輕易的解開code
就可以拿到sid, did, 和後面那一串的base
例如說

var allcodes = "1 11 2 61 hwnu5txge7rkxy8r7gncub64cxwtjrgrufxjahhg|2 ......"

看看規律就可以知道哪個是sid, 哪個是did, 相當好破

最新版

最新版變這樣

var cs = 'pwe1e42e56x7xtt2g29rry8ge8buupsxgrjn95pbmrvqrryab7pwe2 ......';

經過一些分析會發現 第幾話, sid, did, code, pages 部份被一些placeholder分隔,並且直接寫在一起
高亮sid, did, code, pages會長這樣
pwe1e42e56x7xtt2g29rry8ge8buupsxgrjn95pbmrvqrryab7pwe ......
而placeholder部份規則則是
- 第幾話: 4位數
- sid: 2位數
- did: 1位數
- pages: 3位數
- code: 40個英文+數字
不足的部份則由pwe作為placeholder補齊

而這pwe經實測結果,每次瀏覽應該都會隨機產生,而且可能不一樣,但是只要掌握住位數就不用管placeholder是什麼了

破解法

  1. 直接用regexp把cs extract出來
  2. 把各個欄位(除了code以外)的數字擷取出來
(\w{3}\d|\w{2}\d{2}|\w\d{3})(\w\d|\d{2})(\d)(\w{2}\d|\w\d{2}|\d{3})(.{40})

完畢

 
comments powered by Disqus