• 标 题:初学者心得--网络传神2.02(build 0310) (6千字)
  • 作 者:-1212-
  • 时 间:2001-4-8 1:05:54
  • 链 接:http://bbs.pediy.com

初学者心得--网络传神2.02(build 0310)

作者:华仔
版权:China Cracking Group
时间:2001.04.07

这几天网站有点不稳定,我还以为是我的FTP软件有问题,一时兴起把它给抓了下来,试用
后感觉还可以,就算不注册也没有任何限制,但窗口标题有一个“未注册”字样,作为一
个CRACKER来说简直是一种耻辱,杀心顿起,搞定它。(注:白菜乐园有它的破解版本,在
这里我们只是简单的了解一下破解这类程序如何从多方面入手,如果你是老CRACKER请止步。



一、试运行:

进入注册画面
用户名:华仔[CCG]
识别码:855F3B3B3358CFC2A3B-7A5746F65067575673
注册码:1974923
单击确定后,该软件让重新启动后验证注册码。

二、注册分析:

1、在输入用户名获取识别码时出现一个好现象:
  -7A5746F65067575673始终未曾改变(我猜可能是机器码),而前面的数字(暂且叫它
  用户码)855F3B3B3358CFC2A3B一直在改变(这说明真正的注册码不是唯一的)。

2、对于重新启动后验证注册码,这类软件很多,它把这些注册信息写入注册表或某个文件
  在启动软件时再读出并校验。这给我们设置断点和查找关键点提供了方法。经过观察,
  它是将注册信息写入注册表中:

[HKEY_CURRENT_USER\Software\Kuaiftp]
"Path"="D:\\net_tool\\kuaiftp2000"
"VER"="202"
"BUILD"="0310"
"Name"="华仔[CCG]"
"SBM"="855F3B3B3358CFC2A3B-7A5746F65067575673"
"ZCM"="1974923"

    另外软件使用次数标记在这里:

[HKEY_CURRENT_USER\Software\Microsoft\data63]
"DATA63"="9E2E2E2E2"(不是吧,我已使用了7777次?:))
 
3、这么长的识别码,注册码也一定很长,我倒有点想打退堂鼓了,但没办法,到这一步只有
  “茅厕里划船:奋(粪)勇前进”了。让大家见笑了,本人数学一向不好,看到这么多数
  字,就犯头痛,老毛病。还好,我记得不知是那位学士说过,不管是暴破也好、找注册码
  也好,弄清算法也好,都叫:CRACK,这样心理才稍有点平衡感。但上面三种方法我这次
  都用到了。

三、实战:

1、用W32dsm89反汇编后找关键字“ZCM”(问:没什么要找这个,答:因为软件启动后要
  读取这个注册表键来判断是否是真正的注册码),好运气,我们找到两个,一个是在注
  册窗口中输入注册信息后,用来读写注册表的,而另一个就是我们要用到的下面这个。

2、用TRW2000载入,设断bpx 00529E0D,g继续运行,程序被拦下,下bc *清除断点:

* Possible StringData Ref from Code Obj ->"ZCM"
                                  |
:00529E0D BAD4A05200              mov edx, 0052A0D4
:00529E12 8B45F8                  mov eax, dword ptr [ebp-08]
:00529E15 E8FE7CF7FF              call 004A1B18
:00529E1A 8D45F4                  lea eax, dword ptr [ebp-0C]
:00529E1D 8B55F0                  mov edx, dword ptr [ebp-10]
:00529E20 E85BA0EDFF              call 00403E80
:00529E25 8B55F4                  mov edx, dword ptr [ebp-0C]
:00529E28 B8E0A05200              mov eax, 0052A0E0
:00529E2D E822A5EDFF              call 00404354
:00529E32 8BD8                    mov ebx, eax
:00529E34 8B45F4                  mov eax, dword ptr [ebp-0C]
:00529E37 E82CA2EDFF              call 00404068
:00529E3C 8BC8                    mov ecx, eax
:00529E3E 2BCB                    sub ecx, ebx
:00529E40 41                      inc ecx
:00529E41 8D45F4                  lea eax, dword ptr [ebp-0C]
:00529E44 8BD3                    mov edx, ebx
:00529E46 E865A4EDFF              call 004042B0
:00529E4B 8D45E8                  lea eax, dword ptr [ebp-18]
:00529E4E 8B55F4                  mov edx, dword ptr [ebp-0C]
:00529E51 E82AA0EDFF              call 00403E80
:00529E56 8D45F4                  lea eax, dword ptr [ebp-0C]
:00529E59 8B55F0                  mov edx, dword ptr [ebp-10]
:00529E5C E81FA0EDFF              call 00403E80
:00529E61 8D45F4                  lea eax, dword ptr [ebp-0C]
:00529E64 8BCB                    mov ecx, ebx
:00529E66 BA01000000              mov edx, 00000001
:00529E6B E840A4EDFF              call 004042B0
:00529E70 8D45E4                  lea eax, dword ptr [ebp-1C]
:00529E73 8B55F4                  mov edx, dword ptr [ebp-0C]
:00529E76 E805A0EDFF              call 00403E80
:00529E7B 8D55E0                  lea edx, dword ptr [ebp-20]
:00529E7E 8B45E8                  mov eax, dword ptr [ebp-18] ====>> 我们输入的假

注册码
:00529E81 E8CAD4FDFF              call 00507350              ====>> 在这里干了一

场革命,我不想
:00529E86 8B55E0                  mov edx, dword ptr [ebp-20]        看下去,太让

人心烦了。
:00529E89 8B45EC                  mov eax, dword ptr [ebp-14] ====>> 我们的用户名
:00529E8C E8E7A2EDFF              call 00404178
:00529E91 751F                    jne 00529EB2                ====>> 用户码运算结

果不正确才跳,
:00529E93 8D45DC                  lea eax, dword ptr [ebp-24]        暴破时改为NOP

经分析00507350处代码发现(又是循环,又是取位,又是取反....,搞得我头都大了),注册


的第一部份和用户码相同(这么简单的问题???),好了,继续执行到下面的代码。

:00529E96 E85DD1FDFF              call 00506FF8              ====>> 未完成的革命

又在这里继续
:00529E9B 8B55DC                  mov edx, dword ptr [ebp-24] ====>> EDX才是我们需

要的注册码第二
                                                                    部分(通过机

器码运算得到)
:00529E9E 8B45E4                  mov eax, dword ptr [ebp-1C] ====>> 我们的机器码
:00529EA1 E8D2A2EDFF              call 00404178
:00529EA6 750A                    jne 00529EB2 ====>> 机器码运算结果不正确才要跳,

暴破时改为NOP
:00529EA8 8B45FC                  mov eax, dword ptr [ebp-04]
:00529EAB C6804104000001          mov byte ptr [eax+00000441], 01 ====>> 看到这里

了吗,
                                                                        运行到这

里就成功了。

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00529E91(C), :00529EA6(C)
|
:00529EB2 33C0                    xor eax, eax
:00529EB4 5A                      pop edx
:00529EB5 59                      pop ecx
:00529EB6 59                      pop ecx

四、结果:

在识别码中任意取一个用户码作为注册码的第一部份
中间有“-”
注册码第二部份在这里取:“:00529E9B 8B55DC  mov edx, dword ptr [ebp-24]”

用户名:华仔[CCG]
识别码:855F3B3B3358CFC2A3B-7A5746F65067575673
注册码:2B554141495EC5D8A9B-7A2C4712443505E212

用户名:华仔[CCG]

识别码:3A544040485DC4D7A8B-7A5746F65067575673
注册码:855F3B3B3358CFC2A3B-7A2C4712443505E212

识别码:58524E3E365BC2D5A6B-7A5746F65067575673
注册码:3A544040485DC4D7A8B-7A2C4712443505E212

识别码:2B554141495EC5D8A9B-7A5746F65067575673
注册码:3A544040485DC4D7A8B-7A2C4712443505E212