1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
private static void MetMetMet(string sss)
{
byte[] bytes = Encoding.ASCII.GetBytes(Convert.ToBase64String(Encoding.ASCII.GetBytes(sss)));
AssemblyName assemblyName = new AssemblyName("DynamicAssembly");
TypeBuilder typeBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave).DefineDynamicModule(assemblyName.Name, assemblyName.Name + ".exe").DefineType("RevKrT1", TypeAttributes.Public);
MethodBuilder methodBuilder = typeBuilder.DefineMethod("MetMet", MethodAttributes.Private | MethodAttributes.Static, CallingConventions.Standard, null, null);
TypeBuilder typeBuilder2 = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave).DefineDynamicModule(assemblyName.Name, assemblyName.Name + ".exe").DefineType("RevKrT2", TypeAttributes.Public);
typeBuilder2.DefineMethod("MetM", MethodAttributes.Private | MethodAttributes.Static, CallingConventions.Standard, null, new Type[]
{
typeof(byte[]),
typeof(byte[])
}).CreateMethodBody(Form1.bb, Form1.bb.Length);
Type type = typeBuilder2.CreateType();
MethodInfo method = type.GetMethod("MetM", BindingFlags.Static | BindingFlags.NonPublic);
object obj = Activator.CreateInstance(type);
byte[] array = new byte[]
{
1,
2
};
method.Invoke(obj, new object[]
{
array,
bytes
});
string str;
if (array[0] == 1)
{
str = "Wrong";
}
else
{
str = "Correct!!";
}
|
cs |
동적으로 함수를 호출하는 것같다. 입력값을 동적인 함수를 통해 비교하는 것같다.
이 함수가 그 동적인 함수같다.
Header 의 offset 의 0x52c 라고 한다. 기억하자.
이 부분이 동적인 함수를 복호화하는 부분이다.
this 에서 Static members 에 들어가면
bb 가 보인다. 이거 못찾아서 몇일 걸렸다.
우클릭 -> show in memory window
헤더가 0x52c 에 있으니까, 적당히 0000 이 끝나는 곳에 (함수내용시작)
Ctrl+B 로 덮는다.
복호화 완료! 한글자씩 파이썬으로 노가다해서 찾으면 된다.