【破解日期】2006年11月5日(传说今天是四狗齐贺月最圆--->20时58分)
【破解作者】 冷血书生
【作者邮箱】 暂没
【作者主页】 hxxp://www.126sohu.com
【使用工具】 OD
【破解平台】 Win9x/NT/2000/XP
【软件名称】 洁网网络过滤系统V1.0
【下载地址】 略过
【加壳方式】 无
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
代码:
004161AD . 6A 00 push 0 ; 中断在这里
004161AF . 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
004161B3 . C78424 2C0100>mov dword ptr ss:[esp+12C],0
004161BE . E8 CA730200 call NetOpt.0043D58D
004161C3 . 50 push eax ; |Buffer
004161C4 . FF15 3CF24400 call dword ptr ds:[<&KERNEL32.GetSystemDirector>; \GetSystemDirectoryA
004161CA . 8B4C24 0C mov ecx,dword ptr ss:[esp+C] ; ASCII "C:\WINDOWS\system32"
004161CE . 8D5424 0C lea edx,dword ptr ss:[esp+C]
004161D2 . 51 push ecx
004161D3 . 68 60014600 push NetOpt.00460160 ; ASCII "%s\netinfoset.ini"
004161D8 . 52 push edx
004161D9 . E8 7A0B0200 call NetOpt.00436D58 ; 连接
004161DE . 83C4 0C add esp,0C
…………
00416211 . 896424 1C mov dword ptr ss:[esp+1C],esp
00416215 . 50 push eax
00416216 . C68424 2C0100>mov byte ptr ss:[esp+12C],1
0041621E . E8 FD6D0200 call NetOpt.0043D020 ; 取得机器码
00416223 . 8D4C24 20 lea ecx,dword ptr ss:[esp+20] ; |
00416227 . 51 push ecx ; |Arg1
00416228 . 8D4C24 1C lea ecx,dword ptr ss:[esp+1C] ; |
0041622C . E8 5F6B0000 call NetOpt.0041CD90 ; \第一次计算
00416231 8B15 680E4600 mov edx,dword ptr ds:[460E68]
…………
00416257 . 83C4 08 add esp,8
0041625A . 8D5424 0C lea edx,dword ptr ss:[esp+C] ; (ASCII "YCMKYOHOY")
0041625E . 8BCC mov ecx,esp
00416260 . 896424 1C mov dword ptr ss:[esp+1C],esp
00416264 . 52 push edx
00416265 . E8 B66D0200 call NetOpt.0043D020
0041626A . 8D4424 20 lea eax,dword ptr ss:[esp+20] ; |第一次计算结果
0041626E . 8D4C24 18 lea ecx,dword ptr ss:[esp+18] ; |
00416272 . 50 push eax ; |Arg1
00416273 . E8 186B0000 call NetOpt.0041CD90 ; \第二次计算
00416278 . 8D4C24 1C lea ecx,dword ptr ss:[esp+1C] ; 第二次计算结果
0041627C . 8D5424 08 lea edx,dword ptr ss:[esp+8]
00416280 . 51 push ecx
…………
004162AC . E8 A1450200 call NetOpt.0043A852
004162B1 . 8B5424 10 mov edx,dword ptr ss:[esp+10] ; 假码
004162B5 . 8B4424 08 mov eax,dword ptr ss:[esp+8] ; 真码
004162B9 . 52 push edx ; /Arg2
004162BA . 50 push eax ; |Arg1
004162BB . E8 C51A0100 call NetOpt.00427D85 ; \NetOpt.00427D85 // 经典的比较Call
004162C0 . 83C4 08 add esp,8
004162C3 . 85C0 test eax,eax
004162C5 . 0F85 99000000 jnz NetOpt.00416364 ; 不相等就注册失败,爆破点
004162CB . 68 EC014600 push NetOpt.004601EC ; ASCII "no"
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
第一次计算:
0041CDDB |. 51 push ecx
0041CDDC |. 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
0041CDE0 |. E8 FF050200 call NetOpt.0043D3E4 ; 取得机器码
0041CDE5 |. 8B6C24 10 mov ebp,dword ptr ss:[esp+10]
0041CDE9 |. 33C9 xor ecx,ecx
0041CDEB |. 8B75 F8 mov esi,dword ptr ss:[ebp-8]
0041CDEE |. 85F6 test esi,esi ; 测试机器码长度
0041CDF0 |. 897424 14 mov dword ptr ss:[esp+14],esi ; 转移
0041CDF4 |. 7E 51 jle short NetOpt.0041CE47
0041CDF6 |. 8BBC24 480400>mov edi,dword ptr ss:[esp+448]
0041CDFD |. 8D742E FE lea esi,dword ptr ds:[esi+ebp-2]
0041CE01 |> 83F9 05 /cmp ecx,5 ; 与5比较
0041CE04 |. 7D 41 |jge short NetOpt.0041CE47 ; 大于或等于就跳
0041CE06 |. 8A1429 |mov dl,byte ptr ds:[ecx+ebp] ; 依次取机器码ASCII值
0041CE09 |. BB 1A000000 |mov ebx,1A ; ebx=1A
0041CE0E |. 0FBE46 01 |movsx eax,byte ptr ds:[esi+1] ; 倒取机器码ASCII值
0041CE12 |. 0FBED2 |movsx edx,dl ; dl转移
0041CE15 |. 33C2 |xor eax,edx ; eax xor edx
0041CE17 |. 83C7 02 |add edi,2
0041CE1A |. 83F0 2A |xor eax,2A ; eax xor 2A
0041CE1D |. 99 |cdq
0041CE1E |. F7FB |idiv ebx ; /1A
0041CE20 |. 80C2 41 |add dl,41 ; 余数+41
0041CE23 |. 8857 FE |mov byte ptr ds:[edi-2],dl ; 结果转移
0041CE26 |. 8A1429 |mov dl,byte ptr ds:[ecx+ebp] ; 依次取机器码ASCII值,跟第一次取的相同
0041CE29 |. 0FBE06 |movsx eax,byte ptr ds:[esi] ; 倒取机器码ASCII值
0041CE2C |. 0FBED2 |movsx edx,dl ; dl值转移
0041CE2F |. 33C2 |xor eax,edx ; eax xor edx
0041CE31 |. 83F0 55 |xor eax,55 ; eax xor 55
0041CE34 |. 99 |cdq
0041CE35 |. F7FB |idiv ebx ; /1A
0041CE37 |. 8B4424 14 |mov eax,dword ptr ss:[esp+14]
0041CE3B |. 80C2 41 |add dl,41 ; dl+41
0041CE3E |. 41 |inc ecx
0041CE3F |. 8857 FF |mov byte ptr ds:[edi-1],dl ; dl值转移
0041CE42 |. 4E |dec esi
0041CE43 |. 3BC8 |cmp ecx,eax ; 比较
0041CE45 |.^ 7C BA \jl short NetOpt.0041CE01 ; 循环4次
0041CE47 |> 8B8424 480400>mov eax,dword ptr ss:[esp+448] ; 获得上面计算的结果
0041CE4E |. C68424 400400>mov byte ptr ss:[esp+440],1
…………
0041CF25 |. 64:890D 00000>mov dword ptr fs:[0],ecx
0041CF2C |. 81C4 34040000 add esp,434
0041CF32 \. C2 0800 retn 8 ; 返回
第一次计算值:
取机器码第一位ASCII值异或倒取机器码第一位ASCII值,然后再异或2Ah, 结果除以1Ah,余数加上41h
,即为计算结果奇数位(当然这里是指依次的);取机器码第一位ASCII值异或倒取机器码第二位ASCII值
,然后再异或55h,结果除以1Ah,余数加上41h,即为计算结果偶数位(当然这里是指依次的)。
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
第二次计算:
0041CDDC |. 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
0041CDE0 |. E8 FF050200 call NetOpt.0043D3E4 ; 取得第一次计算结果
0041CDE5 |. 8B6C24 10 mov ebp,dword ptr ss:[esp+10]
0041CDE9 |. 33C9 xor ecx,ecx
0041CDEB |. 8B75 F8 mov esi,dword ptr ss:[ebp-8]
0041CDEE |. 85F6 test esi,esi ; 测试结果长度
0041CDF0 |. 897424 14 mov dword ptr ss:[esp+14],esi ; 转移
0041CDF4 |. 7E 51 jle short NetOpt.0041CE47
0041CDF6 |. 8BBC24 480400>mov edi,dword ptr ss:[esp+448]
0041CDFD |. 8D742E FE lea esi,dword ptr ds:[esi+ebp-2]
0041CE01 |> 83F9 05 /cmp ecx,5 ; 与5比较
0041CE04 |. 7D 41 |jge short NetOpt.0041CE47 ; 大于或等于就跳
0041CE06 |. 8A1429 |mov dl,byte ptr ds:[ecx+ebp] ; 依次取第一次计算值
0041CE09 |. BB 1A000000 |mov ebx,1A ; ebx=1A
0041CE0E |. 0FBE46 01 |movsx eax,byte ptr ds:[esi+1] ; 倒取第一次计算值
0041CE12 |. 0FBED2 |movsx edx,dl ; dl转移
0041CE15 |. 33C2 |xor eax,edx ; eax xor edx
0041CE17 |. 83C7 02 |add edi,2
0041CE1A |. 83F0 2A |xor eax,2A ; eax xor 2A
0041CE1D |. 99 |cdq
0041CE1E |. F7FB |idiv ebx ; /1A
0041CE20 |. 80C2 41 |add dl,41 ; 余数+41
0041CE23 |. 8857 FE |mov byte ptr ds:[edi-2],dl ; 结果转移,F
0041CE26 |. 8A1429 |mov dl,byte ptr ds:[ecx+ebp] ; 依次取第一次计算值,跟上面取的相同
0041CE29 |. 0FBE06 |movsx eax,byte ptr ds:[esi] ; 倒取第一次计算值
0041CE2C |. 0FBED2 |movsx edx,dl ; dl值转移
0041CE2F |. 33C2 |xor eax,edx ; eax xor edx
0041CE31 |. 83F0 55 |xor eax,55 ; eax xor 55
0041CE34 |. 99 |cdq
0041CE35 |. F7FB |idiv ebx ; /1A
0041CE37 |. 8B4424 14 |mov eax,dword ptr ss:[esp+14]
0041CE3B |. 80C2 41 |add dl,41 ; dl+41
0041CE3E |. 41 |inc ecx
0041CE3F |. 8857 FF |mov byte ptr ds:[edi-1],dl ; dl值转移
0041CE42 |. 4E |dec esi
0041CE43 |. 3BC8 |cmp ecx,eax ; 比较
0041CE45 |.^ 7C BA \jl short NetOpt.0041CE01 ; 循环4次
0041CE47 |> 8B8424 480400>mov eax,dword ptr ss:[esp+448] ; 获得计算结果
0041CE4E |. C68424 400400>mov byte ptr ss:[esp+440],1
…………
0041CF25 |. 64:890D 00000>mov dword ptr fs:[0],ecx
0041CF2C |. 81C4 34040000 add esp,434
0041CF32 \. C2 0800 retn 8 ; 返回
第二次计算值:
取第一次计算结果值第一位ASCII值异或倒取第一次计算结果值第一位ASCII值,然后再
异或2Ah, 结果除以1Ah,余数加上41h,即为计算结果奇数位(当然这里是指依次的);取第一次计算结
果值第一位ASCII值异或倒取第一次计算结果值第二位ASCII值,然后再异或55h,结果除以1Ah,余数加
上41h,即为计算结果偶数位.
【总结】
注册码只与机器码有关,机器码取硬盘ID,经过两次的计算就可以得到正确的注册码啦!
这个程序在一运行时就需要设置密码的,运行后会在系统盘下WINDOWS\system32下建立一个名为netinfoset的ini文件,忘记自己设置的密码的话,可以在这个文件里找到以前设下的密码,如果你还想领略一下OD的迷人风采,可以在00409429 |. E8 57E90100 call NetOpt.00427D85 上下断点,中断后在寄存器即可看到真假密码的比较了。
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!