Try Attack/Reverse Engineering[basic]25

[csaw CTF 2015] wyvern 1. 문제 풀이 (1) 실행결과 [1] 용의 비밀을 입력하라는 메세지가 나온다. [2] 'test'를 입력 후 Enter를 누른 결과이다. [3] 용의 힘과 스피드와 지능이 더 크기 때문에 실패했다는 내용이 담겨있다. (2) 시작부분 정적분석 [1] IDA에 올려보면 처음 보이는 화면이다. [2] 함수의 프롤로그 이후 빨간 네모를 보면 프로그램을 실행했을 때 출력되는 문구와 call하는 부분이 있다. [3] call하는 부분은 난독화 되어 알 수는 없지만 느낌상 출력하는 함수를 호출하는 느낌이 든다. [4] 이 프로그램은 C++로 작성되었으며 난독화가 되어있다. (3) rename [1] call하는 난독화된 함수명을 클릭한 후 n을 누르면 이름을 변경할 수 있다. [2] C++의 대표적인 출력함수인 c.. 2019. 4. 8.
BreakPoint 1. 브레이크포인트▶ 브레이크포인트에는 하드웨어 브레이크포인트와 소프트웨어 브레이크포인트가 있다. 1) 소프트웨어 브레이크포인트 [1] 정의 ▶ 실행동작에 브레이크포인트를 설정하는 것을 말한다. ▶ 기계어 'CC'로 표현하며 명령어는 'int 3'으로 표현한다. ▶ 브레이크포인트를 설정한 명령어의 앞 1바이트가 'CC'로 대체된다. ▶ 순차적으로 실행하다가 명령어 앞의 바이트가 'CC'로 되어있으면 인터럽트를 발생시킨다. ▶ 이 때 운영체제는 실행에 대한 제어권을 인터럽트 핸들러에 넘긴다. ▶ 인터럽트 핸들러는 인터럽트를 설정할 때 같이 등록한 인터럽트 서브루틴을 호출한다. ▶ 보통 올리디버거나 이뮤니티디버거에서는 F2로 브레이크포인트를 설정할 수 있다. ▶ 우리가 흔히 알고 사용하는 브레이크포인트가 소.. 2018. 12. 28.
Packing/Unpacking 1. packer ▶ packing하는 프로그램을 말한다. ▶ packing은 압축된 상태에서는 실행이 안되고 메모리에 압축을 풀어서 사용하는 것을 말한다. 1) Compressor [1] 정의 ▶ 실행파일의 용량을 줄이기 위해 압축한다. [2] 사용이유 ▶ 파일 용량을 줄이는데 목적이 있다. ▶ 그러나 프로그램 실행속도가 느려진다. [3] 종류 ▶ Petite, ASPack, MEW, FSG, UPX 등이 있다. 2) Protector [1] 정의 ▶ 실행파일을 암호화하여 분석을 어렵게 하고 실행할 때 복호화하여 메모리에 적재된다. [2] 사용이유 ▶ 내부로직을 보호하는데 목적이 있다. ▶ 파일이 커질 수 있고, 실행속도가 느려진다. [3] 종류 ▶ Themeda, Yoda,ASProtect, arma.. 2018. 12. 19.
Code Caving 1. Code Caving ▶ 위 그림의 왼쪽을 보면 instruction1, instruction2, instruction3, instruction4 가 있다. ▶ instruction3 대신 다른 코드를 삽입하려고 한다. ▶ 그러나 코드의 사이즈가 더욱 커서 instruction3의 사이즈에 들어가지 않는다. ▶ 만약 어거지로 끼워 넣는다면 아래 instruction4가 없어지거나 다른 코드가 밀릴 수 있다. ▶ ------------------------------------------------------------------------------------------------- ▶ 그래서 위 그림의 오른쪽을 확인한다. ▶ instruction3부분이 jump code1로 변경되어 있다. ▶ c.. 2018. 12. 18.
[crackme5] abex' 5th crackme 풀이 및 복원 1. [abex' 5th crackme] 풀이시연 1) 실행파일 실행 [1] 파일 열기 ▶ 프로그램을 실행시키자 Serial 값을 입력하고 Check를 클릭할 수 있도록 만들어져 있다. ▶ Check를 클릭하자 입력한 시리얼 값이 올바르지 않다는 메세지를 출력하고 종료한다. 2) 개발언어 및 링커 확인 [1] Pascal계열의 Delphi로 작성됨을 알 수 있다. [2] 32비트 실행파일임을 알 수 있다. [3] Terbo 링커를 사용하여 링킹한 것을 알 수 있다. [4] 헤더타입이 PE라고 적힌 것이 확인되어 Windows용 실행파일임을 알 수 있다. [5] ImageBase(기준주소)가 0x400000임을 알 수 있다 [6] EntryPoint(시작주소)가 기준주소로부터 0x1000 만큼 떨어진 곳임.. 2018. 11. 16.
[crackme3] abex' 3rd crackme 풀이 및 복원 1. [abex' 3rd crackme] 풀이시연 1) 실행파일 실행 [1] 파일 열기 ▶ 첫 번째 메세지박스는 키파일을 체크 후 확인을 클릭하라고 한다. ▶ 두 번째 메세지박스는 파일을 찾을 수 없다고 한다. 2) 개발언어 및 링커 확인 [1] Pascal계열의 Delphi로 작성됨을 알 수 있다. [2] 32비트 실행파일임을 알 수 있다. [3] Terbo 링커를 사용하여 링킹한 것을 알 수 있다. [4] 헤더타입이 PE라고 적힌 것이 확인되어 Windows용 실행파일임을 알 수 있다. [5] ImageBase(기준주소)가 0x400000임을 알 수 있다 [6] EntryPoint(시작주소)가 기준주소로부터 0x1000 만큼 떨어진 곳임을 알 수 있다. [7] 기타 시그니쳐 및 옵션 세부사항은 직접 .. 2018. 11. 8.
[crackme2] abex' 2nd crackme 풀이 및 복원 ※ 단순한 값만 확인하지 않고 Serial Key Algorithm을 찾는데 목적을 두었습니다. 1. [abex' 2nd crackme] 풀이시연 1) 실행파일 실행 [1] 파일 열기 ▶ 아무 것도 입력하지 않고 Check를 누르면 4글자 이상의 이름을 입력하라는 메세지가 출력된다. [2] 이름 및 시리얼번호 입력 ▶ 이름과 시리얼번호를 입력해주고 체크를 눌러본다. [3] Check 버튼 후 결과 확인 ▶ 시리얼번호가 잘못됬다는 메세지를 확인한다. 2) 개발언어 및 링커 확인 [1] Visual Basic 언어로 작성됨을 알 수 있다. [2] 32비트 실행파일임을 알 수 있다. [3] Microsoft 링커를 사용하여 링킹한 것을 알 수 있다. [4] 헤더타입이 PE라고 적힌 것이 확인되어 Windows.. 2018. 11. 7.
[crackme1] abex' 1th crackme 풀이 및 복원 ※ crack보다 배우는데 목적이 있기 때문에 여러가지 방법으로 시도해 보았다. 1. 리버싱 과정(순서)1) 실행파일 실행 [1] 실행파일을 실행해서 뭐하는 프로그램인지 확인해본다. 2) 개발언어 및 링커 확인 [1] 어떤언어로 개발된 프로그램인지 확인한다. ▶ 언어에 따라 어떤 API를 사용했는지 확인이 가능하다. [2] 어떤 컴파일러를 사용하였는지 확인한다. ▶ 컴파일러에 따라 기계어로 변환하는 방법이 다르기 때문에 컴파일러의 스타일을 확인할 수 있다. 3) 상상 [1] 개발된 언어를 알고 있다면 어떠한 로직으로 구성되었는지 유추해본다. [2] 만약 C++로 제작되었지만 모른다면 의사코드를 이용해 짐작해본다. 4) 디버거 툴을 사용한 분석 [1] 전체분석 ▶ 전체분석의 경우 전체적인 로직을 분석하여 .. 2018. 11. 7.
악성코드와 리버싱 1. 컴파일 시 주소변경 - 컴파일시 이미지베이스가 변경되도록 하는 방어기법이 있다. 2. 컴파일러 - 어셈블리어로 코딩할 경우에는 스택에 하나씩 push, pop 한다. - 그러나 실행파일을 디스어셈블 해보면 스택포인터를 한 번에 잡아놓고 빈 공간에 하나씩 넣는다. - 즉, 변수를 하나씩 push하지 않는다. 3. Calling convention(콜링컨벤션) - 함수호출규약이라고 부른다. - 인자넘기는 방법을 말한다. - 넘기는 순서는 오른쪽에서 왼쪽순서이다. 4. 악성코드와 리버싱 - 악성코드는 로직을 분석하고 리버싱은 흐름을 분석한다. - 흐름을 분석하지 못하도록 하는 것을 안티리버싱이라 한다. 1) 안티리버싱 [1] 이미지, 베이스주소가 변경되도록 한다. [2] 해커가 실행파일을 변조하기 때문에.. 2018. 10. 9.
전략 1. 휴리스틱 - 과학적이지는 않지만 경험에 근거한 패턴, 정형화 되기는 어렵지만 AI에서 주로 사용한다. 2. 순서 - UI가 있는 프로그램은 순서대로 흐르지 않는다. 3. 인스트럭션 - 어셈블러는 인스트럭션으로 분해되기 때문에 C언어 코드의 5배 이상 나온다. 4. 길이 - 코드의 길이가 길어서 순차적으로 진행이 불가능하다. 1) 휴리스틱이용 [1] 프로그램에서 출력되는 문자열 검색을 통해 핵심 코드부분을 접근하는 공략이다. - data 영역에 출력될 값이 있을 것이고, - code 영역에 명령어가 들어있을 것이고, - 즉, code영역에 적혀있는 출력하려는 주소를 따라가면 data영역의 출력될 값이 있을 것이다. 2) 특정 API가 호출된 부분을 찾아가는 방법이다. [1] API 확인 - 예를 들어.. 2018. 9. 16.
올리디버거 1. 단축키 1) F7 = Step Into 2) F8 = Step Over 3) F2 = Break Point 4) F9 = Break Point로 이동 5) Ctrl + F2 = 초기화 후 다시보기(처음 로더한 상태) 6) - = 이전 확인 7) + = 이후 확인 2. 디스플레이 1) Code 화면 [1] 디스어셈블 된 코드를 보여주고 주석과 라벨을 확인할 수 있다. - 반복문과 점프문 위치를 확인이 가능하다. 2) Register 화면 [1] 레지스터 값을 실시간으로 보여주고 값을 수정할 수 있다. 3) Memory Dump 화면 [1] 원하는 메모리 주소의 위치를 16진수 및 ASCII/Unicode로 확인이 가능하며 수정할 수 있다. 4) Stack 화면 [1] 스택메모리를 실시간으로 확인하고 .. 2018. 9. 16.
리버싱에 필요한 도구 1. PEView1) PE구조를 확인할 수 있다. 2. Detect It Easy1) 실행파일의 정보를 확인할 수 있도록 도와준다.2) 기준주소 및 시작주소, 제작언어 및 링커, import내용 등을 확인할 수 있다. 3. OllyDumpEx1) OllyDbg에서 메모리 덤프를 가능하게 해주는 Plug-in이다. 4. Lord PE1) 손상된 IAT를 복구해주는 도구이다. [1] 손상된 IAT을 복구하려면 PE헤더 정보를 분석해서 사용하는 DLL과 함수정보를 일일이 맞춰야한다. 2018. 9. 9.