본문 바로가기

RVS

(9)
호출 규약 (Call conventions) 간략 비교 (cdecl vs stdcall vs fastcall) 함수 호출은 어셈블리 코드에서 다르게 나타날 수 있다. 이는 호출 규약이 함수 호출이 발생하는 방식을 결정하기 때문이다. 호출이 발생하는 방식이라 함은 아래와 같이 두 가지가 존재한다. 1. 함수의 파라메타를 스택 혹은 레지스터에 놓는 순서 2. 함수가 종료되면 스택을 정리하는 대상(호출자 또는 호출된 함수) 또한 컴파일러에 따라서 사용되는 호출 규약도 다르다. 컴파일러가 이러한 규약을 구현하는 방법에는 미묘한 차이가 있다. 그래서 다른 컴파일러에 의해 컴파일된 코드를 인터페이스하기가 어려울 수 있다. 하지만, Windows API 사용할 때에는 일정한 규약을 따라야하며, 호환성을 위해 균일하게 구현된다. 호출 규약은 주로 cdecl, stdcall 및 fastcall 세 가지가 사용된다. cdecl -..
Reversing.kr 10번 문제 (Twist1) Twist1 프로그램 디버깅 시작 부분은 아래 그림에서 볼 수 있듯이, OEP (Original Entry Point) 위치가 아니다. 그렇다면 프로그램이 패킹되어 있을 것으로 예상된다. 그러나, 다음 그림의 Detect It Easy을 통해 확인한 Twist1 프로그램에 패킹된 정보는 없다. 그렇다면, 커스텀으로 패킹된 것이 아닐까라는 생각이 든다. ANTI DEBUGGING 기법-1 (POP SS) 우선, [F9] 단축키를 통해 프로그램을 실행해보았다. 그러면 아래 그림 00402052 위치에서 프로그램이 멈추고 다음 그림과 같이 EXCEPTION_ACCESS_VIOLATION 예외가 발생한다. 계속 이렇게 동적 디버깅할 때만 예외가 발생해서, 'pop ss'에 대해 검색해보았다. 찾아보니 왠걸.. ..
Reversing.kr 13번 문제 (AutoHotkey1) AutoHotkey1 문제는 (그림 1)처럼 두 개의 파일이 존재한다. 항상 그렇듯이 readme.txt 먼저 살펴보자. (그림 2)는 readme.txt 파일 내용이다. Decrypt와 EXE 키는 md5 값이며, 해당 md5을 복호화하면 인증키를 획득할 수 있다는 내용이다. 우선, 이 문제를 풀면서 AutoHotKey라는 프로그램을 처음 알게 되었다. 따라서 AutoHotKey이 어떤 프로그램인지를 알아보았다. AutoHotKey는 윈도우 응용 프로그램이나 매크로를 만들 수 있는 오픈 소스 소프트웨어이다. 보통, 반복적인 작업을 자동으로 수행하도록하거나 단축키를 설정하기 위하여 사용된다. AutoHotKey를 설치한 후에 사용자가 원하는 대로 스크립트 코드를 작성할 수 있다. 스크립트 파일은 ahk ..
Reversing.kr 11번 문제(Easy ELF) Easy_ELF 파일은 리눅스 실행 파일인 elf 파일이다. 윈도우의 PE 파일과 같은 존재이다. IDA는 ELF 파일 분석을 제공한다. 따라서, IDA를 통해 Easy_ELF 파일 분석을 수행해보았다. 파일을 IDA로 열어보면 시작 부분이 (그림 1)과 같다. main으로 가기 위해서 .text:08048397의 offset main을 클릭해보자. (그림 2)는 main 함수 내부의 코드이다. 08048253B에서 "Reversing.Kr Easy ELF\n\n" 문자를 write 함수를 통해 쓴 후에, 바로 아래에서 sub_8048434와 sub_8048451 함수를 호출한다. 그리고, sub_8048451 리턴 값이 eax에 저장되고, 0804854A에서 eax와 1을 비교한 후에 같지 않으면, l..
Reversing.kr 7번 문제 (Position) Ready Revsersing.kr 7번 Position 문제에는 (그림 1)과 같이 하나의 실행파일과 하나의 텍스트 파일이 존재한다. 먼저 ReadMe.txt 파일을 읽어보자. (그림 2)의 ReadMe.txt 파일의 내용이다. Serial이 76876-77776 일 때의 Name을 찾고, 문제에는 여러 개의 답이 존재하며, 패스워드는 p로 끝난다는 글이 적혀있다. Position.exe 파일을 실행해보자. Position.exe는 (그림 3)과 같이 Name과 Serial을 입력 받고, 입력한 문자가 옳지 않은 경우 'Wrong' 문자를 보여준다. 우리는 Serial이 76876-77776 일 때의 Name을 구해야한다. 이를 통해, Name과 Serial 간에 특정 알고리즘을 통해 문자를 생성한다는..
Reversing.kr 9번 문제(Ransomware) 문제 분석 Reversing.kr 9번 문제는 (그림 1)과 같이 세 개의 파일이 제공된다. 먼저, readme.txt 파일을 살펴보자. (그림 2)의 readme.txt 파일을 통해 파일을 복호화하라는 내용을 확인할 수 있다. 아직, readme.txt 파일만으로는 감이 오지 않는다. 실행파일 run.exe 파일을 실행해보자. run.exe 파일을 실행하면 (그림 3)과 같이 Key 값을 입력받은 후, Key를 통해 파일을 복구했다고 한다. 즉, 이 프로그램은 위 (그림 1)에서 'file'이라는 이름을 가진 파일을 run.exe 프로그램 알고리즘을 통해 복호화할 수 있다. 이 때, 옳은 Key 값이 아닌 경우 파일이 정상적으로 복호화되지 않는다. 우리가 해결해야하는 문제는 다음과 같다. 1. run...
UPX Manual Unpacking 프로그램 개발자는 프로그램의 크기를 줄이거나 혹은 데이터를 보호하기 위하여 프로그램을 실행 압축하는데 이를 패킹 (Packing)한다고 한다. 악성코드에서는 분석이 불가능하게 하기 위한 목적으로 패킹을 수행한다. 그리고 분석가들은 주로 이렇게 패킹된 프로그램을 분석하기 위하여 언패킹(UnPacking)을 수행하여야 한다. 패킹하는 방식은 여러 가지가 존재하며 대표적으로 UPX 방식의 패킹이 있다. UPX 방식으로 패킹된 프로그램을 언패킹 (Unpacking)할 수 있는 도구는 많이 공개되어 있다. 그러나, 이 글에서는 언패킹 프로그램이 사용하는 것이 아닌 디버거를 통해 손수 언패킹하는 과정을 기술할 것이다. 그 전에 OEP(Original Entry Point)에 대해서 알 필요가 있다. OEP는 프로그..
Reversing.kr 2번 문제(Easy Keygen) Easy Keygen 문제는 아래 그림과 같이 하나의 실행 파일(Easy Keygen.exe)와 텍스트 파일(ReadMe.txt) 파일이 존재한다. 언제나 처럼 ReadME.txt 파일을 살펴보자. 아래 그림의 ReadME.txt 파일의 내용은 다음과 같다. Serial이 5B134977135E7D13S 일 때, Name이 무엇인지를 찾으라는 것이다. 그렇다면 프로그램을 실행시켜 해당 문제를 이해해보자. Easy Keygen.exe 파일을 실행해보면 command 창이 실행된다. 그리고 Input Name과 Input Serial을 입력하여야 한다. 그러나, 각각 입력을 완료한 후 엔터를 수행하게 되면 Wrong 이라는 단어가 뜬다. 그럼 대충 알겠다.. Input Name에는 Input Serial 키..