본문 바로가기

2016/12

Anonymouse Pipe, Named Pipe Anonymouse Pipe, Named Pipe Windows에서 파이프는 두가지가 존재하는데 Anonymouse Pipe와 Named Pipe가 있습니다. Anonymouse Pipe는 부모 자식 관계 프로세스(혹은 자식, 자식)들 사이에서 통신하는 경우에 유용합니다. Named Pipe는 주소 정보가 존재하는 파이프인데, 주소가 있다는 것은 서로 관계가 없는 프로세스들 사이에서도 주소 정보를 공유함으로써 데이터를 주고 받을 수 있다는 것입니다. 앞서 메일슬롯과의 차이를 보자면 Named Pipe는 양뱡향 통신이 가능하다는 것이고 MailSlot은 브로드케스트 방식(단방향)의 데이터 전송이 가능합니다. AnonymousePipe AnonymousePipe.cpp 123456789101112131415.. 더보기
Pseudo Handle, Handle Duplicate Pseudo Handle, Handle Duplicate 자신의 핸들을 얻는 함수로는 GetCurrentProcess()가 있습니다. 이 함수를 이용해서 얻은 핸들을 Pseudo Handle이라고 합니다. Pseudo Handle은 핸들 테이블에 등록되지 않은 핸들이며 그저 약속된 상수가 반환됩니다. 그래서 자식 프로세스로 상속되지 않고 CloseHandle()의 인자로 전달 할 필요가 없습니다. 그러면 실제 핸들 테이블에 존재하는 핸들 값을 어떻게 얻을까요? DuplicateHandle()을 이용해서 핸들을 복사해 줍니다. 가령, 부모 프로세스의 핸들 테이블에서 123이라는 핸들을 자식 프로세스 핸들 테이블에 넣고자 할 때 자식 프로세스의 핸들 테이블에서는 123이라는 핸들 값은 아무런 쓸모가 없죠.그.. 더보기
핸들 테이블과 오브젝트 핸들의 상속 핸들 테이블과 오브젝트 핸들의 상속 지금까지 핸들 값을 받아오고 종료하는 것에 대해서 공부했습니다. Mailslot을 만들 때 CreateMailslot()을 통해서 메일 슬롯을 만들었는데 이 메일 슬롯 또한 커널 오브젝트가 존재합니다.앞서 지금까지 설명한 내용을 바탕으로 핸들이라는 것이 해당 커널 오브젝트를 지정하고자 정수 값으로 나타낸 것이라고 했습니다. 그렇다면 생성된 Mailslot의 주소가 0x1000이라고 하고 핸들 값을 123이라고 하면 해당 핸들을 가지고 CloseHandle()을 통해서 소멸시킬 수 있었습니다.그러면 단순히 Handle 값만 알고 어떻게 0x1000에 있는 커널 오브젝트를 찾아가 소멸시킬 수 있었을까요? 이러한 이유는 핸들 테이블이라는 것이 존재하기 때문입니다. 핸들 테이.. 더보기
커널 오브젝트 상태 (Kernel Object State) 커널 오브젝트 상태 (Kernel Object State) Windows 운영체제에 의해 생성되는 커널 오브젝트는 두가지 상태가 존재한다.Signaled, Non-Signaled 이 두가지 인데, 이러한 값은 커널 오브젝트를 구성하는 멤버변수에 FASLE, TRUE를 이용하여 상태를 저장한다. 처음 커널 오브젝트가 생성되면 Non-Signaled 상태가 된다. 그러다 프로세스가 종료되면 Signaled 상태가 된다. 즉, 실행 중일 때는 Non-Signaled가 되고 종료 시에는 Signaled 상태가 되는 것이다.이를 보고 프로세스가 실행 중인지 종료된 것인지 알 수 있는 것이다. 그렇다면 Non-Signaled에서 Signaled 상태로 가는 것은 당연하게 생각할 수 있다. 실행하다 종료가 되는 것이.. 더보기
메일 슬롯 (Mail Slot) 메일 슬롯 (Mail Slot) A 프로세스와 B 프로세스가 직접적으로 데이터를 주고 받지 못합니다.(안정성을 위해서. 애초에 메모리 상에 올라가는 주소 영역이 다름.) 이를 해결하기 위한 것이 Mail Slot인데 데이터를 전달하는 것을 Sender 데이터를 받는 것을 Receiver라고 할 때 Sender가 데이터를 보내 Receiver가 바로 받아 처리한다면 좋지만 각 영역에 접근을 할 수 없기 때문에 Sender는 Mail Slot에 데이터를 보내고 Receiver가 Mail Slot에 있는 데이터를 가져옵니다. Sender와 Receiver를 작성할때 CreateFile, WriteFile를 사용하는데 이는 ANSI 표준이 아니고 Windows에서 제공하는 파일 관련 시스템 함수들입니다.함수 이.. 더보기
커널 오브젝트 (Kernel Object) 커널 오브젝트 (Kernel Object) 개념 프로세스의 상태정보(Ready, Running, Blocked)와 우선순위 정보를 예로 들어보자.이러한 정보들을 운영체제 내에서 저장되는데 이러한 정보가 상태나 우선순위가 바뀜에 따라서 갱신되어야 합니다.스케줄러가 위와 같은 정보를 가지고 관리를 할 수 있습니다. 따라서 윈도우 개발자들은 정보를 저장하기 위해서 프로세스 관리 구조체를 만들게 되었고 이를 커널 오브젝트라고 합니다. 이외의 커널 오브젝트 쓰레드, IPC 등을 생성할 때에도 커널 오브젝트가 생성됩니다. 하지만 모든 것이 동일한 구조체로 생성되는 것은 아닙니다. 종류에 따라 서로 다른 구조체가 생성됩니다. 프로세스 우선순위 변경 프로세스의 우선순위를 변경하는 것은 SetPriorityClass().. 더보기
프로세스 프로세스 개념 가령 test.exe 라는 파일이 있으면 보통 프로그램이라고 부릅니다. 혹은 바이너리라고 부릅니다.해당 프로그램을 해당 프로그램은 메모리에 할당이 되고 바이너리 코드가 올라가게 됩니다.이 순간부터 프로그램은 프로세스라고 불립니다. 프로세스 구성 프로그램이 메모리에 할당이 되는 경우 Data, Stack, Heap, Code 영역에 올라가게 됩니다.Data는 전역변수, static 변수가 할당이 되고, Stack 영역에는 지역변수, 함수 호출시 필요한 파라미터(인자 값), Heap 영역은 동적할당, Code 영역은 명령어들이 올라갑니다. Register SetCPU 내의 레지스터들 또한 실행된 프로그램(프로세스)에 필요한 데이터로 채워지게 됩니다. 즉, 메모리 영역과 레지스터들 또한 프로세스.. 더보기
[2016 Christmas CTF] lanceware 보호되어 있는 글입니다. 더보기
[2016 HOLYSHIELD] BrokenPiano 보호되어 있는 글입니다. 더보기
[2016 HOLYSHIELD] easylang 보호되어 있는 글입니다. 더보기
[2016 HOLYSHIELD] SoundMeter 보호되어 있는 글입니다. 더보기
[web-client] Javascript - Obfuscation 4 보호되어 있는 글입니다. 더보기
[web-client] Flash - Authentication 보호되어 있는 글입니다. 더보기
[cracking] APK - Anti-debug 보호되어 있는 글입니다. 더보기
[cracking] PE - AutoPE 보호되어 있는 글입니다. 더보기
[cracking] PE - RunPE 보호되어 있는 글입니다. 더보기
[cracking] ELF - KeygenMe 보호되어 있는 글입니다. 더보기
[cracking] PE -SEHVEH 보호되어 있는 글입니다. 더보기
[cracking] ELF - Anti-debug 보호되어 있는 글입니다. 더보기
[cracking] ELF - Random Crackme 보호되어 있는 글입니다. 더보기
[cracking] ELF - ExploitMe 보호되어 있는 글입니다. 더보기
[cracking] ELF - CrackPass 보호되어 있는 글입니다. 더보기
[cracking] ELF - ARM 보호되어 있는 글입니다. 더보기
[cracking] ELF - No software breakpoints 보호되어 있는 글입니다. 더보기
[cracking] PYC - ByteCode 보호되어 있는 글입니다. 더보기
[cracking] ELF - ARM basic 보호되어 있는 글입니다. 더보기
[cracking] ELF - Ptrace 보호되어 있는 글입니다. 더보기
[cracking] ELF - Fake Instructions 보호되어 있는 글입니다. 더보기
[cracking] PE DotNet - 0 protection 보호되어 있는 글입니다. 더보기
[cracking] ELF C++ - 0 protection 보호되어 있는 글입니다. 더보기