本人也只是興趣愛好,初學(xué)者,一個(gè)菜鳥而已,主要分享下自己的學(xué)習(xí)思路和方法,也方便日后復(fù)習(xí)
這里非常感謝看雪鬼手的教程
進(jìn)入正題
這是我當(dāng)前使用的PC微信版本

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

我們從他的二維碼圖片格式入手,這里先說一下,微信二維碼圖片是png格式的,這個(gè)在鬼手教程里也有說到這點(diǎn),
所以我們通過png文件格式來作為突破口,也就是分析png格式的特征
我們百度一下,做個(gè)簡(jiǎn)單的了解,我簡(jiǎn)單截取了一篇文章的部分
使用UltraEdit32打開該文件,如下:
00000000~00000007:
可以看到,選中的頭8個(gè)字節(jié)即為PNG文件的標(biāo)識(shí)。這是固定的
接下來的地方就是IHDR數(shù)據(jù)塊了:
00000008~00000020:
- 00 00 00 0D 說明IHDR頭塊長(zhǎng)為13
- 49 48 44 52 IHDR標(biāo)識(shí) 固定的
- 00 00 00 08 圖像的寬,8像素
- 00 00 00 08 圖像的高,8像素
- 04 色深,2^4=16,即這是一個(gè)16色的圖像(也有可能顏色數(shù)不超過16,當(dāng)然,如果顏色數(shù)不超過8,用03表示更合適)
- 03 顏色類型,索引圖像
- 00 PNG Spec規(guī)定此處總為0(非0值為將來使用更好的壓縮方法預(yù)留),表示使壓縮方法(LZ77派生算法)
- 00 同上
- 00 非隔行掃描
- 36 21 A3 B8 CRC校驗(yàn)
我們就提取一些固定的特征 來作為突破口
比如說
他的前8個(gè)字節(jié):89 50 4E 47 0D 0A 1A 0A
IHDR標(biāo)識(shí): 49 48 44 52 都可以
我們這里就通過字符串IHDR標(biāo)識(shí)來做一個(gè)搜索 或者直接搜字節(jié)也可以 大家怎么舒服怎么來
CE搜索IHDR

有5個(gè)正確的結(jié)果 其他的好像又變了 我們可以忽略掉 大家搜的時(shí)候 可以把快速掃描去掉 不然有時(shí)候可能會(huì)出現(xiàn)搜不到的情況
我們先看第一個(gè)結(jié)果059D94FC
我們搜一下誰保存的這張圖片的地址 我們搜的時(shí)候要把059D94FC-C 這里要-C,我們看上面結(jié)構(gòu),因?yàn)镮HDR是第13個(gè)字節(jié) 我們要回到首地址 -C完就是 059D94F0 因?yàn)槠渌胤饺绻4娴脑? 存放的肯定是首地址, 如果大家對(duì)內(nèi)存有些許了解 應(yīng)該很好懂

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

我們把這個(gè)結(jié)果放到下面 保存起來
第三個(gè) 10a49984 -c 得到10A49978

保存起來
第四個(gè) 10a4b70c -c得到 10a4b700

好像沒結(jié)果 不管 pass

只剩兩個(gè)結(jié)果了
我們就來驗(yàn)證一下 哪個(gè)是 我們用手機(jī)掃描下二維碼 實(shí)現(xiàn)二維碼的切換 他的地址就會(huì)變

我們不登錄 再點(diǎn)擊返回二維碼界面 這樣就實(shí)現(xiàn)了二維碼的切換

再回來

發(fā)現(xiàn)第二個(gè)變了 第一個(gè)沒變 可能是其他的什么圖片 我們不管
反正第二個(gè)就是二維碼圖片 就對(duì)了
我們可以再次驗(yàn)證 把他從內(nèi)存中 dump下來

我們來看看這個(gè)二維碼的內(nèi)存存放

我們?cè)趤砹私庖幌翽ng格式的結(jié)尾標(biāo)記 IEND數(shù)據(jù)塊
00 00 00 00 49 45 4E 44 AE 42 60 82 這可以理解為結(jié)束標(biāo)記 也就是說 我們拷到這里即可 多復(fù)制點(diǎn)也無所謂 解析的時(shí)候 會(huì)自動(dòng)忽略在這之后的內(nèi)容
然后我們復(fù)制16進(jìn)制數(shù)據(jù) 我們把它還原成字節(jié)集 也就是 字節(jié)數(shù)組 轉(zhuǎn)換圖片

然后我們掃碼 發(fā)現(xiàn)掃了之后 微信客戶端 出現(xiàn)了確認(rèn)登陸 表示我們成功啦
現(xiàn)在如果我們要用代碼 讀內(nèi)存 來讀取二維碼圖片 我們?cè)趺粗浪拇笮∧? 有些同學(xué)可能會(huì)想到剛剛提到的結(jié)尾標(biāo)識(shí)
但是我們?cè)倩氐奖4孢@個(gè)二維碼地址的那個(gè) 地址 058C6268 這個(gè)地址存著二維碼圖片的地址
其實(shí)這里應(yīng)該是個(gè)結(jié)構(gòu)

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