冷血书生 发表于 2006-11-5 03:01:15

XXXXXX过滤系统 算法分析

【破解日期】2006年11月5日(传说今天是四狗齐贺月最圆--->20时58分)
【破解作者】 冷血书生
【作者邮箱】 暂没
【作者主页】 hxxp://www.126sohu.com
【使用工具】 OD
【破解平台】 Win9x/NT/2000/XP
【软件名称】 XXXXXX过滤系统
【下载地址】 略过
【软件简介】 人们在享受Internet 给我们带来的无限快乐的同时,却忽略了他的危害性.随着Internet 的逐渐普及,走进了大众家庭.但是被Internet 毒害的青少年也在逐年的增长.因为沉迷于网络游戏,上网聊天,上色情网站而矬学甚至走上犯罪道路的青少年在全国已经是一个普遍现象了.但是又有哪位做家长或老师不担心这些事情会发生在自己的孩子或学生身上呢.所以为了净化网络.还给青少年一个洁净的上网环境.我们制作了XXXXXX过滤系统.希望它能成为无数的家长和老师用来管理孩子上网的有利助手.

【软件大小】 2887KB

【加壳方式】 无
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】


004161AD   .6A 00         push 0                           ; 中断在这里
004161AF   .8D4C24 14   lea ecx,dword ptr ss:
004161B3   .C78424 2C0100>mov dword ptr ss:,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:                  ;ASCII "C:\WINDOWS\system32"
004161CE   .8D5424 0C   lea edx,dword ptr ss:
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
00416215   .50            push eax
00416216   .C68424 2C0100>mov byte ptr ss:,1
0041621E   .E8 FD6D0200   call NetOpt.0043D020                            ;取得机器码
00416223   .8D4C24 20   lea ecx,dword ptr ss:                   ; |
00416227   .51            push ecx                                        ; |Arg1
00416228   .8D4C24 1C   lea ecx,dword ptr ss:                   ; |
0041622C   .E8 5F6B0000   call NetOpt.0041CD90                            ; \第一次计算
00416231      8B15 680E4600 mov edx,dword ptr ds:                  
…………
00416257   .83C4 08       add esp,8
0041625A   .8D5424 0C   lea edx,dword ptr ss:                  ;(ASCII "YCMKYOHOY")
0041625E   .8BCC          mov ecx,esp
00416260   .896424 1C   mov dword ptr ss:,esp
00416264   .52            push edx
00416265   .E8 B66D0200   call NetOpt.0043D020
0041626A   .8D4424 20   lea eax,dword ptr ss:                   ; |第一次计算结果
0041626E   .8D4C24 18   lea ecx,dword ptr ss:                   ; |
00416272   .50            push eax                                        ; |Arg1
00416273   .E8 186B0000   call NetOpt.0041CD90                            ; \第二次计算
00416278   .8D4C24 1C   lea ecx,dword ptr ss:                   ;第二次计算结果
0041627C   .8D5424 08   lea edx,dword ptr ss:
00416280   .51            push ecx
…………
004162AC   .E8 A1450200   call NetOpt.0043A852
004162B1   .8B5424 10   mov edx,dword ptr ss:                   ;假码
004162B5   .8B4424 08   mov eax,dword ptr ss:                  ;真码
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:
0041CDE0|.E8 FF050200   call NetOpt.0043D3E4                            ;取得机器码
0041CDE5|.8B6C24 10   mov ebp,dword ptr ss:
0041CDE9|.33C9          xor ecx,ecx
0041CDEB|.8B75 F8       mov esi,dword ptr ss:
0041CDEE|.85F6          test esi,esi                                    ;测试机器码长度
0041CDF0|.897424 14   mov dword ptr ss:,esi                   ;转移
0041CDF4|.7E 51         jle short NetOpt.0041CE47
0041CDF6|.8BBC24 480400>mov edi,dword ptr ss:
0041CDFD|.8D742E FE   lea esi,dword ptr ds:
0041CE01|>83F9 05       /cmp ecx,5                              ;与5比较
0041CE04|.7D 41         |jge short NetOpt.0041CE47                      ;大于或等于就跳
0041CE06|.8A1429      |mov dl,byte ptr ds:                   ;依次取机器码ASCII值
0041CE09|.BB 1A000000   |mov ebx,1A                           ;ebx=1A
0041CE0E|.0FBE46 01   |movsx eax,byte ptr ds:                  ;倒取机器码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:,dl                  ;结果转移
0041CE26|.8A1429      |mov dl,byte ptr ds:                   ;依次取机器码ASCII值,跟第一次取的相同
0041CE29|.0FBE06      |movsx eax,byte ptr ds:                  ;倒取机器码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:
0041CE3B|.80C2 41       |add dl,41                                 ;dl+41
0041CE3E|.41            |inc ecx
0041CE3F|.8857 FF       |mov byte ptr ds:,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:                  ;获得上面计算的结果
0041CE4E|.C68424 400400>mov byte ptr ss:,1
…………
0041CF25|.64:890D 00000>mov dword ptr fs:,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:
0041CDE0|.E8 FF050200   call NetOpt.0043D3E4                            ;取得第一次计算结果
0041CDE5|.8B6C24 10   mov ebp,dword ptr ss:
0041CDE9|.33C9          xor ecx,ecx
0041CDEB|.8B75 F8       mov esi,dword ptr ss:
0041CDEE|.85F6          test esi,esi                                    ;测试结果长度
0041CDF0|.897424 14   mov dword ptr ss:,esi                   ;转移
0041CDF4|.7E 51         jle short NetOpt.0041CE47
0041CDF6|.8BBC24 480400>mov edi,dword ptr ss:
0041CDFD|.8D742E FE   lea esi,dword ptr ds:
0041CE01|>83F9 05       /cmp ecx,5                              ;与5比较
0041CE04|.7D 41         |jge short NetOpt.0041CE47                      ;大于或等于就跳
0041CE06|.8A1429      |mov dl,byte ptr ds:                   ;依次取第一次计算值
0041CE09|.BB 1A000000   |mov ebx,1A                           ;ebx=1A
0041CE0E|.0FBE46 01   |movsx eax,byte ptr ds:                  ;倒取第一次计算值
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:,dl                     ;结果转移,F
0041CE26|.8A1429      |mov dl,byte ptr ds:                   ;依次取第一次计算值,跟上面取的相同
0041CE29|.0FBE06      |movsx eax,byte ptr ds:                  ;倒取第一次计算值
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:
0041CE3B|.80C2 41       |add dl,41                                 ;dl+41
0041CE3E|.41            |inc ecx
0041CE3F|.8857 FF       |mov byte ptr ds:,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:            ;获得计算结果
0041CE4E|.C68424 400400>mov byte ptr ss:,1
…………
0041CF25|.64:890D 00000>mov dword ptr fs:,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上下断点,中断后在寄存器即可看到真假密码的比较了。
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

bfqyygy 发表于 2006-11-5 15:57:45

学习!!好文章!
页: [1]
查看完整版本: XXXXXX过滤系统 算法分析