분류 전체보기 26

Linux Study - 리눅스 쉘, 구조, 메모리 구조

1. 리눅스 쉘(SHELL) 리눅스는 커널(Kernel)과 쉘(Shell), 유틸리티(Utility), 응용 프로그램 (Application)으로 이루어져 있다. 쉘 은 컴퓨터의 메모리에 항상 떠있는 하나의 프로그램인 운영체제의 커널과 사용자 사이를 이어주는 역할을 한다. 사용자의 명령어를 해석해서 운영체제가 알아들을 수 있도록 해 준다. bash 쉘: 실행파일은 /bin/bash, 명령행 편집 기능을 제공한다. sh 쉘: 가장 오랫동안 모든 유닉스 시스템의 표준 구성 요소이며, 명령 프로그래밍 언어 기능을 가지고 있는 쉘이다. 2. 디렉토리 구조 /(루트): 최상위 디렉토리, 모든 디렉토리들이 루트 디렉토리에서부터 시작한다. /bin: 리눅스를 사용할 때 mv,rm,cp 등과 같은 명령어들이 저장 되어..

Study/Basic Study 2021.05.04

[2020 POX] mobile_pentest_binary Write-up

파일을 열면 다음과 같은 apk 파일이 나옵니다. 저는 안드로이드 핸드폰이 없어 apk파일을 실행할 수 없기 때문에 바로 jadx-gui 로 디컴파일을 진행하였습니다. classes.dex 파일을 열면 다음과 같은 코드들이 보입니다 중요한 파일은 com.example.mobilepentest의 MainActivity 입니다. Mainactivity의 medicine 함수를 보면 다음과 같은 코드가 보입니다. 여기에서 getResources 는 resource, res 폴더에 있는 값을 가져와줍니다. res → raw → flag.txt 라는 파일이 있고 내용은 다음과 같습니다. 그리고 다음의 코드는 input의 값에따라서 flag.txt 에있는 문자열을 하나씩 가져와줍니다. input 의 값은 다음과 같..

CTF 2021.04.09

[PyQt4] Example

IDA 플러그인 작성을 위해선 PyQt도 꼭 필요합니다. 저는 조사당시 Python 2.7을 사용하고 있어서 PyQt4를 기준으로 문서를 작성하였습니다. 1. 위젯 사용하기 from PyQt4.QtGui import * class MyDialog(QDialog): def __init__(self): QDialog.__init__(self) lblName = QLabel("Name") editName = QLineEdit() btnOk = QPushButton("OK") layout = QVBoxLayout() layout.addWidget(lblName) layout.addWidget(editName) layout.addWidget(btnOk) self.setLayout(layout) app = QApp..

Study/IDA 2021.03.28

IDA 간단한 팝업창 만들기

액션은 처음에 먼저 등록이 되어야 한다 한 번 등록한 액션은 계속 사용할 수 있다 등록된 액션은 메뉴, 툴바, 팝업창 등에 연결시킬 수 있다 액션은 핸들러를 가지고 있는 데 activate, update 의 두 가지 콜백 함수를 가진다. → Activate 는 액션이 실행될 때 호출되며, update 는 현재 액션이 사용 가능한지 아닌지를 알려 줄 수 있게 해 준다 1. 액션 만들기 idaapi.action_desc_t(고유이름, 설명, 핸들러, 단축키, 메뉴와툴바의툴팁, 아이콘) load_custom_icon() 으로 사용자 지정 아이콘을 등록할 수 있다. ACTION_TEST = "testplugin:actiontest" class PopupActionHandler(idaapi.action_handl..

Study/IDA 2021.03.22

IDA Python Plugin

1. 플러그인 로딩 IDA세션 시작은 IDA시작시 이뤄짐. 사용자 입력을 받기 전과 대기 상태에 들어가기 전에 신규 바이너리를 분석 하거나 또는 기존 DB를 분석. 그 동안 플러그인이 로딩 된다 2. 플러그인이 로딩되는 경우 DB로딩과 관계없이 IDA시작시에 로딩될 수 있다. PLUGIN.flags의 PLUGIN_FIX 비트의 설정여부에 달려있다 프로세서 모듈 실행 후 즉시 플러그인이 로딩된다. 프로세서 모듈이 언로드 될때까지 로딩된 상태로 남아있는다. PLUGIN.flags의 PLUGIN_PROC 비트에 달려있다 위에서 언급한 플래그 비트가 없다면 DB가 열릴때마다 플러그인 로딩환경을 만들어준다 3. 플러그인 로딩 과정 기본적으로 PLUGIN.init 함수로 플러그인을 로딩하는데 이 때 위의 3가지 상..

Study/IDA 2021.03.11

윈도우 바이러스 기초분석(Practiccal Malware Analysis) [LAB 06-03]

1. main 함수 호출과 실습 6-2의 main 함수와 비교하라. main 이 호출한 새로운 함수는 무엇인가? → 실습 6-2에서 없었던 sub_401130 함수가 생겼다. 2. 새로운 함수는 어떤 인자를 받는가? → sub_401040의 리턴값과 argv[0](실행파일명)을 받아온다. 3. 이 함수가 가지는 주요 코드 구조는 무엇인가? → a1의 값에 따른 switch 구문이다. 4. 이 함수는 무슨 일을 하는가? → 디렉토리 생성, 파일 복사, 파일 삭제, 레지스트리 탐색, sleep 등의 일을 한다. 5. 이 악성코드에서 호스트 기반의 행위가 존재하는가? → Software\Microsoft\Windows\CurrentVersion\Run, C:\Temp\cc.exe 등이 존재한다. 6. 이 악성..

윈도우 바이러스 기초분석(Practiccal Malware Analysis) [LAB 06-02]

1. main 함수가 호출하는 첫 번째 서브루틴은 무슨 오퍼레이션을 수행하는가? → 첫 번째 호출함수는 sub_401000 이다. → 401000함수는 인터넷 연결을 확인한다. 2. 0x40117f에 위치한 서브루틴은 무엇인가? → stbuf 와 ftbuf 가 있는 것으로 보아 printf 와 같이 문자를 출력하는 역할을 하는 것으로 보인다. 3. main 함수가 호출하는 두 번째 서브루틴은 무엇인가? → main 함수가 호출하는 두 번째 서브루틴은 sub_401040 이다. 4. 이 서브루틴에서 사용한 코드 구조는 어떤 유형인가? → 우선 http://www.practicalmalwareanalysis.com/cc.htm 에 인터넷 접속을 시도한다. → 그리고 읽어온 파일의 문자열을 하나씩 비교하는데,..

윈도우 바이러스 기초분석(Practiccal Malware Analysis) [LAB 06-01]

1. main 함수가 호출하는 첫 번째 서브루틴은 무슨 오퍼레이션을 수행하는가? → main 함수는 0x401000 함수를 호출하고 그 리턴값이 0인지, 아닌지에 따라서 eax 값을 바꿔준다. 2. 0x4015f에 위치해 있는 서브루틴은 무엇인가? → stbuf와 ftbuf를 사용하고 있다. 검색해 보니 printf에 사용되는 함수이다. 3. 이 프로그램의 목적은 무엇인가? → main 은 sub_401000의 리턴값이 0 인지, 아닌지를 검사한다. → sub_401000() 함수는 InternetGetConnectedState 함수를 사용하므로, 인터넷 연결을 확인함을 알 수 있다. 인터넷이 연결되어 있으면 sub_40105F를 호출하여 Success 를 출력하고, 인터넷이 연결되어 있지 않으면 Err..

윈도우 바이러스 기초분석(Practiccal Malware Analysis) [LAB 05-01] -2

9. 0x1000FF58에서 서브루틴으로 수백라인은 문자열을 비교하기 위한 일련의 memcp 비교다 robotwork 와 문자열 비교가 성공적으로 이뤄지면 무슨 일이 일어나는가? → robotwork와 문자열 비교가 성공하면, sub_100052A2 함수가 실행된다 → 다음 함수에서는 Robot_WorkTimes, Robot_WorkTime, SOFTWARE\Microsoft\Windows\CurrentVersion 의 레지스트리에 접근한다. 10. PLIST 익스포트는 무슨 역할을 하는가? → Expots View 의 PSLIST 의 주소는 0x 10007025이다 → 첫 번째 함수는 시스템 플랫폼과 운영체제 버전을 검사한다. → 조건문의 두 가지 함수 모두 프로세스 리스트를 받아온다. 결과적으로 PS..

윈도우 바이러스 기초분석(Practiccal Malware Analysis) [LAB 05-01] -1

IDA Pro 만을 이용해 파일 Lab05-01.dll내의 악성코드를 분석하라. 이 실습의 목적은 IDA Pro를 직접 다루는데 있다. 이미 IDA Pro를 사용해 본 적이 있으면 다음 문제를 무시하고 악성코드 리버싱에 초점을 맞춰도 좋다 1. DLLMain 의 주소는 무엇인가? → 0x1000D02E 이다. 2. Imports 윈도우를 이용해 gethostbyname을 탐색해보자. 임포트 위치는 어디인가? → 0x100163CC 이다. 3. Gethostbyname을 호출하는 함수는 몇 개인가? → Gethostbyname 에서 xrefs윈도우를 살펴보면 p 가 호출되는 부분이고, r 이 읽어오는 부분이므로 총 9번 호출되고 있음을 알 수 있다 4. 0x10001757에 위치한 gethostbyname..