what is c#
일단 리버싱 문제를 풀어볼려고 하는데

ida 이거 왜 이래?
근데 알고 보니깐 C#으로 작성한 언어라 x86으로 해석이 불가능하다. 따라서 저렇게 데이터로 해석한 상황
따라서 dnspyEX 으로 디컴파일이 가능하다. ( 근데 코드가 엄청 예쁘게 디컴파일이 됨 )
약간 c#의 생태계를 이해해보자면,
C언어는 다음과 같은 flow이다. 소스(C) → 컴파일 → x86-64 머신코드 → CPU가 바로 실행
C#(.NET)은 구조가 좀 다르다:
소스(C#) → 컴파일 → IL(Intermediate Language, 중간 언어)
그리고 이를 실행하면 CLR(.NET 런타임)이 JIT 컴파일해서 실제 x86 코드로 바꿔서 실행
즉, 우리가 ida로 본 저 text 영역은 IL 이었던것
그리고 이러한 IL을 직접 넣을 수도 있는데
C
MethodBuilder methodBuilder = typeBuilder.DefineMethod(".", MethodAttributes.Public, typeof(bool), new Type[]
{
typeof(string),
typeof(int[])
});
ILGenerator ilgenerator = methodBuilder.GetILGenerator();다음과 같이 methodBuilder 로 함수를 만든다고 하고 이를 ilgenerator 으로 넣어서
C
ilgenerator.Emit(OpCodes.Ldc_I4_0);
ilgenerator.Emit(OpCodes.Stloc_3);이런식으로 IL을 넣을 수도 있다.