局域网查看工具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 编辑 ] 哇,有的学习了`呵呵 呵呵,先学习一下! 第一次得精华啊。。。。。。。
很久前的文章了。多谢老大看得起。我会努力的。呵呵`~ 谢谢了,学习了啊下!
页:
[1]