tianxj 发表于 2009-7-15 16:06:46

Super Email Verifier 1.87 算法分析

【破文标题】Super Email Verifier 1.87 算法分析
【破文作者】tianxj
【作者邮箱】[email protected]
【作者主页】WwW.ChiNaPYG.CoM
【破解工具】PEiD,OD
【破解平台】Windows XP
【软件名称】Super Email Verifier 1.87
【软件大小】1240KB
【软件类别】国外软件/邮件处理
【软件授权】共享版
【软件语言】英文
【运行环境】Win9x/Me/NT/2000/XP/2003
【更新时间】2009-6-24 9:42:33
【原版下载】http://www.onlinedown.net/soft/65952.htm
【保护方式】注册码
【软件简介】Super Email Verifier是一款批量电子邮件地址检验工具,可以帮助你快速的检查电子邮箱地址的准确性。
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------
**************************************************************
一、运行程序,进行注册,输入错误的注册信息进行检测,有错误提示"Sorry, the license name and register key you input doesn't match."
**************************************************************
二、用PEiD对XVerifier.exe查壳,为 Borland Delphi 6.0 - 7.0
**************************************************************
三、打开OD,下万能断点,来到关键比较之处
00558DE5    E8 72FCFFFF   CALL    XVerifie.00558A5C                ; //算法CALL
00558DEA    8B45 F0         MOV   EAX, DWORD PTR SS:       ; //注册码
00558DED    8B55 08         MOV   EDX, DWORD PTR SS:      ; //试炼码
00558DF0    E8 C315EBFF   CALL    XVerifie.0040A3B8                ; //比较CALL
跟进算法CALL
00558A5C    55            PUSH    EBP
00558A5D    8BEC            MOV   EBP, ESP
00558A5F    83C4 E4         ADD   ESP, -1C
00558A62    53            PUSH    EBX
00558A63    56            PUSH    ESI
00558A64    57            PUSH    EDI
00558A65    33DB            XOR   EBX, EBX
00558A67    895D E4         MOV   DWORD PTR SS:, EBX
00558A6A    895D F4         MOV   DWORD PTR SS:, EBX
00558A6D    8BF9            MOV   EDI, ECX
00558A6F    8955 FC         MOV   DWORD PTR SS:, EDX
00558A72    8BF0            MOV   ESI, EAX
00558A74    8B45 FC         MOV   EAX, DWORD PTR SS:
00558A77    E8 80C5EAFF   CALL    XVerifie.00404FFC
00558A7C    33C0            XOR   EAX, EAX
00558A7E    55            PUSH    EBP
00558A7F    68 758B5500   PUSH    XVerifie.00558B75
00558A84    64:FF30         PUSH    DWORD PTR FS:
00558A87    64:8920         MOV   DWORD PTR FS:, ESP
00558A8A    8B45 FC         MOV   EAX, DWORD PTR SS:
00558A8D    E8 82C3EAFF   CALL    XVerifie.00404E14
00558A92    3B46 4C         CMP   EAX, DWORD PTR DS:
00558A95    7F 0D         JG      SHORT XVerifie.00558AA4          ; //用户名长度大于100位则跳
00558A97    8B45 FC         MOV   EAX, DWORD PTR SS:
00558A9A    E8 75C3EAFF   CALL    XVerifie.00404E14
00558A9F    3B46 50         CMP   EAX, DWORD PTR DS:
00558AA2    7D 0C         JGE   SHORT XVerifie.00558AB0          ; //用户名长度大于等于3位则跳
00558AA4    8BC7            MOV   EAX, EDI
00558AA6    E8 85C0EAFF   CALL    XVerifie.00404B30
00558AAB    E9 9F000000   JMP   XVerifie.00558B4F
00558AB0    8B45 FC         MOV   EAX, DWORD PTR SS:      ; //用户名
00558AB3    E8 5CC3EAFF   CALL    XVerifie.00404E14                ; //取用户名长度
00558AB8    8BD8            MOV   EBX, EAX
00558ABA    EB 31         JMP   SHORT XVerifie.00558AED
00558ABC    8B45 FC         MOV   EAX, DWORD PTR SS:      ; //用户名
00558ABF    8A4418 FF       MOV   AL, BYTE PTR DS:      ; //倒取用户名ASCII码
00558AC3    25 FF000000   AND   EAX, 0FF
00558AC8    33D2            XOR   EDX, EDX
00558ACA    52            PUSH    EDX
00558ACB    50            PUSH    EAX
00558ACC    8B46 68         MOV   EAX, DWORD PTR DS:       ; //常数06B5D2A2h
00558ACF    8B56 6C         MOV   EDX, DWORD PTR DS:
00558AD2    E8 7DD2EAFF   CALL    XVerifie.00405D54                ; //常数06B5D2A2h与ASCII求余
00558AD7    52            PUSH    EDX
00558AD8    50            PUSH    EAX
00558AD9    8D45 E4         LEA   EAX, DWORD PTR SS:
00558ADC    E8 A71FEBFF   CALL    XVerifie.0040AA88                ; //将余数转为10进制
00558AE1    8B55 E4         MOV   EDX, DWORD PTR SS:
00558AE4    8D45 F4         LEA   EAX, DWORD PTR SS:
00558AE7    E8 30C3EAFF   CALL    XVerifie.00404E1C                ; //将10进制字符相连
00558AEC    4B            DEC   EBX
00558AED    8B45 FC         MOV   EAX, DWORD PTR SS:      ; //用户名
00558AF0    E8 1FC3EAFF   CALL    XVerifie.00404E14                ; //取用户名长度
00558AF5    83E8 06         SUB   EAX, 6                           ; //用户名长度与6相减
00558AF8    3BD8            CMP   EBX, EAX                         ; //用户名长度与差比较
00558AFA    7C 04         JL      SHORT XVerifie.00558B00          ; //小于则跳出循环
00558AFC    85DB            TEST    EBX, EBX
00558AFE^ 7F BC         JG      SHORT XVerifie.00558ABC          ; //循环
00558B00    8D55 F8         LEA   EDX, DWORD PTR SS:
00558B03    8B45 F4         MOV   EAX, DWORD PTR SS:      ; //10进制相连字符串
00558B06    E8 55D3EAFF   CALL    XVerifie.00405E60                ; //10进制相连字符串转为16进制
00558B0B    8945 E8         MOV   DWORD PTR SS:, EAX
00558B0E    8955 EC         MOV   DWORD PTR SS:, EDX
00558B11    8B5E 60         MOV   EBX, DWORD PTR DS:
00558B14    85DB            TEST    EBX, EBX
00558B16    7F 11         JG      SHORT XVerifie.00558B29
00558B18    FF75 EC         PUSH    DWORD PTR SS:
00558B1B    FF75 E8         PUSH    DWORD PTR SS:
00558B1E    8BD7            MOV   EDX, EDI
00558B20    33C0            XOR   EAX, EAX
00558B22    E8 D11FEBFF   CALL    XVerifie.0040AAF8
00558B27    EB 26         JMP   SHORT XVerifie.00558B4F
00558B29    FF75 EC         PUSH    DWORD PTR SS:
00558B2C    FF75 E8         PUSH    DWORD PTR SS:
00558B2F    8BD7            MOV   EDX, EDI
00558B31    8BC3            MOV   EAX, EBX
00558B33    E8 C01FEBFF   CALL    XVerifie.0040AAF8                ; //将16进制按12位字符形式输出
00558B38    8B07            MOV   EAX, DWORD PTR DS:          ; //12位16进制字符串,即注册码
00558B3A    E8 D5C2EAFF   CALL    XVerifie.00404E14
00558B3F    8BC8            MOV   ECX, EAX
00558B41    2B4E 60         SUB   ECX, DWORD PTR DS:
00558B44    8B56 60         MOV   EDX, DWORD PTR DS:
00558B47    42            INC   EDX
00558B48    8BC7            MOV   EAX, EDI
00558B4A    E8 5DC5EAFF   CALL    XVerifie.004050AC
00558B4F    33C0            XOR   EAX, EAX
00558B51    5A            POP   EDX
00558B52    59            POP   ECX
00558B53    59            POP   ECX
00558B54    64:8910         MOV   DWORD PTR FS:, EDX
00558B57    68 7C8B5500   PUSH    XVerifie.00558B7C
00558B5C    8D45 E4         LEA   EAX, DWORD PTR SS:
00558B5F    E8 CCBFEAFF   CALL    XVerifie.00404B30
00558B64    8D45 F4         LEA   EAX, DWORD PTR SS:
00558B67    E8 C4BFEAFF   CALL    XVerifie.00404B30
00558B6C    8D45 FC         LEA   EAX, DWORD PTR SS:
00558B6F    E8 BCBFEAFF   CALL    XVerifie.00404B30
00558B74    C3            RETN
00558B75^ E9 76B8EAFF   JMP   XVerifie.004043F0
00558B7A^ EB E0         JMP   SHORT XVerifie.00558B5C
00558B7C    5F            POP   EDI
00558B7D    5E            POP   ESI
00558B7E    5B            POP   EBX
00558B7F    8BE5            MOV   ESP, EBP
00558B81    5D            POP   EBP
00558B82    C3            RETN
**************************************************************
【破解总结】
--------------------------------------------------------------
【算法总结】
简单算法
--------------------------------------------------------------
【算法注册机】
易语言代码
.版本 2

.局部变量 a, 整数型
.局部变量 b, 整数型
.局部变量 c, 文本型
.局部变量 d, 文本型
.局部变量 l, 整数型
.局部变量 i, 整数型

l = 取文本长度 (编辑框1.内容)
.如果 (l > 100 或 l < 3)
    编辑框2.内容 = “输入有误,请重新输入!”
.否则

    .计次循环首 (6, i)
      a = 取代码 (编辑框1.内容, l - i + 1)
      b = 到整数 (进制转换 (“06B5D2A2”, 16, 10)) % a
      c = c + 到文本 (b)
      .如果真 (l - i = 0)
            跳出循环 ()
      .如果真结束

    .计次循环尾 ()
    d = 取文本右边 (“000000000000” + 进制转换 (c, 10, 16), 12)
    编辑框2.内容 = d
--------------------------------------------------------------
【注册信息】
用户名:tianxj
注册码:003D57B765B6
--------------------------------------------------------------
感谢飘云老大、猫老大、Nisy老大以及很多前辈们的学习教程以及王者之剑等所有帮助过我的论坛兄弟姐妹们!谢谢
--------------------------------------------------------------
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

walili 发表于 2009-7-15 21:46:34

学习,老兄,你绝对是强人。。。。。。讲解的也很详细,谢谢你了

冬天的雷雨 发表于 2009-7-16 08:15:39

小弟向老兄学习了!
页: [1]
查看完整版本: Super Email Verifier 1.87 算法分析