[Dreamhack] 리버싱 rev-basic-6 Writeup
·
Writeup
드림핵의 6번째 리버싱 워게임 문제다앞 시리즈와 동일하게 인풋을 입력하면 Correct/Wrong이 출력되고Correct를 출력하는 플래그 값을 찾으면 된다  대략 위와 같은 구조의 프로그램디컴파일해서 살펴보자  플래그를 찾는 함수와 조건을 찾았다위의 함수를 간편하게 바꿔보자byte_140003020[*(unsigned __int8 *)(a1 + i)] != byte_140003000[i]byte_140003020[a1[i]]!= byte_140003000[i] 첫 번째 배열에 있는 요소와 두 번째 배열 요소가 일치하면 인덱스를 플래그에 추가해서chr() 이렇게 변환하면 되겠다 편의를 위해서 배열 이름은 f1[a1[i]] = f2[i] 이렇게 바꿔서 코드를 짜겠음일단 두 배열의 요소들을 보면 Hex 값 ..
[Dreamhack] 리버싱 rev-basic-5 Writeup
·
Writeup
이전 rev-basic 시리즈와 유사한 구조의 문제다correct를 출력하는 플래그를 찾으면 됨틀린 값을 입력하면 wrong을 출력함 IDA에 로드해서 실행파일을 분석해 보겠음  input: 여기서 사용자에게 입력값을 받고if 문에 있는 sub_140001000에서 비교해서 일치하면 correct 출력 __int64 __fastcall sub_140001000(__int64 a1){ int i; // [rsp+0h] [rbp-18h] for ( i = 0; (unsigned __int64)i  if ( *(unsigned __int8 *)(a1 + i + 1) + *(unsigned __int8 *)(a1 + i) != byte_140003000[i] )위의 수식을 간소화하면 이렇게 되겠다a1[i+1..
[Dreamhack] 리버싱 rev-basic-4 Writeup
·
Writeup
지난 리버싱 시리즈와 마찬가지로 Correct값을 출력해주는입력값을 찾는 문제다 바로 디컴파일해서 소스코드를 살펴보자 int __fastcall main(int argc, const char **argv, const char **envp){ char v4[256]; // [rsp+20h] [rbp-118h] BYREF memset(v4, 0, sizeof(v4)); sub_1400011C0("Input : ", argv, envp); sub_140001220("%256s", v4); if ( (unsigned int)sub_140001000(v4) ) puts("Correct"); else puts("Wrong"); return 0;}__int64 __fastcall sub_140..
[Dreamhack] 리버싱 rev-basic-3 Writeup
·
Writeup
IDA에 실행파일을 로드해서 흐름을 살펴보면Input: 여기서 인풋을 받고 검증을 통해 correct, wrong을 출력한다 Correct를 출력하는 조건이 뭔지 loc_140001193을 살펴보자 sub_140001000에서 인풋을 비교한다더블클릭해서 들어가니까 수식이 있다 일단 byte_140003000에 hex 값으로 힌트를 찾을 수 있는지 보면  뭔가 hex 값이 있긴 한데 플래그로 보이는 문자는 아닌 것 같다위에 나온 수식이 유일한 해결책인 것 같아서 다시 분석해 보겠음 arr[i] != (i ^ *(unsigned __int8 *)(a1 + i)) + 2 * i hex_value값을 이미 알고 있으니까 역으로 연산하는 식을 구하면 되겠다arr[i] != (i ^ a1[i]) + 2 * iarr..
[Dreamhack] 리버싱 rev-basic-2 Writeup
·
Writeup
IDA Free 프로그램에 실행파일을 로드해서 전체적인 흐름을 살펴보자저번 리버싱 문제들과 마찬가지로 인풋 값에 따라서correct, wrong을 출력해주는 프로그램인것 같다늘 그렇듯이 F5로 디컴파일 먼저 해보자   sub_1400011B0에서 인풋을 받고 sub_140001000에서 값을 비교한다 그럼 sub_140001000에 들어가서 함수를 자세히 보자  for문이 있고 0x12, 10진수로 18번 반복문이 실행되는걸로 봐서플래그가 한번에 나타나는게 아니라 18번에 걸쳐 나타나는것 같다!  IDA-VIEW A에 보니까 글자들이 하나씩 있는게 보인다C o m p 4 r e 어쩌고 뜨는걸 보니 이게 플래그인듯 그런데 Hex view에 들어가도 플래그가 한번에 떠있다 Comp4re_the_arr4y