這段時(shí)間對南方周易系列軟件的逆向研究,發(fā)現(xiàn)它的大部分注冊機(jī)制大部分相同,因?yàn)槟莻(gè)軟件不太好找下載地址。
官網(wǎng)上只有排八字、起名和萬年歷的軟件。廣大的壇友又給我提供了批八字與六爻的程序,現(xiàn)在一并發(fā)出來。
因?yàn)橛兄暗陌床襟E操作過程截圖,這次,就只在關(guān)鍵的部分進(jìn)行分析。
注冊機(jī)及軟件下載在文未,需要簡單粗暴看結(jié)果的,直接翻到結(jié)尾:)
一、機(jī)器碼處理部分
1.1、MD5運(yùn)算部分
南方系列的軟件在機(jī)器碼的處理部分,分為兩種情況。一種是直接取機(jī)器碼去掉"-"后的字符串的前10位與后5位。不進(jìn)行任何處理
直接MD5計(jì)算。
見下面代碼
[C#] 純文本查看 復(fù)制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
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);
|
另一種情況是,在進(jìn)行了上面的前10位與后5位拼接后,還進(jìn)行了如下的處理:即每位進(jìn)行移位、與或運(yùn)算,(主要是在排八字軟件上。)
該步驟后,在進(jìn)行MD5運(yùn)算。
[C#] 純文本查看 復(fù)制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
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、字符串運(yùn)算
在經(jīng)過上面的MD5運(yùn)算后,該系列軟件這部分的注冊過程還分兩種情況,分別如下:
1.2.1、對MD5運(yùn)算后截取位置為11、1、15、22、7、5,每位置截取2字符長度,拼接出一個(gè)12位長度字符串,
進(jìn)行12次循環(huán),每次循環(huán)判斷是字母還是數(shù)字,如果是數(shù)字,那么直接與2進(jìn)行異或,與結(jié)果串進(jìn)行拼接,如果
是字母,那么取ASC碼+20-循環(huán)的次數(shù)再轉(zhuǎn)成字符串,如果轉(zhuǎn)換后的字符是字母O,那么替換成數(shù)字0,再完成
所有的計(jì)算后,將生成的拼接字符串里面的數(shù)字0替換成數(shù)字4。完成替換后,從9、5、7、11這4個(gè)位置,每位置
取2位,拼接出注冊碼的第1-4位與9-12位。
代碼如下:
[C#] 純文本查看 復(fù)制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
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計(jì)算完之后,是從6、8、14、12、17、9的
位置來進(jìn)行讀取拼接,然后計(jì)算的時(shí)候,數(shù)字是與數(shù)字5進(jìn)行異或計(jì)算,然后字符部分是把字母O替換成了數(shù)字8,
最后抽取注冊碼的位置變成了,7、5、11、9這4個(gè)位置。
代碼如下:
[C#] 純文本查看 復(fù)制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
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;
|
二、授權(quán)日期計(jì)算部分
授權(quán)日期這部分計(jì)算,沒有變化,略過。詳見我上一篇帖子。
南方排八字專業(yè)程序 V7.30 .net破解追碼注冊教程及爆破版
三、注冊機(jī)及部分周易程序下載地址
由于官網(wǎng)和壇友提供的周易程序,可能存在版本不一致的情況,在注冊的時(shí)候,從程序列表里面,
多選幾個(gè)來計(jì)算注冊碼,基本上能覆蓋到所有情況。
周易系列下載地址:鏈接: http://pan.baidu.com/s/1mi2Ymow 密碼: 8nce
注冊機(jī)下載地址: 注冊機(jī).zip (12.38 KB, 下載次數(shù): 82)
計(jì)算注冊碼的時(shí)候,如果發(fā)現(xiàn)有注冊碼不對的,就換一個(gè)軟件名稱來計(jì)算一下,應(yīng)該會
計(jì)算出2種不同的注冊碼,一定會有一個(gè)是正確的。
|