반응형

13.exe
0.01MB

 


 

Basic 13번 문제는 MS Visual C#, Basic.NET로 개발되었다.

 

 

EP 코드는 위와 같다.

 

C# .NET 프로그램은 .NET 프레임워크가 없는 환경에서 분석할 수 없다고 한다.

 

C# .NET 프로그램의 특징은 아래와 같다.

- 관리 기반 코드이다. ( = java JVM처럼 중간언어로 컴파일 되는데, MSIL 이란 언어로 컴파일 된다. )

 - 디컴파일이 매우 쉽게 된다.

 - 난독화 솔루션 존재하지만, 완벽하진 않더라도 복원해주는 솔루션도 존재한다.

 

대표적인 디컴파일러는 아래와 같다.

- .NET Reflector

- JetBrains dotpeek(https://www.jetbrains.com/decompiler/)

 


풀이

 

 

JetBrains dotpeek에서 13.exe를 열면 위와 같이 ConsoleApplication3가 생성된다.

 

 

Root Namespace -> RijndaelSimpleTest -> Main()를 보면 아래와 같다.

 

// Decompiled with JetBrains decompiler
// Type: RijndaelSimpleTest
// Assembly: ConsoleApplication3, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
// MVID: 2ABE29DC-14E6-4F4B-97CF-81A2ED74FE79
// Assembly location: C:\Users\qtt15\Desktop\codeengn\13.exe

using System;

public class RijndaelSimpleTest
{
  [STAThread]
  private static void Main(string[] args)
  {
    string plainText = "";
    string cipherText = "BnCxGiN4aJDE+qUe2yIm8Q==";
    string passPhrase = "^F79ejk56$£";
    string saltValue = "DHj47&*)$h";
    string hashAlgorithm = "MD5";
    int passwordIterations = 1024;
    string initVector = "&!£$%^&*()CvHgE!";
    int keySize = 256;
    RijndaelSimple.Encrypt(plainText, passPhrase, saltValue, hashAlgorithm, passwordIterations, initVector, keySize);
    string str = RijndaelSimple.Decrypt(cipherText, passPhrase, saltValue, hashAlgorithm, passwordIterations, initVector, keySize);
    while (true)
    {
      Console.WriteLine("Please enter the password: ");
      if (!(Console.ReadLine() == str))
        Console.WriteLine("Bad Luck! Try again!");
      else
        break;
    }
    Console.WriteLine("Well Done! You cracked it!");
    Console.ReadLine();
  }
}

 

Console.ReadLine() 으로 가져온 입력값이 str과 같아야 문제가 풀린다.

 

 

ConsoleApplication3 우클릭 -> Export to Project... -> 폴더 지정 후 Open project in Visual Studio 선택 -> Export

 

 

그럼 위와 같이 지정한 폴더 내에 지정한 이름으로 폴더가 생성된다.

 

 

VS Code에서 해당 폴더를 열어 RijndaelSimpleTest.cs 파일에서 28번 라인에서와 같이 str을 출력해주는 코드를 삽입하고 저장한다.

 

dotnet new console --force

 

VS code 내의 터미널에서 dotnet new console --force를 입력한다.

 

dotnet run

 

dotnet run을 입력하면 C# .NET 프로그램의 코드를 실행하는 것이다.

 

 

정상적으로 잘 됐다면 위와 같이 아무런 값을 입력해보면 "Leteminman"이 출력된다.

 

이 값이 바로 str의 값이자 문제의 답이다.

 


VS code에서 .NET 코드가 실행되지 않을 때

 

 

위에서 "dotnet new console --force" 명령어를 입력하면 위의 사진과 같이 Program.cs 파일이 생성된다.

 

이 파일을 삭제하고 "dotnet run"을 입력하면 된다.

 

 

"dotnet run"을 입력했을 때 위와 같은 오류가 난다면

 

<PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>

 

[프로젝트명].csproj 파일의 내용을 위와 같이 수정한다.

 

 

그리고 다시 "dotnet run"을 입력하면 위와 같이 잘 실행이 된다.

 


dotnet run 에러 해결 : https://blog.danggun.net/9197

 

vscode에서 c# 실행하기 : https://sungeun97.tistory.com/m/115

 

 

반응형

'전쟁 > codeengn' 카테고리의 다른 글

[codeengn] Basic RCE 15  (0) 2022.07.30
[codeengn] Basic RCE 14  (0) 2022.07.30
[codeengn] Basic RCE 12  (0) 2022.07.29
[codeengn] Basic RCE 11  (0) 2022.07.28
[codeengn] Basic RCE 10(OEP로 이동 후 덤프)  (0) 2022.07.28

+ Recent posts