网络断魂 发表于 2007-11-14 22:44:31

骗子软件(远程视频嗅探器)算法分析,

【文章标题】: 骗子软件(远程视频嗅探器)算法分析
【文章作者】: 网络断魂
【软件名称】: 远程视频嗅探器
【下载地址】: 软件在附件中,下载来玩玩,学学算法也不错
【加壳方式】: 无壳
【保护方式】: 用户名+注册码
【编写语言】: 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 编辑 ]

zhaoyafei19 发表于 2007-11-16 22:22:40

真是聪明 啊
让大家转圈圈

杨家将 发表于 2007-11-17 01:08:33

下来看看,是不是这样。

fengasdf 发表于 2007-11-19 17:08:46

学习ing...俺也看看是一怎么骗人的

sdprtf 发表于 2007-11-21 17:08:46

好东西,谢谢楼主

sdprtf 发表于 2007-11-22 09:40:18

下来看看,怎么样?

lin315 发表于 2007-11-22 21:15:40

学习ing...俺也看看是一怎么骗人的

ttt0001 发表于 2007-12-1 22:49:48

真是这样????

xzqd 发表于 2007-12-5 10:39:24

骗子软件,有意思......
页: [1]
查看完整版本: 骗子软件(远程视频嗅探器)算法分析,