촉촉한초코칩

[Dreamhack] Easy Assembly 본문

Study/Reversing

[Dreamhack] Easy Assembly

햄친구베이컨 2024. 7. 7. 19:19

 

권한을 주고 실행하니 이런 메시지가 나왔다. 

실행파일로 만들어야된다. 

cat 명령어로 보니 안에 이런 문자들이 있었다.

안에도 Usage : <key> 이 부분이 있어서 다음 문자열을 ./prob 실행할 때 같이 넣어줬다.

아닌것 같다.. 

 

풀이 찾아보니까 main이 아니라 _start 함수를 통해 시작하는 것 같은데.. 어떻게 찾지 하다가 gcc 명령어로 찾음
그리고 해당 에러는 링커 에러라고 한다. 

일단 함수 하나는 알아냈으니까 gdb로 분석해보았다.

여기서 key 값을 확인하는 것 같다.
edx끼리 xor 연산하고 esi의 값을 dl에 넣는다.
0x804a10c와 dl을 xor연산하고 
edi의 값과 dl을 xor 연산한다.
ecx와 edx는 or 연산하고 
esi, edi 증가하고 eax는 1 감소시킨다.
그리고 0x804906b와 비교했을 때 값이 같지 않으면 다시 함수를 실행한다. 

0x804906b는 xor edx, edx를 말한다. 
check_password와 xor edx, edx 값이 같아야 통과되는 것 같다. 

check_password에 break point를 걸고 edx의 값이 뭔지 확인해본다. 

 

한바퀴 돌고 나면 각 레지스터에는 이런 값이 들어가게 된다. 
enc_flag의 값이 수상해 보여서 해당 주소에 있는 값이 뭔지 봤다.

 

실패..

 

섹션의 데이터부분을 봤는데 이 문자열들이 나왔다. 
You nailed 이전 부분들은 HxD에서 나오는게 더 보기 편하다.

https://dreamhack.io/wargame/writeups/14836 참고.. 

 

#include <iostream>

int check_password(int len, int isOk, int *enc_flag, int *key) {
    do {
        isOk = isOk | (*enc_flag++ ^ 49 ^ *key++);

        --len;
    } while (len);
    return isOk;
}

int main() {
    int enc_flag[] = {116, 120, 75,  101, 119, 72, 92,  105, 104, 126, 92, 121, 119, 98, 70,  121, 119, 5, 70,  84, 115, 114, 89, 105, 104,
                      126, 92,  126, 90,  97,  87, 106, 119, 102, 90,  82, 2,   98,  92, 121, 119, 92,  0, 124, 87, 13,  13,  77, 0};
    int key[49];
    int len = 49;

    for (int i = 0; i < len; i++) {
        for (int k = 0; k < 256; k++) {
            if ((enc_flag[i] ^ len ^ k) == 1) {
                key[i] = k;
                break;
            }
        }
    }

    if (check_password(len, 0, enc_flag, key) == 1) {
        printf("Key found!\n");
        for (int i = 0; i < len; i++) {
            printf("%c", key[i]);
        }
        printf("\n");
    } else {
        printf("Key not found.\n");
    }
    return 0;
}

enc_flag는 16진수를 10진수로 변환한 값이다. 
check_password함수는 아래 코드를 그대로 C++로 바꾼 것 같고.. 너무 어렵다..

 

IDA에서 열려고 했는데 안돼서 왜지.. 싶었는데 All files로 해야 되는 거였음..

'Study > Reversing' 카테고리의 다른 글

[Dreamhack] rev-basic-4  (0) 2024.07.27
[Dreamhack] rev-basic-2  (1) 2024.07.22
CodeEngn Basic RCE L16  (0) 2022.11.25
CodeEngn Basic RCE L15  (0) 2022.11.22
CodeEngn Basic RCE L14  (0) 2022.11.17