rev-basic-8
·
DreamHack/Reverising
IDA로 파일을 실행시켜 보자.                   'Correct'가 출력돼야 하니 sub_14001000을 확인                unsigned __int8 : 0부터 255까지의 값을 갖는 부호 없는 8비트 정수 a1은 한정적이라고 할 수 있다. '(-5 * *(_byte *)(a1+i) =' a1[i] 의 값을 -5 곱한 후 byte_140003000[i] 와 비교          byte_140003000 배열이다. 종합적으로 uint8_t 은 0~255까지의 값 byte_140003000 배열 값들도 많지가 않다 식은 그대로 가되 unsigned 8-bit로 처리해주고 비교하면 된다. result = (-5 * a1) % 256 수식 : -5 * a1 연산 후에 256으..
rev-basic-5
·
DreamHack/Reverising
파일을 받아 IDA로 보자.                'Corrcet' 출력을 위해 sub_14001000를 살펴보자.                  수식과 byte_140003000 배열값들을 비교하여 답을 추출하는 문제이다. 식을 정리해보자. if ( *(unsigned __int8 *)(a1 + i + 1) + *(unsigned __int8 *)(a1 + i)!= byte_140003000 [i] )  형변환생략 (a1+i+1)+(a1+i) == byte_140003000[i] (a [i]+1)+(a1[i]) = byte_140003000 [i] byte_140003000 [i]에 대한 배열값들을 보자.    예시(a1[0]+1) + (a1[0]) = byte_140003000[0] = 0xAD..
rev-basic-6
·
DreamHack/Reverising
문제를 다운로드하여 IDA에서 보자                          디컴파일링을 하고 'Corrcet' 를 출력시키기 위해 'sub_140001000' 한번 확인해 보자.                    반복문을 0x12 만큼 하고 byte_140003020에 배열 값과 byte_140003000 배열값을 비교해서 맞는 값들만 출력하는 식인듯하다.              byte_140003020의 배열값들이다.             byte_140003000의 배열값들이다. 식과  배열값들을 구했으니 python을 이용해서 비교해보면...           정상적으로 작동한다. 이번 문제는 DreamHack 치고는 쉬운 편이었다.
rev-basic-4
·
DreamHack/Reverising
"Correct"를 떠야 하니 sub_7 FF793501000를 보자.           반복문으로 28번 반복하여 byte_7FF793503000[i] 에 들어있는 배열값들이랑 일치하는지를 확인한다. 먼저 배열안에 들어있는 것들을 확인하도록 하자.           32개가 있지만 00을 제외하면(의미 없으니) 27개만 해당된다. 다시 돌아가 식을 보자            for ( i = 0; (unsigned __int64)i > 4)) != byte_7FF793503000[i] ) return 0LL; } return 1LL;  if 문에 대한 식을 정리하면  (16 *(a1+i)) | ((a1+i) >> 4) 형 변환에 대한 생략 unsigned __int8 -> uint8_t__i..
patch
·
DreamHack/Reverising
실행파일을 다운로드하여 확인해 보자.             잘 가려놨네.. IDA를 이용해서 코드를 확인해 보자.             int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){ HCURSOR CursorW; // rax HWND Window; // rax HWND v8; // rbx HACCEL AcceleratorsW; // rbx WNDCLASSEXW v11; // [rsp+60h] [rbp-A8h] BYREF struct tagMSG Msg; // [rsp+B0h] [rbp-58h] BYREF LoadStringW(hInstance, 0x67u, &W..
rev-basic-2
·
DreamHack/Reverising
디컴파일한 main이다. 목적은 "Correct"를 하기 위해 "sub_7 FF7 C05 E1000"의 주소를 들어가 보자.                   flag를 출력하는 조건을 보면... 배열 aC 값과 순차적(+ i) a1 값들을 비교해서 모두 같다면 출력해 주는 거 같다. 그러면 배열 aC와 a1 값들이 똑같아야 한다 그렇다면 둘 중 하나만 알아도 된다는 것 배열 aC에 대한 주소가 나와있기 때문에 배열 문자를 조합하면 flag가 출력된다.
rev-basic-3
·
DreamHack/Reverising
왜 항상 나만 오래 걸리는 거 같지 하                       일단 디컴파일을 해줘서 "Correct"에 도달하기 위한 참 조건에 주소를 한번 들어가 보자                       0x18 보다 클 때까지 반복을 하고 byte_7 FF6A6D83000에 배열 안에 있는 것들을 '!='을 이용 계산식을 비교한다. unsigned __int 8 같은 경우 자료형이라 연산에서는 제외시켰다. 참고로 같지 않을 경우 참이 돼버리니 오른쪽에 속한 연산 이랑 결과 값이 계속 같아야 한다. 일단은 byte_7 FF6 A6 D83000에 뭐가 들어있는지 주소를 찾아가 보자.                 배열에는 총 24byte에 데이터가 존재했다. 오른쪽 연산식에 과 항상 같아야 하니 연산..
rev-basic-1
·
DreamHack/Reverising
Correct에 대한 조건 주소인 sub_7 FF64 B221000을 찾아가 보면....            if 문이 많다 돌려보면 플래그값이 나온다. ASCII 로 변환하면 된다.
rev-basic-0
·
DreamHack/Reverising
문제를 다운로드하여 main에 대해서 디컴파일을 하면 "correct"에 주소값을 검색해 보면 바로 해결할 수 있다.