本帖最后由 H夜 于 2019-6-6 18:23 编辑
这段时间对南方周易系列软件的逆向研究,发现它的大部分注册机制大部分相同,因为那个软件不太好找下载地址。
官网上只有排八字、起名和万年历的软件。广大的坛友又给我提供了批八字与六爻的程序,现在一并发出来。
因为有之前的按步骤操作过程截图,这次,就只在关键的部分进行分析。
注册机及软件下载在文未,需要简单粗暴看结果的,直接翻到结尾:)
一、机器码处理部分
1.1、MD5运算部分
南方系列的软件在机器码的处理部分,分为两种情况。一种是直接取机器码去掉"-"后的字符串的前10位与后5位。不进行任何处理
直接MD5计算。
见下面代码
[C#] 纯文本查看 复制代码 text = "";
text = Strings.Replace(A_0, " ", "", 1, -1, CompareMethod.Binary);
text = Strings.Replace(text, "-", "", 1, -1, CompareMethod.Binary);
text = Strings.Replace(text, "-", "", 1, -1, CompareMethod.Binary);
text = Strings.Replace(text, ",", "", 1, -1, CompareMethod.Binary);
text = Strings.Replace(text, "\u3000", "", 1, -1, CompareMethod.Binary);
bool flag = text.Length > 10;
if (true)
{
}
int num = 2;
while (true)
{
switch (num)
{
case 0:
text = Strings.Left(text, 10) + Strings.Right(text, 5);
另一种情况是,在进行了上面的前10位与后5位拼接后,还进行了如下的处理:即每位进行移位、与或运算,(主要是在排八字软件上。)
该步骤后,在进行MD5运算。
[C#] 纯文本查看 复制代码 string result;
if (flag)
{
int num2 = length - 1;
for (int i = 0; i <= num2; i++)
{
int num3 = Strings.Asc(A_0.Substring(i, 1));
int a_ = num3 + 7;
int a_2 = num3 * 5;
num += unchecked((long)y.d(num3, a_, a_2));
num += unchecked((long)y.c(num3, a_, a_2));
num += unchecked((long)y.b(num3, a_, a_2));
num *= unchecked((long)y.a(num3, a_, a_2)) + 12L;
bool flag2 = num > 100000000L;
if (flag2)
{
num = Conversions.ToLong(Strings.Right(num.ToString(), 7));
}
}
string text = num.ToString();
bool flag3 = text.Length >= 6;
if (flag3)
{
result = Strings.Right(text, 6);
}
else
{
result = (num + 523109L).ToString();
}
}
return result;
1.2、字符串运算
在经过上面的MD5运算后,该系列软件这部分的注册过程还分两种情况,分别如下:
1.2.1、对MD5运算后截取位置为11、1、15、22、7、5,每位置截取2字符长度,拼接出一个12位长度字符串,
进行12次循环,每次循环判断是字母还是数字,如果是数字,那么直接与2进行异或,与结果串进行拼接,如果
是字母,那么取ASC码+20-循环的次数再转成字符串,如果转换后的字符是字母O,那么替换成数字0,再完成
所有的计算后,将生成的拼接字符串里面的数字0替换成数字4。完成替换后,从9、5、7、11这4个位置,每位置
取2位,拼接出注册码的第1-4位与9-12位。
代码如下:
[C#] 纯文本查看 复制代码 public static string b(ref string A_0)
{
string text = Strings.Replace(text, "0", "4", 1, -1, CompareMethod.Binary);
result = Strings.Mid(text, 9, 2) + Strings.Mid(text, 5, 2) + Strings.Mid(text, 11, 2) + Strings.Mid(text, 7, 2);
num = 13;
continue;
}
case 6:
{
text2,
Strings.Mid(A_0, 11, 2),
Strings.Mid(A_0, 1, 2),
Strings.Mid(A_0, 15, 2),
Strings.Mid(A_0, 22, 2),
Strings.Mid(A_0, 7, 2),
Strings.Mid(A_0, 5, 2)
});
}
string text3 = Conversions.ToString(Strings.Chr(Strings.Asc(Strings.Mid(text2, num2, 1)) + 20 - num2));
flag = (Operators.CompareString(text3, "O", false) == 0);
num = 10;
continue;
}
case 9:
{
int arg_121_0 = num2;
int num3 = 12;
if (arg_121_0 > num3)
{
num = 5;
continue;
}
goto IL_295;
}
case 10:
flag = Versioned.IsNumeric(Strings.Mid(text2, num2, 1));
}
}
1.2.2
第2种情况,
总体流程是一样的,惟一不同的就是截取的位置变化了一下,MD5计算完之后,是从6、8、14、12、17、9的
位置来进行读取拼接,然后计算的时候,数字是与数字5进行异或计算,然后字符部分是把字母O替换成了数字8,
最后抽取注册码的位置变成了,7、5、11、9这4个位置。
代码如下:
[C#] 纯文本查看 复制代码 string text = "";
string text2 = "";
text = string.Concat(new string[]
{
text,
Strings.Mid(A_0, 6, 2),
Strings.Mid(A_0, 8, 2),
Strings.Mid(A_0, 14, 2),
Strings.Mid(A_0, 12, 2),
Strings.Mid(A_0, 17, 2),
Strings.Mid(A_0, 9, 2)
});
int num = 1;
do
{
bool flag2 = Versioned.IsNumeric(Strings.Mid(text, num, 1));
if (flag2)
{
text2 += Conversions.ToString(Conversions.ToInteger(Strings.Mid(text, num, 1)) ^ 5);
}
else
{
string text3 = Conversions.ToString(Strings.Chr(Strings.Asc(Strings.Mid(text, num, 1)) + 20 - num));
bool flag3 = Operators.CompareString(text3, "O", true) == 0;
if (flag3)
{
text2 += "0";
}
else
{
text2 += text3;
}
}
num++;
}
while (num <= 12);
text2 = Strings.Replace(text2, "0", "8", 1, -1, CompareMethod.Text);
result = Strings.Mid(text2, 7, 2) + Strings.Mid(text2, 5, 2) + Strings.Mid(text2, 11, 2) + Strings.Mid(text2, 9, 2);
}
return result;
二、授权日期计算部分
授权日期这部分计算,没有变化,略过。详见我上一篇帖子。
南方排八字专业程序 V7.30 .net破解追码注册教程及爆破版
三、注册机及部分周易程序下载地址
由于官网和坛友提供的周易程序,可能存在版本不一致的情况,在注册的时候,从程序列表里面,
多选几个来计算注册码,基本上能覆盖到所有情况。
周易系列下载地址:链接: http://pan.baidu.com/s/1mi2Ymow 密码: 8nce
注册机下载地址:
注册机.zip
(12.38 KB, 下载次数: 1659)
计算注册码的时候,如果发现有注册码不对的,就换一个软件名称来计算一下,应该会
计算出2种不同的注册码,一定会有一个是正确的。
|