• 标 题:NetTalk破解与注册机(高手勿进) (10千字)
  • 作 者:BlueBoy[CCG]
  • 时 间:2001-9-20 1:22:22
  • 链 接:http://bbs.pediy.com

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"


由于小弟水平有限,错误难免,希望各位大虾多多指点
如转载请保持文章完整!