분류 전체보기

🌇│System_Study/📗│Dreamhack_Reversing

Exercise: Helloworld

분석(Export)! 예제로 HelloWorld.exe를 분석해보는 실습을 해봅시다. 예제엔 1초를 대기 후 Hello, world!를 출력하는 프로그램으로, 오른쪽에서 내려받을 수 있습니다. 여러분이 직접 컴파일하고 분석할 수 있게 코드도 친절히 올려야죠 우리는 이 코드에 대하여 아무것도 모른단 전재하에 진행해야 리버싱이겠죠 자 그럼 한번 밑에 exe 파일을 다운로드 받거나 컴파일 하셔서 확인해봅시다 참고로 전 IDA 쓸거예요 /* File: hello-world.cpp Build opts: - /MT -> Library Static Linking - /DYNAMICBASE:NO -> Disable ASLR - /od -> Disable Optimization */ #include #include ch..

🌇│System_Study/📗│Dreamhack_Reversing

x86 Assembly

x86 Assembly🤖: Essential Part x86 Assembly: Essential Part 해커의 언어: 어셈블리💬 PC에서 복잡한 논리적 인과관계, 여러 개체가 상호작용하며 그 세계에서 통용되는 기계어(Machine Code)언어 핵심! 시스템 해킹을 할 때는 컴퓨터 언어, 운영체제, 네트워 dystopia050119.tistory.com Quiz: x86 Assembly Quiz: x86 Assembly dystopia050119.tistory.com 기존에 정리된 부분이 있었네요.. 시스템을 하기전에 이 커리큘럼을 먼저할걸.. ㅠ 제가 이 블로그를 하는 이유는 여러 이유가 있지만 그 중에 하나가 포폴용이라서 이번만 날먹할께요 헷 참고 자료 x86 Assembly🤖: Essential ..

🌇│System_Study/📗│Dreamhack_Reversing

Computer Science

Computer Architecture Computer Architecture 1. 컴퓨터 구조(Computer Architecture) 컴퓨터 과학에서는 PC설계를 여러 하드웨어가 개발되고, 이들을 조립해서 컴퓨터가 완성한 것이 컴퓨터 구조! 더보기 📜개요📜 컴퓨터 구조(Computer Architecture) dystopia050119.tistory.com 퀴즈는 딱히 설명 안 할께요 저거 봤으면 진짜로 기초니까 어짜피 모르시면 다시 배워야해요 Background: Windows Memory Layout 메모리 레이아웃(Memory Layout) : 프로세스 가상 메모리(Virtual Memory)의 구성 프로그램을 실행하면 OS는 프로세스에 사용 가능한 메모리 공간을 할당하며, CS에선 이 공간을 ..

🌇│System_Study/📗│Dreamhack_Reversing

Background: Static Analysis vs. Dynamic Analysis

리버스 엔지니어링 정적 분석(Static)과 동적 분석(Dynamic) 구분 정적 분석 : 외적인 관찰만을 통해 정보를 취득 동적 분석 : 실행을 통해 동작을 분석하는 것! 대게 정적인 방법과 동적인 방법을 적절히 혼용하면 대상을 효과적으로 분석 가능! 동적인 방법만을 고수하면 큰 구조를 놓칠 수 있고, 반대로 정적만 고수하면 실행을 통해 직관적으로 알 수 있는 부분을 분석하느라 시간을 허비할 가능성이 농후하죠.. 따라서 우리는 정적 분석과 동적 분석 중 한 방법만을 고수하는 것이 아닌 상황에 따라 적절한 방법으로.. 어떤 상황에 어떤 방법을 선택할 것이냐가 실력을 좌우하는 중요한 요소죠 정적 분석(Static Analysis)🔍 정적 분석(Static Analysis) : 프로그램을 실행시키지 않고 분..

🌇│System_Study/📕│Dreamhack_Hacking

Exploit Tech: Return to Shellcode

Return Address OverWrite 카나리 우회와 셸 코드를 이용해 셸을 획득하는 방법 // Name: r2s.c // Compile: gcc -o r2s r2s.c -zexecstack #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int main() { char buf[0x50]; init(); printf("Address of the buf: %p\n", buf); printf("Distance between buf and $rbp: %ld\n", (char*)__builtin_frame_address(0) - buf); printf("[1] Leak the canary\n"); pri..

🌇│System_Study/📕│Dreamhack_Hacking

Mitigation: Stack Canary

스택 카나리(Stack Canary) 스택 버퍼 오버플로우로부터 반환 주소를 보호하는 기법 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고, 함수의 에필로그에서 해당 값의 변조를 확인하는 보호 기법입니다. 카나리 값의 변조가 확인되면 프로세스 강제 종료! BOF로 RET를 덮으려면 반드시 카나리를 먼저 덮어야하므로 카나리 값을 모르는 공격자는 반환 주소를 덮을 때 카나리 값을 변조하게 됩니다. 그러하다면 변조가 확인되어 공격자는 실행 흐름을 획득하지 못하게됩니다. TMI. 카나리라는 이름의 유래 카나리 보호 기법의 이름은 카나리아(Canary)라는 새에서 유래되었습니다. 19세기, 20세기에는 일산화탄소 농도의 측정 기술이 부족했고, 탄광에서 유출된 일산화탄소에 광부가 중독사하는 ..

🌇│System_Study/📕│Dreamhack_Hacking

basic_exploitation_001

basic_exploitation_001 문제 풀이 자 들어가기 전에 문제가 발생했습니다.. 바로 NX가 적용된 코드라는 것이죠 참고로 32-little endian linux이고요 그럼 들어가기 앞써서 NX에 대해 알아봐야겠죠? NX(Bit | MS : DEP) NX-Bit(Never eXecute Bit; 실행 방지 비트) - 프로세스 명령어나 코드 또는 데이터 저장을 위한 메모리 영역 분리 CPU의 기술 - NX 특성으로 지정된 모든 메모리 구역은 데이터 저장을 위해서만 사용됨 - 프로세스 명령어가 그곳에 상주하지 않게 실행시켜줌 DEP(Data Execution Prevention) - MS windows OS에 포함된 보안 기능이며, 악의적 코드 실행 방지를 위한 메모리 확인 기술 - DEP는 ..

🌇│System_Study/📕│Dreamhack_Hacking

basic_exploitation_000

basic_exploitation_000 문제풀이(pwntools와 shellcode) 밑에 링크는 앞으로 기재될 문제 풀이에서 큰 도움이 될거예요 추가로 필요한 정보는 차차 기재할께요 Memory Corruption: Stack Buffer Overflow 스택 버퍼 오버플로우(Stack Buffer Overflow) 세계 최초의 웜이라고 불리는 모리스 윔도 이 공격을 통해 전파됨 보안 공부를 모르는 개발자도 알만큼 유명하고 역사가 오래된 취약점입니다. 이렇게 dystopia050119.tistory.com //file name : basic_exploitation_000.c //Complie : gcc -o basic_exploitation_000 basic_exploitation_000.c #inc..

🌇│System_Study/📕│Dreamhack_Hacking

Exploit Tech: Return Address Overwrite

서론 이제 스택 오버 플로우를 활용한 RET를 변조해 셸을 획득하는.. 그런 워게임을 해봅시다 아래는 예제예요 // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return ..

🌇│System_Study/📕│Dreamhack_Hacking

Return Address Overwrite

문제풀이 너무 지쳐서.. 문제 풀이는 하나만 할까요? get_shell 함수를 활용 // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0; } 위 코드가 문제에서..

Jastes
'분류 전체보기' 카테고리의 글 목록 (15 Page)