VB2010动态调用类及里面的方法

我们在反编译的时候会遇到一些混淆过的程序,他们会将一些字符串也混淆变成乱码,再经过混淆后的代码调用如(?149.?150),对应的IL代码为

L_0026: ldstr "IŔɫͮЧԳشݻࡵॺ੾୴౼ഺ๰ོှᅽቻ።ᐢᕠᙤ᝭ᠧᥩᩴ᭶ᱽᴻṡὲ‼" // 72870B0070
L_002b: call string ?149::?150(string) // 285E030006

如果想知道加密字符串是什么东西,有两种办法

  1. 阅读?150方法的代码,用VB或C#模仿写一个出来调用
  2. 引用其DLL调用?150方法获得结果,输出

由于?150也是被混淆过的,阅读起来非常困难,所以我选择了第二个办法

但采用第二种方法时会遇到这样的情况

Dim r = ?149.?150(str)

这样过不了编译器,原因是不能用“?”开头,所以只能使用动态调用类,具体实现如下:

Sub Main()
     Dim str = "IŔɫͮЧԳشݻࡵॺ੾୴౼ഺ๰ོှᅽቻ።ᐢᕠᙤ᝭ᠧᥩᩴ᭶ᱽᴻṡὲ‼"
     Dim a = Assembly.Load("zymtl")
     Dim t = a.GetType("?149")
     Dim p = t.GetMethod("?150")
     Dim s = p.Invoke(t, New Object() {str})
     Console.WriteLine(s)
     Console.Read()
End Sub