rev-basic-7 풀이

2021. 11. 10. 20:24Dreamhack Wargame

728x90

문제 제목
문제 정보
main()
sub_140001000()
byte_140003000

이번 문제는 주어진 배열의 길이도 짧고 다 좋은데, __ROL1__이라는 것이 코드에 있습니다.

아무래도 맥락상 알고리즘이나 암호화 같은데.... 구글링을 한 번 해보겠습니다.

 

https://namu.wiki/w/LEA

[LEA - 나무 위키] 한 줄 요약 -> ROL은 왼쪽 방향 쉬프트 연산이다

 

[if문 조건식]

i^__ROL1__(flag[i], i&7) != arr[i]

 

ROL이 무엇인지도 알았으니 이제 역연산 코드를 짤 수 있을 것 같습니다.

이번에도 브루트 포스 방식으로 if문 조건식을 구현하면 될 듯합니다.

 

#include<cstdio>
#include<iostream>
using namespace std;

int w;
int arr[32]={0x52,0xDF,0xB3,0x60,0xF1,0x8B,0x1C,0xB5,0x57,0xD1,0x9F,0x38,0x4B,0x29,0xD9,0x26,0x7F,0xC9,0xA3,0xE9,0x53,0x18,0x4F,0xB8,0x6A,0xCB,0x87,0x58,0x5B,0x39,0x1E};

int rol1(int data,int shift){
	int size=8;
	shift%=size;
	int remains=data>>(size-shift);
	int body=(data<<shift)-(remains<<size);
	return (body+remains);
}

int main(){
	for(int i=0;i<31;i++){
		for(int j=0;j<128;j++){
			w=(rol1(j,i&7))^i;
			if(w==arr[i]){
				printf("%c",j);
			}
		}
	}	
}

 

ROL 코드는 구글 서칭을 통해 나오는 코드들을 조합해서 썼습니다.

 

FLAG 획득 완료
문제 풀이 성공

 

728x90

'Dreamhack Wargame' 카테고리의 다른 글

simple-ssti 풀이  (0) 2021.11.17
image-storage 풀이  (0) 2021.11.17
rev-basic-6 풀이  (0) 2021.11.03
rev-basic-5 풀이  (0) 2021.11.03
rev-basic-4 풀이  (0) 2021.10.29