反編譯記事本(5)
????繼續(xù)運(yùn)行項(xiàng)目, 出現(xiàn)如下問題 :

????觀察異常代碼位置 :?

????異常中斷的時(shí)候, dword_1009070 的值為16, 觀察它的定義 :

????十進(jìn)制的16是十六進(jìn)制的10, 根據(jù) *(WORD *) dword_1009070, 可以猜測(cè)它是一個(gè)數(shù)組, 而定義處出現(xiàn)明顯的等差數(shù)列規(guī)律, 可以肯定 dword_10090及后面的一些元素構(gòu)成一個(gè)WORD數(shù)組.
????但是有個(gè)問題, 0x13后面的是45, 再后面才是0x14, 這樣的話數(shù)組長(zhǎng)度是多少就很難確定. 對(duì)這種情況的處理是 : 把所有這樣的變量組成一個(gè)數(shù)組. 因?yàn)檫@很可能是一個(gè)結(jié)構(gòu)體數(shù)組.?
????合并所有的變量后得到了一個(gè) 從 1到45的數(shù)組, 除了45處在中間外, 其他元素都是正常的.
????

????此時(shí), 又出現(xiàn)了另一個(gè)問題 :?

????這個(gè)數(shù)組引用了導(dǎo)出數(shù)組的元素, 但是IDA無法識(shí)別出來, 元素都變成常量. 如果手動(dòng)解決的話就太繁瑣了, 一個(gè)簡(jiǎn)單的解決方法如下:

????接下來就需要把引用了修改變量的地方都處理一下了.
? ? 處理完后運(yùn)行, 發(fā)現(xiàn)還是報(bào)那個(gè)錯(cuò)誤. 只能看匯編代碼比對(duì)了.

????發(fā)現(xiàn)這里確實(shí)是解指針的引用, 但是反編譯的代碼不應(yīng)該是 *(WCHAR *)dword_1009034[15]; , 而應(yīng)該是直接取數(shù)組元素的值.
