목록Hacking (53)
'll Hacker
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bgNj9o/btsHHNcqsia/vflG6dasy4Ta4VKJMyupw1/img.png)
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..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/U59Pw/btsHpsnWIGW/qKKkUGHemKCt6sCfl4to6K/img.png)
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}이렇게 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ROjLq/btsHorhjmwo/ai0zkCSh9WagS7bwoQd9Uk/img.png)
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을 만족.그리고 입력..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bLAFkN/btsHm0rd9Ww/1kAeOZFgG8zLLTz47ZjmNK/img.png)
⭐실습을 통해 개념 정리하기⭐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를 인자로 주..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/baauym/btsHlsV4Ixj/7talydgGSckdZ5Czh0x6FK/img.png)
⭐⭐실습을 통해 개념 정리하기 ⭐⭐ 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함수를 찾아야함.. 메인함수 직..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bbr5Qn/btsHaOxBPMH/yANr7kJ59fzvj61T0BJ4z0/img.png)
실습을 통해 이해하기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..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Kj7EP/btsG5VRNjuw/s2p6Pv2KDKFbxKJqKqKCs0/img.png)
메모리 레이아웃? 프로세스 가상 메모리의 구성을 말함. 프로세스 메모리구조1) 섹션 = 유사한 용도로 사용되는 데이터가 모여있는 영역- 윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성되어 있음- 섹션에 대한 정보는 PE 헤더에 있음 중요 -> 섹션의 이름, 섹션의 크기, 섹션의 로드될 주소의 오프셋, 섹션의 속성과 권한 윈도우는 PE를 실행할 떄, 이런 중요 정보를 참조하여 PE의 각 섹션들을 가상 메모리의 적절한 세그먼트에 매핑함. 주로 .text, .data, .rdata 섹션이 일반적으로 사용됨 ".text"실행 가능한 기계 코드가 위치하는 영역읽기 권한과 실행 권한 부여.".data"컴파일 시점에 값이 정해진 전역 변수들이 위치함.읽기/쓰기 권한 부여.".rdata"컴파일 시점에 값이..