NetTalk破解與序號產生器(高手勿進) (10千字)

看雪資料發表於2001-09-20

NetTalk破解與序號產生器
作者:BlueBoy
組織:CCG
軟體介紹:該軟體主要用於網路聊天,未註冊版有連線人數的限制。
使用工具:RegMon,Wasm,Soft-ice

好了廢話不說,現在開始了,
首先用Fi檢測檔案是否加殼(哈哈,例行公事),果然加殼,殼型別為UPX,取出脫殼法寶
pdump,輕鬆搞定。用Wasm反彙編,用串式參考尋找“未註冊”,哇,沒有幾個漢字(暈,
可能是脫殼不完全造成的),算了反正程式碼能看懂了,就這樣。
用loader裝入NetTalk設斷bpx hmemcpy執行程式,輸入註冊碼程式在hmemcpy中斷,按F12 n次後進入程式
領空,然後按F10單步執行,不久程式來到
:0048266E 8D55EC                  lea edx, dword ptr [ebp-14]
:00482671 8B45FC                  mov eax, dword ptr [ebp-04]
:00482674 8B8044040000            mov eax, dword ptr [eax+00000444]
:0048267A E895A8FAFF              call 0042CF14《----程式來到這裡
:0048267F 8B45EC                  mov eax, dword ptr [ebp-14]
:00482682 8D4DF0                  lea ecx, dword ptr [ebp-10]<--在這裡D EAX                                    看到我輸入註冊碼,所以call 0042cf14可能是
                  取字串的函式,
:00482685 B27D                    mov dl, 7D
:00482687 E800B1FDFF              call 0045D78C〈------將輸入的註冊碼加密
:0048268C 8B45F0                  mov eax, dword ptr [ebp-10]
:0048268F 8D55F8                  lea edx, dword ptr [ebp-08]
:00482692 E881AEFDFF              call 0045D518
:00482697 8D55E8                  lea edx, dword ptr [ebp-18]
:0048269A 8B45FC                  mov eax, dword ptr [ebp-04]
:0048269D 8B803C040000            mov eax, dword ptr [eax+0000043C]
:004826A3 E86CA8FAFF              call 0042CF14       
:004826A8 8B45E8                  mov eax, dword ptr [ebp-18]
:004826AB 8D55F4                  lea edx, dword ptr [ebp-0C]〈---在這裡D EAX
                  看到機器碼
:004826AE E8B9CAFFFF              call 0047F16C〈------將機器碼加密
:004826B3 33C0                    xor eax, eax
:004826B5 5A                      pop edx
:004826B6 59                      pop ecx
:004826B7 59                      pop ecx
:004826B8 648910                  mov dword ptr fs:[eax], edx
:004826BB EB1A                    jmp 004826D7 〈---程式跳轉


:004826D7 837DF800                cmp dword ptr [ebp-08], 00000000 \
:004826DB 0F8483010000            je 00482864                  |比較是
:004826E1 837DF400                cmp dword ptr [ebp-0C], 00000000  |否為空
:004826E5 0F8479010000            je 00482864                      /
:004826EB 8B45F8                  mov eax, dword ptr [ebp-08]
:004826EE 8B55F4                  mov edx, dword ptr [ebp-0C]
:004826F1 E8DE17F8FF              call 00403ED4〈-----關鍵Call比較註冊碼
:004826F6 0F8589000000            jne 00482785〈------跳轉
                  在此處rfl z 後執行,程式顯示“註冊版“
                                  不過往下看還有類似語句

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004826F6(C)
|
:00482785 8D55D0                  lea edx, dword ptr [ebp-30]
:00482788 8B45FC                  mov eax, dword ptr [ebp-04]
:0048278B 8B8044040000            mov eax, dword ptr [eax+00000444]
:00482791 E87EA7FAFF              call 0042CF14〈------取碼
:00482796 8B45D0                  mov eax, dword ptr [ebp-30]
:00482799 8D4DD4                  lea ecx, dword ptr [ebp-2C]
:0048279C B2AF                    mov dl, AF
:0048279E E8E9AFFDFF              call 0045D78C〈-----將輸入的碼加密
:004827A3 8B45D4                  mov eax, dword ptr [ebp-2C]
:004827A6 8D55F8                  lea edx, dword ptr [ebp-08]
:004827A9 E86AADFDFF              call 0045D518
:004827AE 8D55CC                  lea edx, dword ptr [ebp-34]
:004827B1 8B45FC                  mov eax, dword ptr [ebp-04]
:004827B4 8B803C040000            mov eax, dword ptr [eax+0000043C]
:004827BA E855A7FAFF              call 0042CF14〈------取瑪
:004827BF 8B45CC                  mov eax, dword ptr [ebp-34]
:004827C2 8D55F4                  lea edx, dword ptr [ebp-0C]
:004827C5 E8A2C9FFFF              call 0047F16C 〈-----將機器碼加密
:004827CA 8B45F8                  mov eax, dword ptr [ebp-08]
:004827CD 8B55F4                  mov edx, dword ptr [ebp-0C]
:004827D0 E8FF16F8FF              call 00403ED4 〈----比較
:004827D5 0F8589000000            jne 00482864〈---在此處rfl z執行,程式顯示
                  無限制版,哈哈程式有意思,兩個版本

現在分析關鍵Call 004003D4
:00403ED4 53                      push ebx
:00403ED5 56                      push esi
:00403ED6 57                      push edi
:00403ED7 89C6                    mov esi, eax
:00403ED9 89D7                    mov edi, edx
:00403EDB 39D0                    cmp eax, edx
:00403EDD 0F848F000000            je 00403F72
:00403EE3 85F6                    test esi, esi
:00403EE5 7468                    je 00403F4F
:00403EE7 85FF                    test edi, edi
:00403EE9 746B                    je 00403F56
:00403EEB 8B46FC                  mov eax, dword ptr [esi-04]
:00403EEE 8B57FC                  mov edx, dword ptr [edi-04]
:00403EF1 29D0                    sub eax, edx
......................................................................
:00403F23 5A                      pop edx
:00403F24 83E203                  and edx, 00000003
:00403F27 7422                    je 00403F4B
:00403F29 8B0E                    mov ecx, dword ptr [esi] <----在此處你可以                          D ESI 看到我輸入的碼加密後的值
:00403F2B 8B1F                    mov ebx, dword ptr [edi]〈----次處看到
                  ??-??-??-??-??哈哈這就是機器碼加                        密後的結果
:00403F2D 38D9                    cmp cl, bl
:00403F2F 7541                    jne 00403F72〈----不同就跳出
:00403F31 4A                      dec edx
:00403F32 7417                    je 00403F4B
:00403F34 38FD                    cmp ch, bh
....................................................
|
:00403F72 5F                      pop edi
:00403F73 5E                      pop esi
:00403F74 5B                      pop ebx
:00403F75 C3                      ret
看見這個程式沒有什麼明碼所以只能在分析加密演算法了,:(((
Call 0045D78C 我們發現這個函式之前的語句Mov dl,7D 還有一個是Mov dl,AF這就是用於區別註冊版和無限制版的地方,
註冊碼的加密
:0045D78C 55                      push ebp
:0045D78D 8BEC                    mov ebp, esp
:0045D78F 6A00                    push 00000000
:0045D791 6A00                    push 00000000
:0045D793 6A00                    push 00000000
:0045D795 6A00                    push 00000000
:0045D797 6A00                    push 00000000
:0045D799 6A00                    push 00000000
:0045D79B 53                      push ebx
:0045D79C 56                      push esi
:0045D79D 57                      push edi
:0045D79E 894DF8                  mov dword ptr [ebp-08], ecx
:0045D7A1 8BDA                    mov ebx, edx

:0045D803 8BD0                    mov edx, eax
:0045D805 33C0                    xor eax, eax
:0045D807 8AC3                    mov al, bl
:0045D809 33D0                    xor edx, eax<----此處為演算法的核心
                              將輸入的序列號依次與7D,7D+1,(7D+1)+2
                              ((7D+1)+2)+3 ......異或(或與AF,AF+1,(AF+1)+2
                              ((AF+1)+2)+3.......異或)
:0045D80B 8D45F0                  lea eax, dword ptr [ebp-10]
:0045D80E E8D964FAFF              call 00403CEC
:0045D813 8D45F4                  lea eax, dword ptr [ebp-0C]
:0045D816 8B55F0                  mov edx, dword ptr [ebp-10]
:0045D819 E8AE65FAFF              call 00403DCC
:0045D81E 8BC7                    mov eax, edi
:0045D820 40                      inc eax

:0045D859 5D                      pop ebp
:0045D85A C3                      ret
機器碼的加密與註冊號的加密類似,
機器碼依次與7F+1,7F+2,7F+3....異或,得出??-??-??-??-??
因為異或運算為可逆運算,手工算出
          註冊版註冊碼:4241ADBCB8A1ADA68C958B92F4E7
          無限制版註冊碼:908F9F8A8693FBF4FEE3D9DCC235
(哈哈其實所謂的機器碼是作者那出來嚇唬人的,每個機器上的都一樣:))
好,執行程式,註冊,成功了,哈哈:),再執行一次看看,暈,又變成了未註冊。
用regmon監視以下,發現他讀取了登錄檔
Current_user\software\Zigzag Software Group\Net Talk\下的值,開啟看一下正是
機器碼和註冊碼。
再次用Softice在RegQueryValueEx下斷點,並按F12,F10來到
:0047F259 E89EADFEFF              call 00469FFC
:0047F25E 8BC6                    mov eax, esi
:0047F260 E8933BF8FF              call 00402DF8
:0047F265 8B45FC                  mov eax, dword ptr [ebp-04]
:0047F268 E8574BF8FF              call 00403DC4
:0047F26D 83F822                  cmp eax, 00000022<-----程式在這裡比較機器碼
                 是否為34位
:0047F270 753F                    jne 0047F2B1
:0047F272 8B45F8                  mov eax, dword ptr [ebp-08]
:0047F275 E84A4BF8FF              call 00403DC4
:0047F27A 83F822                  cmp eax, 00000022〈----註冊碼是否為34位
                       
:0047F27D 7530                    jne 0047F2AF
:0047F27F 8D4DEC                  lea ecx, dword ptr [ebp-14]
:0047F282 B27D                    mov dl, 7D
:0047F284 8B45F8                  mov eax, dword ptr [ebp-08]
:0047F287 E800E5FDFF              call 0045D78C〈---註冊碼加密\
:0047F28C 8B45EC                  mov eax, dword ptr [ebp-14]  |
:0047F28F 8D55F4                  lea edx, dword ptr [ebp-0C]  |
:0047F292 E881E2FDFF              call 0045D518                |
:0047F297 8D55F0                  lea edx, dword ptr [ebp-10]  |\只有上邊比較
:0047F29A 8B45FC                  mov eax, dword ptr [ebp-04]  |/為34位才執行
:0047F29D E8CAFEFFFF              call 0047F16C〈---機器碼加密 |
:0047F2A2 8B45F4                  mov eax, dword ptr [ebp-0C]  |
:0047F2A5 8B55F0                  mov edx, dword ptr [ebp-10]  |
:0047F2A8 E8274CF8FF              call 00403ED4<----比較      /
:0047F2AD 7502                    jne 0047F2B1
程式這樣的地方還有一個(0047F3EC)是比較是否為無限制版的,上邊為比較是否為註冊版
所以了,因為作者給出的機器碼為28為,所以怎麼都不能透過程式本身註冊成功,所以採用
人工修改登錄檔的方式:
          機器碼:BFBEAFBCBBA8B9B8A5B6B5A6B3B2169999
          註冊版:4241ADBCB8A1ADA68C958B92F4E77EE30C
          無限制版:908F9F8A8693FBF4FEE3D9DCC23580313E

序號產生器(將下邊的內容放到.Reg檔案即可)
                    註冊版
REGEDIT4
[HKEY_CURRENT_USER\SOFTWARE\Zigzag Software Group\Net Talk]
"ComputerCode"="BFBEAFBCBBA8B9B8A5B6B5A6B3B2169999"
"RegisterCode"="4241ADBCB8A1ADA68C958B92F4E77EE30C"

                    無限制版
REGEDIT4
[HKEY_CURRENT_USER\SOFTWARE\Zigzag Software Group\Net Talk]
"ComputerCode"="BFBEAFBCBBA8B9B8A5B6B5A6B3B2169999"
"RegisterCode"="908F9F8A8693FBF4FEE3D9DCC23580313E"


由於小弟水平有限,錯誤難免,希望各位大蝦多多指點
如轉載請保持文章完整!

相關文章