본문 바로가기

전체 글267

[예제로 배우는 C# 프로그래밍] 데이터 타입 C# 데이터 타입 C#을 포함한 모든 .NET 프로그래밍 언어는 .NET의 Common Type System에 정의된 .NET 데이터 타입을 사용한다. C#은 int, double, string과 같은 C# 키워드로 데이터 타입을 표현할 수 있으며, System.Int32, System.Double, System.String과 같은 .NET 데이터 클래스로 데이터 타입을 표현할 수도 있다. 내부적으로는 C# 컴파일러는 C# 키워드로 된 데이터 타입을 컴파일한 후 .NET 데이터 타입으로 변경한다. 리터럴 데이터 C#에서 123, true, "ABC"와 같이 값을 직접 써줄 수 있는데, 이를 리터럴(Literal)이라고 한다. 리터럴 데이터를 사용할 때, 별도의 접미어 표시(Suffix)가 없는 경우 C#.. 2022. 6. 27.
[예제로 배우는 C# 프로그래밍] 프로그래밍 언어 C# 프로그래밍 언어 C#은 Microsoft에서 개발된 객체 지향 프로그래밍 언어로서 Java나 C++과 비슷한 면들이 있다. C#은 윈도우 프로그래밍, 웹 프로그래밍, 게임 및 모바일 프로그래밍 등 많은 영역에서 사용되는 범용 프로그래밍 언어이다. 프로그램 소스코드 C# 프로그램은 .cs 라는 확장자를 사용한다. C++과 다르게 C#은 *.h와 같은 별도의 헤더 파일이 없다. 아주 간단한 C# 프로그램 다음은 아주 간단한 C# 프로그램 예제이다. namespace Intro_Ex1 { class Program { static void Main(string[] args) { System.Console.WriteLine("Hello World..."); } } } 모든 C# 프로그램은 Main()이라는 .. 2022. 6. 26.
[리버싱 입문] 3장 리버싱에 익숙해지기 보호되어 있는 글 입니다. 2022. 6. 26.
[리버싱 입문] 2장 리버싱 시작하기 보호되어 있는 글 입니다. 2022. 6. 26.
[리버싱 입문] 1장 리버싱을 위한 기초 지식 보호되어 있는 글 입니다. 2022. 6. 26.
[Reversing.kr] Easy Crack 실행시키면 이렇게 뜬다. Exeinfo로 작성된 언어와 패킹 상태를 알아보았다. 위의 화면을 보면 C++로 되어있고 패킹되지 않은 상태라는 것을 확인할 수 있다. IDA로 돌아와서 문자열을 검색해보았다. 그 중에서 Congratulation!! 부분이 키와 관련된 내용이 있을 것 같아 눌러보았다. Incorrect Password와 Congratulation이 있는 걸 볼 수 있는데 각각 참조해봐서 어떤 과정을 거쳐서 오게 되는지 알아보자. 이렇게 004010B5, 004010CD, 0040110B, 00401112에서 여기로 jmp해 오는 것을 확인할 수 있다. 먼저 첫번째 조건부터 살펴보았다. ESP+5에 저장된 값과 'a'를 비교하고 있다. 그런데 ESP+5에는 입력값의 두번째 값이 들어있으므로 구.. 2022. 6. 25.
[CodeEngn] CodeEngn Basic RCE L12 12번 문제이다. 일단 key 값을 구해야하는 것 같다. 한번 실행해봤는데 역시나 key값이 필요한 모양이다. Ollydbg로 파일을 열어주자. 구글링을 해보니 key 값, 패스워드, 시리얼 값 등을 알아낼 때에는 문자열을 보는 게 좋다고 한다. 문자열 검색을 해보았다. 3가지 정도가 뜨는 것 같은데, 그 중에서 right key를 찾았다며 축하하는 문자열이 있다. 여기로 이동해보았다. 바로 위쪽에서 CMP로 EAX와 7A2896BF를 비교하는 부분이 있다. 두 값이 같으면 축하문구가 나오고 아니면 점프한다고 한다. 따라서 EAX 값이 7A2896BF가 되어야 한다. 비밀번호에 10을 입력해보았다. EAX에 A가 저장되는 것을 확인할 수 있다. 10진수로 입력하면 16진수로 저장되는 건가 싶어서 다시 한.. 2022. 6. 25.
[CodeEngn] CodeEngn Basic RCE L11 11번 문제이다. OEP와 Stolenbyte를 찾으라고 하고 있다. OEP (Original Entry Point)는 패킹된 파일의 실제 프로그램 시작 부분이고, StolenByte는 훔친 바이트라는 뜻으로 패킹된 프로그램에서 코드의 일부를 OEP로 점프하기 전에 숨기는 것을 의미한다. 일단 패킹되어있는 듯하니 Exeinfo로 패킹 상태를 확인해보았다. UPX로 패킹되어있는 것을 확인할 수 있다. 구글링을 해보니 UPX 패킹의 특징은 PUSHAD ~ POPAD 명령어 내부에서 압축해제 코드가 실행되고 POPAD 명령어 실행 후 JMP 명령어를 통해 OEP로 이동한다고 한다. 또한 StolenByte 훔쳐진 코드는 OEP 주소로 JMP하기 전에 PUSH된다고 한다. 일단 Ollydbg로 파일을 열어보았다.. 2022. 6. 25.
[CodeEngn] CodeEngn Basic RCE L10 10번 문제이다. OEP 주소와 '등록성공'으로 가는 분기점의 OPCODE를 구하라고 한다. OPCODE는 디버거에서 주소가 표시되는 창과 어셈블리 명령이 표시되는 창 사이의 숫자로 나타나는 코드를 의미한다. 그러니까, 컴퓨터가 실행할 연산의 종류를 나타낸다. 아무튼 프로그램도 한번 실행시켜봤다. 그렇단다. 어차피 뭘 입력해도 지금은 아무 소용 없으니까 다음 단계로 넘어가자. 일단 패킹되어있는 것 같으니 Exeinfo로 패킹 정보를 확인해보았다. 처음 보는 Aspack으로 패킹되어있다. 구글링을 해보니 Aspack 패킹은 PUSHAD -> 복호화 코드 실행 -> POPAD -> Return 0C -> OEP 값 PUSH -> Return으로 OEP 주소로 이동한다고 한다. 일단 Ollydbg로 파일을 열.. 2022. 6. 25.