- UID
- 35204
注册时间2007-8-25
阅读权限20
最后登录1970-1-1
以武会友
该用户从未签到
|
///已经很早的文章了。我也忘得差不多了,翻出来,大家一起学习下。呵呵
局域网查看工具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:[eax],esp ;下断
004966ED |. 8D55 FC lea edx,dword ptr ss:[ebp-4]
004966F0 |. 8B86 FC0200>mov eax,dword ptr ds:[esi+2FC]
004966F6 |. E8 85E6FAFF call 局域网查.00444D80 ;得到注册码的个数,并放入eax,此时可看到eax=0000000D
004966FB |. 8B45 FC mov eax,dword ptr ss:[ebp-4] ;将注册码放入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:[47099C]
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:[ebp-4],eax ;将注册码放入[ebp-4]
00496674 |. 8B45 FC mov eax,dword ptr ss:[ebp-4] ;将注册码放入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:[eax]
00496687 |. 64:8920 mov dword ptr fs:[eax],esp
0049668A |. 33DB xor ebx,ebx ;ebx清零
0049668C |. 8B45 FC mov eax,dword ptr ss:[ebp-4] ;注册码送入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:[ebp-4] ;注册码送入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:[eax],edx
004966AF |. 68 C4664900 push 局域网查.004966C4
004966B4 |> 8D45 FC lea eax,dword ptr ss:[ebp-4]
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:[ebp-44],edx
004963A5 |. 8955 C0 mov dword ptr ss:[ebp-40],edx
004963A8 |. 8955 C4 mov dword ptr ss:[ebp-3C],edx
004963AB |. 8955 C8 mov dword ptr ss:[ebp-38],edx
004963AE |. 8955 F0 mov dword ptr ss:[ebp-10],edx
004963B1 |. 8955 EC mov dword ptr ss:[ebp-14],edx
004963B4 |. 8955 F8 mov dword ptr ss:[ebp-8],edx ;以上都是一系列的清零
004963B7 |. 8945 FC mov dword ptr ss:[ebp-4],eax ;注册码送[ebp-4]
004963BA |. 8B45 FC mov eax,dword ptr ss:[ebp-4] ;注册码送入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:[eax]
004963CD |. 64:8920 mov dword ptr fs:[eax],esp
004963D0 |. 33DB xor ebx,ebx
004963D2 |. 8B45 FC mov eax,dword ptr ss:[ebp-4] ;注册码送入eax
004963D5 |. E8 62E4F6FF call 局域网查.0040483C ;取注册码的长度,eax=0D
004963DA |. 8D55 F0 lea edx,dword ptr ss:[ebp-10]
004963DD |. E8 CA29F7FF call 局域网查.00408DAC ;call后,可以看到"13",即是注册码的长度(十进制)
004963E2 |. 8B45 F0 mov eax,dword ptr ss:[ebp-10]
004963E5 |. 50 push eax ;"13"进栈
004963E6 |. 8D45 E8 lea eax,dword ptr ss:[ebp-18]
004963E9 |. 8B55 FC mov edx,dword ptr ss:[ebp-4] ;注册码送到edx
004963EC |. 8A52 01 mov dl,byte ptr ds:[edx+1] ;取注册码的第2位
004963EF |. 8850 01 mov byte ptr ds:[eax+1],dl ;放入[eax+1]
004963F2 |. C600 01 mov byte ptr ds:[eax],1 ;1送入[eax]
004963F5 |. 8D55 E8 lea edx,dword ptr ss:[ebp-18]
004963F8 |. 8D45 E4 lea eax,dword ptr ss:[ebp-1C]
004963FB |. E8 18CBF6FF call 局域网查.00402F18
00496400 |. 8D45 E0 lea eax,dword ptr ss:[ebp-20]
00496403 |. 8B55 FC mov edx,dword ptr ss:[ebp-4] ;注册码送到edx
00496406 |. 8A52 04 mov dl,byte ptr ds:[edx+4] ;取注册码的第5位
00496409 |. 8850 01 mov byte ptr ds:[eax+1],dl
0049640C |. C600 01 mov byte ptr ds:[eax],1
0049640F |. 8D55 E0 lea edx,dword ptr ss:[ebp-20]
00496412 |. 8D45 E4 lea eax,dword ptr ss:[ebp-1C]
00496415 |. B1 02 mov cl,2 ;cl赋值为2
00496417 |. E8 CCCAF6FF call 局域网查.00402EE8
0049641C |. 8D55 E4 lea edx,dword ptr ss:[ebp-1C]
0049641F |. 8D45 DC lea eax,dword ptr ss:[ebp-24]
00496422 |. E8 F1CAF6FF call 局域网查.00402F18
00496427 |. 8D45 E0 lea eax,dword ptr ss:[ebp-20]
0049642A |. 8B55 FC mov edx,dword ptr ss:[ebp-4] ;注册码送到edx
0049642D |. 8A52 06 mov dl,byte ptr ds:[edx+6] ;取注册码的第7位
00496430 |. 8850 01 mov byte ptr ds:[eax+1],dl
00496433 |. C600 01 mov byte ptr ds:[eax],1
00496436 |. 8D55 E0 lea edx,dword ptr ss:[ebp-20]
00496439 |. 8D45 DC lea eax,dword ptr ss:[ebp-24]
0049643C |. B1 03 mov cl,3 ;cl=3
0049643E |. E8 A5CAF6FF call 局域网查.00402EE8
00496443 |. 8D55 DC lea edx,dword ptr ss:[ebp-24]
00496446 |. 8D45 D4 lea eax,dword ptr ss:[ebp-2C]
00496449 |. E8 CACAF6FF call 局域网查.00402F18
0049644E |. 8D45 E0 lea eax,dword ptr ss:[ebp-20]
00496451 |. 8B55 FC mov edx,dword ptr ss:[ebp-4] ;注册码送到edx
00496454 |. 8A52 07 mov dl,byte ptr ds:[edx+7] ;取注册码的第8位
00496457 |. 8850 01 mov byte ptr ds:[eax+1],dl
0049645A |. C600 01 mov byte ptr ds:[eax],1
0049645D |. 8D55 E0 lea edx,dword ptr ss:[ebp-20]
00496460 |. 8D45 D4 lea eax,dword ptr ss:[ebp-2C]
00496463 |. B1 04 mov cl,4 ;cl=4
00496465 |. E8 7ECAF6FF call 局域网查.00402EE8
0049646A |. 8D55 D4 lea edx,dword ptr ss:[ebp-2C]
0049646D |. 8D45 CC lea eax,dword ptr ss:[ebp-34]
00496470 |. E8 A3CAF6FF call 局域网查.00402F18
00496475 |. 8D45 E0 lea eax,dword ptr ss:[ebp-20]
00496478 |. 8B55 FC mov edx,dword ptr ss:[ebp-4] ;注册码送到edx
0049647B |. 8A52 09 mov dl,byte ptr ds:[edx+9] ;取注册码的第10位
0049647E |. 8850 01 mov byte ptr ds:[eax+1],dl
00496481 |. C600 01 mov byte ptr ds:[eax],1
00496484 |. 8D55 E0 lea edx,dword ptr ss:[ebp-20]
00496487 |. 8D45 CC lea eax,dword ptr ss:[ebp-34]
0049648A |. B1 05 mov cl,5 ;cl=5
0049648C |. E8 57CAF6FF call 局域网查.00402EE8
00496491 |. 8D55 CC lea edx,dword ptr ss:[ebp-34]
00496494 |. 8D45 EC lea eax,dword ptr ss:[ebp-14] ;得到"85320"
00496497 |. E8 44E3F6FF call 局域网查.004047E0
0049649C |. 8B55 EC mov edx,dword ptr ss:[ebp-14]
0049649F |. 8D45 F8 lea eax,dword ptr ss:[ebp-8]
004964A2 |. 59 pop ecx ;ecx="13"
004964A3 |. E8 E0E3F6FF call 局域网查.00404888 ;把"13"与"85320"连起来,即为"8532013"
004964A8 |. 8B45 F8 mov eax,dword ptr ss:[ebp-8]
004964AB |. 0FB600 movzx eax,byte ptr ds:[eax] ;取"8532013"的第1位
004964AE |. 8B55 F8 mov edx,dword ptr ss:[ebp-8]
004964B1 |. 0FB652 01 movzx edx,byte ptr ds:[edx+1] ;取"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:[ebp-C],dl ;得到的结果放到[ebp-c]
004964C5 |. 8B45 F8 mov eax,dword ptr ss:[ebp-8]
004964C8 |. 33C9 xor ecx,ecx
004964CA |. 8A48 02 mov cl,byte ptr ds:[eax+2] ;取第3位,送cl
004964CD |. 8BC1 mov eax,ecx ;第3位送eax
004964CF |. 8B55 F8 mov edx,dwo rd ptr ss:[ebp-8]
004964D2 |. 0FB652 03 movzx edx,byte ptr ds:[edx+3]
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:[ebp-B],dl ;"8532013"的第3位与第4位相加,和除以5,余数加61,结果"b"送[ebp-B]
004964E6 |. 8B45 F8 mov eax,dword ptr ss:[ebp-8]
004964E9 |. 0FB640 04 movzx eax,byte ptr ds:[eax+4]
004964ED |. 8B55 F8 mov edx,dword ptr ss:[ebp-8]
004964F0 |. 0FB652 05 movzx edx,byte ptr ds:[edx+5]
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:[ebp-A],dl ;"8532013"的第5位与第6位相加,和除以5,余数加61,结果"c"送[ebp-A]
00496504 |. 8B45 F8 mov eax,dword ptr ss:[ebp-8]
00496507 |. 0FB640 06 movzx eax,byte ptr ds:[eax+6] ;取第7位
0049650B |. 03C1 add eax,ecx ;此时,cl为33,即第3位
0049650D |. 8B55 F8 mov edx,dword ptr ss:[ebp-8]
00496510 |. 0FB652 01 movzx edx,byte ptr ds:[edx+1] ;第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:[ebp-9],dl ;第2位+第3位+第7位的和除以5,余数加61,结果"a",送入[ebp-9]
00496524 |. 8D45 C8 lea eax,dword ptr ss:[ebp-38]
00496527 |. 8A55 F4 mov dl,byte ptr ss:[ebp-C] ;"e"送入dl
0049652A |. E8 35E2F6FF call 局域网查.00404764
0049652F |. 8B45 C8 mov eax,dword ptr ss:[ebp-38]
00496532 |. 8D55 F8 lea edx,dword ptr ss:[ebp-8]
00496535 |. B9 01000000 mov ecx,1
0049653A |. E8 DDE5F6FF call 局域网查.00404B1C
0049653F |. 8D45 C4 lea eax,dword ptr ss:[ebp-3C] ;这里可以看到,edx="e8532013",所以上面这个call应该是把字符插入"8532013"第eax位
00496542 |. 8A55 F7 mov dl,byte ptr ss:[ebp-9] ;"a"送入dl
00496545 |. E8 1AE2F6FF call 局域网查.00404764
0049654A |. 8B45 C4 mov eax,dword ptr ss:[ebp-3C]
0049654D |. 8D55 F8 lea edx,dword ptr ss:[ebp-8]
00496550 |. B9 03000000 mov ecx,3
00496555 |. E8 C2E5F6FF call 局域网查.00404B1C ;"a"插入到第3位,即为"e8a532013"
0049655A |. 8B45 FC mov eax,dword ptr ss:[ebp-4] ;注册码送到eax
0049655D |. 0FB600 movzx eax,byte ptr ds:[eax] ;取注册码的第一位
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:[ebp-40]
00496575 |. 8A55 F5 mov dl,byte ptr ss:[ebp-B] ;"b"送入dl
00496578 |. E8 E7E1F6FF call 局域网查.00404764
0049657D |. 8B45 C0 mov eax,dword ptr ss:[ebp-40]
00496580 |. 8D55 F8 lea edx,dword ptr ss:[ebp-8]
00496583 |. B9 05000000 mov ecx,5
00496588 |. E8 8FE5F6FF call 局域网查.00404B1C ;得到"e8a5b32013"
0049658D |. 8D45 BC lea eax,dword ptr ss:[ebp-44]
00496590 |. 8A55 F6 mov dl,byte ptr ss:[ebp-A]
00496593 |. E8 CCE1F6FF call 局域网查.00404764
00496598 |. 8B45 BC mov eax,dword ptr ss:[ebp-44]
0049659B |. 8D55 F8 lea edx,dword ptr ss:[ebp-8]
0049659E |. B9 09000000 mov ecx,9
004965A3 |. E8 74E5F6FF call 局域网查.00404B1C ;得到"e8a5b320913"
004965A8 |. 8D45 F8 lea eax,dword ptr ss:[ebp-8]
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:[ebp-8] ;这里得到了"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:[ebp-4] ;得到"e8a5b3013"
004965CF |. 0FB640 08 movzx eax,byte ptr ds:[eax+8] ;取注册码的第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:[ebp-8]
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:[ebp-8]
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:[ebp-8] ;得到的;得到"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:[eax],edx
0049661E |. 68 52664900 push 局域网查.00496652
00496623 |> 8D45 BC lea eax,dword ptr ss:[ebp-44]
00496626 |. BA 04000000 mov edx,4
0049662B |. E8 78DFF6FF call 局域网查.004045A8
00496630 |. 8D45 EC lea eax,dword ptr ss:[ebp-14]
00496633 |. BA 02000000 mov edx,2
00496638 |. E8 6BDFF6FF call 局域网查.004045A8
0049663D |. 8D45 F8 lea eax,dword ptr ss:[ebp-8]
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 编辑 ] |
|