Created
November 12, 2012 06:12
-
-
Save rpgmaker/4057787 to your computer and use it in GitHub Desktop.
IL Fun
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using System.Runtime.InteropServices; | |
using System.Security.Cryptography; | |
using System.IO; | |
using System.Reflection.Emit; | |
using System.Reflection; | |
using System.Threading; | |
using System.Diagnostics; | |
using System.Collections.Concurrent; | |
namespace PServiceBus.Core.Runtime { | |
public class Parser { | |
private const BindingFlags BINDING = | |
BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; | |
private readonly static Type _voidType = typeof(void); | |
private static object _lockObject = null; | |
private static ConcurrentDictionary<string, Delegate> _delegates = | |
new ConcurrentDictionary<string, Delegate>(); | |
[DllImport("psb_decrypter.dll", CallingConvention = CallingConvention.Cdecl)] | |
public unsafe static extern string ParseString(string str); | |
static byte[] Decrypt(byte[] cipherData, | |
byte[] Key, byte[] IV) { | |
var ms = new MemoryStream(); | |
var alg = Rijndael.Create(); | |
alg.Key = Key; | |
alg.IV = IV; | |
var cs = new CryptoStream(ms, | |
alg.CreateDecryptor(), CryptoStreamMode.Write); | |
cs.Write(cipherData, 0, cipherData.Length); | |
cs.Close(); | |
return ms.ToArray(); | |
} | |
static string Decrypt(string cipherText, string Password) { | |
var cipherBytes = Convert.FromBase64String(cipherText); | |
var pdb = new PasswordDeriveBytes(Password, | |
new byte[] {0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, | |
0x64, 0x76, 0x65, 0x64, 0x65, 0x76}); | |
var decryptedData = Decrypt(cipherBytes, | |
pdb.GetBytes(32), pdb.GetBytes(16)); | |
return Encoding.Unicode.GetString(decryptedData); | |
} | |
static string Reverse(string text) { | |
return String.Join("", text.Reverse()); | |
} | |
static Parser() { | |
Initialize(); | |
} | |
public static T InvokeEx<T>(string name, Action<ILGenerator> action) where T : class { | |
return Invoke(typeof(T), name, il => { | |
var fxcvs = AppDomain.CurrentDomain.GetAssemblies().Where(x => | |
x.FullName.StartsWith(ParseString("x94-x-zz-z"))) | |
.FirstOrDefault(); | |
var clcssc = Type.GetType(ParseString("x94-x--x") + ParseString("jxk932")); | |
var cclmxcm = Type.GetType(ParseString("x94-x--x") + ParseString("j8-1294x@")); | |
var lkckolk = Type.GetType(ParseString("x94-x--x") + ParseString("551xxcv")); | |
var okcxmxkvv = fxcvs.GetType(ParseString("-000-xv-dj")); | |
var vx32vxc = okcxmxkvv.MakeGenericType(cclmxcm, clcssc, clcssc, lkckolk); | |
var covikicookies = fxcvs.GetType(ParseString("K##$$$")); | |
var vanilio = covikicookies.GetMethod(ParseString("C$D%^CD"), BINDING); | |
var kcx5023 = il.DefineLabel(); | |
var kcree342 = il.DefineLabel(); | |
var kcokedirnk = il.DeclareLocal(cclmxcm); | |
var kcbreakfatrnk = il.DeclareLocal(cclmxcm); | |
il.Emit(OpCodes.Ldstr, ParseString("940-oco1094ro")); | |
il.Emit(OpCodes.Call, cclmxcm.GetMethod(ParseString("cvppgr891"), BINDING)); | |
il.Emit(OpCodes.Stloc, kcokedirnk.LocalIndex); | |
il.Emit(OpCodes.Ldstr, ParseString("--cvxoo--5%%%#o")); | |
il.Emit(OpCodes.Call, cclmxcm.GetMethod(ParseString("cvppgr891"), BINDING)); | |
il.Emit(OpCodes.Stloc, kcbreakfatrnk.LocalIndex); | |
il.Emit(OpCodes.Ldloc_0); | |
il.Emit(OpCodes.Callvirt, vx32vxc.GetProperty(ParseString("5kkc---d")).GetGetMethod()); | |
il.Emit(OpCodes.Ldloc, kcokedirnk.LocalIndex); | |
il.Emit(OpCodes.Ceq); | |
il.Emit(OpCodes.Brtrue, kcx5023); | |
il.Emit(OpCodes.Ldstr, ParseString("----%%%#---#")); | |
il.Emit(OpCodes.Call, cclmxcm.GetMethod(ParseString("cvppgr891"), BINDING)); | |
il.Emit(OpCodes.Ldloc, kcokedirnk.LocalIndex); | |
il.Emit(OpCodes.Sub); | |
il.Emit(OpCodes.Call, vanilio); | |
il.MarkLabel(kcx5023); | |
il.Emit(OpCodes.Ldloc_0); | |
il.Emit(OpCodes.Callvirt, vx32vxc.GetProperty(ParseString("5kkc---d")).GetGetMethod()); | |
il.Emit(OpCodes.Ldloc, kcbreakfatrnk.LocalIndex); | |
il.Emit(OpCodes.Ceq); | |
il.Emit(OpCodes.Brtrue, kcree342); | |
il.Emit(OpCodes.Ldstr, ParseString("----%%%#---#")); | |
il.Emit(OpCodes.Call, cclmxcm.GetMethod(ParseString("cvppgr891"), BINDING)); | |
il.Emit(OpCodes.Ldloc, kcbreakfatrnk.LocalIndex); | |
il.Emit(OpCodes.Sub); | |
il.Emit(OpCodes.Call, vanilio); | |
il.MarkLabel(kcree342); | |
action(il); | |
}) as T; | |
} | |
public static T Invoke<T>(string name, Action<ILGenerator> action) where T : class { | |
return Invoke(typeof(T), name, action) as T; | |
} | |
private static Delegate Invoke(Type type, string name, Action<ILGenerator> action) { | |
var stack = new StackTrace(); | |
var caller = stack.GetFrame(1).GetMethod().Name; | |
var key = String.Concat(caller, name); | |
return _delegates.GetOrAdd(key, k => { | |
var arguments = type.IsGenericType ? type.GetGenericArguments() : null; | |
var returnType = type.Name.Contains("Action") ? _voidType : arguments[arguments.Length - 1]; | |
var method = new DynamicMethod(key, returnType, arguments, true); | |
var clcssc = Type.GetType(ParseString("x94-x--x") + ParseString("jxk932")); | |
var cclmxcm = Type.GetType(ParseString("x94-x--x") + ParseString("j8-1294x@")); | |
var lkckolk = Type.GetType(ParseString("x94-x--x") + ParseString("551xxcv")); | |
var fxcvs = AppDomain.CurrentDomain.GetAssemblies().Where(x => | |
x.FullName.StartsWith(ParseString("x94-x-zz-z"))) | |
.FirstOrDefault(); | |
var vxcpo00es = AppDomain.CurrentDomain.GetAssemblies().Where(x => | |
x.FullName.StartsWith(ParseString("x94-x-yy-x"))) | |
.FirstOrDefault(); | |
var kv0k0ppcx98 = vxcpo00es.GetType(ParseString("jkcxvrr")); | |
var cfc22dvbcx = Assembly.GetExecutingAssembly() | |
.GetType(ParseString("kvppcarppe")); | |
var okcxmxkvv = fxcvs.GetType(ParseString("-000-xv-dj")); | |
var vx32vxc = okcxmxkvv.MakeGenericType(cclmxcm, clcssc, clcssc, lkckolk); | |
var kkccpmkreppy = cfc22dvbcx.GetField(ParseString("vvkklllicky"), | |
BINDING); | |
var il = method.GetILGenerator(); | |
var kc0of = il.DeclareLocal(vx32vxc); | |
var kmxo0id = il.DeclareLocal(clcssc); | |
var klclibk = il.DefineLabel(); | |
var klgglgf = il.DefineLabel(); | |
il.Emit(OpCodes.Ldsfld, cfc22dvbcx); | |
il.Emit(OpCodes.Isinst, vx32vxc); | |
il.Emit(OpCodes.Stloc, kc0of.LocalIndex); | |
il.Emit(OpCodes.Call, clcssc.GetMethod(ParseString("nlxvldkoclcxn"), | |
BINDING)); | |
il.Emit(OpCodes.Stloc, kmxo0id.LocalIndex); | |
il.Emit(OpCodes.Ldloc, kmxo0id.LocalIndex); | |
il.Emit(OpCodes.Ldloc, kc0of.LocalIndex); | |
il.Emit(OpCodes.Callvirt, vx32vxc.GetProperty(ParseString("9kfc---dx")) | |
.GetGetMethod()); | |
il.Emit(OpCodes.Call, clcssc.GetMethod(ParseString("klllclcxll"), BINDING)); | |
il.Emit(OpCodes.Ldc_I4_0); | |
il.Emit(OpCodes.Ceq); | |
il.Emit(OpCodes.Brtrue, klclibk); | |
il.Emit(OpCodes.Call, kv0k0ppcx98.GetMethod(ParseString("gcdtoop"), | |
BINDING)); | |
il.Emit(OpCodes.Callvirt, kv0k0ppcx98.GetMethod(ParseString("jcknklck"))); | |
il.MarkLabel(klclibk); | |
il.Emit(OpCodes.Ldloc, kmxo0id.LocalIndex); | |
il.Emit(OpCodes.Ldloc, kc0of.LocalIndex); | |
il.Emit(OpCodes.Callvirt, vx32vxc.GetProperty(ParseString("9kfc---dx")) | |
.GetGetMethod()); | |
il.Emit(OpCodes.Call, clcssc.GetMethod(ParseString("klglglcglg"), BINDING)); | |
il.Emit(OpCodes.Ldc_I4_0); | |
il.Emit(OpCodes.Ceq); | |
il.Emit(OpCodes.Brtrue, klgglgf); | |
il.Emit(OpCodes.Call, kv0k0ppcx98.GetMethod(ParseString("gcdtoop"), | |
BINDING)); | |
il.Emit(OpCodes.Callvirt, kv0k0ppcx98.GetMethod(ParseString("jcknklck"))); | |
il.MarkLabel(klgglgf); | |
action(il); | |
il.Emit(OpCodes.Ret); | |
return method.CreateDelegate(type); | |
}); | |
} | |
private static void Initialize() { | |
var kss = AppDomain.CurrentDomain.GetAssemblies().Where(x => | |
x.FullName.StartsWith(ParseString("x94-x-yy-x"))) | |
.FirstOrDefault(); | |
var kcss = AppDomain.CurrentDomain.GetAssemblies().Where(x => | |
x.FullName.StartsWith(ParseString("x94-x-zz-z"))) | |
.FirstOrDefault(); | |
var kvqq = kcss.GetType(ParseString("-000-xv-dj")); | |
var kxd = Type.GetType(ParseString("x94-x--x") + ParseString("jxk932")); | |
var kcc = Type.GetType(ParseString("x94-x--x") + ParseString("j8-1294x@")); | |
var kxc = Type.GetType(ParseString("x94-x--x") + ParseString("551xxcv")); | |
var mkvm = kss.GetType(ParseString("@$56x566")); | |
var mkvmm = mkvm.GetProperty(ParseString("yy0y0")).GetGetMethod(); | |
var mggkgg = kss.GetType(ParseString("@$gggg6")); | |
var mggkggkv = mggkgg.GetProperty(ParseString("707^Yyyr")).GetGetMethod(); | |
var gkmg = kss.GetType(ParseString("@$g6g6")); | |
var mkcmm = kss.GetType(ParseString("@$5xx66")); | |
var mkvbbb = mkcmm.GetMethod(ParseString("cfgeim")); | |
var kggqq = kvqq.MakeGenericType(kcc, kxd, kxd, kxc); | |
var kvcvvccvv = Type.GetType(ParseString("kvcckhkrk")).MakeArrayType(); | |
var kckpppcppp = kss.GetType(ParseString("jkcxvrr")); | |
var pdemrepp = Assembly.GetExecutingAssembly() | |
.GetType(ParseString("kvppcarppe")); | |
var kkccpmkreppy = pdemrepp.GetField(ParseString("vvkklllicky"), | |
BINDING); | |
var gmkgm = gkmg.GetMethod(ParseString("cfgeim"), | |
new[] { kxc }); | |
var kscs = kxc.GetMethod(ParseString("x121ds"), | |
new[] { kcc, kcc }); | |
var krcxr = kxc.GetMethod(ParseString("cxvxc4"), | |
new[] { kcc, kcc }); | |
var xrvxc = pdemrepp.GetMethod(ParseString("Lj3465"), BINDING); | |
var xccc = kxc.GetMethod(ParseString("7#$524"), | |
BINDING, | |
null, new[] { kxc, kxc }, null); | |
var xdd = pdemrepp.GetMethod(ParseString("jknn8u"), | |
BINDING, null, | |
new[] { kxc, kxc }, null); | |
var method = new DynamicMethod("xfsdf", | |
typeof(void), null, true); | |
var il = method.GetILGenerator(); | |
var lxlcm = il.DeclareLocal(mkcmm); | |
var licit = il.DeclareLocal(kxc); | |
var kpoy = il.DeclareLocal(kxc); | |
var ll = il.DeclareLocal(kcc); | |
var ff = il.DeclareLocal(kxc); | |
var ss = il.DeclareLocal(kxc); | |
var kk = il.DeclareLocal(kxc); | |
var pkkk = il.DeclareLocal(kxc); | |
var klcll = il.DeclareLocal(kxc); | |
var ikvkfi = il.DefineLabel(); | |
var kfttktt = il.DeclareLocal(kggqq); | |
var kcrarkc = il.DeclareLocal(kxc.MakeArrayType()); | |
var krrcckckc = il.DeclareLocal(kvcvvccvv); | |
var dkklloi = il.DeclareLocal(kxc); | |
il.Emit(OpCodes.Ldstr, ParseString("mc1-2--1")); | |
il.Emit(OpCodes.Call, kcss.GetType(ParseString("xx-$$-x")) | |
.GetMethod(ParseString("cv56891`"), | |
BINDING, null, | |
new[] { kxc }, null)); | |
il.Emit(OpCodes.Ldstr, ParseString("xrkcpp")); | |
il.Emit(OpCodes.Call, kss.GetType(ParseString("@$5666")) | |
.GetMethod(ParseString("9@#9-"), | |
BINDING, null, | |
new[] { kxc, kxc }, null)); | |
il.Emit(OpCodes.Stloc, lxlcm.LocalIndex); | |
il.Emit(OpCodes.Ldloc, lxlcm.LocalIndex); | |
il.Emit(OpCodes.Ldc_I4_0); | |
il.Emit(OpCodes.Callvirt, mkvbbb); | |
il.Emit(OpCodes.Callvirt, mkvmm); | |
il.Emit(OpCodes.Ldstr, ParseString("707^Yyyr")); | |
il.Emit(OpCodes.Callvirt, gmkgm); | |
il.Emit(OpCodes.Callvirt, mggkggkv); | |
il.Emit(OpCodes.Stloc, licit.LocalIndex); | |
il.Emit(OpCodes.Ldloc, lxlcm.LocalIndex); | |
il.Emit(OpCodes.Ldc_I4_1); | |
il.Emit(OpCodes.Callvirt, mkvbbb); | |
il.Emit(OpCodes.Callvirt, mkvmm); | |
il.Emit(OpCodes.Ldstr, ParseString("707^Yyyr")); | |
il.Emit(OpCodes.Callvirt, gmkgm); | |
il.Emit(OpCodes.Callvirt, mggkggkv); | |
il.Emit(OpCodes.Stloc, kpoy.LocalIndex); | |
il.Emit(OpCodes.Ldloc, licit.LocalIndex); | |
il.Emit(OpCodes.Callvirt, kxc.GetProperty(ParseString("71xxew")).GetGetMethod()); | |
il.Emit(OpCodes.Stloc, ll.LocalIndex); | |
il.Emit(OpCodes.Ldloc, kpoy.LocalIndex); | |
il.Emit(OpCodes.Ldc_I4_2); | |
il.Emit(OpCodes.Ldc_I4_2); | |
il.Emit(OpCodes.Callvirt, kscs); | |
il.Emit(OpCodes.Stloc, ff.LocalIndex); | |
il.Emit(OpCodes.Ldloc, kpoy.LocalIndex); | |
il.Emit(OpCodes.Ldloc, ll.LocalIndex); | |
il.Emit(OpCodes.Ldc_I4_2); | |
il.Emit(OpCodes.Callvirt, kscs); | |
il.Emit(OpCodes.Stloc, ss.LocalIndex); | |
il.Emit(OpCodes.Ldloc, ff.LocalIndex); | |
il.Emit(OpCodes.Ldloc, ss.LocalIndex); | |
il.Emit(OpCodes.Call, xccc); | |
il.Emit(OpCodes.Call, xrvxc); | |
il.Emit(OpCodes.Stloc, kk.LocalIndex); | |
il.Emit(OpCodes.Ldloc, kpoy.LocalIndex); | |
il.Emit(OpCodes.Ldloc, ll.LocalIndex); | |
il.Emit(OpCodes.Ldc_I4_2); | |
il.Emit(OpCodes.Callvirt, krcxr); | |
il.Emit(OpCodes.Ldc_I4_2); | |
il.Emit(OpCodes.Ldc_I4_2); | |
il.Emit(OpCodes.Callvirt, krcxr); | |
il.Emit(OpCodes.Ldloc, kk.LocalIndex); | |
il.Emit(OpCodes.Ldstr, ParseString("jxcv4453")); | |
il.Emit(OpCodes.Call, xccc); | |
il.Emit(OpCodes.Call, xdd); | |
il.Emit(OpCodes.Stloc, klcll.LocalIndex); | |
il.Emit(OpCodes.Ldloc, kk.LocalIndex); | |
il.Emit(OpCodes.Ldstr, ParseString("jcg788u")); | |
il.Emit(OpCodes.Call, xccc); | |
il.Emit(OpCodes.Ldloc, klcll.LocalIndex); | |
il.Emit(OpCodes.Call, xccc); | |
il.Emit(OpCodes.Ldc_I4_1); | |
il.Emit(OpCodes.Newarr, kvcvvccvv.GetElementType()); | |
il.Emit(OpCodes.Stloc, krrcckckc.LocalIndex); | |
il.Emit(OpCodes.Ldloc, krrcckckc.LocalIndex); | |
il.Emit(OpCodes.Ldc_I4_0); | |
il.Emit(OpCodes.Ldc_I4, | |
(int)ParseString("jcg788u").ToCharArray()[0]); | |
il.Emit(OpCodes.Stelem_I2); | |
il.Emit(OpCodes.Ldloc, krrcckckc.LocalIndex); | |
il.Emit(OpCodes.Callvirt, kxc.GetMethod(ParseString("tycx1Mxs"), | |
new[] { kvcvvccvv })); | |
il.Emit(OpCodes.Stloc, kcrarkc.LocalIndex); | |
il.Emit(OpCodes.Ldloc, kcrarkc.LocalIndex); | |
il.Emit(OpCodes.Ldc_I4_0); | |
il.Emit(OpCodes.Ldelem, kxc); | |
il.Emit(OpCodes.Call, kcc.GetMethod(ParseString("cvppgr891"), | |
BINDING, | |
null, new[] { kxc }, null)); | |
il.Emit(OpCodes.Ldloc, kcrarkc.LocalIndex); | |
il.Emit(OpCodes.Ldc_I4_2); | |
il.Emit(OpCodes.Ldelem, kxc); | |
il.Emit(OpCodes.Call, kxd.GetMethod(ParseString("cvppgr891"), | |
BINDING, | |
null, new[] { kxc }, null)); | |
il.Emit(OpCodes.Ldloc, kcrarkc.LocalIndex); | |
il.Emit(OpCodes.Ldc_I4_3); | |
il.Emit(OpCodes.Ldelem, kxc); | |
il.Emit(OpCodes.Call, kxd.GetMethod(ParseString("cvppgr891"), | |
BINDING, | |
null, new[] { kxc }, null)); | |
il.Emit(OpCodes.Ldloc, kcrarkc.LocalIndex); | |
il.Emit(OpCodes.Ldc_I4_4); | |
il.Emit(OpCodes.Ldelem, kxc); | |
il.Emit(OpCodes.Newobj, kggqq.GetConstructors()[0]); | |
il.Emit(OpCodes.Stloc, kfttktt.LocalIndex); | |
il.Emit(OpCodes.Ldloc, kcrarkc.LocalIndex); | |
il.Emit(OpCodes.Ldc_I4_4); | |
il.Emit(OpCodes.Ldelem, kxc); | |
il.Emit(OpCodes.Ldloc, licit.LocalIndex); | |
il.Emit(OpCodes.Call, kxc.GetMethod(ParseString("ekvkekieki"), | |
BINDING)); | |
il.Emit(OpCodes.Ldc_I4_0); | |
il.Emit(OpCodes.Ceq); | |
il.Emit(OpCodes.Brtrue, ikvkfi); | |
il.Emit(OpCodes.Call, kckpppcppp.GetMethod(ParseString("gcdtoop"), | |
BINDING)); | |
il.Emit(OpCodes.Callvirt, kckpppcppp.GetMethod(ParseString("jcknklck"))); | |
il.MarkLabel(ikvkfi); | |
il.Emit(OpCodes.Ldloc, kfttktt.LocalIndex); | |
il.Emit(OpCodes.Stsfld, kkccpmkreppy); | |
il.Emit(OpCodes.Ret); | |
(method.CreateDelegate(typeof(Action)) as Action)(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment