通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 网络攻防 >> 文章正文
斗地主4.0注册算法分析
责任编辑:酷酷の鱼   更新日期:2008-3-11
 

 

==================================================================================== 
004A8060 push ebp 
004A8061 mov ebp, esp 
004A8063 sub esp, 8 
004A8066 push offset loc_404806 
004A806B mov eax, large fs0 
004A8071 push eax 
004A8072 mov large fs0, esp 
004A8079 sub esp, 34h 
004A807C push ebx 
004A807D push esi 
004A807E push edi 
004A807F mov [ebp+var_8], esp 
004A8082 mov [ebp+var_4], offset dword_403928 
004A8089 mov ecx, [ebp+arg_0] ;A1 
004A808C xor eax, eax 
004A808E mov [ebp+var_2C], eax 
004A8091 mov [ebp+var_40], eax 
004A8094 mov [ebp+var_1C], eax 
004A8097 mov eax, dword_4D1030 ;R1 
004A809C push eax ;R1 
004A809D push ecx ;A1 
004A809E call sub_4A83F0 ; 
004A80A3 mov edx, dword_4D1044 ;R2 
004A80A9 mov [ebp+arg_0], eax ;M1 = invoke sub_4A83F0 ,A1,R1 
004A80AC mov eax, [ebp+arg_4] ;A2 
004A80AF push edx ;R2 
004A80B0 push eax ;A2 
004A80B1 call sub_4A83F0 ; 
004A80B6 mov ecx, [ebp+arg_0] ;M1 
004A80B9 mov edx, [ebp+arg_8] ;N1 
004A80BC add edx, ecx ;M1+N1 
004A80BE add ecx, ecx ;M1+M1 
004A80C0 cmp ecx, edx ;M1+N1 =? M1+M1 等效为N1 =? M1 
004A80C2 mov [ebp+arg_4], eax ;M2 = invoke sub_4A83F0 ,A2,R2 
004A80C5 jnz short loc_4A80E6 
004A80C7 mov edx, [ebp+arg_C] ;N2 
004A80CA lea ecx, [eax+edx] ;M2+N2 
004A80CD lea edx, [eax+eax] ;M2+M2 
004A80D0 cmp ecx, edx ;M2+N2 =? M2+M2 等效为N2 =? M2 
004A80D2 jnz short loc_4A80E6 
004A80D4 mov [ebp+var_1C], 0FFFFFFFFh ;到这里置注册成功标志 

=========================sub_4A8290====================================== 
004A8290 push ebp 
004A8291 mov ebp, esp 
004A8293 sub esp, 8 
004A8296 push offset loc_404806 
004A829B mov eax, large fs0 
004A82A1 push eax 
004A82A2 mov large fs0, esp 
004A82A9 sub esp, 70h 
004A82AC push ebx 
004A82AD push esi 
004A82AE push edi 
004A82AF mov [ebp+var_8], esp 
004A82B2 mov [ebp+var_4], offset dword_403938 
004A82B9 mov edx, [ebp+arg_0] ;5位的str,(都是WideChar) 
004A82BC xor esi, esi 
004A82BE lea ecx, [ebp+var_18] 
004A82C1 mov [ebp+var_18], esi 
004A82C4 mov [ebp+var_28], esi 
004A82C7 mov [ebp+var_38], esi 
004A82CA mov [ebp+var_48], esi 
004A82CD mov [ebp+var_58], esi 
004A82D0 call __vbaStrCopy 
004A82D6 mov edi, 1 
004A82DB mov [ebp+var_24], esi 
004A82DE mov ebx, edi 
004A82E0 mov esi, edi ;第n位WideChar 
004A82E2 loc_4A82E2: 
004A82E2 mov eax, 5 ;循环5次 
004A82E7 cmp esi, eax 
004A82E9 jg loc_4A839D 
004A82EF lea ecx, [ebp+var_38] 
004A82F2 push ecx 
004A82F3 lea eax, [ebp+var_18] 
004A82F6 push edi 
004A82F7 lea edx, [ebp+var_58] 
004A82FA mov [ebp+var_50], eax 
004A82FD push edx 
004A82FE lea eax, [ebp+var_48] 
004A8301 push eax 
004A8302 mov [ebp+var_30], 1 
004A8309 mov [ebp+var_38], 2 
004A8310 mov [ebp+var_58], 4008h 
004A8317 call rtcMidCharVar 
004A831D lea ecx, [ebp+var_48] ;取出一位WideChar 
004A8320 push ecx 
004A8321 lea edx, [ebp+var_28] 
004A8324 push edx 
004A8325 call __vbaStrVarVal 
004A832B push eax 
004A832C call rtcBytevalueBstr ; 
004A8332 mov byte ptr [ebp+var_6C], al ;只保留WideChar的低字节 
004A8335 mov eax, 5 
004A833A sub eax, esi 
004A833C mov [ebp+var_7C], eax ;5-n 
004A833F fild [ebp+var_7C] 
004A8342 sub esp, 8 
004A8345 fstp [esp] 
004A8348 push 40240000h ;浮点数10 
004A834D push 0 
004A834F call __vbaPowerR8 ;10^(5-n) 
004A8355 mov eax, [ebp+var_6C] ;每位WideChar的低字节 
004A8358 and eax, 0FFh 
004A835D cdq 
004A835E mov ecx, 0Ah 
004A8363 idiv ecx 
004A8365 mov [ebp+var_80], edx ;r = 每位WideChar的低字节mod 10 
004A8368 fild [ebp+var_80] 
004A836B fmulp st(1), st ;r*10^(5-n) 
004A836D fiadd [ebp+var_24] ;循环相加 
004A8370 call __vbaFpI4 
004A8376 lea ecx, [ebp+var_28] 
004A8379 mov [ebp+var_24], eax ;经5次循环后,H = r1*10^4+r2*10^3+r3*10^2+r4*10+r5 
004A837C call __vbaFreeStr 
004A8382 lea edx, [ebp+var_48] 
004A8385 push edx 
004A8386 lea eax, [ebp+var_38] 
004A8389 push eax 
004A838A push 2 
004A838C call __vbaFreeVarList 
004A8392 add esp, 0Ch 
004A8395 inc edi 
004A8396 add esi, ebx 
004A8398 jmp loc_4A82E2 
004A839D loc_4A839D: 
004A839D wait 
004A839E push offset loc_4A83CC 
004A83A3 jmp short loc_4A83C2 
004A83A5 lea ecx, [ebp-28h] 
004A83A8 call __vbaFreeStr 
004A83AE lea ecx, [ebp-48h] 
004A83B1 push ecx 
004A83B2 lea edx, [ebp-38h] 
004A83B5 push edx 
004A83B6 push 2 
004A83B8 call __vbaFreeVarList 
004A83BE add esp, 0Ch 
004A83C1 retn 
004A83C2 loc_4A83C2: 
004A83C2 lea ecx, [ebp+var_18] 
004A83C5 call __vbaFreeStr 
004A83CB retn 
004A83CC loc_4A83CC: 
004A83CC mov ecx, [ebp-10h] 
004A83CF mov eax, [ebp-24h] ;返回值H 
004A83D2 pop edi 
004A83D3 pop esi 
004A83D4 mov large fs0, ecx 
004A83DB pop ebx 
004A83DC mov esp, ebp 
004A83DE pop ebp 
004A83DF sub_4A8290 endp 

=========================sub_4A83F0====================================== 
004A83F0 sub_4A83F0 proc near 
004A83F0 arg_0 = dword ptr 4 
004A83F0 arg_4 = dword ptr 8 
004A83F0 mov ecx, [esp+arg_0] 
004A83F4 xor ecx, [esp+arg_4] 
004A83F8 cmp ecx, 1869Fh ;99999 
004A83FE jle short loc_4A8413 
004A8400 mov eax, 66666667h 
004A8405 imul ecx 
004A8407 mov ecx, edx 
004A8409 sar ecx, 2 
004A840C mov eax, ecx 
004A840E shr eax, 1Fh 
004A8411 add ecx, eax 
004A8413 loc_4A8413: 
004A8413 cmp ecx, 2710h 
004A8419 jge short loc_4A8421 
004A841B add ecx, 2710h ;10000 
004A8421 loc_4A8421: 
004A8421 mov eax, ecx ;返回一个10000到99999之间的10进制5位数 
004A8423 retn 8 
004A8423 sub_4A83F0 endp 
====================================================================================================== 


把上面过程可以整理成如下四个步骤: 

====步骤1:========================================================================================== 
H1 = invoke sub_4A8290 ,str1 
X1 = invoke sub_4A83F0 ,H1,9DB7h 
A1 = invoke sub_4A83F0 ,X1,[esi+48h] 
M1 = invoke sub_4A83F0 ,A1,R1 
==================================================================================================== 

====步骤2:========================================================================================== 
B1 = invoke sub_4A83F0 ,Y1,[esi+48h] 
N1 = invoke sub_4A83F0 ,B1,R1 
==================================================================================================== 

====步骤3:========================================================================================== 
H2 = invoke sub_4A8290 ,str2 
X2 = invoke sub_4A83F0 ,H2,10A7Bh 
A2 = invoke sub_4A83F0 ,X2,[esi+4Ch] 
M2 = invoke sub_4A83F0 ,A2,R2 
==================================================================================================== 

====步骤4:========================================================================================== 
B2 = invoke sub_4A83F0 ,Y2,[esi+4Ch] 
N2 = invoke sub_4A83F0 ,B2,R2 
==================================================================================================== 
注册成功的条件是:M1=N1,M2=N2 
从而只要满足充分条件: 
(1)Y1=X1=invoke sub_4A83F0 ,H1,9DB7h 
其中H1=invoke sub_4A8290 ,str1 
str1=机器码第4到8位 

(2)Y2=X2=invoke sub_4A83F0 ,H2,10A7Bh 
其中H2=invoke sub_4A8290 ,str2 
str2=(机器码的右3位+注册名)的右5位 
=================================================================================================== 
将Y1转换成10进制得到注册码的前5位 
将Y2转换成10进制得到注册码的后5位 
=================================================================================================== 

总结:本注册算法并不复杂,只是VB的程序有些烦人,尤其是unicode字符看起来很不习惯 
注册机比较容易做,由于我未曾编过WideChar的程序,开始时在WideChar的处理上遇到一点障碍, 
无法注册中文用户名,经反复调试修改现已克服。

上一页  [1] [2] 

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    普通文章 FBI承认多次违规获取公民个人资料
    普通文章 百度Hi进入扫尾阶段 公测在即
    普通文章 谷歌手机平台遭质疑 Android开发包现漏洞
    普通文章 推荐:网络病毒安全防范诀窍共分享
    普通文章 简析利用调试寄存器实现内核函数的HOOK
    普通文章 fckeditor网页编辑器的漏洞
    普通文章 遇到sql server 2005 ,恢复xp_cmdshell的办法
    普通文章 斗地主4.0注册算法分析
    普通文章 浪漫情书v3.11注册算法分析
    普通文章 企业如何处理自己产品的安全漏洞
    热门文章
    普通文章瑞星公司03月01日发布 每日计算机病毒及木马播报
    普通文章微软Hotmail故障未解决 用户转用谷歌
    普通文章关注未成年人 欧盟5500万营造安全网络环境
    普通文章德国司法部门在线搜查须获法官许可
    普通文章Safari不在贝宝(paypal)安全浏览器列表中
    普通文章“艳照门”图片长沙再拘人
    普通文章手机版火狐浏览器年内推出 暂瞄准视窗和Linux
    普通文章美国白领社交网站LinkedIn昨晚瘫痪一个小时
    普通文章黑客行为调查:四成以上黑客在研究“免杀”病毒
    普通文章AJAX应用程序容易遭受到新型攻击
    精彩专题