• 카테고리

    질문 & 답변
  • 세부 분야

    보안

  • 해결 여부

    미해결

이문제는 이렇게푸는게나을것같습니다(5초내로풀림)

20.08.21 18:05 작성 조회수 152

0

#include <stdio.h>

#include <stdlib.h>

#include <Windows.h>

#pragma warning(disable:4996)

#pragma section("flag_data", read)

__declspec(allocate("flag_data")) char table[45] = { 102, 124, 124, 107, 78, 117, 17, 87, 100, 69, 114, 2, 80, 106, 65, 80, 6, 66, 103, 91, 6, 125, 4, 66, 125, 99, 2, 112, 76, 110, 103, 1, 98, 91, 106, 6, 18, 106, 115, 91, 69, 5, 113, 0, 76 };

char flags[45];

void genFlag(int key1, int key2, int key3) {

    for(int i = 0; i<45; i++) {

        if (i % 3 == 0)

            flags[i] = table[i] ^ key1;

        else if (i % 3 == 1)

            flags[i] = table[i] ^ key2;

        else if (i % 3 == 2) {

            flags[i] = table[i] ^ key3;

        }

    }

}

int main() {

    

    int key1;

    int key2;

    for(int i = 0; i<255;i++)

    {

    for(int j = 0; j<255;j++)

    {

    key1 = i;

    key2 = j;

        key1 ^= key2 ^= key1 ^= key2;

    int key3 = (key1-3) ^ (key2+3);

    key3 += 10;

    key3 &= 0xff;

    

    genFlag(key1,key2,key3);

    if(flags[0] == (int)'D' && flags[1] == (int)'I' && flags[2] == (int)'M')

    {

        printf("Flag : %s\n", flags);

}

}

}

    getchar();

}

답변 2

·

답변을 작성해보세요.

0

jk9130님의 프로필

jk9130

질문자

2020.08.22

넵 봐주셔서 감사합니다

0

ezthread.exe 파일의 내부 로직을 잘 구현하셨네요.

저 같은 경우는 복잡한 부분은 최대한 안 건드리려다보니 파일 입출력 등이 코드에 포함되어 시간이 많이 소요되지만

능력이 되신다면 하신 것 처럼 직접 구현하시는 방법이 효율적입니다.