-
-
[原创]自己动手,弄了个字符串反混淆
-
2008-8-26 16:59
7960
-
有时候会看到反编译后的程序里面,所有的字符串都是乱乱代码,然后要通过类似下面一样的函数进行类似的解析,才知道明文是啥。
byte[] bytes = Convert.FromBase64String(param0);
return Encoding.Unicode.GetString(bytes, 0, bytes.Length);
后来就自己写了个,在C#.NET 2005下,
下面是正则部分
string Patt = @"(?<line>IL_\w+:\s+ldstr\s+)(?<con>(""\w+(\=){0,2}"")(\s+\+\s""\w+(\=){0,2}"")*(\s+\+\s""\w+(\=){0,2}"")?)(?<clear>\s+IL_\w+:\s+call\s+string\sNS005\.c02000025::m06000155\(string\))";
Regex regex = new Regex(Patt, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
string strText = regex.Replace(strTxt, new MatchEvaluator(relp));
1、NS005\.c02000025::m06000155这个就是反编译后,程序带的字符串需要解析的方法名称
2、我的IL的格式如下,这是需要解析的乱乱的麻,如果有不同的格式适当修正下正则
IL_00e7: ldstr "MAAAwAH0AIAA3ADAIAAxAEIIAAAIAAwAEYAIAAxAEUA"
IL_00ec: call string NS005.c02000025::m06000155(string)
下面的替换部分
private string relp(Match m)
{
string strRe = "";
string strLine = m.Groups["line"].Value;
string strCon = m.Groups["con"].Value;
string clear = m.Groups["clear"].Value;
strCon = replc_n_r(strCon).Replace(@"""", "");
strCon = Base64Format(strCon).Replace("\n", "\\n").Replace("\r", "\\r");//
strCon = String.Format(@"""{0}""", strCon);
return strLine + strCon;
}
private string replc_n_r(string str)
{
string strRe = "";
string patten = @"""\s+\+\s""";
Regex regex = new Regex(patten, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
strRe = regex.Replace(str, "");
return strRe;
}
我目前基本上能解决自己的问题,如果用起来不能解决你的问题,留言大家一起与论坛的同学研究
看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~