首页
社区
课程
招聘
[旧帖] [原创]骗子软件(远程视频嗅探器)算法分析 0.00雪花
发表于: 2007-11-14 23:14 6588

[旧帖] [原创]骗子软件(远程视频嗅探器)算法分析 0.00雪花

2007-11-14 23:14
6588
【文章标题】: 骗子软件(远程视频嗅探器)算法分析
【文章作者】: 网络断魂
【软件名称】: 远程视频嗅探器
【下载地址】: 见附件!
【加壳方式】: 无壳
【保护方式】: 用户名+注册码
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: OD
【操作平台】: winxp2
【作者声明】: 菜鸟学习算法,失误之处请多指教!

今天拿到一个软件“远程视频嗅探器”,想分析一下算法,分析来分析去原来这软件无解,不管什么注册码都是错误的,软件留了一个“免费注册”,欺骗网友帮他们做推广!被人耍了,特此发布破文,供我这样的菜鸟人物学习算法之用,

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:[0]
0040242D   .  50            push    eax
0040242E   .  64:8925 00000>mov     dword ptr fs:[0], 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 [esp+10]
00402442   .  E8 79240000   call    <jmp.&MFC42.#540>
00402447   .  8D4424 10     lea     eax, dword ptr [esp+10]
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 [esp+2C], 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 [esp+10]          ;  //送注册码
00402469   .  8B69 F8       mov     ebp, dword ptr [ecx-8]           ;  //送长度
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+20], esp
00402479   .  68 D0814000   push    004081D0                         ;  x+vpymrkyovxorlhwuuhow==
0040247E   .  E8 61240000   call    <jmp.&MFC42.#537>
00402483   .  8D5424 20     lea     edx, dword ptr [esp+20]          ; |
00402487   .  8BCF          mov     ecx, edi                         ; |
00402489   .  52            push    edx                              ; |Arg1
0040248A   .  E8 A1010000   call    00402630                         ; \远程视频.00402630
0040248F   .  8BC8          mov     ecx, eax
00402491   .  C64424 2C 01  mov     byte ptr [esp+2C], 1
00402496   .  E8 55020000   call    004026F0
0040249B   .  50            push    eax
0040249C   .  E8 97240000   call    <jmp.&MFC42.#1200>
004024A1   .  C64424 24 00  mov     byte ptr [esp+24], 0
004024A6   .  8D4C24 14     lea     ecx, dword ptr [esp+14]
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+20], esp
004024BD   .  68 8C814000   push    0040818C                         ;  16ky4clrs6s2ylk7ttsjrmfr1nnk5mjr0ru0zqos16ls4rk70qrt0l/vupghow==
004024C2   .  E8 1D240000   call    <jmp.&MFC42.#537>
004024C7   .  8D4424 20     lea     eax, dword ptr [esp+20]          ; |
004024CB   .  8BCF          mov     ecx, edi                         ; |
004024CD   .  50            push    eax                              ; |Arg1
004024CE   .  E8 5D010000   call    00402630                         ; \远程视频.00402630
004024D3   .  8BC8          mov     ecx, eax
004024D5   .  C64424 2C 02  mov     byte ptr [esp+2C], 2
004024DA   .  E8 11020000   call    004026F0
004024DF   .  50            push    eax
004024E0   .  E8 53240000   call    <jmp.&MFC42.#1200>               ;  //注册码长度不对
004024E5   .  C64424 24 00  mov     byte ptr [esp+24], 0
004024EA   .  8D4C24 14     lea     ecx, dword ptr [esp+14]
004024EE   .  EB 71         jmp     short 00402561
004024F0   >  3BEE          cmp     ebp, esi                         ;  //再次较验注册码是否为空,
004024F2   .  7E 31         jle     short 00402525                   ;  //为空则跳走,跳往错误
004024F4   >  8B4C24 10     mov     ecx, dword ptr [esp+10]          ;  //送注册码
004024F8   .  8A1C0E        mov     bl, byte ptr [esi+ecx]           ;  //依次取注册码
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+24], esp
00402530   .  68 78814000   push    00408178                         ;  zt7qp7xe16ky4clr
00402535   .  E8 AA230000   call    <jmp.&MFC42.#537>
0040253A   .  8D4C24 24     lea     ecx, dword ptr [esp+24]          ; |
0040253E   .  51            push    ecx                              ; |Arg1
0040253F   .  8BCF          mov     ecx, edi                         ; |
00402541   .  E8 EA000000   call    00402630                         ; \远程视频.00402630
00402546   .  8BC8          mov     ecx, eax
00402548   .  C64424 2C 05  mov     byte ptr [esp+2C], 5
0040254D   .  E8 9E010000   call    004026F0
00402552   .  50            push    eax
00402553   .  E8 E0230000   call    <jmp.&MFC42.#1200>               ;  //无效的注册码
00402558   .  C64424 24 00  mov     byte ptr [esp+24], 0
0040255D   .  8D4C24 18     lea     ecx, dword ptr [esp+18]
00402561   >  E8 42230000   call    <jmp.&MFC42.#800>
00402566   .  8D4C24 10     lea     ecx, dword ptr [esp+10]
0040256A   .  C74424 24 FFF>mov     dword ptr [esp+24], -1
00402572   .  E8 31230000   call    <jmp.&MFC42.#800>
00402577   .  8B4C24 1C     mov     ecx, dword ptr [esp+1C]
0040257B   .  5F            pop     edi
0040257C   .  5E            pop     esi
0040257D   .  5D            pop     ebp
0040257E   .  64:890D 00000>mov     dword ptr fs:[0], 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+20], esp
004025AA   .  68 64814000   push    00408164                         ;  uphkvbk7ttshow==
004025AF   .  E8 30230000   call    <jmp.&MFC42.#537>
004025B4   .  8D5424 20     lea     edx, dword ptr [esp+20]          ; |
004025B8   .  8BCF          mov     ecx, edi                         ; |
004025BA   .  52            push    edx                              ; |Arg1
004025BB   .  E8 70000000   call    00402630                         ; \远程视频.00402630
004025C0   .  8BC8          mov     ecx, eax
004025C2   .  C64424 2C 03  mov     byte ptr [esp+2C], 3
004025C7   .  E8 24010000   call    004026F0
004025CC   .  50            push    eax
004025CD   .  E8 66230000   call    <jmp.&MFC42.#1200>
004025D2   .  C64424 24 00  mov     byte ptr [esp+24], 0
004025D7   .  8D4C24 14     lea     ecx, dword ptr [esp+14]
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+20], esp
004025E8   .  68 4C814000   push    0040814C                         ;  tobu2rfht6jx1rf7oam=
004025ED   .  E8 F2220000   call    <jmp.&MFC42.#537>
004025F2   .  8D4424 20     lea     eax, dword ptr [esp+20]          ; |
004025F6   .  8BCF          mov     ecx, edi                         ; |
004025F8   .  50            push    eax                              ; |Arg1
004025F9   .  E8 32000000   call    00402630                         ; \远程视频.00402630
004025FE   .  8BC8          mov     ecx, eax
00402600   .  C64424 2C 04  mov     byte ptr [esp+2C], 4
00402605   .  E8 E6000000   call    004026F0
0040260A   .  50            push    eax
0040260B   .  E8 28230000   call    <jmp.&MFC42.#1200>               ;  //存在非法字符(汗死!!!! 骗人的软件!)
00402610   .  C64424 24 00  mov     byte ptr [esp+24], 0
00402615   .  8D4C24 14     lea     ecx, dword ptr [esp+14]
00402619   .^ E9 43FFFFFF   jmp     00402561

算法总结:

1、注册码要求为35位,不为注册码则提示位数不对,
2、通过C库函数MSVCRT.isdigit返回值较验注册码是否为数字,是数字则取下一位
3、较验注册码是否为大小写字母,是则取下一位,一直到取完,然后提示你无效的注册码,
4、若注册码即不是字母也不是数字,直接提示你有非法字符
5、软件注册码不存在,纯属骗人的软件

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
强烈鄙视这种行为  支持楼主用科学方法制止这种不道德行为!!!
2007-11-14 23:52
0
雪    币: 288
活跃值: (112)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
3
可能真正注册时他会重新给你一个安装程序。。。
2007-11-15 10:44
0
雪    币: 259
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
不会的,其实有兴趣的话,去拆解一下软件的各个模块就明白了,整个软件就是乱弹琴,

http://www.sy64.com/archiver/tid-18468.html

这里也有高手分析过哦,哈哈,
2007-11-15 12:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持楼主 向你学习。
2007-11-19 13:54
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
呵呵,果然有高手,这种骗局也想的出来,佩服
2007-11-19 16:52
0
游客
登录 | 注册 方可回帖
返回
//