通过反编译 得到了 解密混淆的方法 想通过 这个方法写个加密的方法用来替换密文 请高手赐教 原解密方法如下
public static string _xaacba899487bce8c(string x5e99b576d2530d13, int x2710752c36f2d14b)
{
char[] chArray;
ushort num = (ushort) x2710752c36f2d14b;
if (((uint) x2710752c36f2d14b) <= uint.MaxValue)
{
chArray = new char[x5e99b576d2530d13.Length / 4];
for (int i = 0; i < (x5e99b576d2530d13.Length / 4); i++)
{
ushort num3 = (ushort) ((((x5e99b576d2530d13[4 * i] - 'a') + ((x5e99b576d2530d13[(4 * i) + 1] - 0x61) << 4)) + ((x5e99b576d2530d13[(4 * i) + 2] - 0x61) << 8)) + ((x5e99b576d2530d13[(4 * i) + 3] - 0x61) << 12));
do
{
num3 = (ushort) (num3 - num);
chArray[i] = (char) num3;
num = (ushort) (num + 0x6fd);
}
while ((((uint) x2710752c36f2d14b) + ((uint) x2710752c36f2d14b)) > uint.MaxValue);
}
}
return new string(chArray);
}
该方法的调用和输出结果如下web页面里增加顶部的方法 然后在load中运行下边的段代码就可以现实出明文结果 Response.Write(string.Intern(_xaacba899487bce8c("lehgogoglhfheemhkpoaielneajpcoeahcgpcpmpodmpmfddmojl", 0x5522670f)) + "<br>");
Response.Write(string.Intern(_xaacba899487bce8c("kagafbnapaebookbgbccbbjccaadhahdjaod", 0x5a0305b3)) + "<br>");
Response.Write(string.Intern(_xaacba899487bce8c("jefdefmdoedehdkehebfafiffepf", 0x25d134f2)) + "<br>");以下是我写的加密方法写到一半写不下去了求教
public string un_xaacba899487bce8c(string str, int x2710752c36f2d14b, int numa)
{
Response.Write("加密开始初始明文字符串是=" + str);
string ok=null;
ushort num = (ushort)numa;
string str = str;
char[] chArray = str.ToCharArray();
for (int i = 0; i < chArray.Length; i++)
{
num = (ushort)(num - 0x6fd);
ushort num3 = (ushort)chArray[chArray.Length-1-i];
Response.Write("num3的值是" + num3.ToString());
num3 = (ushort)(num3 + num);
Response.Write("num3的值是" + num3.ToString());
//写到这里就开始二进制运算了 就是对应的 ushort num3 = (ushort) ((((x5e99b576d2530d13[4 * i] - 'a') + ((x5e99b576d2530d13[(4 * i) + 1] - 0x61) << 4)) + ((x5e99b576d2530d13[(4 * i) + 2] - 0x61) << 8)) + ((x5e99b576d2530d13[(4 * i) + 3] - 0x61) << 12));实在不知道该怎样反写这个东西了
}
Response.Write("<br> //////////////////////////////////////////////////////////////////////////////////////////////////////////");
return "TEST";
}页面输出结果如下:因为我在原始的方法上增加了输出注释可能看起来有点乱
参数字符串是mlfklnmkfmdljmklbmbm
参数变量值是1457104233
num的值=(ushort)x2710752c36f2d14b是42345
uint.MaxValue的值是4294967295
(uint)x2710752c36f2d14b)的值是1457104233
判断开始
给chArray定界字符串的1/4
=5for循环开始条件是i(ushort)((((x5e99b576d2530d13[4 * i] - 'a')=12
((x5e99b576d2530d13[(4 * i) + 1] - 0x61) << 4))=176
((x5e99b576d2530d13[(4 * i) + 2] - 0x61) << 8))=1280
((x5e99b576d2530d13[(4 * i) + 3] - 0x61) << 12))=40960
获得num3=42428
do循环开始
获得新num3=num3 - num值是83
chArray[0]的值是S
获得新的num的值是44134【0x6fd的值是1789】
do循环结束
判断循环
[x2710752c36f2d14b=1457104233][uint.MaxValue=4294967295]for循环开始条件是i(ushort)((((x5e99b576d2530d13[4 * i] - 'a')=11
((x5e99b576d2530d13[(4 * i) + 1] - 0x61) << 4))=208
((x5e99b576d2530d13[(4 * i) + 2] - 0x61) << 8))=3072
((x5e99b576d2530d13[(4 * i) + 3] - 0x61) << 12))=40960
获得num3=44251
do循环开始
获得新num3=num3 - num值是117
chArray[1]的值是u
获得新的num的值是45923【0x6fd的值是1789】
do循环结束
判断循环
[x2710752c36f2d14b=1457104233][uint.MaxValue=4294967295]for循环开始条件是i(ushort)((((x5e99b576d2530d13[4 * i] - 'a')=5
((x5e99b576d2530d13[(4 * i) + 1] - 0x61) << 4))=192
((x5e99b576d2530d13[(4 * i) + 2] - 0x61) << 8))=768
((x5e99b576d2530d13[(4 * i) + 3] - 0x61) << 12))=45056
获得num3=46021
do循环开始
获得新num3=num3 - num值是98
chArray[2]的值是b
获得新的num的值是47712【0x6fd的值是1789】
do循环结束
判断循环
[x2710752c36f2d14b=1457104233][uint.MaxValue=4294967295]for循环开始条件是i(ushort)((((x5e99b576d2530d13[4 * i] - 'a')=9
((x5e99b576d2530d13[(4 * i) + 1] - 0x61) << 4))=192
((x5e99b576d2530d13[(4 * i) + 2] - 0x61) << 8))=2560
((x5e99b576d2530d13[(4 * i) + 3] - 0x61) << 12))=45056
获得num3=47817
do循环开始
获得新num3=num3 - num值是105
chArray[3]的值是i
获得新的num的值是49501【0x6fd的值是1789】
do循环结束
判断循环
[x2710752c36f2d14b=1457104233][uint.MaxValue=4294967295]for循环开始条件是i(ushort)((((x5e99b576d2530d13[4 * i] - 'a')=1
((x5e99b576d2530d13[(4 * i) + 1] - 0x61) << 4))=192
((x5e99b576d2530d13[(4 * i) + 2] - 0x61) << 8))=256
((x5e99b576d2530d13[(4 * i) + 3] - 0x61) << 12))=49152
获得num3=49601
do循环开始
获得新num3=num3 - num值是100
chArray[4]的值是d
获得新的num的值是51290【0x6fd的值是1789】
do循环结束
判断循环
[x2710752c36f2d14b=1457104233][uint.MaxValue=4294967295]for循环结束
Subid//////////////////////////////////////////////////////////////////////////////////////////////////////////Subid
加密开始初始字符串是=Subidnum3的值是100num3的值是49601num3的值是105num3的值是47817num3的值是98num3的值是46021num3的值是117num3的值是44251num3的值是83num3的值是42428
//////////////////////////////////////////////////////////////////////////////////////////////////////////111
public static void Main()
{
// 载入程序集,test.exe 为被混淆的程序集文件名。
Assembly asm = Assembly.LoadFrom(@"test.exe"); // 获取XenoCode插入的解密类型(包含其namespace),对应上面字符串前面的类名,每次混淆结果可能都不同。
Type type = asm.GetType("x293b01486f981425.x1110bdd110cdcea4"); // 字符串参数和解密参数
object[] parameters = {"\udbac\ue2b7\ue9bb\uf0af\uf7b8\ufeb3\u05a8\u0c61", 0x555ddb55};
Type[] paramTypes = new Type[parameters.Length];
for (int i = 0; i < parameters.Length; i++)
paramTypes[i] = parameters[i].GetType(); // 调用解密方法
BindingFlags flags = BindingFlags.Public | BindingFlags.Static;
MethodInfo method = type.GetMethod("_d574bb1a8f3e9cbc", flags, null, paramTypes, null);
object result = method.Invoke(null, parameters); // 显示解密结果
Console.WriteLine(result); Console.WriteLine("Press Enter key to exit...");
Console.ReadLine();
}