飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5309|回复: 8

[分享] Duplicate File Finder Plus 算法简单分析

[复制链接]
  • TA的每日心情
    开心
    2019-2-27 15:18
  • 签到天数: 205 天

    [LV.7]常住居民III

    发表于 2016-11-2 00:05:27 | 显示全部楼层 |阅读模式
    本帖最后由 yosen2001 于 2016-11-2 00:15 编辑

    根据某举报贴,简单分析了下

    举报贴地址为:
    实在看不下去了,身为版主……
    https://www.chinapyg.com/thread-87358-1-1.html
    (出处: 飘云阁(PYG官方论坛) )

    算法代码如下,就两个函数,简单得很,口算就可以算出来

    第一个函数
    [C#] 纯文本查看 复制代码
    public static bool VerifyKey(string key, ref string type)
    {
            int num;
            bool flag;
            int num2;
            try
            {
                    ProjectData.ClearProjectError();
                    num = 2;
                    string text = key.Trim();
                    string text2 = string.Empty;
                    if (text.Length == 19)
                    {
                            if (Operators.CompareString(text.Substring(0, 4), "TDFP", false) == 0)
                            {
                                    if (Operators.CompareString(text.Substring(4, 1), "-", false) == 0)
                                    {
                                            text2 = SelfService.Letter2Num(text.Substring(5, 2));
                                            if (Conversions.ToInteger(text2) <= 12 && Conversions.ToInteger(text2) >= 1)
                                            {
                                                    text2 = SelfService.Letter2Num(text.Substring(7, 2));
                                                    if (Conversions.ToInteger(text2) <= 59 && Conversions.ToInteger(text2) >= 0)
                                                    {
                                                            if (Operators.CompareString(text.Substring(9, 1), "-", false) == 0)
                                                            {
                                                                    text2 = text.Substring(10, 2);
                                                                    if (General.InStrings(text2, new string[]
                                                                    {
                                                                            "SG",
                                                                            "PS",
                                                                            "HM",
                                                                            "TM",
                                                                            "EP"
                                                                    }))
                                                                    {
                                                                            text2 = SelfService.Letter2Num(text.Substring(12, 2));
                                                                            if (Conversions.ToInteger(text2) <= 31 && Conversions.ToInteger(text2) >= 1)
                                                                            {
                                                                                    if (Operators.CompareString(text.Substring(14, 1), "-", false) == 0)
                                                                                    {
                                                                                            text2 = SelfService.Letter2Num(text.Substring(15, 2));
                                                                                            if (Conversions.ToInteger(text2) <= 59 && Conversions.ToInteger(text2) >= 0)
                                                                                            {
                                                                                                    text2 = SelfService.Letter2Num(text.Substring(17, 2));
                                                                                                    if (Conversions.ToInteger(text2) <= 23 && Conversions.ToInteger(text2) >= 0)
                                                                                                    {
                                                                                                            type = text.Substring(10, 2);
                                                                                                            flag = true;
                                                                                                            goto IL_1E0;
                                                                                                    }
                                                                                            }
                                                                                    }
                                                                            }
                                                                    }
                                                            }
                                                    }
                                            }
                                    }
                            }
                    }
                    IL_197:
                    flag = false;
                    goto IL_1E0;
                    num2 = -1;
                    @switch(ICSharpCode.Decompiler.ILAst.ILLabel[], num);
                    IL_1B1:
                    goto IL_1D5;
            }
            object arg_1B3_0;
            endfilter(arg_1B3_0 is Exception & num != 0 & num2 == 0);
            IL_1D5:
            throw ProjectData.CreateProjectError(-2146828237);
            IL_1E0:
            bool arg_1EA_0 = flag;
            if (num2 != 0)
            {
                    ProjectData.ClearProjectError();
            }
            return arg_1EA_0;
    }
    
    


    第二个函数

    [C#] 纯文本查看 复制代码
    private static string Letter2Num(string letters)
            {
                    int num2;
                    string text2;
                    int num3;
                    try
                    {
                            IL_00:
                            int num = 1;
                            if (LikeOperator.LikeString(Declarer.startPath, "*Debug", CompareMethod.Binary))
                            {
                                    goto IL_1E;
                            }
                            IL_15:
                            ProjectData.ClearProjectError();
                            num2 = -2;
                            IL_1E:
                            num = 4;
                            string text = string.Empty;
                            IL_27:
                            num = 5;
                            char[] array = letters.ToCharArray();
                            IL_31:
                            num = 6;
                            char[] array2 = array;
                            int i = 0;
                            checked
                            {
                                    while (i < array2.Length)
                                    {
                                            char c = array2[i];
                                            IL_45:
                                            num = 7;
                                            switch (c)
                                            {
                                            case 'A':
                                                    IL_10F:
                                                    num = 23;
                                                    text += "5";
                                                    IL_11F:
                                                    break;
                                            case 'B':
                                            case 'E':
                                            case 'F':
                                            case 'G':
                                            case 'H':
                                            case 'I':
                                            case 'J':
                                            case 'K':
                                            case 'O':
                                            case 'P':
                                            case 'Q':
                                            case 'R':
                                            case 'S':
                                            case 'T':
                                            case 'U':
                                            case 'V':
                                                    goto IL_17B;
                                            case 'C':
                                                    IL_145:
                                                    num = 32;
                                                    text += "4";
                                                    IL_155:
                                                    break;
                                            case 'D':
                                                    IL_133:
                                                    num = 29;
                                                    text += "0";
                                                    IL_143:
                                                    break;
                                            case 'L':
                                                    IL_D3:
                                                    num = 14;
                                                    text += "9";
                                                    IL_E3:
                                                    break;
                                            case 'M':
                                                    IL_169:
                                                    num = 38;
                                                    text += "7";
                                                    IL_179:
                                                    break;
                                            case 'N':
                                                    IL_121:
                                                    num = 26;
                                                    text += "3";
                                                    IL_131:
                                                    break;
                                            case 'W':
                                                    IL_FD:
                                                    num = 20;
                                                    text += "2";
                                                    IL_10D:
                                                    break;
                                            case 'X':
                                                    IL_BE:
                                                    num = 11;
                                                    text += "1";
                                                    IL_CE:
                                                    break;
                                            case 'Y':
                                                    IL_157:
                                                    num = 35;
                                                    text += "6";
                                                    IL_167:
                                                    break;
                                            case 'Z':
                                                    IL_E8:
                                                    num = 17;
                                                    text += "8";
                                                    IL_F8:
                                                    break;
                                            default:
                                                    goto IL_17B;
                                            }
                                            IL_18B:
                                            i++;
                                            IL_191:
                                            num = 43;
                                            continue;
                                            IL_17B:
                                            num = 41;
                                            text += "ERROR!";
                                            goto IL_18B;
                                    }
                                    IL_1A0:
                                    num = 44;
                                    text2 = text;
                                    IL_1AB:
                                    goto IL_2C1;
                                    IL_1B0:;
                            }
                            int arg_1B7_0 = num3 + 1;
                            num3 = 0;
                            @switch(ICSharpCode.Decompiler.ILAst.ILLabel[], arg_1B7_0);
                            IL_274:
                            goto IL_2B6;
                            num3 = num;
                            @switch(ICSharpCode.Decompiler.ILAst.ILLabel[], (num2 > -2) ? num2 : 1);
                            IL_292:
                            goto IL_2B6;
                    }
                    object arg_294_0;
                    endfilter(arg_294_0 is Exception & num2 != 0 & num3 == 0);
                    IL_2B6:
                    throw ProjectData.CreateProjectError(-2146828237);
                    IL_2C1:
                    string arg_2CB_0 = text2;
                    if (num3 != 0)
                    {
                            ProjectData.ClearProjectError();
                    }
                    return arg_2CB_0;
            }


    算法总结如下:
    [C] 纯文本查看 复制代码
    注册码长度为19
    
    第0-3位 TDFP
    
    第 4 位 "-"
    
    第5-6位 解密后必须为 1<= X <=12
    
    第7-8位 解密后必须为 0<= X <=59
    
    第 9 位 "-"
    
    第10-11位 "SG", "PS","HM","TM","EP"
    "SG",  为 "单机许可证 1 PC"
    "PS",  为 "个人许可证 3 PCs"
    "HM",  为 "家庭许可证 10 PCs"
    "TM",  为 "团队许可证 100 PCs"
    "EP",  为 "企业许可证 不限 PC 数"
    
    第12-13位 解密后必须为 1<= X <=31
    
    第 14 位 "-"
    
    第15-16位 解密后必须为 0<= X <=59
    
    第17-18位 解密后必须为 0<= X <=23
    
    解密互换
    0 <==> D
    1 <==> X
    2 <==> W
    3 <==> N
    4 <==> C
    5 <==> A
    6 <==> Y
    7 <==> M
    8 <==> Z
    9 <==> L
    
    


    口算一组企业版注册码,我们都用最大的
    TDFP-1259-EP31-5923 由此得到一组注册码为 :TDFP-XWAL-EPNX-ALWN

    然后输入两次组织名字【飘云阁安全论坛(WWW.ChiNaPYG.CoM)】即可


    测试效果如图

    QQ截图20161102000249.jpg

    QQ截图20161102000315.jpg

    QQ截图20161102000348.jpg

    至于有没有网验,自行测试,这里不作探讨




    评分

    参与人数 5威望 +24 飘云币 +16 收起 理由
    0xcb + 8 + 8 赞,
    ZMZwise + 4 PYG有你更精彩!
    qq939595 + 4 + 4 PYG有你更精彩!
    orz + 4 赞一个!
    cxqdly + 4 + 4 超版牛掰 v587

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 2138 天

    [LV.Master]伴坛终老

    发表于 2016-11-2 00:07:30 | 显示全部楼层
    夜神一出手就知有沒有,真牛,學習了!!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    前天 09:52
  • 签到天数: 1762 天

    [LV.Master]伴坛终老

    发表于 2016-11-2 07:50:53 | 显示全部楼层
    感谢分享,学习了。   
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-11-27 16:47
  • 签到天数: 114 天

    [LV.6]常住居民II

    发表于 2016-11-2 09:03:19 | 显示全部楼层
    这软件以前用过。感谢大牛分享。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2024-3-10 19:49
  • 签到天数: 473 天

    [LV.9]以坛为家II

    发表于 2016-11-2 11:41:42 | 显示全部楼层
    这个是查找重复文件啊。牛
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-3-20 15:56
  • 签到天数: 617 天

    [LV.9]以坛为家II

    发表于 2016-11-2 12:39:33 | 显示全部楼层
    真牛,學習,感谢分享,
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-19 20:39
  • 签到天数: 1238 天

    [LV.10]以坛为家III

    发表于 2016-11-2 20:48:40 | 显示全部楼层
    很好的解析教程,感谢大神分享!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-11-5 16:32:11 | 显示全部楼层
    Thank you for teaching
    Duplicate File Finder Plus 6.0 Build 032
    Keygen - https://www.upload.ee/files/6318738/dupefile.rar.html
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2022-10-15 11:29
  • 签到天数: 168 天

    [LV.7]常住居民III

    发表于 2016-12-1 13:04:48 | 显示全部楼层
    谢谢分享教程
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表