본문 바로가기

2. Reversing (리버싱)/1) Write UP

(51)
[2024.03.16] 리버씽씽카 1주차 활동 리버싱 스터디 1주차에서는 유튜브 영상을 활용해 리버싱 기초 지식을 습득했다. 1-3강을 듣고 내용을 정리한 후 어려웠던 부분은 질문을 통해 해결하는 시간을 가졌다. 참고한 유튜브 영상은 아래와 같다. https://www.youtube.com/playlist?list=PLY12b4RRLcSdsxgVvTW3mnNzMjVrd8JhO 리버싱 강의 리버싱에 대해 공부합시다. www.youtube.com 리버싱(Reversing)이란? 리버싱은 역공학이자 역방향이다. 역공학(Reverse Engineering) : 이미 만들어진 소프트웨어 시스템을 역으로 추척하여 처음의 문서나 설계기법 등의 자료를 얻어내는 것 순공학(Forward Engineering) : 어떠한 물건을 만드는 것 이때, RE(Reverse ..
[2023.05.20] 씽씽이 활동보고 활용강의: 해킹 대회를 위한 시스템 해킹 프로토스타 완벽 풀이집 섹션 1. stack - 쉘코드 생성, 리눅스 어태치 방법 ▼Hints - At this point in time, it might be easier to use someone elses shellcode - If debugging the shellcode, use \xcc (int3) to stop the program and return to the debugger - remove the int3s once your shellcode is done ※쉘코드란? → 쉘을 실행하는 코드 - return 주소 위에 EBP나 버퍼 같은 것들이 올라간다. - ret까지 덮다가 밑에 코드도 넣을 수 있고 여기에 쉘코드를 넣는다. - 프로그램 상에는..
[2023.05.13] 씽씽이 활동보고 활용강의: 리버싱 이 정도는 알아야지 - 섹션 4 1. 도전 과제 - 도전문제 : Challenge 02.exe가 “PrintMe"를 출력하게 만들어보세요. 2. 첫 번째 문제확인 및 해결 1. main() 함수 찾기 - 메인호출을 찾는다. - 메인호출 안으로 들어간다. (F7) 2. main() 함수 분석하기 - LoadLibrary를 호출한다. - EAX 레지스터에 리턴값이 저장된다. - 리턴값을 확인한다. - 조건점프를 한다. 3. LoadLibrary 정의 4. 첫 번째 문제 확인 - Challenge2의 경우 라이브러리 이름을 입력하는 방식을 사용했다. - “LoadMe.dll” 파일은 존재하지 않기 때문에 호출에 실패하는 것이다. 5. 문제 해결 방법 1) DLL 파일 만들기 - 시스템 파일을..
[2023.05.06] 씽씽이 활동보고 활용강의: 리버싱 이 정도는 알아야지 - 섹션 3 1. 예제분석 #01 - 도전과제 - Sample 02.exe 실행시켰을 때 command 창이 뜨지만 아무 동작 없이 실행이 종료된다. !!도전 과제!! => Sample 02.exe가 “ If Code!! “ 문자열을 출력하도록 만들기. => 전체적인 동작을 이해하고, 문자 해결을 위해 어디를 어떻게 고쳤는지 파악하기. => 힌트 : “if 조건문"을 사용해서 만들었습니다. 2. 예제분석 #01 - 코드분석_Level.1 | 흐름 파악하기 ▶Sample 02.exe 예상 동작흐름 - Sample 02.exe가 “if 조건문”을 사용해서 만들어졌으므로 ‘if 문’에 들어가는 조건이 일치하느냐에 따라 문자열 출력 여부가 결정될 것 같다. ▶문제 접근 방향..
[2023.04.08] 씽씽이 활동보고 활용강의: 리버싱 이 정도는 알아야지 - 섹션 2 1. 디버거 화면 구성 ▶ PE 파일 실행 과정 ① PE 로더 : 실행파일의 데이터가 메모리에 적재된다. ② CPU : 적재된 코드의 연산이 이루어진다. CPU 레지스터 : 연산 결과 값을 기억하는 임시 저장소 ▶ CPU 연산 과정 ① 0040 2000 주소에 있는 00 00 00 00을 EAX 레지스터에 저장한다. 섹션 주소 어셈블리 코드 레지스터 CODE 0040 1000 MOV EAX, DWORD PTR DS:[0040 2000] EAX : FFFF FFFF 0040 1005 CMP EAX, 0 EBX : 0000 0001 0040 1008 JE SHORT 0040 1000 ... 0040 100A DATA 0040 2000 00 00 00 00 Z..
[2023.04.01] 씽씽이 활동보고 활용 강의: 리버싱 이 정도는 알아야지 - 섹션 1 ※ PE 파일 분석 공부 방향 ※ 1. PE 헤더는 어떻게 구성되어 있고, 그 값들이 의미하는 바가 무엇인지 알아야 한다. 2. .text 섹션에 기록되는 명령코드를 읽을 줄 알아야 한다. 3. .data 섹션에 기록되는 데이터가 무슨 값인지 알아야 한다. 1. PE File Format 이해하기 ● PE 파일 포맷 : 마이크로소프트에서 실행파일에 대한 원칙을 정해놓은 것 ● PE 파일 생성 과정 : 일반적으로 Visual Studio와 같은 개발 도구 사용 -> 코드 작성 -> 컴파일 -> 실행파일 완성 ● 컴파일 과정 1. 코드(.text 섹션에 기록)와 데이터(.data 섹션에 기록) 분리한다. 2. 코드를 기계어로 변환한다. 3. 문자열 데이터를..
[2023.03.21]씽씽이 활동보고 활용 강의: 리버싱 이 정도는 알아야지 - 섹션 0 1. 실행파일 동작 확인 'sample01'파일 실행 시에 경고음과 함께 "Hi, Have a nice day!"라는 문자열을 가진 알림창이 뜨는 것을 확인했다. 2. 코드분석_level.1 | 흐름 파악하기 Sample 01.exe를 OllyDBG에 올리면 아래 사진과 같이 코드가 보인다. 이때, 00401030 주소는 StartUp 코드가 시작되는 주소며, StartUP 코드는 컴파일러가 프로그램을만들 때 집어넣는 코드다. StartUp 코드는 main() 함수 앞 단에 위치하므로 main() 함수를 바로 찾아가야 한다. *main() 함수 찾기 먼저, 단축키 F8을 눌러 코드를 한 줄씩 실행한다. 004010DF 주소에서 비프음이 들리고 “Hi, ..
[2022.11.26]R4 활동보고 일시: 2022.11.26 팀원: 엄설인, 유예지, 이유빈, 정현수 내용: 리버싱 입문 05. 리버싱의 어려운 문제들 개념 정리 1. 패킹과 언패킹 1.1 패킹과 언패킹의 개요 - 패킹(Packing)이란? 프로그램 코드 크기를 줄이려고 압축하거나 프로그램 분석을 어렵게 만들려고 암호화하는 것. 단순 압축하는 것은 컴프레싱(Compressing), 암호화하는 것은 프로텍팅(Protecting) - 컴프레싱은 초기에 프로그램을 만들었을 때 메모리와 하드디스크 용량이 작았기에 프로그램 크기를 줄여야하는 상황에 등장한 기술이다. 실행 코드를 압축해서 PE 파일의 특정 섹션에 저장하고 프로그램이 실행될 때 공간에 압축을 풀어 실행하는 구조이다. - 프로텍팅은 실행 파일을 암호화해서 분석을 어렵게 만드는 기술이다..