SSDD
[Reversing] - 02.exe 본문
문제 해결 조건
코드 변경 없이 데이터를 입력하여 success 띄우기
사용한 도구
정적 분석 - IDA
동적 분석 - x96dbg
IDA를 사용하여 02.exe 파일 분석
분석 결과
- "Crack Me"라는 메시지 박스를 표시하고, var_4 변수가 10인지 비교
- 조건 분기에 따라 같다면 "Success" 메시지를, 그렇지 않다면 "Failed" 메시지를 표시
x32dbg를 사용하여 02.exe 파일 분석
- 파일을 연 후 F9으로 프로그램 실행
- 엔트리 포인트에서 실행을 하니 Crack Me 창만 출력이 되고 Failed나 Success는 출력이 되지 않는다.
- 401000 시작 지점으로 이동하여 BP를 걸어준 후 F8로 코드를 한 줄씩 실행
- 입력값을 검사하는 부분 0040101A 부터 보자면
- mov eax, dword ptr ss:[ebp+10] : ebp 주소에 10을 더한 값을 eax에 대입
- movsx ecx, byte ptr ds:[eax] : eax의 메모리 주소에서 1바이트의 값을 읽어와 부호를 확장하여 ecx에 대입
- test ecx,ecx : ecx의 값이 0인지 확인
- jne 02.401029 : ecx값이 0이 아니라면 화살표를 따라가 00401029 주소로 점프
ECX 값이 0일 경우
or eax,FFFFFFFF : eax와 0xFFFFFFFF를 OR 연산, 결과는 1
jmp 02.40108E : 0040108E로 점프
ECX 값이 0이 아닐 경우
mov edx, dword ptr ss:[ebp+10] : ebp에 10을 더한 값을 edx에 대입
movsx eax, byte ptr ds:[edx] : edx의 메모리 주소에서 1바이트 값을 읽어와 부호를 확장하여 eax에 대입
sub eax, 0x30 : eax에서 30을 뺌
mov dword ptr ss:[ebp-4], eax : eax의 값을 ebp-4 주소에 대입
mov ecx, dword ptr ss:[ebp-4] : ebp-4 주소의 값을 ecx에 대입
xor ecx, 0x05 : ecx ^ 5
mov dword ptr ss:[ebp-8], ecx : xor의 결과 ecx를 ebp-8에 대입
조건에 따른 "Failed", "Success" 메시지 창 출력
Failed
cmp dword ptr ss:[ebp-8], 1 : ebp-8의 값을 1과 비교
je 0040104C : 값이 1이라면 Failed 출력 과정 0040104C 주소로 점프
Success
cmp dword ptr ss:[ebp-8], 3 : ebp-8의 값을 3과 비교
je 00401062 : 값이 3이라면 Success 출력 과정 00401062 주소로 점프
- jmp 00401078 : 조건이 둘 다 맞지 않다면 00401078 주소로 점프
풀이
- 문제 해결 조건이 코드 변경 없이 데이터를 입력하여 Success 띄우기이므로
- 코드를 변경하지 않고 xor 연산을 통해 Success를 출력시켜보도록 하겠다
movsx ecx, byte ptr ds:[eax]
xor ecx, 5
cmp dword ptr ss:[ebp-8], 1
je 0040104C
cmp dword ptr ss:[ebp-8], 3
je 00401062
- Success 메시지를 띄우려면 ecx ^ 5 = 3이 되어 00401062 주소로 점프해야 한다
- ? ^ 5를 XOR 했을 때 3이 나오므로 역 연산을 통해
- ? 의 값을 구해본다 3^5를 하여 값이 6이 나오므로 ecx의 값은 6이 되겠다
Crack Me 메시지창을 출력하는 함수에 BP를 걸어둔 후
xdbg 하단 부분에 있는 명령어 넣는 곳에 입력하고 F9으로 실행
init "실행경로" , "파라미터"
Crack me 창 출력 후 Success 창이 출력
'Reversing' 카테고리의 다른 글
[Reversing] - 04.exe (0) | 2024.05.28 |
---|---|
[Reversing] - 03.exe (0) | 2024.05.26 |
[Reversing] - 01.exe (0) | 2024.05.21 |
[Reversing] - 어셈블리어 (0) | 2024.05.20 |
[Reversing] - X86-64 CPU 레지스터 (0) | 2024.05.19 |