C# CrackMe 测试
因为C#代码反编译结果 == 源码,所以难度上很低,但是我尝试了一些方法,各位大佬能通过反编译正确获取到密码吗?注意:本测试程序中使用写了一个小算法进行字符串处理,同样进行了代码混淆处理,上传两份,一个是经过自己简单混淆,另一个是通过程序混淆的。
本帖最后由 一只小凡凡 于 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();
}
}
确实牛逼,依旧和源码没区别。 zhanglei1371 发表于 2023-6-12 13:05
maxtocode似乎没见过破解的,强度相当大。
试试破解devx gamerecovery最新版 楼主的结果加密了,不知道怎么去解密
和源码有区别吗?2122102220101022200212222201212012220
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();
}
}
abcdefghijklmnopqrstuvwxyz 对应的
大小 零小 小小 大小 零小 小小 大小 零小 小小 大小 零小 小小 大小 零小 小小 大小 零小 小小 大小 零小 小小 大小 零小 小小 大小 零小
只要等于 0oOo0o0oOooo0o0o0oooOoooOooo0o0o0ooooo0oOo0o0o0o0o0oooOo0oOo0oooOo0o0o0ooo
C#代码反编译结果 == 源码,真是没办法了吗…………我也想找到解决方法。 你的密文有多个解啊 wincao 发表于 2023-6-12 11:15
C#代码反编译结果 == 源码,真是没办法了吗…………我也想找到解决方法。
maxtocode似乎没见过破解的,强度相当大。
页:
[1]
2