본문 바로가기

출력과 입력 출력과 입력 C언어에서는 출력과 입력을 할 때 printf와 scanf를 많이 사용합니다. 간결한 소스코드를 작성할 수 있죠.ASM에서도 출력과 입력을 할 수 있습니다. 먼저 간단히 C언어 소스코드를 보고 ASM으로 바꿔보도록 하겠습니다. IA-32 HelloWorld 소스코드를 분석 할때 출력에 대한 부분은 설명했으니 출력부분인 5~9, 17~21, 23~27과 종료부분인 29~31은 제외하고 값이 들어가는 부분에 대해서 설명하도록 하겠습니다. 입력을 받는 부분은 11~15줄에서 실행됩니다.11 : eax에 3을 저장합니다. read()를 부르기 위한 것 입니다.12 : ebx에 2를 저장합니다.13 : ecx에 num을 저장합니다.14 : edx에 5를 저장합니다.15 : 커널에 정보를 넘겨줍니다. .. 더보기
System Call System Call 앞서 포스팅 된 Hello World 소스코드를 분석하기 위해서는 System Call을 이해해야 합니다. 그럼 System Call에 대해서 알아보도록 하겠습니다. System Call이란? 시스템 콜은 운영체제가 인식하여 실행하기 위한 것 이라고 생각하면 쉽습니다.32비트와 64비트의 시스템 콜은 다르기 때문에 아래 내용을 확인해 보도록 하죠. x86 System Call Table: http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.htmlx64 System Call Table: http://blog.rchapman.org/post/36801038863/linux-system-call-table-for-x86-64 위 사.. 더보기
Hello World Hello World 프로그래밍을 처음 시작 하시는 분들은 항상 먼저 출력해보는 것이 바로 Hello World 이지 않을까 싶습니다. 비교를 위해서 C언어로 작성된 Hello world와 ASM으로 작성된 Hello World를 보도록 하겠습니다. 아주 간단한 Hello World 출력 소스코드 입니다. 실행 시 Hello World\n가 출력됩니다. 이 소스코드를 ASM 코드로 바꾼다면 어떻게 될까요? 소스코드가 7줄에서 무려 18줄로 늘어났습니다. 당연한 결과입니다. 고급언어인 C언어를 저급언어인 ASM로 바꿨기 때문입니다. 추가적으로 C언어의 소스코드 파일 확장자는 *.c 이며, ASM 소스코드 파일 확장자는 *.nasm 입니다. 컴파일 및 실행방법 HelloWorld.c 파일은 우분투에서 다음과.. 더보기
IA-32, IA-64 Register IA-32, IA-64 Register 리버스 엔지니어링과 시스템 해킹을 하면서 자주보게 되는 레지스터에 대해서 알아보도록 하겠습니다. IA-32 Register EAX : 더하기, 빼기, 곱셈과 나눗셈 명령에서 자동으로 사용되고 함수의 리턴 값이 저장되는 용도로 사용됩니다. EBX : ESI, EDI와 결합하여 인덱스에 사용됩니다. ECX : 반복 명령어 사용 시 반복 카운터로 사용됩니다. ECX 레지스터에 반복할 회수를 지정해 놓고 반복 작업을 수행합니다. EDX : EAX와 같이 쓰이며 부화 확장 명령 등에 쓰입니다. 함수의 리턴 값이 저장되는 용도는 아닙니다. ESI : 데이터 복사, 조작시 시작지의 주소가 저장됩니다. ESI 레지스터가 가리키는 주소의 데이터를 EDI 레지스터가 가리키는 주소로 .. 더보기
Assembly Language Assembly Language 어셈블리 언어에 대해서 알고 계시나요? 어셈블리 언어는 리버스 엔지니어링이나 시스템 해킹을 하게 되면 자주 보는 언어입니다.프로그래밍을 처음 접하게 되면 아마 대부분은 C언어를 처음으로 시작하게 됩니다. 물론 C언어가 아니라 다른 언어부터 시작하는 분도 계시죠. C언어를 처음 공부하게 되면 '고급언어와 저급언어'에 대해서 공부하게 됩니다. C언어는 '고급언어'에 속하죠.하지만 어셈블리어는 '저급언어'에 속합니다. 고급언어는 프로그래머의 입장에서 만들어진 언어이고, 저급언어는 컴퓨터의 입장에서 만들어진 언어라고 생각하면 쉽습니다. 어셈블리어 종류 어셈블리어에는 여러 종류가 있습니다.IA-32, IA-64, ARM, MIPS가 존재하는데 intel cpu를 사용하기 때문에 I.. 더보기
General - Http Basics 보호되어 있는 글입니다. 더보기
WebGoat 설치 및 실행 보호되어 있는 글입니다. 더보기
연산자 이번에는 Python의 연산자에 대해서 알아보도록 하겠습니다. 뭐 항상 C언어와 함께 말을하는데, 프로그래밍을 처음 시작하면 대부분 C언어를 많이 접하시니까 C언어를 꼭 하셨으면 좋겠네요. 정말 C언어는 해도 해도 끝이 없습니다. 파면 팔 수록 더 모르는 부분들이 많이 나와요. 문법적인 건 아니지만... 대입 연산자= 대입연산자는 값을 변수에 넣기 위해서 사용됩니다. 변수 a에 2라는 값으로 초기화 했습니다. 이러한 방식으로 값을 대입합니다. 산술 연산자+, -, *, /, %, ** +: 값을 더해줍니다.-: 값을 빼줍니다.*: 값을 곱합니다./: 값을 나눠 몫을 나타냅니다.%: 값을 나눠 나머지를 나타냅니다.**: 제곱을 해줍니다. 정말 쉽죠? 기타 대입 연산자+=, -=, *=, /=, %= C언어.. 더보기
변수와 자료형 파이썬의 변수와 자료형에 대해서 알아보도록 하겠습니다. 변수 잠깐 C언어를 이야기 하자면 C언어 에서는 변수를 선언하고 값을 초기화 하는데, 자료형 변수명 = 값; 과 같은 형태를 사용했습니다.파이썬에서는 어떻게 사용 할까요? 파이썬에서는 자료형을 따지긴 하지만 C언어처럼 먼저 선언을 할 필요가 없습니다. 위 사진을 보면 변수 name을 선언했지만 자료형은 적어주지 않았습니다. int name 처럼 사용하지 않았다는 것이죠. 파이썬은 초기화 되는 값에 따라서 알아서 형태가 정해진다는 것입니다.해당 변수의 타입을 알고 싶다면 type(변수명)을 이용하면 알 수 있습니다. 자료형 파이썬의 자료형은 다음과 같습니다. Strings, Numbers, Dictionary, Tuple, Lists, Boolean .. 더보기
[코딩] vim 사용 및 vim 설정 보호되어 있는 글입니다. 더보기
Windows Massage Hooking Hook 이라는 단어는 고리, 걸이, 바늘 등의 뜻을 가지고 있습니다. Hook 이라는 말은 리버싱을 하면서 어떤 뜻으로 사용되나면 중간에 정보를 가로채는 것으로 사용됩니다. 간단히 설명하자면 키보드가 눌릴때 WM_KEYDOWN 메시지가 말생합니다. 이 메세지에 의해서 프로그램에서 키보드가 눌렸다라는 것을 알려주죠.이러한 메세지를 중간에 가로채는것을 Hooking이라고 합니다. Win32 API나 MFC를 해보셨다면 Window Massage에 대해서 조금은 아실 겁니다. Massage Hooking은 SetWindowsHookEx()라는 API를 이용해 간단히 구현할 수 있습니다. SetWindowsHookEx()의 원형은 다음과 같습니다. msdn에서 각 인자 값에 대한 설명은 다음과 같습니다. ht.. 더보기
.reloc section 제거 앞서 PE Relocation에 대해서 알아봤습니다. 해당 주소가 사용 중이라면 다른 임의의 주소로 이동한다는 개념이였습니다. 이러한 정보를 관리하는 곳이 reloc Section 이였다는 것도 말이죠. 하지만 reloc Section이 없어도 프로그램은 실행됩니다. 단지 재배치를 위한 것이기 때문이죠.ASLR 기능이 추가 되었다고 했는데, 이 기능은 보안상으로도 매우 중요한 역할을 합니다. reloc Section Header 정리 PEView에서 reloc Section의 File Offset은 280 입니다. 해당 주소 부터 모두 0으로 채워 주도록 합니다. reloc Section 제거 PEView에서 Pointer to Raw Data 값이 31600임을 알 수 있습니다. 해당 주소로 이동해서 .. 더보기
PE 재배치 (PE Relocation) PE Relocation PE파일인 exe, dll, sys 는 메모리에 로딩 될 때 ImageBase 주소에 로딩됩니다. 하지만 해당 주소에 이미 다른 파일이 로딩 되어있다면 어떻게 해야 할까요?? 앞서 IAT를 공부하면서 말했지만 다른 주소로 이동됩니다. 이렇게 다른 주소로 이동되는 것을 Relocation이라고 합니다. 좀 더 자세히 알아보도록 하겠습니다. DLL / SYS Relocation 메모리에 A.DLL 파일이 ImageBase에 맞게 100000000에 로딩되어 있습니다. 그러던 중 어떤 프로그램이 B.DLL이 로딩되려고 하는데 마찬가지로 ImageBase가 100000000 이여서해당 주소에 로딩 할려고 합니다. 그런데 이미 A.DLL이 먼저 로딩되어 있어서 B.DLL은 다른 주소를 찾.. 더보기
EAT (Export Address Table) EAT (Export Address Table) EAT는 라이브러리 파일에서 제공하는 함수를 다른 프로그램에서도 사용할 수 있도록 해주는 방법입니다.IAT에서 설명한것 처럼 프로그램 마다 동일한 라이브러리가 포함되어 실행되면 메모리 낭비가 심해지죠. EAT는 IMAGE_EXPORT_DIRECTORY에 그 내용을 저장하고 있습니다. IMAGE_EXPORT_DIRECTORY는 IMAGE_OPTIONAL_HEADER.DataDirectory[0]에 존재합니다. IMAGE_EXPORT_DIRECTORY 여기서 중요한 멤버는 다음과 같습니다. * NumberOfFunctions실제 Export 함수 개수를 나타냅니다. * NumberOfNamesExport 함수 중에서 이름을 가지는 함수 개수를 나타냅니다. ( 더보기
IAT (Import Address Table) IAT (Import Address Table) IAT는 프로그램에서 어떤 DLL을 사용하는지 알려주는 테이블입니다. *DLL ( Dynamic Linked Library)DLL은 프로그램마다 동일한 라이브러리가 포함되어 실행되면 메모리 낭비가 심해지기 때문에 이를 방지하기 위해서 DLL 파일을 만들어 프로그램이 필요할 때만 불러쓰도록 하기 위한 것입니다.또 한번 로딩된 DLL은 Memory Mapping을 이용하여 Process에서 공유해 쓰도록 합니다. *DLL 로딩 방식Explicit Linking: 프로그램에서 이용되는 순간에 로딩하고 사용이 끝나면 해제되는 방법.Implicit Linking: 프로그램이 시작할때 로딩되어 종료할 때 메모리에서 해제되는 방법. IAT는 Implicit Linkin.. 더보기
MFC 작업 관리자 만들기 학교 기말고사로 MFC를 이용해 무었이든 만들라고해서..... 여튼 처음 해보지만 여러 블로그들을 찾아보면서 너무 헤매서 찾고자 하시는 분들에게 유용한 정보가 될거 같습니다. 기본 적인 틀은 다음과 같습니다. 작업 관리자처럼 꾸며보고자 했으나? 사실상 그정도까지 실력은 안되고.... 추가적으로 진행이 된다면 수정해서 올리도록 하겠습니다. 기본적인 기능으로는 List Control을 이용해서 실행되고 있는 프로세스 이름, PPID, PID, 경로 를 출력해주고.툴바에서는 해당 Item을 저장해주고, 갱신하고, 종료하는 기능입니다.또한 해당 프로세스를 클릭하면 새로운 다이얼로그를 출력하고 해당 프로세스의 정보를 출력해줍니다. 그리고 새로운 다이얼로그에서는 해당 프로세스를 죽이는 기능도 수행합니다. Step .. 더보기
CWnd 클래스 MFC 프로젝트를 만듭니다. 위와 같이 선택 후 마침을 눌러줍니다. 그 후 솔루션 빌드 후 실행하면 다음과 같은 프로그램이 실행됩니다. 들어가기 앞서서 몇가지 개념을 잡고 가겠습니다. 클래스 뷰에서 CCreateDemoView에서 하위 목록을 들어가면 계속 이어져있는 것을 볼 수 있습니다.이 말은 CObject - CCmdTarget - CWnd - CView 순으로 상속을 받아 사용되고 있다는 것을 알 수 있습니다. 여기서 중요한 것은 CWnd, CView 인데 흔히 사용되는 모든 윈도우들은 CWnd라고 생각하면 됩니다. CView는 프로그램 실행시 나타나는 화면이라고 생각하면됩니다. 다음 과정을 통해서 알아보도록 하겠습니다. 먼저 CreateDemoVeiw.h 에서 CWnd 객체를 만들어줍니다. 객체.. 더보기
Win32 기본 구조 Win32 기본 구조에 대해서 알아보도록 하겠습니다. 먼저 Win32 프로젝트를 만듭니다. 위 사진과 같이 프로젝트 이름은 HelloWorld로 하고 솔루션용 디렉터리 만들기를 체크 후 확인을 눌러줍니다. 응용프로그램 설정에서 Windows 응용 프로그램을 선택하고 옵션을 위 사진과 같이 설정 후 마침을 누릅니다. ※빈 프로젝트로 설정 시 소스코드가 나오지 않습니다. 중요하다고 생각되는 부분들만 집고 넘어가겠습니다. 먼저 _tWinMain을 보도록 하죠. 우리가 C, C++에서 항상 main()를 작성하게 되는데 _tWinMain은 Win32 API의 main()이라고 생각하면 됩니다. _tWinMain에는 여러가지 매개변수들이 있는데 각 매개변수는 다음과 같습니다. hInstance: 응용 프로그램 자.. 더보기
level11 보호되어 있는 글입니다. 더보기
level10 보호되어 있는 글입니다. 더보기
level9 보호되어 있는 글입니다. 더보기
level8 보호되어 있는 글입니다. 더보기
level 7 보호되어 있는 글입니다. 더보기
level6 보호되어 있는 글입니다. 더보기
level5 보호되어 있는 글입니다. 더보기
level4 보호되어 있는 글입니다. 더보기
level3 보호되어 있는 글입니다. 더보기
level2 보호되어 있는 글입니다. 더보기
level1 보호되어 있는 글입니다. 더보기
우분투에서 F.T.Z 실행하기 보호되어 있는 글입니다. 더보기