리버싱에 관하여/ctf
pico CTF sidechannel writeup[side channel attack에 관하여]
지난 26회 해킹캠프에 다녀왔을 때 못 푼 CTF문제가 아쉬워서 관련된 CTF 문제를 풀어보았습니다. SIde channel attack(부 채널 공격)을 이용해서 문제를 푸는 방식 이였습니다. Side channel attack에 대해서 위키백과에 나온 내용입니다. 암호학에서 부채널 공격(side channel attack)은 알고리즘의 약점을 찾거나(암호 해독과는 다름) 무차별 공격을 하는 대신에 암호 체계의 물리적인 구현 과정의 정보를 기반으로 하는 공격 방법이다. 예를 들어, 소요 시간 정보, 소비 전력, 방출하는 전자기파, 심지어는 소리를 통해서 시스템 파괴를 위해 악용할 수 있는 추가 정보를 얻을 수 있다. 즉 직접적으로 문제를 뜯지 않아도 소요 시간 정보, 소비전력, 방출하는 전자기파 등을 ..
CodeEngn<Basic RCE L05>
문제 풀이 프로그램을 실행하자 등록키가 보이길래 제작사의 실수 인줄 알고 클릭했더니 잘못된 키였습니다. 올리디버거를 이용해서 열어보니 이상한 문구가 떴습니다. 그래서 무시하고 갔더니 이렇게 정상적으로 열리는 것을 확인 할 수 있었습니다. 먼저 저는 저번 글에서 썼는 api 확인을 했습니다. 뭔가가 이상한걸 볼 수 있습니다. 그래서 저는 2번과 비슷한 문제 인줄 알고 HXD로 열어 봤습니다. 그랬더니 UPX 패킹이 되었다고 뜨는 것을 볼 수 있었습니다. 더보기 ※패킹이란? 패킹은 실행압축이라는 뜻을 가진다. 일반적으로 ZIP, RAR과 같은 압축은 그 압축을 해제 시켜야 해당 프로그램을 실행시킬 수 있다. 하지만 패킹은 있는 그대로 일반 프로그램처럼 실행 가능하다.실행파일을 대상으로 파일 내부에 압축해제코..
Codeengn<Basic RCE L04>
문제 풀이 올리디버거를 썼을때는 디버깅 당했다고 뜹니다. 그렇다면 이렇게 디버깅을 찾는 함수를 찾아보겠습니다. 이번에 쓸 올리 디버거 옵션은 "All intermodular calls" 입니다. 이 옵션은 디버깅 시작전에 미리 코드를 분석하여 사용되는 API 함수 목록을 뽑아내줍니다. 쓰는 방법은 마우스 오른쪽 클릭 -> search for ->All intermodular calls 클릭 이렇게 많은 API함수들이 사용되는군요. 목록을 천천히 훑어 보면 IsDebuggerPresent라는 함수가 눈에 띕니다. 그래서 검색을 해봤습니다. 우리가 찾는 함수가 맞는것 같습니다. 볼 때 마다 행복한 문장입니다. 다음에 실력이 늘면 이 함수를 우회하는 방법도 써보고 싶습니다. 내가생각하는 문제의 의도 : 디버거..
CodeEngn <Basic RCE L03>
저번 문제의 충격에서 빠져나와 3번 문제를 풀어보도록 하겠습니다. 문제 풀이 이번 문제를 보고 제가 제일 먼저 해 본 행동은 구글링입니다. 뭔가 나오길래 쳐봤더니 아니였습니다. 어쩔수 없이 올리디버거를 이용해 보도록 하겠습니다. 제대로 된 분석을 시작하기 전에 실행은 시켜봐야죠 입력창이 뜨고 문자열을 입력하니 실패 했다고 하네요 이제 실행도 시켰으니 분석을 해보겠습니다. 여태까지는(여태라고 해봤자 1번 문제만이였지만)직접 실행 시켜보면서 했지만 이번에는 다른 방법을 쓰겠습니다. 올리디버거의 기능중 하나를 이용하는건데 바로 ALL referenced text strings 기능을 이용하는겁니다. 사용법은 마우스 오른쪽 클릭 -> Search for -> ALL referenced text strings 클..
CodeEngn <Basic RCE L02>
문제 문제를 보니 실행 파일이 손상된것 같습니다. 아마 실행이 안되겠죠 풀이 실행을 시켜보니 실행이 안됩니다. 그렇다면 올리디버거로 까봅시다. 올리디버거 문제인것 같아서 1번 문제도 넣어보고 가상머신 문제인가 해서 본체에서도 해보고 이래 저래 다 시도 해봤습니다. 아! 그럼 x64dbg를 써보자! 전 암것도 몰라연ㅎ 놀랍습니다 얘도 안됩니다. 혹시나 해서 HXD로 열어 봤더니 HXD는 써집니다. 그렇다면 얘는 HXD를 이용해서 푸는걸까요? 열리길래 시그니처 먼저 확인 해봤습니다. 시그니처가 이상합니다. 그래서 EXE의 시그니처로 바꿔서 돌려봤습니다. 세상에 !! 열려요 그래서 계속 돌려봤습니다....계....속.... 뭐가 되는건 하나도 없고... 뭔가 이상해요 ㅠㅠ 그래서 HXD를 다시 확인 해봤습니다..
CodeEngn <Basic RCE L01>
문제 문제를 보니까 HDD를 CD-Rom으로 인식 시키는 리턴값을 찾는 문제같습니다. 문제만 보고 포기하기는 너무 빠르니까 한번 까보기라도 합시다. 풀이 일단 실행시키면 저런식으로 실패 했다고 뜹니다. 한번 어셈블리 코드를 보겠습니다. 저기 문제에서 나왔던 GetDriveTypeA 가 보입니다. 그 밑에다 breakpoint를 걸어서 돌려봅시다. 여기서 이제 다시 코드를 쭉 훑어 보면 EAX 값이랑 ESI 값이랑 비교하는 부분이 있습니다. 위에 나온 초기 EAX 값은 3이였습니다. 그렇다면 cmp 부분에서 eax 값이 뭐가 되는지 확인을 해보겠습니다. JE 부분에 breakpoint를 걸고 돌려 보겠습니다. 무슨일이 벌어진건지 모르겠지만 EAX == 1 이되고 ESI == 3이 되버렸습니다. 그 과정은 ..