BugkuCTF ConsoleApplication 4 문제 풀이 사고방식 및 관련 지식

4650 단어 역공학
  • 이 문제 의 뜻 은:     모두 8 스 택 등 입 니 다. 모든 등 상태 가 바 뀌 면 앞 뒤로 붙 어 있 는 두 개의 등 상 태 를 바 꿉 니 다. 모든 등 을 밝 혀 flag 를 얻 으 라 고 요구 합 니 다.     입력 수 를 요구 하 는 범 위 는 1 - 8 사이 이 고 0 은 다시 시작
  • 사고방식 1:
  • 1:         

  •      알고리즘 은 1 - 8, 8 스 택 등 입 니 다. 하 나 를 누 르 면 3 상 태 를 바 꾸 고 스 크 립 트 를 써 서 폭파 하 세 요!!(문제 출제 자의 생각 을 흉 내 내 중간 과정 을 표현 하고 싶 었 지만, 결국은 자신 이 너무 어 렸 다.           가 벼 이           욕심     한 개의 등 을 두 번 누 르 면 지난번 에 누 른 영향 을 상쇄 할 수 있다.       따라서 한 개의 등 은 두 가지 상황 만 누 르 거나 누 르 지 않 고 한 개의 등 이 여러 번 켜 지 는 경 우 는 없다.       등 8 개       1 누 르 면 1100000       3 후 10110000 누 르 기       1 누 르 면 0110000       이것 과 여덟 개의 등 이 0000000 원 입 니 다.       한 번 만 누 르 세 요. 3 후 0110000.       똑 같은 상황 이에 요.     #####그러나 나중에 나 는 한 가지 요 소 를 소홀히 했다. 우리 가 있 는 이곳 의 마지막 등 은 첫 번 째 등 에 영향 을 줄 것 이다. 그것 은 고리 이 고 여기에 두 면 안 된다.
    lamp = [0, 0, 0, 0, 0, 0, 0, 0]
    a = []
    status = True
    for i in range(1, 6, 1):
        if lamp[i-1] == 0:
            lamp[i-1] ^= 1
            lamp[i] ^= 1
            lamp[i+1] ^= 1
    if lamp[7] == 0:
        lamp[7] = 1
        lamp[0] ^= 1
        lamp[1] ^= 1
    print(lamp)
    lamp[7] = 1
    lamp[0] = 1
    lamp[1] = 1
       #     

    위의 스 크 립 트 는 전혀 그런 상황 이 아 닙 니 다. od 동적 디 버 깅 으로 돌아 갑 니 다.
    사고방식 2:
    역방향 이 었 기 때문에 나중에 od 에 들 어가 해결 방안 을 다시 찾 았 습 니 다.
        문자열 done the flag is 를 검색 하여 어 셈 블 리 코드 를 찾 습 니 다:    00FDE968  done the flag is     이 주소 의 머리 는 FDE 940 입 니 다.      점프         바로 시작 하 는 곳 에서 콜 명령 을 콜 00FD7AB 4 로 바 꿉 니 다.                       바로 게임 성공 이 있 을 자리 에 도 착 했 습 니 다.    eax=0046F5D8, (ASCII "zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}")
        드디어!!!          메모리 의 각종 mov 작업 은 문 자 를 하나씩 스 택 에 누 르 고 나중에 다시 한 번 전체 인쇄 를 합 니 다.    F4 의 역할 은 한 번 순환 하 는 것 이다.
    지식 포인트:    
  • 1. 레지스터 (E) CX) 에서 지정 한 횟수 에 따라 문자열 명령 을 반복 해서 실행 합 니 다. 레지스터 (E) CX 에서 0 으로 줄 이거 나 ZF 로고 로 중복 되 어 지정 한 조건 을 만족 시 키 지 않 습 니 다.REP (중복), REPE (동일 시 중복), REPNE (같 지 않 을 때 중복), REPZ (0 시 중복) 및 REPNZ (0 시 중복 되 지 않 음) 보조 기 호 는 일부 문자열 명령 에 추가 할 수 있 는 접두사 이다.REP 접 두 사 는 INS, OUTS, MOVS, LODS 및 STOS 명령 에 추가 할 수 있 고 REPE, REPNE, REPZ 및 REPNZ 접 두 사 는 CMPS 와 SCAS 명령 에 추가 할 수 있다.(REPZ 와 REPNZ 접 두 사 는 각각 REPE 와 REPNE 접두사 의 동의 형식).문자열 이 아 닌 명령 과 함께 사용 할 때 REP 접두사 의 행동 이 정의 되 지 않 았 습 니 다.
  •     REP 접 두 사 는 한 번 에 하나의 문자열 명령 에 만 적 용 됩 니 다
  •      
  •     2. stos 는 stosb 를 포함한다.  stosw   stosd, 관련 레지스터 는 eax, edi 이 고 기능 은 다음 과 같 습 니 다.     stosb    al 의 값 을 byte ptr es: [edi] 에 복사 하 는 동시에 edi + +     stosw    x 의 값 을 워드 ptr es: [edi] 에 복사 하 는 동시에 edi +     stosd    eax 의 값 을 dword ptr es: [edi] 에 복사 하 는 동시에 edi +       int b[0x33];      __asm            //다음 세 개의 어 셈 블 리 문 구 는 배열 b 를 초기 화하 고 간단 하고 효율 적 이다.     {        XOR EAX, EAX                 lea edi, b        mov ecx, 0x33        rep stosd      }     지령      종료 조건 1, 종료 조건 2    REP,        ECX=0,     없다                kREPE/REPZ, ECX=0,     ZF=0     REPNE/REPNZ,ECX=0,     ZF=1           mov     eax,0CCCCCCCCh             //int 3 인 터 럽 트, 0 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC      rep stos dword ptr es:[edi]      //stos 명령 ecx 의 중간 값 을 반복 하 는 횟수
  •  
  •     3% p 는 주 소 를 전문 적 으로 인쇄 하고% x 는 16 진법 으로 데 이 터 를 인쇄 합 니 다.          size t 형식의 값 을 인쇄 할 때 조심해 야 합 니 다. 기호 값 이 없습니다. 형식 설명 자 를 잘못 선택 하면 신뢰 할 수 없 는 결 과 를 얻 을 수 있 습 니 다. 추천 하 는 형식 설명 자 는% zu 입 니 다.     size t 는 sizeof 연산 자 를 만 드 는 반환 값 형식 이자 많은 함수 의 매개 변수 유형 입 니 다. malloc 와 strlen 을 포함 합 니 다. 기호 가 없 는 정수
  • 입 니 다.
         
  •     4. 본 문제 의 욕심 산법
                   。               ,               (           ,   ,      ,    )  ,             。  ,         : 1             for                    ,           ,               ,   , impossible!
        ACM     :        ,                        
    #include
    #include
    #include
    using namespace std;
    string lockin,lockout;
    int L1[35],L2[35],L3[35];
    int main(){
    
        int num1=0,num2=0;
        cin>>lockin>>lockout;
        int len=lockin.length();
        for(int i=0;i
     
  •    5 INT 3 인 터 럽 트 는 인 터 럽 트 의 일종 으로 Ollydbg 와 같은 단축 키 는 F2 로 자주 사용 되 는 인 터 럽 트 유형 입 니 다. INT 3 명령 의 기계 코드 는 CC 이기 때문에 CC 명령 이 라 고도 부 릅 니 다. INT 3 인 터 럽 트 를 사용 하면 수많은 인 터 럽 트 를 설정 할 수 있 습 니 다. 단점 은 원래 프로그램 명령 을 바 꾸 어 소프트웨어 에 쉽게 감지 되 는 것 입 니 다. 예 를 들 어 API 가 끊 기지 않도록 일부 소프트웨어 에서 API 를 감지 합 니 다.의 첫 번 째 주소 가 CCh 인지 여 부 를 판단 하여 정지점 이 내 려 졌 는 지
  •  

    좋은 웹페이지 즐겨찾기