Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

SSDD

[Reversing] - 02.exe 본문

Reversing

[Reversing] - 02.exe

sadic 2024. 5. 24. 12:44

문제 해결 조건

코드 변경 없이 데이터를 입력하여 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