목록전체 글 (81)
'll Hacker
https://dreamhack.io/wargame/challenges/20 rev-basic-6Reversing Basic Challenge #6 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출dreamhack.io step1. main함수 분석입력하고 입력값이 맞으면 Correct, 틀리면 Wrong 출력하는 함수이다. step2. main 내부 함수 분석sub_140001000함수8비트 값을 byte_140003020 배열의 인덱스로 사용하고 있음. 해당 인덱스 위치에서 값을 가져옴byte_140003020 data는 아래와 같음byte_140003000은 0~18..
step1. main 함수 분석알맞은 입력을 한다면 Correct 출력되고, 올바르지 않다면 Wrong이다. step2. main 내부 함수 분석__int64 __fastcall sub_140001000(__int64 a1){ int i; // [rsp+0h] [rbp-18h] for ( i = 0; (unsigned __int64)i > 4)) != byte_140003000[i] ) return 0i64; } return 1i64;}if문 중심으로 보쟈지피티 출처>>>a1 주소로부터 i 바이트 떨어진 위치의 값을 _BYTE로 읽어옵니다.읽어온 값을 16배(읽어온 값을 4비트 오른쪽으로 시프트(>> 4)합니다.두 연산의 결과를 OR 연산(|)으로 결합합니다.결합된 결과를 byte_140..
step1. main 함수 분석input 문자열 출력하고입력을 받는 것으로 보인다.입력받은게 맞다면 correct 틀리면 wrong을 출력한다.sub_140001210과 sub_140001000을 알아보자. Step2. main 내부 함수 분석1. sub_140001210 함수 -> scanf 같음 2. sub_140001000 함수⭐이거 중요한 함수일듯 aC 배열의 4 * i 번째 위치에 있는 4바이트를 DWORD로 읽어옵니다.a1 주소로부터 i만큼 떨어진 위치의 1바이트를 unsigned __int8 타입으로 읽어옵니다.이 두 값을 비교합니다.만약 값이 같지 않으면 0을 반환합니다.aC배열이 중요한 것 같아서 들어가보았다.엇 저기에 있는 문자인가 해서DH{Comp4re_the_arr4y}이렇게 ..
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"컴파일 시점에 값이..