Duplicate File Finder Plus 算法简单分析
本帖最后由 yosen2001 于 2016-11-2 00:15 编辑根据某举报贴,简单分析了下
举报贴地址为:
实在看不下去了,身为版主……
https://www.chinapyg.com/thread-87358-1-1.html
(出处: 飘云阁(PYG官方论坛) )
算法代码如下,就两个函数,简单得很,口算就可以算出来
第一个函数
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;
}
第二个函数
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;
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;
}
算法总结如下:
注册码长度为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)】即可
测试效果如图
至于有没有网验,自行测试,这里不作探讨
夜神一出手就知有沒有,真牛,學習了!! 感谢分享,学习了。 这软件以前用过。感谢大牛分享。 这个是查找重复文件啊。牛 真牛,學習,感谢分享, 很好的解析教程,感谢大神分享! Thank you for teaching
Duplicate File Finder Plus 6.0 Build 032
Keygen - https://www.upload.ee/files/6318738/dupefile.rar.html 谢谢分享教程
页:
[1]