Reverse Engineering
-
[리버싱 핵심원리 study] 14장 실행 압축Reverse Engineering 2020. 12. 29. 00:36
실행 압축(run-time packer)은 리버싱의 단골 주제로, 이를 이해하기 위해서는 PE file format과 운영체제의 기본적인 사항들에 대해 잘 알고 있어야 하며, 압축/해제 알고리즘에 대한 기본적인 내용에 대해서 알아야 한다. 실행 압축이란, 말 그대로 실행(PE: Portable Executable) 파일을 대상으로 파일 내부에 압축해제 코드를 포함하고, 실행되는 순간에 메모리에서 압축을 해제시킨 후 실행하는 기술이다. 일반적인 압축과는 다르게 실행이 가능하다는 특징이 있으며, 실행 압축을 통해 리버싱을 방해할 수도 있으며 코드 양이 더 늘어나는 경우도 있다. 1. 패커(Packer) PE 패커(Packer)란 실행 파일 압축기를 말한다. #1 사용 목적 PE 파일의 크기 감소를 통해 네트..
-
[리버싱 핵심원리 study] 13장 PE File Format (3)Reverse Engineering 2020. 12. 28. 23:40
[리버싱 핵심원리 study] 13장 PE File Format (2) [리버싱 핵심원리 study] 13장 PE File Format (1) PE(Portable Executable) 파일은 Windows 운영체제에서 사용되는 실행 파일 형식이다. 기존 UNIX의 COEF(Common Object File Format)을 기반으로 Microsoft에서.. maple19out.tistory.com - IAT IAT(Import Address Table)에는 Windows 운영체제의 핵심 개념인 process, memory, DLL 구조 등에 대한 내용이 함축되어 있다. IAT란 프로그램이 어떤 라이브러리에서 어떤 함수를 사용하고 있는지를 기술하는 테이블이다. - DLL DLL(Dynamic Linked ..
-
[리버싱 핵심원리 study] 13장 PE File Format (2)Reverse Engineering 2020. 12. 25. 22:13
[리버싱 핵심원리 study] 13장 PE File Format (1) PE(Portable Executable) 파일은 Windows 운영체제에서 사용되는 실행 파일 형식이다. 기존 UNIX의 COEF(Common Object File Format)을 기반으로 Microsoft에서 만들었으며, 문자 그대로 이식성을 좋게 하려는 의.. maple19out.tistory.com - RVA to RAW Section Header를 잘 이해했다면, PE 파일이 메모리에 로딩되었을 때 각 섹션에서 메모리의 주소와 파일 offset을 잘 매핑할 수 있어야 한다. 이러한 매핑 과정을 'RVA to RAW'라고 부른다. 기본적인 방법은 다음과 같다. 1. RVA가 속해 있는 section을 찾는다. 2. 간단한 비례..
-
[리버싱 핵심원리 study] 13장 PE File Format (1)Reverse Engineering 2020. 12. 25. 01:44
PE(Portable Executable) 파일은 Windows 운영체제에서 사용되는 실행 파일 형식이다. 기존 UNIX의 COEF(Common Object File Format)을 기반으로 Microsoft에서 만들었으며, 문자 그대로 이식성을 좋게 하려는 의도가 있었으나 Windows 운영체제에서만 사용된다. notepad.exe(32bit)을 헥스 에디터 HxD를 이용하여 열어보면 다음과 같다. 위 그림은 notepad.exe 파일의 시작 부분이며, PE 파일의 header 부분이다. 헤더 부분에는 파일이 실행되기 위해 필요한 모든 정보들이 있으며 구조체 형식으로 저장되어 있다. PE File Format을 공부한다는 것은 PE 헤더 구조체를 공부한다는 것과 같은 말이다. 1. 기본 구조 아래 그림..
-
[리버싱 핵심원리 study] 11장 Lena's Reversing for NewbiesReverse Engineering 2020. 12. 23. 22:09
Lena라는 사람이 www.tuts4you.com/게시판에 40여 개의 crackme라는 강좌를 올려놓았다고 한다. 나중에 한 번 들어가서 보는 것도 괜찮을 것 같다. forum.tuts4you.com/files/categories/ 에서 관련된 파일을 다운로드할 수 있다. 리버싱 핵심원리 책에서는 Tut.ReverseMe1.exe 파일을 다뤄보고 이에 대한 crack을 진행한다. 1. 프로그램 실행 위와 같은 문구가 출력된다. 확인 버튼을 눌러보자. 무언가 적합한 Regcode를 발견하여 Register me! 버튼을 눌렀을 때 통과할 수 있는 구조 같다. SmartCheck는 Numega 사에서 만든 크래커들이 자주 이용하는 툴이라고 한다. Nag? 버튼을 클릭해보자. 위와 같이 프로그램을 초기에 실..
-
[리버싱 핵심원리 study] 10장 함수 호출 규약Reverse Engineering 2020. 12. 4. 19:47
함수 호출 규약(Calling Convention)은 함수를 호출할 때 어떤 방식으로 argument를 전달할지, 함수가 끝난 후 어떤 방식으로 ESP(스택 포인터)를 정리하는지에 대한 약속이다. 대표적으로 cdecl, stdcall, fastcall 등이 있다. Ollydbg로 예제 프로그램의 어셈블리 코드를 살펴보면서 각 방식의 특징을 살펴보겠다. 1. cdecl 주로 C언어에서 사용되는 방식이며, 'Caller'에서 스택을 정리하는 특징을 보인다. #include "stdio.h" int add(int a, int b) { return a+b; } int main(int argc, char* argv[]) { return add(1, 2); } 위와 같은 코드를 VC++에서 최적화 옵션을 끄고 빌드..
-
[리버싱 핵심원리 study] 8장 abex' crackme#2 분석(2)Reverse Engineering 2020. 12. 3. 13:11
https://maple19out.tistory.com/8 [리버싱 핵심원리 study] 8장 abex' crackme#2 분석(1) 이번 포스팅에서는 abex' crackme#2라는 프로그램을 분석해본다. 해당 프로그램은 Visual Basic으로 제작되어 visual C++로 작성된 프로그램과는 다른 형태의 디스어셈 코드를 보이는데, 이런 부분에 대한 maple19out.tistory.com 지난 포스팅에 이어 이번에는 serial 생성 알고리즘을 살펴보겠다. abex' crackme#2 프로그램에서는 이름/시리얼을 입력하고 [Check] 버튼을 클릭한 후, 조건에 대한 검사를 통해 올바른 시리얼 키인지 아닌지를 판별한다. 즉, 이전에 찾았던 조건 분기 코드는 check button을 클릭했을 때 호..
-
[리버싱 핵심원리 study] 8장 abex' crackme#2 분석(1)Reverse Engineering 2020. 12. 2. 01:44
이번 포스팅에서는 abex' crackme#2라는 프로그램을 분석해본다. 해당 프로그램은 Visual Basic으로 제작되어 visual C++로 작성된 프로그램과는 다른 형태의 디스어셈 코드를 보이는데, 이런 부분에 대한 설명은 생략하고 크랙 하는데 초점을 맞춰 글을 작성해보겠다. 1. abex' crackme#2 실행 우선 해당 프로그램을 실행시켜보자. Name과 Serial 입력란과 세 가지 버튼이 보인다. 왠지 name과 serial을 입력하고 Check를 통해 만족하는 serial key인 경우 통과하는 형태의 프로그램으로 보인다. maple19out / maple19out을 입력하고 Check 버튼을 눌러보았다. 예상대로 뭔가 조건을 만족하지 않아 Wrong이라는 메시지박스가 창에 나타난다. ..