WinHex18.4算法分析
經過分析,注冊碼分為六個部分:
Name: "xxx"
Addr1: "yyy"
Addr2: "zzz" 這三個字符不代表長度
Key1: "32個十六進制數的字符串" 它在內存中的形式是:比如字符串是
"18A519949D4E5F1FAED08A3EAB7CC665" 它會以兩個字符為單位作為一個字節, 以順序列在內存中? ===> 18 A5 19 94 等等
Key2: "32個十六進制數字符串" 同上
Chksm: "kk" 就一個字節
?
以上的六個部分的后半個部分會被拷貝到以下位置:
xxx 5e2f14
yyy 5e2f65
zzz 5e2fa2
?
key1的值 5e2fdf
key2的值 5e2fef
?????????????????? key1和key2中的值在內存中是緊密相連的.
Chksm的值 5e30f9
?
以上六個部分的前半個部分,會進行比較, 也就是說必須一模一樣. 除了中間的空格還可以被替換成其他字符
?
?
用PEID查看發現未加殼,之后查看導入表,發現關鍵函數
在lstrcmpiA下斷,隨意輸入注冊碼,之后發現,注冊判斷函數在sub_568A74
?
整串字符串的分離和拷貝跟sub_569fa4有關, 他會清除一些分隔符, 進入下一部分.
六個部分的前半部分都是以如下的形式進行檢測的:
其中5e42fc是一個中轉站:
在sub_569fa4中,會將分離出來的字符串拷貝到5e42fc中,如果是后半部分的字符串那么還會拷貝到[5e2F14,+0xeb)的相應位置
以上是六段注冊碼的分離以及部分檢測.
下面是checksum的值的計算方式:
就是把5e2f14開始的0xeb個字節, 以字節為單位全部相加
由于這個數據塊前面已經置過0, 所以不會有其他影響因素.
checksum就是把5個部分的后半部分以字節為單位全部相加,得到的值的低字節,就是checksum的值了.
?
另外0x5e3238的值決定了軟件的到期時間
0x5e3238的值是由key1的首word和尾word異或得到的, 得注意字節序, 這個值必須在[46e4,5221)之間,高字節必須&&0x80==0
?
key1的倒數第3個字節 byte_5e2fec and 0x1f == 0x13 ==>5e2fec == 0x13 或0x33 0x53 73 93 b3 e3
byte_5e2fec/32 ==> 5e31a2 !=5,8,6 那么b3就不行了` 0 1 2 3 4 5 6
byte_5e31a2 [2,6]
?
Name: "aaaa"
Addr1: "bbbb"
Addr2: "cccc"
Key1: "2A3C1111111111111111111111535770"
Key2: "11111111111111111111111111111111"
Chksm: "E3"
Genuinely Licensed for personal use. 個人使用
Software is unlocked. All Updates released before 2018/03/28 are free for me.
軟件已經解鎖. 2018年3月28日以前的所有升級對我來說都是免費的.
轉載于:https://www.cnblogs.com/cqubsj/p/6635611.html
總結
以上是生活随笔為你收集整理的WinHex18.4算法分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机导论课程论文标题大全,计算机导论课
- 下一篇: VX线报机器人的使用