본문 바로가기

2. Reversing (리버싱)

(75)
[2021.05.08] CodeEngn Basic 16~20 write-up / 교재 5,6장 # CodeEngn Basic 16 Name이 CodeEngn일때, Serial을 구하시오 성공실패 문구 근처에 가봄 EAX 값에는 우리가 입력한 임의의 값인 111의 16진수 값이 들어가 있었음 시리얼 값이 들어있을 EBP-3C 값을 찾아보도록 EBP란? - EBP : Pointer to data on the stack (in the SS segment) EBP는 함수가 호출되었을 때 그 순간의 ESP를 저장하고 있다가 함수가 리턴하기 직전에 다시 ESP에 값을 되돌려줘서 스택이 깨지지 않도록 합니다. (이것을 Stack Frame 기법이라고 하며, 리버싱에서 중요한 개념입니다.) 출처: https://asiatica-aramid.tistory.com/28 [Investigate and write! :..
[2021.05.01] CodeEngn 11-15 & 교재 4장 CodeEngn Basic RCE L11 하지만 여기 nop은 무조건 점프라서 노상관 OEP를 묻길래 혹시나 해서 Dump를 떠봤더니, 역시나 UPX 패킹되어 있었다. 언패킹 우선 처음 보이는 이 부분(00401000)이 OEP 일것이고, stolenbyte 여기여기 ^nop의 향연 12바이트나 훔쳐감.. 한줄씩 실행해봤을 때 메시지 박스가 이상하게 출력됨 이는 메시지 박스 내용이 어디 도망간 것으로 추측 ? 패킹하기 전에 프로그램을 실행해보면 이런 창이 나온다 이 문구를 불러와야하는데 그걸 훔쳐가서 문구가 깨진 것이다! 다시 언패킹하기 전의 디버깅, 여러 call을 bp 걸고 실행하다가 발견, 여기 push 0~ push 11.402012까지가 계산해보니까 딱 12바이트로, 이 부분을 복사해서 아까 훔..
[2021.03.27] CodeEngn Basic L08~L10 & 교재 3장 [Codeengn basic 8~10 풀이] 1.CodeEngn Basic RCE L08 #8 OEP를 구하시오 Ex)00400000 처음 실행 시 뜨는 화면 계산기인듯? 1+1 이런 연산들 계산 된다. OEP란? Original Entry Point : 패킹된 파일의 실제 프로그램 시작 부분 OEP 이전의 실행 부분은 패킹된 파일이 메모리에 로드되어 압축을 푸는 명령어가 들어 있음! 이게 그럼 압축되어있다는 소린가? 방법 1) 패킹하기 전 파일의 OEP : 01020C40 압축풀기 (55 -> 112 KB 변화) 패킹 후 OEP 01012475 어라라… 이게 답이네..? 방법 2) 맨처음 켠 곳의 맨 마지막 코드에 BP 걸고 내부로 들어가면 바로 처음이 OEP! 2. CodeEngn Basic RCE ..
[2021.03.20] CodeEngn Basic L05-L07 & 교재 Chapter2 발표 #5 이 프로그램의 등록키는 무엇인가 우선 처음 프로그램을 실행하면 이렇게 나온다. 짠 처음에 갈피를 못잡다가, 다른 사람들 풀이를 보니 언패킹이라는 것을 해야한다고 함! 언패킹도구인 upx 사용 (깃에서 다운받고 환경변수 설정하고 실행) 언패킹하면 용량도 더 커지고 시작지점도 달라진다. 한 줄씩 실행해보면 요기서 실행됨. bp달고 코드 속에 들어가서 현재 모듈의 문자열 찾기를 해본다. 앞뒤 성공 실패 메세지 사이에 끼인 수상한 메세지 발견 실제로 문제를 풀어보면, 저게 정답 코드가 맞음을 알 수 있다! 패킹을 하는 이유 : 악성 행위로부터 자신을 보호하기 위해 단순히 실행파일의 크기를 줄이기 위해 압축하는 컴프레싱과는 다르게, 패킹은 프로그램 분석을 어렵게 만들기 위한 목적을 가지고 있다. (Prote..
[2021.03.13] CodeEngn Basic L01-L04 Codeengn Basic 01~04번 문제 풀이 네이버 사다리게임 사이트를 활용하여 각 문제 담당자를 정한 후 풀이 발표 진행 1번문항 : 이지혜 여기서 EAX는 종료되는 상횡에서 return 값을 저장하는 용도이다. 2번문항 : 유민서 CodeEngn - Basic RCE L02 - 패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇 인지 분석하시오 02.exe 파일을 실행해보면 앱을 실행할 수 없다고 나오고, 올리디버거로 열어도 알 수 없다는 오류가 뜬다. PE구조를 분석하기 위해 PEView를 다운받아서 실행시켜보았더니 실행파일 구조 자체에 결함이 있어서 실행할 수 없다고 판단할 수 있었다. 오른쪽 화면을 내리다 보면 you did it! 뒤에 알 수 없는 문자열..
[2020.11.28] Reversing.kr Challenge Music Player 라이트업 해당 뮤직 플레이어는 1분만 음악을 들을 수 있도록 제한되어있다. 1분 이상 들을 수 있도록 1분 체크 루틴을 수정해야한다. 해당 MP3 플레이어에 음악 파일을 실행시키면 1분까지만 실행되고 팝업창이 출력된다. 해당 프로그램의 모듈간의 호출을 찾아 rtcMsgBox 함수를 필터링하니 rtcMsgBox 함수가 네번 호출된 것을 알 수 있다. 4개의 함수 중 어떤 함수가 1분 제한 메시지를 띄우는 건지 알아내기 위해 4개의 함수에 BP를 설정한다. wav 파일을 넣고 1분간 실행하자 4045D8의 위치로 이동한다. 4045D8에 있는 rtcMsgBox 함수가 1분 제한 팝업창을 띄운다는 사실을 알 수 있다. 4045D8 위치로 이동하지 않게 코드를 수정해야 한다. 4045D8 주소에 도달하지 않기 위해서는 ..
[2020.11.21]CodeEngn Challenges Basic RCE L19, L20 라이트업 L19. 이 프로그램은 몇 밀리세컨드 후에 종료되는가 우선 프로그램 실행을 실행하니 아래와 같은 창이 출력되고 얼마 후 자동으로 종료되었다. Ollydbg에서 프로그램을 확인하려 했으나 평소 보이던 모습과 달라 PEiD로 확인하니 UPX로 패킹되어 있다는 것을 알 수 있었다. 이에 언패킹을 하고 다시 Ollydbg에서 실행해보았다. 프로그램을 언패킹한 후 Ollydbg에서 프로그램을 실행하려고 하니 제대로 실행할 수가 없었다. 이에 IsDebuggerPresent를 우회하기 위해 해당 함수를 TEST에서 CMP로 변경하고 실행하였다. 디버거를 우회한 후, Search for > All intermodular calls를 통해 호출되는 모든 API 함수를 살펴보던 중, timeGetTime이라는 함수를 발..
[2020.11.14]CodeEngn Challenges Basic RCE L17, L18 라이트업 L17. Key 값이 BEDA-2F56-BC4F4368-8A71-870B 일때 Name은 무엇인가 힌트: Name은 한자리인데.. 알파벳일수도 있고 숫자일수도 있고.. 정답인증은 Name의 MD5 해쉬값(대문자) 우선 프로그램을 실행해 Name에는 1을, Key에는 BEDA-2F56-BC4F4368-8A71-870B를 넣고 실행하니 글자 수를 더 입력하라는 메시지가 출력되었다. 그러나 문제에서 Name은 한 글자라고 했기 때문에 글자수를 확인하는 조건의 수정이 필요하였다. Key에 입력된 메시지 근처에서 글자수를 비교하는 CMP를 찾아보았다. 출력문 근처에서 입력된 값의 글자수와 3을 비교하는 CMP가 있었다. 문제 해결을 위해 비교하는 숫자를 3에서 1로 변경해주고 다시 값을 입력해보았다. 한 줄씩 코..