首页
社区
课程
招聘
mIRC6.16 注册算法分析 - 易
发表于: 2005-12-14 12:04 7900

mIRC6.16 注册算法分析 - 易

2005-12-14 12:04
7900

/////////////////////////////////
//  mIRC6.16 注册算法分析
//
//  Author: icytear
//  Date  : 2005-12-14
//
/////////////////////////////////

1. 查看没有加壳, 哈哈省了不少麻烦 :) .
2. 用OllyDbg加载, F9运行.... 弹出讨厌的

"Evaluation time left: 28 days", 点"Continue" 继

续试用, 选择菜单 Help-Register.. 打开注册对话框,  

"Full Name"输入 "icytear", "Registration Code"输

入"280060443" 点"OK", 弹出提示"注册码无效", 这里

可以试一下常用的MessageBoxA(W)断点, HIHI, 没有用

这个函数。
3. 那就来个绝的 bp SendDlgItemMessageA, 点"OK",

程序断在SendDlgItemMessageA处, ALT+F9 返回到mIRC

领空

004C7BAA    push    mirc.005A07E0           ; 

/lParam = 5A07E0
004C7BAF    push    3E7                     ; 

|wParam = 3E7
004C7BB4    push    0D                      ; 

|Message = WM_GETTEXT
004C7BB6    push    83                      ; 

|ControlID = 83 (131.)
004C7BBB    push    esi                     ; 

|hWnd
004C7BBC    call    edi                     ; 

\SendDlgItemMessageA
004C7BBE    push    mirc.005A0BC8           ; 

/lParam = 5A0BC8          <===ALT+F9程序返回到这

里
004C7BC3    push    3E7                     ; 

|wParam = 3E7
004C7BC8    push    0D                      ; 

|Message = WM_GETTEXT
004C7BCA    push    84                      ; 

|ControlID = 84 (132.)
004C7BCF    push    esi                     ; 

|hWnd
004C7BD0    call    edi                     ; 

\SendDlgItemMessageA
004C7BD2    mov     edx,mirc.005A0BC8       ;  

ASCII "280060443"
004C7BD7    mov     ecx,mirc.005A07E0       ;  

ASCII "icytear"
004C7BDC    call    mirc.004C7600           ;     

                     ====>关键函数
004C7BE1    test    eax,eax
004C7BE3    je      mirc.004C7CCE           

;====>关键跳转,跳转注册失败
004C7600    sub     esp,208
004C7606    push    esi
004C7607    push    edi
004C7608    mov     esi,edx
004C760A    mov     edi,ecx
004C760C    mov     edx,104
004C7611    lea     ecx,dword ptr ss:[esp+8]
004C7615    call    mirc.0041EF30
004C761A    mov     edx,104
004C761F    lea     ecx,dword ptr ss:[esp+10C]
004C7626    call    mirc.0041EF30
004C762B    push    edi
004C762C    mov     edx,104
004C7631    lea     ecx,dword ptr ss:[esp+C]
004C7635    call    mirc.0041EE40
004C763A    push    esi
004C763B    mov     edx,104
004C7640    lea     ecx,dword ptr ss:[esp+110]
004C7647    call    mirc.0041EE40
004C764C    lea     edx,dword ptr ss:[esp+10C]
004C7653    lea     ecx,dword ptr ss:[esp+8]
004C7657    call    mirc.004C7400               

;====>跟进去
004C765C    test    eax,eax
004C765E    je      short mirc.004C766E         ;

如果上面注册失败跳转       
004C7660    pop     edi
004C7661    mov     eax,1
004C7666    pop     esi
004C7667    add     esp,208
004C766D    retn
004C766E    mov     edx,104
004C7673    lea     ecx,dword ptr ss:[esp+8]
004C7677    call    mirc.0041EF30
004C767C    mov     edx,104
004C7681    lea     ecx,dword ptr ss:[esp+10C]
004C7688    call    mirc.0041EF30
004C768D    push    edi
004C768E    mov     edx,104
004C7693    lea     ecx,dword ptr ss:[esp+C]
004C7697    call    mirc.0041EE40
004C769C    push    esi
004C769D    mov     edx,104
004C76A2    lea     ecx,dword ptr ss:[esp+110]
004C76A9    call    mirc.0041EE40
004C76AE    mov     edx,2
004C76B3    lea     ecx,dword ptr ss:[esp+8]
004C76B7    call    mirc.004793B0               

;====>这里对用户名进行转换
004C76BC    lea     edx,dword ptr ss:[esp+10C]
004C76C3    lea     ecx,dword ptr ss:[esp+8]
004C76C7    call    mirc.004C7400               

;====>又调用一次
004C76CC    neg     eax
004C76CE    sbb     eax,eax
004C76D0    pop     edi
004C76D1    neg     eax
004C76D3    pop     esi
004C76D4    add     esp,208
004C76DA    retn
sub_004c7400:
004C7400    sub     esp,0A4
004C7406    push    ebx
004C7407    push    ebp
004C7408    push    esi
004C7409    mov     esi,0B
004C740E    mov     eax,0A
004C7413    push    edi
004C7414    mov     edi,ecx
004C7416    mov     ecx,0E
004C741B    mov     dword ptr ss:[esp+14],esi
004C741F    mov     ebp,6
004C7424    mov     ebx,10
004C7429    mov     dword ptr ss:[esp+3C],esi
004C742D    mov     dword ptr ss:[esp+50],esi
004C7431    mov     dword ptr ss:[esp+64],esi
004C7435    mov     dword ptr ss:[esp+70],esi
004C7439    mov     esi,8
004C743E    mov     dword ptr ss:[esp+10],edx
004C7442    mov     edx,0C
004C7447    mov     dword ptr ss:[esp+28],ecx
004C744B    mov     dword ptr ss:[esp+38],eax
004C744F    mov     dword ptr ss:[esp+44],ecx
004C7453    mov     dword ptr ss:[esp+48],ecx
004C7457    mov     dword ptr ss:[esp+58],ecx
004C745B    mov     dword ptr ss:[esp+5C],ecx
004C745F    mov     ecx,4
004C7464    mov     dword ptr ss:[esp+74],eax
004C7468    mov     dword ptr ss:[esp+7C],eax
004C746C    mov     dword ptr ss:[esp+80],eax
004C7473    mov     dword ptr ss:[esp+94],eax
004C747A    mov     dword ptr ss:[esp+A4],eax
004C7481    mov     eax,edi
004C7483    mov     dword ptr ss:[esp+78],esi
004C7487    mov     dword ptr ss:[esp+88],esi
004C748E    mov     dword ptr ss:[esp+A0],esi
004C7495    mov     dword ptr ss:[esp+18],ebp
004C7499    mov     dword ptr ss:[esp+1C],11
004C74A1    mov     dword ptr ss:[esp+20],edx
004C74A5    mov     dword ptr ss:[esp+24],edx
004C74A9    mov     dword ptr ss:[esp+2C],5
004C74B1    mov     dword ptr ss:[esp+30],edx
004C74B5    mov     dword ptr ss:[esp+34],ebx
004C74B9    mov     dword ptr ss:[esp+40],ebp
004C74BD    mov     dword ptr ss:[esp+4C],4
004C74C5    mov     dword ptr ss:[esp+54],ebp
004C74C9    mov     dword ptr ss:[esp+60],ecx
004C74CD    mov     dword ptr ss:[esp+68],9
004C74D5    mov     dword ptr ss:[esp+6C],edx
004C74D9    mov     dword ptr ss:[esp+84],ebx
004C74E0    mov     dword ptr ss:[esp+8C],ecx
004C74E7    mov     dword ptr ss:[esp+90],ebp
004C74EE    mov     dword ptr ss:[esp+98],edx
004C74F5    mov     dword ptr ss:[esp+9C],ebx
004C74FC    mov     dword ptr ss:[esp+A8],ecx
004C7503    mov     dword ptr ss:[esp+AC],ebx
004C750A    mov     dword ptr ss:[esp+B0],0
004C7515    lea     esi,dword ptr ds:[eax+1]
004C7518    mov     dl,byte ptr ds:[eax]
004C751A    inc     eax
004C751B    test    dl,dl
004C751D    jnz     short mirc.004C7518
004C751F    sub     eax,esi                     ;

计算字符串长度
004C7521    cmp     eax,ecx
004C7523    jnb     short mirc.004C7532         ;

输入的用户名小于4个字符直接返回0,注册失败
004C7525    pop     edi
004C7526    pop     esi
004C7527    pop     ebp
004C7528    xor     eax,eax                     ;

失败,返回0
004C752A    pop     ebx
004C752B    add     esp,0A4
004C7531    retn

004C7532    mov     ebx,dword ptr ss:[esp+10]
004C7536    push    2D                          ;

字符"-"
004C7538    push    ebx
004C7539    call    <mirc._strchr>
004C753E    mov     esi,eax
004C7540    add     esp,8
004C7543    test    esi,esi
004C7545    je      short mirc.004C7525
;上面代码在RegisterCode 串中查找字符 "-", 如果没
004C7547    push    ebx
004C7548    mov     byte ptr ds:[esi],0
004C754B    call    <mirc._aotl>
004C7550    add     esp,4
004C7553    mov     byte ptr ds:[esi],2D
004C7556    inc     esi
004C7557    mov     ebp,eax
004C7559    cmp     byte ptr ds:[esi],0
004C755C    je      short mirc.004C7525
004C755E    push    esi
004C755F    call    <mirc._aotl>
004C7564    mov     ecx,edi
004C7566    add     esp,4
;以第一个"-"字符把注册码分成两部分, 再分别转换为

两个整数

004C7569    mov     dword ptr ss:[esp+10],eax
004C756D    lea     edx,dword ptr ds:[ecx+1]
004C7570    mov     al,byte ptr ds:[ecx]
004C7572    inc     ecx
004C7573    test    al,al
004C7575    jnz     short mirc.004C7570
004C7577    sub     ecx,edx                     ;

计算字符串长度(用户名或其变形)
004C7579    mov     esi,3
004C757E    xor     edx,edx
004C7580    xor     ebx,ebx
004C7582    cmp     ecx,esi
004C7584    jle     short mirc.004C75A8         ;

比较用户名的长度是否大于3
004C7586    jmp     short mirc.004C7590
004C7588    lea     esp,dword ptr ss:[esp]
004C758F    nop
004C7590    movzx   eax,byte ptr ds:[esi+edi]
004C7594    imul    eax,dword ptr 

ss:[esp+edx*4+14]
004C7599    add     ebx,eax
004C759B    inc     edx
004C759C    cmp     edx,26
004C759F    jle     short mirc.004C75A3
004C75A1    xor     edx,edx
004C75A3    inc     esi
004C75A4    cmp     esi,ecx
004C75A6    jl      short mirc.004C7590
004C75A8    cmp     ebp,ebx                 ;比较

1
004C75AA    jnz     mirc.004C7525           ;输入

的注册码的第一部分和计算出的值不等,跳转,注册失败

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (7)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢提供学习教程!
2005-12-14 13:09
0
雪    币: 50161
活跃值: (20650)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
mIRC相关文章论坛精华里至少有8篇了,加你这篇就9篇了。
并且算法都一样。;)
2005-12-14 21:51
0
雪    币: 280
活跃值: (433)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
4
真是唉! 只是最近用了一下mIRC发现没有注册码,倒是有个注册机,但还是自己跟了一下。
2005-12-15 09:10
0
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
5
汇编+C表示就是好理解,支持
2005-12-15 12:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习中,
2005-12-15 17:04
0
雪    币: 300
活跃值: (412)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
7
学习学习!
2005-12-15 20:48
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
8
详细,不错,收藏!
2005-12-15 21:36
0
游客
登录 | 注册 方可回帖
返回
//