목록Hacking/Reverse Engineering (20)
'll Hacker
Step1. main 함수 분석 main 함수에서 Random number와 Input 값을 XOR연산해주면 어떤 값이 나오는데연산 값과 "a0b4c1d7"같으면 "Congrats!"이 나오는 것으로 확인 이게 아니고for문을 살펴보면i=0일때, s[7-0] = s[7]을 s1[0]에 저장i=1일때, s[7-1] = s[6]을 s1[1]에 저장...i=5일때, s[7-5] = s[2]을 s1[5]에 저장i=6일때, s[7-6] = s[1]을 s1[6]에 저장i=7일때, s[7-7] = s[0]을 s1[7]에 저장거꾸로 저장하는 것을 알 수 있음!!!!저기 주어진 a04c1d7"이 아니라 거꾸로 "7d1c40a"이다. step2. 역연산XOR연산은 A ^ B = C이면 C ^ A = B을 만족.그리고 입력..
⭐실습을 통해 개념 정리하기⭐https://dreamhack.io/wargame/challenges/17 rev-basic-3Reversing Basic Challenge #3 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출dreamhack.io step1. main함수 분석 char형 배열 v4에 256개의 원소가 들어갈 수 있는 공간을 스택에 할당memset(v4, 0, sizeof(v4));를 사용해 v4의 256바이트를 0으로 설정"Input: "을 출력 후, v4에 256바이트의 문자열을 사용자에게 입력받아서 저장함sub_140001000함수에 v4를 인자로 주..
⭐⭐실습을 통해 개념 정리하기 ⭐⭐ https://dreamhack.io/wargame/challenges/49/ patchflag를 그리는 루틴을 분석하고 가려진 flag를 보이게 해주세요. Reference GDI+ - Win32 apps | Microsoft Docs Graphics Functions - Win32 apps | Microsoft Docs File — x64dbg documentationdreamhack.io 압축파일 안에는 실행파일(patch.exe)가 있는데 이것을 실행하면?다음과 같이 나온다. 이것을 IDA에서 실행 정적 분석step1. WinMain 함수 찾기patch.exe는 WinAPI를 이용해 만들어진 GUI 프로그램이기 때문에 WinMain함수를 찾아야함.. 메인함수 직..
실습을 통해 이해하기https://dreamhack.io/wargame/challenges/15/ rev-basic-1Reversing Basic Challenge #1 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출dreamhack.iostep1. main 함수 분석디컴파일(F5) 1. v4라는 256바이트의 char배열을 0으로 초기화2. sub_1400013E0 함수와 sub_140001440 함수를 호출. 이때 인자로 각각 "Input: " , "%256s"문자열이 들어감3. v4 배열을 sub_140001000 함수의 인자로 전달해 반환값이 있다면 "Correc..
메모리 레이아웃? 프로세스 가상 메모리의 구성을 말함. 프로세스 메모리구조1) 섹션 = 유사한 용도로 사용되는 데이터가 모여있는 영역- 윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성되어 있음- 섹션에 대한 정보는 PE 헤더에 있음 중요 -> 섹션의 이름, 섹션의 크기, 섹션의 로드될 주소의 오프셋, 섹션의 속성과 권한 윈도우는 PE를 실행할 떄, 이런 중요 정보를 참조하여 PE의 각 섹션들을 가상 메모리의 적절한 세그먼트에 매핑함. 주로 .text, .data, .rdata 섹션이 일반적으로 사용됨 ".text"실행 가능한 기계 코드가 위치하는 영역읽기 권한과 실행 권한 부여.".data"컴파일 시점에 값이 정해진 전역 변수들이 위치함.읽기/쓰기 권한 부여.".rdata"컴파일 시점에 값이..
SubTopic : 컴퓨터 구조, 명령어 집합구조, x86-64컴퓨터 구조 ⊃ 명령어 집합 구조 ⊃ x86-64 아키텍처 1. 컴퓨터 구조 (Computer Architecture)Def. 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법을 말함. 폰 노이만 구조중앙처리장치(연산, 제어) + 기억장치(memory) => 버스로 통함버스란? 💡 컴퓨터 부품과 부품 사이 또는 컴퓨터와 컴퓨터 사이에 신호를 전송하는 통로 - 데이터 이동 = 데이터 버스 - 주소 지정 = 주소 버스 - 읽기/쓰기 제어 = 제어 버스 - 랜선, 데이터전송을 목적으로 하는 소프트웨어, 프로토콜 = 버스 명령어 집합 구조(Instruction..
어떤 소프트웨어를 분석하기 위해 사용하는 분석 1) 정적 분석 프로그램을 실행시키지 않고 분석 프로그램의 전체구조 파악 용이 프로그램이 어떤 함수로 구성됐고, 함수들을 서로 어떤 호출 관계를 갖는지, 어떤 API를 사용하고 어떤 문자열을 포함하는지 등을 종합적으로 살펴볼 수 있음 분석 환경 제약 X 난독화 적용되면 분석이 어려워짐 다양한 동적 요소 고려하기 쉽지 않음 2) 동적 분석 코드를 자세히 분석해보지 않고도 프로그램의 개략적인 동작 파악가능 분석 환경을 구축하기 어려울 수 있음 안티 디버깅 취약 동적 분석 도구 = x64dbg(디버거) 디버거 = 프로그램의 버그를 찾아내고 제거하기 위해 사용되는 도구, 이를 이용하면 실행 중인 어셈블리 코드, CPU의 레지스터 상태, 메모리와 스택의 값을 확인하며..
프로그램과 컴파일 프로그램 = 연산 장치가 수행해야하는 동작을 정의한 일종의 문서 프로그램을 연산 장치에 전달하면, CPU는 적혀있는 명령들을 처리하여 프로그래머가 의도한 동작을 수행 (컴퓨터의 대부분이 Stored-Program Computer의 형태로 개발) = 바이너리 컴파일러와 인터프리터 CPU가 수행해야 할 명령들을 프로그래밍 언어(고급언어)로 작성 = 소스 코드 컴퓨터가 이해할 수 있는 기계어(저급언어)의 형식으로 번역 = 컴파일 컴파일을 해주는 소프트웨어 = 컴파일러 ex) GCC, Clang, MSVC 등 이외 파이썬이나 자바스크립트는 컴파일이 필요없음. 왜냐면 사용자의 입력 또는 사용자가 작성한 스크립트를 그때 그때 번역해서 CPU에 전달하기 때문에(이를 인터프린팅이라고 함, 똑같이 처리..