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을 넣을 수도 있다.