一只小凡凡 发表于 2023-6-12 09:05

C# CrackMe 测试

因为C#代码反编译结果 == 源码,所以难度上很低,但是我尝试了一些方法,各位大佬能通过反编译正确获取到密码吗?
注意:本测试程序中使用写了一个小算法进行字符串处理,同样进行了代码混淆处理,上传两份,一个是经过自己简单混淆,另一个是通过程序混淆的。

一只小凡凡 发表于 2023-6-12 14:57

本帖最后由 一只小凡凡 于 2023-6-12 15:00 编辑

确实,普通的混淆,逆向软件会直接处理变量名,方法名等,也会删除一些混淆用的无意义代码,无法做到特别好的混淆程度,混淆软件也差不多,C#的唯一解就是开源,不让逆向走路,无敌!回到这个程序本身,这个算法的加密过程首先将输入字符串转换为Unicode字节序列,然后将每个字节模3,从而得到一个0到2之间的整数。最后,将这些整数映射到'o'、'O'和'0'字符,并将它们追加到结果字符串中,所以这个的正确答案就是有很多个解,只要符合这个转换规律的就是正确答案。

我在设计之初就将『UnPackMe◇CrackMe◇KeyGenMe◇ReverseMe』转换成了Oo0的形式放到了正确的判断上面,还是各位大佬牛波一啊!


public class StringConverter
{
    // 转换字符集合
    private static readonly char[] ConversionChars = { 'o', 'O', '0' };
    // 取模的数字
    private const int ModulusNumber = 3;

    public string ConvertString(string inputString)
    {
      if (string.IsNullOrEmpty(inputString))
            return string.Empty;

      var bytes = Encoding.Unicode.GetBytes(inputString);
      var resultBuilder = new StringBuilder();

      foreach (var byte in bytes)
      {
            // 取模得到余数,然后映射到转换字符集合中的一个对应字符
            var conversionCharIndex = byte % ModulusNumber;
            resultBuilder.Append(ConversionChars);
      }

      return resultBuilder.ToString();
    }
}

凉游浅笔深画眉 发表于 2023-6-12 09:38

确实牛逼,依旧和源码没区别。

qiqi2050352 发表于 2023-6-13 15:58

gailium 发表于 2023-6-13 08:06

zhanglei1371 发表于 2023-6-12 13:05
maxtocode似乎没见过破解的,强度相当大。

试试破解devx gamerecovery最新版

byh3025 发表于 2023-6-12 10:00

楼主的结果加密了,不知道怎么去解密

ps122 发表于 2023-6-12 10:08

和源码有区别吗?2122102220101022200212222201212012220

vcdemon 发表于 2023-6-12 10:24

babbacbbbcacacbbbccbabbbbbcababcabbbc
答案应该有无数的可能性。
class Program
    {
      public static string oOoO0O0O00oO(string Oo0O0oO0oOo)
      {
            if (string.IsNullOrEmpty(Oo0O0oO0oOo))
            {
                return string.Empty;
            }
            byte[] bytes = Encoding.Unicode.GetBytes(Oo0O0oO0oOo);
            StringBuilder stringBuilder = new StringBuilder();
            foreach (byte b in bytes)
            {
                int num2 = (int)(b % 3);
                stringBuilder.Append(char_0);
            }
            return stringBuilder.ToString();
      }

      // Token: 0x04000003 RID: 3
      private static readonly char[] char_0 = new char[]
      {
            'o',
            'O',
            '0'
      };

      static void Main(string[] args)
      {
            string encrypt = "0oOo0o0oOooo0o0o0oooOoooOooo0o0o0ooooo0oOo0o0o0o0o0oooOo0oOo0oooOo0o0o0ooo";
            byte[] bytes = new byte;

            for (int i=0; i<encrypt.ToCharArray().Length;i++)
            {
                char c = encrypt.ToCharArray();
                for (int num2 = 0; num2 < char_0.Length; num2++)
                {
                  byte b = 0;
                  if (char_0 == c)
                  {
                        if (num2 == 0)
                        {
                            if (i % 2 == 0)
                            {
                              bytes = 99;
                            }
                            else
                            {
                              bytes = 0;
                            }
                        }
                        else
                        {
                            b = (byte)(96 + num2);
                            bytes = b;
                        }
                        //bytes = 0;
                        break;
                  }
                }
            }

            byte[] aa = Encoding.Unicode.GetBytes("a");


            string Oo0O0oO0oOo = Encoding.Unicode.GetString(bytes);
            Console.WriteLine(Oo0O0oO0oOo);
            string aaa = oOoO0O0O00oO(Oo0O0oO0oOo);
            Console.WriteLine(aaa);
            Console.ReadKey();
      }
    }

山顶的一棵草 发表于 2023-6-12 10:53





abcdefghijklmnopqrstuvwxyz 对应的
大小 零小 小小 大小 零小 小小 大小 零小 小小 大小 零小 小小 大小 零小 小小 大小 零小 小小 大小 零小 小小 大小 零小 小小 大小 零小

只要等于 0oOo0o0oOooo0o0o0oooOoooOooo0o0o0ooooo0oOo0o0o0o0o0oooOo0oOo0oooOo0o0o0ooo

wincao 发表于 2023-6-12 11:15

C#代码反编译结果 == 源码,真是没办法了吗…………我也想找到解决方法。

余吉 发表于 2023-6-12 11:18

你的密文有多个解啊

zhanglei1371 发表于 2023-6-12 13:05

wincao 发表于 2023-6-12 11:15
C#代码反编译结果 == 源码,真是没办法了吗…………我也想找到解决方法。

maxtocode似乎没见过破解的,强度相当大。
页: [1] 2
查看完整版本: C# CrackMe 测试