骗子软件(远程视频嗅探器)算法分析,
【文章标题】: 骗子软件(远程视频嗅探器)算法分析【文章作者】: 网络断魂
【软件名称】: 远程视频嗅探器
【下载地址】: 软件在附件中,下载来玩玩,学学算法也不错
【加壳方式】: 无壳
【保护方式】: 用户名+注册码
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: OD
【操作平台】: winxp2
【作者声明】: 菜鸟学习算法,失误之处请多指教!
今天使到一个软件“远程视频嗅探器”,想分析一下算法,分析来分析去原来这软件无解,不管什么注册码都是错误的,软件留了一
个“免费注册”,欺骗网友帮他们做推广!被人耍了,特此发布破文,供我这样的菜鸟人物学习算法之用,
http://www.sy64.com/archiver/tid-18468.html有高手分析过软件各个模块,有兴趣的也可以看一下,
1、PEID查壳,Microsoft Visual C++ 6.0
2、根据字符串提示找到关键点:
00402420 .6A FF push -1
00402422 .68 D04F4000 push 00404FD0 ;膏n@; SE 处理程序安装
00402427 .64:A1 0000000>mov eax, dword ptr fs:
0040242D .50 push eax
0040242E .64:8925 00000>mov dword ptr fs:, esp
00402435 .83EC 0C sub esp, 0C
00402438 .53 push ebx
00402439 .55 push ebp
0040243A .56 push esi
0040243B .57 push edi
0040243C .8BF9 mov edi, ecx
0040243E .8D4C24 10 lea ecx, dword ptr
00402442 .E8 79240000 call <jmp.&MFC42.#540>
00402447 .8D4424 10 lea eax, dword ptr
0040244B .33F6 xor esi, esi ;//标志位清零
0040244D .50 push eax
0040244E .68 EB030000 push 3EB
00402453 .8BCF mov ecx, edi
00402455 .897424 2C mov dword ptr , esi
00402459 .E8 80240000 call <jmp.&MFC42.#3092>
0040245E .8BC8 mov ecx, eax
00402460 .E8 A9240000 call <jmp.&MFC42.#3874> ;//计算注册码长度,
00402465 .8B4C24 10 mov ecx, dword ptr ;//送注册码
00402469 .8B69 F8 mov ebp, dword ptr ;//送长度
0040246C .3BEE cmp ebp, esi ;//注册码是否为空
0040246E .75 3F jnz short 004024AF ;//不为空则跳走
00402470 .56 push esi
00402471 .56 push esi
00402472 .51 push ecx
00402473 .8BCC mov ecx, esp
00402475 .896424 20 mov dword ptr , esp
00402479 .68 D0814000 push 004081D0 ;x+vpymrkyovxorlhwuuhow==
0040247E .E8 61240000 call <jmp.&MFC42.#537>
00402483 .8D5424 20 lea edx, dword ptr ; |
00402487 .8BCF mov ecx, edi ; |
00402489 .52 push edx ; |Arg1
0040248A .E8 A1010000 call 00402630 ; \远程视频.00402630
0040248F .8BC8 mov ecx, eax
00402491 .C64424 2C 01mov byte ptr , 1
00402496 .E8 55020000 call 004026F0
0040249B .50 push eax
0040249C .E8 97240000 call <jmp.&MFC42.#1200>
004024A1 .C64424 24 00mov byte ptr , 0
004024A6 .8D4C24 14 lea ecx, dword ptr
004024AA .E9 B2000000 jmp 00402561
004024AF >83FD 23 cmp ebp, 23 ;//长度是否为23(35)位
004024B2 .74 3C je short 004024F0 ;//是则跳走
004024B4 .56 push esi
004024B5 .56 push esi
004024B6 .51 push ecx
004024B7 .8BCC mov ecx, esp
004024B9 .896424 20 mov dword ptr , esp
004024BD .68 8C814000 push 0040818C ;
16ky4clrs6s2ylk7ttsjrmfr1nnk5mjr0ru0zqos16ls4rk70qrt0l/vupghow==
004024C2 .E8 1D240000 call <jmp.&MFC42.#537>
004024C7 .8D4424 20 lea eax, dword ptr ; |
004024CB .8BCF mov ecx, edi ; |
004024CD .50 push eax ; |Arg1
004024CE .E8 5D010000 call 00402630 ; \远程视频.00402630
004024D3 .8BC8 mov ecx, eax
004024D5 .C64424 2C 02mov byte ptr , 2
004024DA .E8 11020000 call 004026F0
004024DF .50 push eax
004024E0 .E8 53240000 call <jmp.&MFC42.#1200> ;//注册码长度不对
004024E5 .C64424 24 00mov byte ptr , 0
004024EA .8D4C24 14 lea ecx, dword ptr
004024EE .EB 71 jmp short 00402561
004024F0 >3BEE cmp ebp, esi ;//再次较验注册码是否为空,
004024F2 .7E 31 jle short 00402525 ;//为空则跳走,跳往错误
004024F4 >8B4C24 10 mov ecx, dword ptr ;//送注册码
004024F8 .8A1C0E mov bl, byte ptr ;//依次取注册码
004024FB .0FBED3 movsx edx, bl ;//送取到的注册码
004024FE .52 push edx ; /c
004024FF .FF15 C0624000 call dword ptr [<&MSVCRT.isdigit>] ; \如果参数是一个十进制的数字,函数将返回一个非
零数字。如果不符合判断条件,返回0
00402505 .83C4 04 add esp, 4
00402508 .85C0 test eax, eax ;//通过EAX返回值,非零说明是数字,取下一位
0040250A .75 14 jnz short 00402520
0040250C .80FB 61 cmp bl, 61 ;//与61(a)比较
0040250F .7C 05 jl short 00402516 ;//小于转移
00402511 .80FB 7A cmp bl, 7A ;//与7A(z)比较
00402514 .7E 0A jle short 00402520 ;//小于等于则转移,这两个比较确认是不是小定字
母
00402516 >80FB 41 cmp bl, 41 ;//若小于61(a)则与41(A)比较
00402519 .7C 6F jl short 0040258A ;//小于则转移
0040251B .80FB 5A cmp bl, 5A ;//与5A(Z)比较
0040251E .7F 6A jg short 0040258A ;//大于转移,这两个比较确认是不是大写字母
00402520 >46 inc esi ;//是小写字母则跳到此处,标志位+1,取下一位
00402521 .3BF5 cmp esi, ebp ;//标志位与注册码长度比较,是否取完
00402523 .^ 7C CF jl short 004024F4 ;//没取完则取下一位
00402525 >6A 00 push 0 ;//是字母则死,说明注册码中不能含字母
00402527 .6A 00 push 0
00402529 .51 push ecx
0040252A .8BCC mov ecx, esp
0040252C .896424 24 mov dword ptr , esp
00402530 .68 78814000 push 00408178 ;zt7qp7xe16ky4clr
00402535 .E8 AA230000 call <jmp.&MFC42.#537>
0040253A .8D4C24 24 lea ecx, dword ptr ; |
0040253E .51 push ecx ; |Arg1
0040253F .8BCF mov ecx, edi ; |
00402541 .E8 EA000000 call 00402630 ; \远程视频.00402630
00402546 .8BC8 mov ecx, eax
00402548 .C64424 2C 05mov byte ptr , 5
0040254D .E8 9E010000 call 004026F0
00402552 .50 push eax
00402553 .E8 E0230000 call <jmp.&MFC42.#1200> ;//无效的注册码
00402558 .C64424 24 00mov byte ptr , 0
0040255D .8D4C24 18 lea ecx, dword ptr
00402561 >E8 42230000 call <jmp.&MFC42.#800>
00402566 .8D4C24 10 lea ecx, dword ptr
0040256A .C74424 24 FFF>mov dword ptr , -1
00402572 .E8 31230000 call <jmp.&MFC42.#800>
00402577 .8B4C24 1C mov ecx, dword ptr
0040257B .5F pop edi
0040257C .5E pop esi
0040257D .5D pop ebp
0040257E .64:890D 00000>mov dword ptr fs:, ecx
00402585 .5B pop ebx
00402586 .83C4 18 add esp, 18
00402589 .C3 retn
0040258A >85F6 test esi, esi ;//不是字母则跳来此处,较验标志位是否仍为空
0040258C .74 4F je short 004025DD ;//不管什么条什都会跳了,(数字,字母都死亡,
标志位加不上去)
0040258E .8BC6 mov eax, esi
00402590 .B9 06000000 mov ecx, 6
00402595 .99 cdq
00402596 .F7F9 idiv ecx
00402598 .85D2 test edx, edx
0040259A .75 41 jnz short 004025DD
0040259C .80FB 2D cmp bl, 2D
0040259F .74 3C je short 004025DD
004025A1 .52 push edx
004025A2 .52 push edx
004025A3 .51 push ecx
004025A4 .8BCC mov ecx, esp
004025A6 .896424 20 mov dword ptr , esp
004025AA .68 64814000 push 00408164 ;uphkvbk7ttshow==
004025AF .E8 30230000 call <jmp.&MFC42.#537>
004025B4 .8D5424 20 lea edx, dword ptr ; |
004025B8 .8BCF mov ecx, edi ; |
004025BA .52 push edx ; |Arg1
004025BB .E8 70000000 call 00402630 ; \远程视频.00402630
004025C0 .8BC8 mov ecx, eax
004025C2 .C64424 2C 03mov byte ptr , 3
004025C7 .E8 24010000 call 004026F0
004025CC .50 push eax
004025CD .E8 66230000 call <jmp.&MFC42.#1200>
004025D2 .C64424 24 00mov byte ptr , 0
004025D7 .8D4C24 14 lea ecx, dword ptr
004025DB .^ EB 84 jmp short 00402561
004025DD >6A 00 push 0 ;//为空跳来此处
004025DF .6A 00 push 0
004025E1 .51 push ecx
004025E2 .8BCC mov ecx, esp
004025E4 .896424 20 mov dword ptr , esp
004025E8 .68 4C814000 push 0040814C ;tobu2rfht6jx1rf7oam=
004025ED .E8 F2220000 call <jmp.&MFC42.#537>
004025F2 .8D4424 20 lea eax, dword ptr ; |
004025F6 .8BCF mov ecx, edi ; |
004025F8 .50 push eax ; |Arg1
004025F9 .E8 32000000 call 00402630 ; \远程视频.00402630
004025FE .8BC8 mov ecx, eax
00402600 .C64424 2C 04mov byte ptr , 4
00402605 .E8 E6000000 call 004026F0
0040260A .50 push eax
0040260B .E8 28230000 call <jmp.&MFC42.#1200> ;//存在非法字符(汗死!!!! 骗人的软件!)
00402610 .C64424 24 00mov byte ptr , 0
00402615 .8D4C24 14 lea ecx, dword ptr
00402619 .^ E9 43FFFFFF jmp 00402561
算法总结:
1、注册码要求为35位,不为注册码则提示位数不对,
2、通过C库函数MSVCRT.isdigit返回值较验注册码是否为数字,是数字则取下一位,
3、较验注册码是否为大小写字母,是则取下一位,一直到取完,然后提示你无效的注册码,
4、若注册码即不是字母也不是数字,直接提示你有非法字符
5、软件注册码不存在,纯属骗人的软件
[ 本帖最后由 网络断魂 于 2007-11-15 12:38 编辑 ] 真是聪明 啊
让大家转圈圈 下来看看,是不是这样。 学习ing...俺也看看是一怎么骗人的 好东西,谢谢楼主 下来看看,怎么样? 学习ing...俺也看看是一怎么骗人的 真是这样???? 骗子软件,有意思......
页:
[1]