在學習Flexlm ECC patch過程中,需要對比下別人patch的exe和原本exe的差異,使用到這款Hex Comparison這款二進制比較工具。那么就先來學習一下這款軟件的注冊機制。

使用的軟件版本: 4.0

第一步: 查殼發現無殼

第二步: 瞎注冊一下,看有什么提示字符

看來我們需要輸入正確格式的郵箱地址。

到這里看到郵箱地址是沒問題了,下一步搞定注冊碼。

第三步:既然它給我們這么多提示信息,那么我們使用OD查找一下

很快就定位到了0040DEB0這個地址引用了:

第四步:拖到IDA里面分析一下這個地址附近的流程

a:分析0040DEB0這個地址附近的代碼[_TForm3_BitBtn2Click函數內]

b:繼續分析

c:預備工作

先來看一下第127-130行:

unknown_libname_46(v36);
TControl::GetText(a1[191]);
*(_BYTE *)(dword_4DB510 + 1236) = sub_40BE50(v36[0]);
          sub_4CDA5C(v36, 2);

通過瀏覽周邊發現這么個模式即

unknown_libname_46(變量) 
TControl::GetText(a1[xxx]);
sub_4CDA5C(變量, 2);

猜測并結合OD調試可以把unknown_libname_46改名BInitStr,sub_4CDA5C改名為BReleaseStr。

其次,從形式上看sub_40BE50(v36[0]),像是要把字符串的第一個字符傳遞進函數去做運算,但是結合調試發現其實傳遞進去的就是第一個字符的引用,函數里面還是要通過這個字符來使用這個字符串中的其他字符。

d: 分析函數sub_40BE50

e: 完事大吉

運行發現注冊失敗,接著在IDA中分析,發現在_TForm3_BitBtn2Click函數內還有一個判斷的地方。

第五步:總結注冊碼

第0位:隨意設定
第1位: 1
第2-9位:隨意設定
第10位: Y
第11-18位:根據第2-9位計算得到
第19-22位: 隨意設定
第23位: 必須是數字
第24-39位: 根據第1-18位計算得到
第40-43位: 'HFC2'
又注冊碼中必須含有郵箱地址,故第44位開始加上郵箱地址[其中有個地方是將郵箱的.替換成at符號,忘記是在哪塊了]