본문 바로가기

Security study/CTF

(14)
[Reversing] CodeEngn Basic RCE L17 보호되어 있는 글입니다.
[Reversing] CodeEngn Basic RCE L07 1) 내가 풀어본 과정 파일을 실행해보면 위의 창이 나오는데 '123456'을 입력 후 Check 버튼을 눌렀더니 serial이 맞지 않다는 문자열이 나온다. 맞는 시리얼을 입력했을 때 문제가 풀릴 것으로 보인다. Immunity Debugger에 넣고 Search for -> All referenced text strings 를 했을 때 마지막에 보면 "Yep, you entered a correct serial!"이라는 문자열이 보이는데 이것이 맞는 시리얼을 입력했을 때 나오는 문자열일 것 같다. 눌러서 들어간 후 위로 조금 올려보았더니 시리얼로 의심되는 문자열인 4562-ABEX와 L2C-5781이 보인다. 그런데 두 문자열 사이에 ADD 어셈블리어가 여러 개 보이고 두 문자열을 붙여서 입력한 후 ..
[Reversing] 레지스터 [1] 레지스터 레지스터는 간단히 말하면 CPU가 사용하는 변수이다. 레지스터는 EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP 가 있다. EAX (Extended Accumulator Register) -> 계산(Accumulator)용으로 곱셈과 나눗셈 등의 명령에서 사용하도 함수의 return 값을 저장한다. EDX (Extended Data Register) -> D가 Data를 나타내며 곱셈과 나눗셈에 EAX와 같이쓰이나 리턴값으로는 사용되지 않는다. 부호 확장 명령 등으로 사용된다. ECX (Extended Counter Register) -> 산술 연산 레지스터로, C는 Count를 나타내며 반복문을 수행할 때 카운팅하는 역할을 한다. 반복 횟수를 저장한다. E..
[Reversing]codeengn Basic RCE L15 1) 내가 푼 풀이 일단 실행시키면 밑의 창이 나온다. 밑에 보이는 대로 Name과 Serial을 마음대로 입력해주었다. 디버거로 연 후 Search for -> All referenced text strings 로 갔더니 이런 문자열이 보였다. 마지막 "Try Again !"은 아무거나 입력했을 때 나온 문자열이므로 위의 두 개가 맞게 입력했을 때 나오는 것 같다. 두 번째 "CRACKED"를 눌러서 들어갔더니 이런 코드들이 보였다. 원래 빨간 사각형 부분이 JNZ였는데 JE로 바꿔줬다. 그 이유는 JNZ로 00458854 주소로 점프하면 "Try Again !"이 출력되기 때문이다. 그렇게 했을 때 밑의 창이 나오면서 풀린다. 근데 이렇게 하면 키값을 알아낼 수가 없다. cmp 부분의 코드를 잘 살펴..
[Reversing] codeengn Basic RCE L09 위의 2 창은 처음 파일을 실행 시켰을 때 나오는 화면이다. 이 실행파일을 디버거에 넣어보니 pushad 와 popad가 있길래 upx로 언패킹을 했다. 언패킹 후 변화를 살피기 위해 실행했더니 이상했다. 디버거에 넣었더니 NOP 이 많이 생긴 것을 볼 수 있다. MessageBoxA 함수는 4개의 인자를 받는데 지금 1개만 주고 있어 개수가 모자란 것 같다. 언패킹을 하기 전인 패킹된 파일을 천천히 F8로 진행시키면서 천천히 살펴보면 반복문에 걸린다 거기서 조금씩 밑으로 내려보면 주석에 문자열이 적혀있는 부분이 있다. 저 부분의 빨간 사각형으로 표시한 부분을 순서대로 적은 것이 flag 이다. Flag : 6A0068002040006812204000
[Reversing] codeengn Basic RCE L04 파일을 실행시켰더니 '정상'이라는 단어가 계속 몇 초의 간격을 두고 출력되었다. 문제를 읽어봤을 때 디버거에 파일을 넣으면 정상이 아니라는 단어가 출력될 것 같았다. Immunity Debugger 에 넣은 후 F8로 실행시키다보니 '디버깅 당함' 이라는 문자열이 출력되는 부분이 있었다. 거기에 브레이크 포인트를 걸어둔 후 Ctrl+F2 하여 F9로 브레이크 포인트 부분으로 간 후에 F7로 들어가서 계속 실행시키다보니 또 '디버깅 당함'이라는 문자열이 뜨는 부분이 있다. 그 부분의 주석에 함수 이름으로 보이는 영어가 적혀있었다. Flag : IsDebuggerPresent
[Reversing] 안티 디버깅(Anti-Debugging) [1] 안티 디버깅(Anti-Debugging)이란? -> 디버깅을 방해하여 분석을 하지 어렵게 하는 기술이다. -> 디버깅 시 디버거 프로그램 종료 또는 에러 발생을 통해 분석을 방해한다. [2] 분류 1. Static -> 분석 전에 한 번만 해체를 해주면 된다. -> 디버거를 탐지하여 프로그램이 정상적으로 실행되지 못하도록 한다. 2.Dynamic -> 디버깅을 진행하면서 해당 안티 디버깅 함수를 만날 때마다 해체 해주어야 한다. -> Static 기법보다 난이도가 더 높다. [3] 다양한 안티 디버깅 기법 1. CheckRemoteDebuggerPresent() Windows API 2. Detecting Breakpoints by CRC 3. Detecting SoftlCE by Opening ..
[Reversing] codeengn Basic L02 1) 내가 푼 방식 문제 파일의 압축을 해제 후 파일을 더블클릭했는데 실행이 안 됐다. 그래서 hxd에 파일을 넣었더니 알아볼 수 있는 영어 문장들이 보였는데 그 중 Crack me #1 뒤에 있는 영어 문자열 부분이 수상했다. JK3FJZh 를 키 입력창에 넣어봤더니 문제가 풀렸다. Flag : JK3FJZH 2) 출제자 의도 풀이 출제자는 디버거로 하는 동적분석 말고 다른 정적분석에 대해 알려주고 싶었던 것 같다. 내가 푼 방법과 동일하게 풀면 되는 문제이다.