senots 发表于 2007-9-15 19:02:17

局域网查看工具v1.60分析~

///已经很早的文章了。我也忘得差不多了,翻出来,大家一起学习下。呵呵
    局域网查看工具v1.60(LanSee)是一款主要用于对局域网(Internet上也适用)上的各种信息进行查看的工具。采用多线程技术,搜索速度很快。它将局域网上比较实用的功能完美地融合在一起,比如搜索计算机(包括计算机名,IP地址,MAC地址,所在工作组,用户),搜索共享资源,搜索共享文件,多线程复制文件(支持断点传输),发短消息,高速端口扫描,捕获指定计算机上的数据包,查看本地计算机上活动的端口,远程重启/关闭计算机等,功能十分强大。该软件是一款绿色软件,解压后直接打开运行,无需安装。
平台:Windows XP SP2
工具:W32Dasm 8.93,Ollydbg_fix
分析说明:
         学习破解,没有任何商业目的!
破解类型:
         简单的非明码比较
难易程度:
         易
Cracker:
      senots
E-mail :
      [email protected]
过程:
   用peid查壳,很好,呵呵,没有哦~运行,输入用户名senots,注册码:9876543210123,提示"您输入的注册名或注册码无效,请重新输入!"W32Dasm加载反汇编,根据提示信息,来到:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00496705(C)               ;双击
|

* Possible StringData Ref from Code Obj ->"您输入的注册名或注册码无效,请重新输入!"
                                  |
:00496794 B810684900            mov eax, 00496810
:00496799 E8AA7DFAFF            call 0043E548
******************************************
用OD载入,找到496705.:
004966EA   |.64:8920   mov dword ptr fs:,esp               ;下断
004966ED   |.8D55 FC   lea edx,dword ptr ss:
004966F0   |.8B86 FC0200>mov eax,dword ptr ds:
004966F6   |.E8 85E6FAFF call 局域网查.00444D80                     ;得到注册码的个数,并放入eax,此时可看到eax=0000000D
004966FB   |.8B45 FC   mov eax,dword ptr ss:               ;将注册码放入eax
004966FE   |.E8 69FFFFFF call 局域网查.0049666C                     ;关键call~~!!
00496703   |.84C0      test al,al                                 ;看al是否为0
00496705   |.0F84 890000>je 局域网查.00496794                     ;关键跳,跳则死~!改为jne后发现,重启后又是未注册版本~
0049670B   |.B2 01       mov dl,1
0049670D   |.A1 9C094700 mov eax,dword ptr ds:
00496712   |.E8 85A3FDFF call 局域网查.00470A9C
00496717   |.8BD8      mov ebx,eax
00496719   |.BA 02000080 mov edx,80000002
0049671E   |.8BC3      mov eax,ebx
00496720   |.E8 17A4FDFF call 局域网查.00470B3C
00496725   |.B1 01       mov cl,1
00496727   |.BA D0674900 mov edx,局域网查.004967D0                  ;ASCII "SOFTWARE\LanSee",从这里推测,注册信息
                                                                              可能会写到注册表,以用来重启校验
0049672C   |.8BC3      mov eax,ebx

*********************************************************************************************
跟进4966FE的关键call,来到:
00496664    .62 65 39 63>ascii "be9c912",0         ;用"be9c912"注册先,哈哈,没成功~ :(记下来,可能有用!
0049666C   /$55          push ebp
0049666D   |.8BEC      mov ebp,esp
0049666F   |.51          push ecx
00496670   |.53          push ebx
00496671   |.8945 FC   mov dword ptr ss:,eax       ;将注册码放入
00496674   |.8B45 FC   mov eax,dword ptr ss:       ;将注册码放入eax
00496677   |.E8 A8E3F6FF call 局域网查.00404A24             ;前辈经验,跳过不跟~
0049667C   |.33C0      xor eax,eax                        ;eax清零
0049667E   |.55          push ebp
0049667F   |.68 BD664900 push 局域网查.004966BD
00496684   |.64:FF30   push dword ptr fs:
00496687   |.64:8920   mov dword ptr fs:,esp
0049668A   |.33DB      xor ebx,ebx                        ;ebx清零
0049668C   |.8B45 FC   mov eax,dword ptr ss:       ;注册码送入eax
0049668F   |.E8 A8E1F6FF call 局域网查.0040483C            ;取注册码的长度,并放到eax中,eax=0D
00496694   |.83F8 0A   cmp eax,0A                         ;与10比较,小于10位则跳走~
00496697   |.7C 0E       jl short 局域网查.004966A7
00496699   |.8B45 FC   mov eax,dword ptr ss:       ;注册码送入eax
0049669C   |.E8 F7FCFFFF call 局域网查.00496398             ;下面有比较,关键~~跟进!
004966A1   |.84C0      test al,al
004966A3   |.74 02       je short 局域网查.004966A7
004966A5   |.B3 01       mov bl,1
004966A7   |>33C0      xor eax,eax
004966A9   |.5A          pop edx
004966AA   |.59          pop ecx
004966AB   |.59          pop ecx
004966AC   |.64:8910   mov dword ptr fs:,edx
004966AF   |.68 C4664900 push 局域网查.004966C4
004966B4   |>8D45 FC   lea eax,dword ptr ss:
004966B7   |.E8 C8DEF6FF call 局域网查.00404584
004966BC   \.C3          retn

********************************************************************************************
跟进49669c的call,来到:
0049638B    .66 72 6D 52>ascii "frmRegister"                  ;呵呵,下面应该是注册算法了~~
00496396       00          db 00
00496397       00          db 00
00496398   /$55          push ebp
00496399   |.8BEC      mov ebp,esp
0049639B   |.83C4 BC   add esp,-44
0049639E   |.53          push ebx
0049639F   |.56          push esi
004963A0   |.33D2      xor edx,edx
004963A2   |.8955 BC   mov dword ptr ss:,edx
004963A5   |.8955 C0   mov dword ptr ss:,edx
004963A8   |.8955 C4   mov dword ptr ss:,edx
004963AB   |.8955 C8   mov dword ptr ss:,edx
004963AE   |.8955 F0   mov dword ptr ss:,edx
004963B1   |.8955 EC   mov dword ptr ss:,edx
004963B4   |.8955 F8   mov dword ptr ss:,edx               ;以上都是一系列的清零
004963B7   |.8945 FC   mov dword ptr ss:,eax               ;注册码送
004963BA   |.8B45 FC   mov eax,dword ptr ss:               ;注册码送入eax
004963BD   |.E8 62E6F6FF call 局域网查.00404A24                     ;跳过
004963C2   |.33C0      xor eax,eax                              ;eax清零
004963C4   |.55          push ebp                              
004963C5   |.68 4B664900 push 局域网查.0049664B
004963CA   |.64:FF30   push dword ptr fs:
004963CD   |.64:8920   mov dword ptr fs:,esp
004963D0   |.33DB      xor ebx,ebx
004963D2   |.8B45 FC   mov eax,dword ptr ss:               ;注册码送入eax
004963D5   |.E8 62E4F6FF call 局域网查.0040483C                     ;取注册码的长度,eax=0D
004963DA   |.8D55 F0   lea edx,dword ptr ss:      
004963DD   |.E8 CA29F7FF call 局域网查.00408DAC                     ;call后,可以看到"13",即是注册码的长度(十进制)
004963E2   |.8B45 F0   mov eax,dword ptr ss:
004963E5   |.50          push eax                                 ;"13"进栈
004963E6   |.8D45 E8   lea eax,dword ptr ss:
004963E9   |.8B55 FC   mov edx,dword ptr ss:               ;注册码送到edx
004963EC   |.8A52 01   mov dl,byte ptr ds:               ;取注册码的第2位
004963EF   |.8850 01   mov byte ptr ds:,dl               ;放入
004963F2   |.C600 01   mov byte ptr ds:,1                  ;1送入
004963F5   |.8D55 E8   lea edx,dword ptr ss:
004963F8   |.8D45 E4   lea eax,dword ptr ss:
004963FB   |.E8 18CBF6FF call 局域网查.00402F18                     
00496400   |.8D45 E0   lea eax,dword ptr ss:
00496403   |.8B55 FC   mov edx,dword ptr ss:               ;注册码送到edx
00496406   |.8A52 04   mov dl,byte ptr ds:               ;取注册码的第5位
00496409   |.8850 01   mov byte ptr ds:,dl            
0049640C   |.C600 01   mov byte ptr ds:,1
0049640F   |.8D55 E0   lea edx,dword ptr ss:
00496412   |.8D45 E4   lea eax,dword ptr ss:
00496415   |.B1 02       mov cl,2                                 ;cl赋值为2
00496417   |.E8 CCCAF6FF call 局域网查.00402EE8               
0049641C   |.8D55 E4   lea edx,dword ptr ss:
0049641F   |.8D45 DC   lea eax,dword ptr ss:
00496422   |.E8 F1CAF6FF call 局域网查.00402F18
00496427   |.8D45 E0   lea eax,dword ptr ss:
0049642A   |.8B55 FC   mov edx,dword ptr ss:               ;注册码送到edx
0049642D   |.8A52 06   mov dl,byte ptr ds:               ;取注册码的第7位
00496430   |.8850 01   mov byte ptr ds:,dl
00496433   |.C600 01   mov byte ptr ds:,1
00496436   |.8D55 E0   lea edx,dword ptr ss:
00496439   |.8D45 DC   lea eax,dword ptr ss:
0049643C   |.B1 03       mov cl,3                                    ;cl=3
0049643E   |.E8 A5CAF6FF call 局域网查.00402EE8
00496443   |.8D55 DC   lea edx,dword ptr ss:
00496446   |.8D45 D4   lea eax,dword ptr ss:
00496449   |.E8 CACAF6FF call 局域网查.00402F18
0049644E   |.8D45 E0   lea eax,dword ptr ss:
00496451   |.8B55 FC   mov edx,dword ptr ss:                ;注册码送到edx
00496454   |.8A52 07   mov dl,byte ptr ds:                  ;取注册码的第8位
00496457   |.8850 01   mov byte ptr ds:,dl
0049645A   |.C600 01   mov byte ptr ds:,1
0049645D   |.8D55 E0   lea edx,dword ptr ss:
00496460   |.8D45 D4   lea eax,dword ptr ss:
00496463   |.B1 04       mov cl,4                                    ;cl=4
00496465   |.E8 7ECAF6FF call 局域网查.00402EE8   
0049646A   |.8D55 D4   lea edx,dword ptr ss:
0049646D   |.8D45 CC   lea eax,dword ptr ss:
00496470   |.E8 A3CAF6FF call 局域网查.00402F18
00496475   |.8D45 E0   lea eax,dword ptr ss:
00496478   |.8B55 FC   mov edx,dword ptr ss:               ;注册码送到edx
0049647B   |.8A52 09   mov dl,byte ptr ds:                   ;取注册码的第10位
0049647E   |.8850 01   mov byte ptr ds:,dl
00496481   |.C600 01   mov byte ptr ds:,1
00496484   |.8D55 E0   lea edx,dword ptr ss:
00496487   |.8D45 CC   lea eax,dword ptr ss:
0049648A   |.B1 05       mov cl,5                                    ;cl=5
0049648C   |.E8 57CAF6FF call 局域网查.00402EE8
00496491   |.8D55 CC   lea edx,dword ptr ss:         
00496494   |.8D45 EC   lea eax,dword ptr ss:               ;得到"85320"
00496497   |.E8 44E3F6FF call 局域网查.004047E0                  
0049649C   |.8B55 EC   mov edx,dword ptr ss:
0049649F   |.8D45 F8   lea eax,dword ptr ss:
004964A2   |.59          pop ecx                                     ;ecx="13"
004964A3   |.E8 E0E3F6FF call 局域网查.00404888                      ;把"13"与"85320"连起来,即为"8532013"
004964A8   |.8B45 F8   mov eax,dword ptr ss:
004964AB   |.0FB600      movzx eax,byte ptr ds:               ;取"8532013"的第1位
004964AE   |.8B55 F8   mov edx,dword ptr ss:
004964B1   |.0FB652 01   movzx edx,byte ptr ds:               ;取"8532013"的第2位
004964B5   |.03C2      add eax,edx                                 ;第1位与第2位相加,和在eax中
004964B7   |.B9 05000000 mov ecx,5
004964BC   |.99          cdq
004964BD   |.F7F9      idiv ecx                                    ;上面得到的和除以5,余数放在dl中
004964BF   |.80C2 61   add dl,61                                 ;余数与61相加,得"e"
004964C2   |.8855 F4   mov byte ptr ss:,dl                  ;得到的结果放到
004964C5   |.8B45 F8   mov eax,dword ptr ss:
004964C8   |.33C9      xor ecx,ecx
004964CA   |.8A48 02   mov cl,byte ptr ds:                  ;取第3位,送cl
004964CD   |.8BC1      mov eax,ecx                                 ;第3位送eax
004964CF   |.8B55 F8   mov edx,dwo rd ptr ss:
004964D2   |.0FB652 03   movzx edx,byte ptr ds:
004964D6   |.03C2      add eax,edx
004964D8   |.BE 05000000 mov esi,5
004964DD   |.99          cdq
004964DE   |.F7FE      idiv esi
004964E0   |.80C2 61   add dl,61
004964E3   |.8855 F5   mov byte ptr ss:,dl               ;"8532013"的第3位与第4位相加,和除以5,余数加61,结果"b"送
004964E6   |.8B45 F8   mov eax,dword ptr ss:
004964E9   |.0FB640 04   movzx eax,byte ptr ds:
004964ED   |.8B55 F8   mov edx,dword ptr ss:
004964F0   |.0FB652 05   movzx edx,byte ptr ds:
004964F4   |.03C2      add eax,edx
004964F6   |.BE 05000000 mov esi,5
004964FB   |.99          cdq
004964FC   |.F7FE      idiv esi
004964FE   |.80C2 61   add dl,61
00496501   |.8855 F6   mov byte ptr ss:,dl               ;"8532013"的第5位与第6位相加,和除以5,余数加61,结果"c"送
00496504   |.8B45 F8   mov eax,dword ptr ss:
00496507   |.0FB640 06   movzx eax,byte ptr ds:            ;取第7位
0049650B   |.03C1      add eax,ecx                              ;此时,cl为33,即第3位
0049650D   |.8B55 F8   mov edx,dword ptr ss:
00496510   |.0FB652 01   movzx edx,byte ptr ds:            ;第2位      
00496514   |.03C2      add eax,edx                              ;第2位+第3位+第7位
00496516   |.B9 05000000 mov ecx,5
0049651B   |.99          cdq
0049651C   |.F7F9      idiv ecx
0049651E   |.80C2 61   add dl,61
00496521   |.8855 F7   mov byte ptr ss:,dl                ;第2位+第3位+第7位的和除以5,余数加61,结果"a",送入
00496524   |.8D45 C8   lea eax,dword ptr ss:
00496527   |.8A55 F4   mov dl,byte ptr ss:               ;"e"送入dl
0049652A   |.E8 35E2F6FF call 局域网查.00404764
0049652F   |.8B45 C8   mov eax,dword ptr ss:
00496532   |.8D55 F8   lea edx,dword ptr ss:
00496535   |.B9 01000000 mov ecx,1
0049653A   |.E8 DDE5F6FF call 局域网查.00404B1C
0049653F   |.8D45 C4   lea eax,dword ptr ss:            ;这里可以看到,edx="e8532013",所以上面这个call应该是把字符插入"8532013"第eax位
00496542   |.8A55 F7   mov dl,byte ptr ss:               ;"a"送入dl
00496545   |.E8 1AE2F6FF call 局域网查.00404764
0049654A   |.8B45 C4   mov eax,dword ptr ss:
0049654D   |.8D55 F8   lea edx,dword ptr ss:
00496550   |.B9 03000000 mov ecx,3
00496555   |.E8 C2E5F6FF call 局域网查.00404B1C                     ;"a"插入到第3位,即为"e8a532013"
0049655A   |.8B45 FC   mov eax,dword ptr ss:               ;注册码送到eax
0049655D   |.0FB600      movzx eax,byte ptr ds:                ;取注册码的第一位
00496560   |.B9 3B000000 mov ecx,3B                                 ;给ecx赋值3B
00496565   |.33D2      xor edx,edx                              ;edx清零
00496567   |.F7F1      div ecx                                    ;注册码的第一位除以3B,余数放入dx
00496569   |.83FA 2E   cmp edx,2E                                 ;比较edx与2E,大于则跳,***********************************************②
0049656C   |.0F87 A40000>ja 局域网查.00496616                     ;跳则挂了~注意:我填的注册码在这里就跳了,不过为了方便,
                                                                     ;修改了注册码后,其他地方得到的值我就不一一改了,还是继续用前面算的
00496572   |.8D45 C0   lea eax,dword ptr ss:
00496575   |.8A55 F5   mov dl,byte ptr ss:               ;"b"送入dl
00496578   |.E8 E7E1F6FF call 局域网查.00404764   
0049657D   |.8B45 C0   mov eax,dword ptr ss:
00496580   |.8D55 F8   lea edx,dword ptr ss:
00496583   |.B9 05000000 mov ecx,5
00496588   |.E8 8FE5F6FF call 局域网查.00404B1C                     ;得到"e8a5b32013"
0049658D   |.8D45 BC   lea eax,dword ptr ss:
00496590   |.8A55 F6   mov dl,byte ptr ss:            
00496593   |.E8 CCE1F6FF call 局域网查.00404764
00496598   |.8B45 BC   mov eax,dword ptr ss:
0049659B   |.8D55 F8   lea edx,dword ptr ss:
0049659E   |.B9 09000000 mov ecx,9
004965A3   |.E8 74E5F6FF call 局域网查.00404B1C                     ;得到"e8a5b320913"
004965A8   |.8D45 F8   lea eax,dword ptr ss:   
004965AB   |.B9 01000000 mov ecx,1
004965B0   |.BA 09000000 mov edx,9
004965B5   |.E8 1AE5F6FF call 局域网查.00404AD4                     ;这个call是干什么的呢??先不管
004965BA   |.8D45 F8   lea eax,dword ptr ss:               ;这里得到了"e8a5b32013"
004965BD   |.B9 01000000 mov ecx,1
004965C2   |.BA 07000000 mov edx,7
004965C7   |.E8 08E5F6FF call 局域网查.00404AD4                     ;原来它是去掉第edx位
004965CC   |.8B45 FC   mov eax,dword ptr ss:               ;得到"e8a5b3013"
004965CF   |.0FB640 08   movzx eax,byte ptr ds:            ;取注册码的第9位
004965D3   |.B9 3D000000 mov ecx,3D
004965D8   |.33D2      xor edx,edx
004965DA   |.F7F1      div ecx
004965DC   |.83FA 2A   cmp edx,2A                                 ;第9位的ascii值除以3D,跟2D比较,大则跳*********************************③
004965DF   |.77 35       ja short 局域网查.00496616               ; 修改后注册码后继续~
004965E1   |.8D45 F8   lea eax,dword ptr ss:
004965E4   |.B9 01000000 mov ecx,1
004965E9   |.BA 02000000 mov edx,2
004965EE   |.E8 E1E4F6FF call 局域网查.00404AD4                     ;得到"ea5b3013"
004965F3   |.8D45 F8   lea eax,dword ptr ss:
004965F6   |.B9 01000000 mov ecx,1
004965FB   |.BA 06000000 mov edx,6
00496600   |.E8 CFE4F6FF call 局域网查.00404AD4                     ;得到"ea5b313"
00496605   |.8B45 F8   mov eax,dword ptr ss:               ;得到的;得到"ea5b313"放入eax
00496608   |.BA 64664900 mov edx,局域网查.00496664                  ;OD注释:ASCII "be9c912"
0049660D   |.E8 6EE3F6FF call 局域网查.00404980                     ;下面有跳,上面有值,应该是比较call了~!
00496612   |.75 02       jnz short 局域网查.00496616                ;不等则跳~
00496614   |.B3 01       mov bl,1
00496616   |>33C0      xor eax,eax                              ;eax清零
00496618   |.5A          pop edx
00496619   |.59          pop ecx
0049661A   |.59          pop ecx
0049661B   |.64:8910   mov dword ptr fs:,edx
0049661E   |.68 52664900 push 局域网查.00496652
00496623   |>8D45 BC   lea eax,dword ptr ss:
00496626   |.BA 04000000 mov edx,4
0049662B   |.E8 78DFF6FF call 局域网查.004045A8
00496630   |.8D45 EC   lea eax,dword ptr ss:
00496633   |.BA 02000000 mov edx,2
00496638   |.E8 6BDFF6FF call 局域网查.004045A8
0049663D   |.8D45 F8   lea eax,dword ptr ss:
00496640   |.BA 02000000 mov edx,2
00496645   |.E8 5EDFF6FF call 局域网查.004045A8
0049664A   \.C3          retn
0049664B    .^ E9 D8D8F6FF jmp 局域网查.00403F28
00496650    .^ EB D1       jmp short 局域网查.00496623   
00496652    .8BC3      mov eax,ebx                                 ;ebx中的值给eax,子程序返回后,判断eax是不是为0,为0则死~!
                                                                        ;所以,496612那里不能跳~!
00496654    .5E          pop esi
00496655    .5B          pop ebx
00496656    .8BE5      mov esp,ebp
00496658    .5D          pop ebp   
00496659    .C3          retn                                       ;返回
0049665A       00          db 00   
0049665B       00          db 00


总结:(1)注册跟用户名没有关系~;
   (2)注册码应该满足:①必须12位,因为要等于"be9c912",后两位是注册玛的长度,所以一定要12位;
                     ②注册码的第1位的ascii值必须满足:小于等于2E,或者在3B到69之间
                     ③注册码的第9位的ascii值必须满足:小于等于2A,或者在3D到67之间
   (3)注册码的第5位和第7位为9
   (4)由得到的"ea5b313",可得注册码的第2.5.7.8位有如下关系:
             ascii(b)=62=(2位+5位)%5+61
             ascii(e)=65=(5位+7位+32)%5+61
             ascii(c)=63=(7位+8位)%5+61                     ;全为16进制数
   (5)解得:2位= 6 8位= 7 还有其他答案~!!(其他位随便)   
   (6)只要满足以上条件, (其他位随便填) 就可以注册成功~!即:*6**9*97****
      a6aa9a97aaaa   b6bb9b97bbbb                        

我是菜鸟,望大家多多指教~!
另外,谢谢prince,很多东西都是参考的他的文章,少走了很多的弯路~

[ 本帖最后由 senots 于 2007-9-19 15:54 编辑 ]

coolmy 发表于 2007-9-15 21:17:12

哇,有的学习了`呵呵

aaasss123123 发表于 2007-9-15 22:20:49

呵呵,先学习一下!

senots 发表于 2007-10-3 15:20:54

第一次得精华啊。。。。。。。
很久前的文章了。多谢老大看得起。我会努力的。呵呵`~

775825866 发表于 2007-10-4 12:05:32

谢谢了,学习了啊下!
页: [1]
查看完整版本: 局域网查看工具v1.60分析~