010Editor(v8.0.1)逆向分析
0x0軟件簡介
010Editor是一款採用QT界面庫編寫的,兼容多操作系統的十六進制編輯軟件.功能強大,簡單易用.0x1逆向環境及工具
系統環境:Window 7 32bit使用工具:OllyDbg,IDA
本次測試版本爲官方最新版:
Name:010 Editor for Windows 32-BitVersion: 8.0.1, Windows 10/8/7/Vista/XP/2000
File Size: 14.2 MB
0x2主要算法簡述
key的算法可能是有多種,其中第一種有判斷中間字符爲0x9C的爲3個"-"分割,第二種判斷0xAC的爲4個"-"分割這裏只簡要說一下第一種
假設key由key0~key7組成,每個代表兩個字符
那麼key3==0x9C
key4==(byte)Name加密Result[0]
key5==(byte)Name加密Result[1]
key6==(byte)Name加密Result[2]
key7==(byte)Name加密Result[3]
(((key0^key6) ^ 0x18) + 0x3D) ^ 0xA7 != 0;(0x18B)
(((((key2^key5)+(key1^key7*0x100))^0x7892)+0x4D30)^0x3421)/0xB == Quotient(整除0xB的商,必須小於0x3E8)
附一組可用key
Name:Hades
Password:6DFE-9C9C-7271-9A65
0x3主要邏輯逆向
使用OD和IDA動態調試和靜態分析結合.分析如下關鍵的兩個算法函數(IDA中可用字符串引用定位,OD中可下斷password錯誤的創建窗口一點點的找到)
在OD中下斷在兩個函數處
(通過計算偏移可以得到,也可以使用棧回溯辦法定位到)
其中sub_409C9B函數中調用了sub_40A826函數.其中判斷sub_40A826函數返回值爲2D才爲註冊成功跳轉
sub_409C9B函數中調用sub_40A826函數並對比其返回值是0x2D還是其他錯誤值
sub_40A826函數中的轉換與算法
Name轉換爲Byte數組
輸入的Name和Password(看到後邊有判斷9C的地方,特意把中間key改成了9C)
判斷序列號某一組是不是9C
部分key加密的部分
計算序列號第1個與第7個的結果,函數
判斷整除0xB的函數
加密Name,然後對比其中的幾位序列號
加密Name的CALL 010Editor.01372E50函數的過程.
OD中動態調試其Name加密過程,得知0x3DD4148處是一個加密key用到的加密祕鑰數組
整個加密key數組如下:
sub_40A826函數賦值並返回0x2D
sub_409C9B函數返回0xDB後表示成功:
另:繼續使用的跳轉:
這兩處關鍵跳轉,更改這兩處跳轉可以繼續使用軟件
完成註冊機的編寫
註冊機程序源碼:
測試註冊效果
PS:010Editor也有簡單的網絡驗證的,key可能過段時間不能用了,就是被檢測到了,過掉網絡驗證也很簡單,不在具體寫了.