InfoSec/Reversing

rev_basic_7 - ROR, ROL

CalicoCat22 2022. 8. 1. 18:27

https://dreamhack.io/wargame/challenges/21/

 

rev-basic-7

Reversing Basic Challenge #7 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출

dreamhack.io

 

문제에서는 8비트 단위로 rotate를 해주어야하는데

Integer.rotateRight/Left의 경우 4바이트다보니

1바이트 단위의 rotate 코드를 직접 짜주었다...

 

    public static void main(String[] args){
        char[] b = new char[]{0x52, 0x0DF, 0x0B3, 0x60, 0x0F1, 0x8B, 0x1C, 0x0B5, 0x57, 0x0D1, 0x9F, 0x38, 0x4B, 0x29, 0x0D9, 0x26, 0x7F, 0x0C9, 0x0A3, 0x0E9, 0x53, 0x18, 0x4F, 0x0B8, 0x6A, 0x0CB, 0x87, 0x58, 0x5B, 0x39, 0x1E, 0x0, 0x0, 0x0, 0x0, 0x0};
        char[] a = new char[35];
        for (int i=0;i<35;i++){
            char c = (char)(b[i] ^ i);
            int n = i & 7;

            char tmp = '1';
            for (int k=0;k<8;k++) tmp &= (0 << k);
            for (int k=0;k<8;k++){
                int key = (k + n) % 8;
                if ((c & (1 << key)) == (1 << key)){
                    tmp |= (1 << k);
                }
            }

            a[i] = tmp;
        }

        pw.print(a);

        pw.close();
    }