리버싱 엔지니어링/드림핵
-
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이면 점프 -..
-
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-1,2리버싱 엔지니어링/드림핵 2022. 4. 2. 01:02
rev-basic-1 : https://dreamhack.io/wargame/challenges/15/ rev-basic-1 Reversing Basic Challenge #1 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출 dreamhack.io rev-basic-0와 문자열 비교하는 함수만 다름. 따라서, 문자열 비교함수로 먼저들어가봄 중첩 if문의 형태로 보이는 구조 발견 'C'와 비교 → 맞으면 그다음 문자 'ㅇ'와 비교 → .... 와 같이 진행됨 따라서, text view로 변경하여 차례로 나오는 문자들을 합쳐 정답 제출 정답 더보기 DH{Compar3_the..
-
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된 값..