在學習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符號,忘記是在哪塊了]
CNCERT國家工程研究中心
威努特工控安全
D1Net
數世咨詢
安全圈
安全圈
看雪學苑
合天網安實驗室
合天網安實驗室
看雪學苑
看雪學苑
0x00實驗室