分析PC微信二維碼圖片

本人也只是興趣愛好,初學者,一個菜鳥而已,主要分享下自己的學習思路和方法,也方便日后復習
這里非常感謝看雪鬼手的教程

進入正題
這是我當前使用的PC微信版本


image.png

我們先分析怎么獲取二維碼圖片
我按照鬼手的教程 用CE通過未知初始值過濾,然后通過來回切換刷新二維碼 感覺一直搜不出來 過濾到最后 剩余結果還是很多
所以我們這里換一種方法


image.png

我們從他的二維碼圖片格式入手,這里先說一下,微信二維碼圖片是png格式的,這個在鬼手教程里也有說到這點,
所以我們通過png文件格式來作為突破口,也就是分析png格式的特征
我們百度一下,做個簡單的了解,我簡單截取了一篇文章的部分
使用UltraEdit32打開該文件,如下:

00000000~00000007:

image

可以看到,選中的頭8個字節即為PNG文件的標識。這是固定的

接下來的地方就是IHDR數據塊了:

00000008~00000020:

image

  • 00 00 00 0D 說明IHDR頭塊長為13
  • 49 48 44 52 IHDR標識 固定的
  • 00 00 00 08 圖像的寬,8像素
  • 00 00 00 08 圖像的高,8像素
  • 04 色深,2^4=16,即這是一個16色的圖像(也有可能顏色數不超過16,當然,如果顏色數不超過8,用03表示更合適)
  • 03 顏色類型,索引圖像
  • 00 PNG Spec規定此處總為0(非0值為將來使用更好的壓縮方法預留),表示使壓縮方法(LZ77派生算法)
  • 00 同上
  • 00 非隔行掃描
  • 36 21 A3 B8 CRC校驗

我們就提取一些固定的特征 來作為突破口
比如說
他的前8個字節:89 50 4E 47 0D 0A 1A 0A
IHDR標識: 49 48 44 52 都可以
我們這里就通過字符串IHDR標識來做一個搜索 或者直接搜字節也可以 大家怎么舒服怎么來
CE搜索IHDR


image.png

有5個正確的結果 其他的好像又變了 我們可以忽略掉 大家搜的時候 可以把快速掃描去掉 不然有時候可能會出現搜不到的情況
我們先看第一個結果059D94FC
我們搜一下誰保存的這張圖片的地址 我們搜的時候要把059D94FC-C 這里要-C,我們看上面結構,因為IHDR是第13個字節 我們要回到首地址 -C完就是 059D94F0 因為其他地方如果保存的話 存放的肯定是首地址, 如果大家對內存有些許了解 應該很好懂


image.png

好像搜不到東西,我們就暫時先pass掉這個 來看第二個
第二個 05BA8714 同理 我們-c 得到5BA8708


image.png

我們把這個結果放到下面 保存起來

第三個 10a49984 -c 得到10A49978


image.png

保存起來
第四個 10a4b70c -c得到 10a4b700


image.png

好像沒結果 不管 pass
image.png

只剩兩個結果了
我們就來驗證一下 哪個是 我們用手機掃描下二維碼 實現二維碼的切換 他的地址就會變

image.png

我們不登錄 再點擊返回二維碼界面 這樣就實現了二維碼的切換


image.png

再回來


image.png

發現第二個變了 第一個沒變 可能是其他的什么圖片 我們不管
反正第二個就是二維碼圖片 就對了
我們可以再次驗證 把他從內存中 dump下來

image.png

我們來看看這個二維碼的內存存放
image.png

我們在來了解一下Png格式的結尾標記 IEND數據塊
00 00 00 00 49 45 4E 44 AE 42 60 82 這可以理解為結束標記 也就是說 我們拷到這里即可 多復制點也無所謂 解析的時候 會自動忽略在這之后的內容
然后我們復制16進制數據 我們把它還原成字節集 也就是 字節數組 轉換圖片
image.png

然后我們掃碼 發現掃了之后 微信客戶端 出現了確認登陸 表示我們成功啦

現在如果我們要用代碼 讀內存 來讀取二維碼圖片 我們怎么知道他的大小呢? 有些同學可能會想到剛剛提到的結尾標識
但是我們再回到保存這個二維碼地址的那個 地址 058C6268 這個地址存著二維碼圖片的地址
其實這里應該是個結構


image.png

也就是說058C6268 +4 偏移4存放圖片大小
因此 058C626C 存放圖片大小

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容