드림핵
-
patch(+ IDA 주소 점프하도록 패치하기)리버싱 엔지니어링/드림핵 2022. 5. 6. 17:49
patch : https://dreamhack.io/wargame/challenges/49/ patch flag를 그리는 루틴을 분석하고 가려진 flag를 보이게 해주세요. Reference GDI+ - Win32 apps | Microsoft Docs Graphics Functions - Win32 apps | Microsoft Docs File — x64dbg documentation dreamhack.io IDA를 통해 파일을 열면 이런 코드를 발견할 수 있는데 부르는 함수들을 보면 화면에 무언가를 그리기 위해 세팅 후 화면에 보이는 것을 알 수 있다. 함수들을 하나하나 찾으니 특별한 소득은 없어서 Win32에서 Gdi를 이용해 그리는 코드를 알아내보았다. 아래 블로그에서 대충 코드를 이해할 수 있..
-
rev-baic-9리버싱 엔지니어링/드림핵 2022. 5. 3. 21:15
rev-basic-9: https://dreamhack.io/wargame/challenges/23/ rev-basic-9 Reversing Basic Challenge #9 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출 dreamhack.io eax : strlen 주로 함수 return 값을 eax에 저장하기 때문 cdq : 나누기 연산시 사용 eax 부호비트를 edx까지 확장 -> edx는 0으로 설정됨 나누기 연산 시 몫을 eax에 나머지를 edx에 넣기 위해 사용됨 test : and 연산 수행, 결과값은 저장하지 않음 jz : 왼쪽 인자 값이 0이면 점프 -..
-
리눅스 AttributeError : 'file' obiect has no attrubute 'buffer'잡다한 오류 2022. 4. 21. 15:15
드림핵 시스템해킹 커리큘럼 중 Return Address Overwirte를 수강하다가 아래와 같이 오류가 났다 찾아보니 함수가 python3에 존재하는 것같아서 커맨드를 (python -c "import sys;sys.stdout.buffer.write(~)";cat)에서 (python3 -c "import sys;sys.stdout.buffer.write(~)";cat)로 실행했더니 오류 없이 실행되었다.
-
rev-baic-7,8리버싱 엔지니어링/드림핵 2022. 4. 19. 21:21
더보기 rev-baisc-7 : https://dreamhack.io/wargame/challenges/21/ rev-basic-7 Reversing Basic Challenge #7 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출 dreamhack.io 우선 새롭게 보이는 rol 명령어가 있다. rol 명령어는 각 비트를 왼쪽으로 시프트하는데, 최상위비트가 최하위비트로 내려오며 회전하는 방식의 시프트이다. (ror은 오른쪽으로 회전) 즉, 왼쪽으로 회전한다고 생각하면 된다. 우선 회전 수는 cl인데, ecx의 값이 현재 인덱스에 and 7을 한 값이다. 그렇다면 값이 ..
-
rev-basic-5,6리버싱 엔지니어링/드림핵 2022. 4. 9. 00:30
rev-vasic-5 : https://dreamhack.io/wargame/challenges/19/ rev-basic-5 Reversing Basic Challenge #5 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출 dreamhack.io 코드를 보면 add eax, ecx에서, (현재 인덱스를 i라 하면) eax는 입력한 값 중 i번째 문자, ecx는 입력한 값 중 i+1번째 문자이다. 만약 입력한 문자가 abcdef면 a+b, b+c, c+d ... 이런식으로 배열에 저장된 값과 비교하는 것이다. 해결방법은, 마지막 값이 x라 하면, 마지막은 x+0이 되므로..
-
rev-basic-4리버싱 엔지니어링/드림핵 2022. 4. 5. 21:04
rev-basic-4 : https://dreamhack.io/wargame/challenges/18/ rev-basic-4 Reversing Basic Challenge #4 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출 dreamhack.io IDA로 실행해 보면, 코드는 rev-basic-3과 유사해보인다. 다만, 연산이 좀 늘어났다. sar eax, 4 는 오른쪽으로 4번 시프트한다. shl ecx, 4 는 왼쪽으로 4번 시프트 추가로 and, or 연산도 있기 때문에 rev-basic-3처럼 역연산을 하긴 힘들어보임 역연산이 불가능해서 좀 고민했는데, 아스키코..
-
rev-basic-3리버싱 엔지니어링/드림핵 2022. 4. 5. 01:55
rev-basic-3 : https://dreamhack.io/wargame/challenges/17/ rev-basic-3 Reversing Basic Challenge #3 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출 dreamhack.io rev2와 동일하게 반복문 형태, 따라서 문자열 길이는 23으로 추측가능하다. 다음 코드를 보면, movsxd rax, [rsp+18h+var_18] lea rcx, byte_7FF7C1263000 movzx eax, byte ptr [rcx+rax] unk_7FF7B3203000에서 값을 현재 순서에 맞게 가져오는데 hex ..
-
rev-basic-0리버싱 엔지니어링/드림핵 2022. 3. 31. 15:53
드림핵 rev-basic-0 문제 : https://dreamhack.io/wargame/challenges/14/writeups rev-basic-0 Reversing Basic Challenge #0 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출 dreamhack.io 어떤 값을 입력해야 correct가 출력되는지 알아내는 기본 문제이다. 1. main main 함수에서 correct, wrong의 경우가 나누어지는 것을 확인할 수 있다 jz의 조건분기문 확인, 여기서 나누어지는 것으로 예상 test eax, eax 위 call 함수 발견, 여기서 return된 값..