通过反编译 得到了 解密混淆的方法 想通过 这个方法写个加密的方法用来替换密文 请高手赐教 原解密方法如下
        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

解决方案 »

  1.   

    你想看解密的方法 ,给你一个参考。
    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();
        }
      

  2.   

    解密很简单 我是想还原加密类 在不破坏原来程序的基础上改动一写东西 比如说 sql语句里的一些值 当我知道加密后的内容在哪里之后我总不能写明文进去吧