pawCTF - Quection23 [Reversing] 다시 했어!

1919 단어 CTFCpawCTF

CpawCTF - Quection23 [Reversing] 다시 했어!



  • 문제
  • 또한 printf()를 잊어버린 프로그램을 발견했습니다.
    어떤 암호를 푸는 프로그램 같다…
  • + 실행 파일


  • IDA에서 역 아세
  • main에서 중요한 곳만 추출
  • 값 초기화

  • 순서대로 값을 넣고

  • [ebp + var_80]이 0D 이하인 경우에만 loc_804847A를 수행합니다.
  • [ebp+var_80]은 처음 0부터 시작하여 1씩 증가
  • 즉 14회 loc_804847A에 있다

  • loc_804847A
  • [ebp+var_7C]와 eax로 xor를 취한다
  • [ebp+var_7C]는 0x19로 고정
  • eax는 [ebp+var_78+eax*4]
  • eax*4는 0 - 14까지 들어간다




  • c++로 다시 작성한 후 실행하고 종료
  • #include <bits/stdc++.h>
    using namespace std;
    
    #define INF 2e9
    #define INF_LL 1LL<<60
    #define ll long long
    
    #define REP(i, n) for (ll (i) = 0 ; (i) < (ll)(n) ; ++(i))
    #define REPN(i, m, n) for (ll (i) = m ; (i) < (ll)(n) ; ++(i))
    #define REP_REV(i, n) for (ll (i) = (ll)(n) - 1 ; (i) >= 0 ; --(i))
    #define REPN_REV(i, m, n) for (ll (i) = (ll)(n) - 1 ; (i) >= m ; --(i))
    
    int main(){
        int var[] = {0x7a, 0x69, 0x78, 0x6e, 0x62, 0x6f, 0x7c, 0x6b, 
                        0x77, 0x78, 0x74, 0x38, 0x38, 0x64}; 
        int var2 = 0x19;
        int ans[14];
    
        REP(i, 14) {
            ans[i] = var[i] ^ var2;
        }
    
        REP(i, 14) {
            cout << (char)ans[i] << " ";
        }
        cout << endl;
    
        return 0;
    }
    

    좋은 웹페이지 즐겨찾기