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();
}