Study 8

Linux Study - Gdb, 함수 프롤로그/에필로그

1. GDB 실행방법 gdb -q [파일이름] or gdb [파일이름] gdb를 실행해 준다. list [파일이름] 소스코드를 10줄 단위로 보여 줄 수 있다. r 프로그램을 실행해 준다. k 프로그램 실행을 종료한다. bt 역추적, 오류가 발생한 함수를 역으로 찾아간다. b [함수], [주소] 함수, 주소에 브레이크포인트를 설정해 준다. main + [숫자] 와 같은 연산도 가능다. cl [함수], [주소] 함수의 시작부분이나 숫자의 행에 있는 브레이크 포인트를 지워준다. si 다음 행으로 진행, 함수가 있을 시 내부로 들어간다. ni 다음 행으로 진행, 함수가 있을 시 내부로 들어가지 않고 건너뛴다. disas [함수], [주소] 함수 또는 주소를 어셈블리 언어로 보여준다. x/[표현식] [주소], ..

Study/Basic Study 2021.06.27

Linux Study - Compile, 파일 권한, Assembly

1. Compile이란? 우리가 짠 소스코드를 컴퓨터가 이해 할 수 있는 기계어로 바꾸는 과정, gcc -o [만들어줄 파일이름] [컴파일할 파일 이름]으로 컴파일 해줄 수 있다. 프로그래밍 언어->어셈블리어->기계어의 순서를 거친다 1.1 전처리(Pre-processor) 컴파일을 시도할 경우 먼저 전처리기의 과정을 거친다 해당 헤더파일의 디렉토리를 찾아서 삽입해 준다 #define 이 있을 경우 이를 치환해 준다. gcc -E -o [만들어줄 파일이름.i] [컴파일할 파일이름] 으로 해 줄 수 있다. 1.2 컴파일러(Compiler) 우리가 작성한 소스코드를 읽어서 연산자,괄호,식별자와 같은 문법 요소별로 잘라서 이 문법 요소들을 해석해서 구문 트리를 생성해 주고, 이 트리로부터 어셈블리어 코드를 만..

Study/Basic Study 2021.06.21

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

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

Study/Basic Study 2021.05.04

[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

IDAPython API 정리 2

1. 바이트 검색 idc.find_binary(주소, flag, 검색 바이트) : 해당 주소에서부터 조건에 따라 바이트를 검색해 준다 flag 목록 SEARCH_UP = 0 SEARCH_DOWN = 1 # 위 또는 아래 방향 SEARCH_NEXT = 2 # 다음 찾기 SEARCH_CASE = 4 # 대소문자 구별 여부 SEARCH_REGEX = 8 SEARCH_NOBRK = 16 SEARCH_NOSHOW = 32 SEARCH_UNICODE = 64 ** SEARCH_IDENT = 128 ** SEARCH_BRK = 256 ** **은 ida 옛날버전은 지원 X 2.문자열 찾기 idc.find_text(주소, flag, y, x, 검색 문자열) : flag 의 조건에 따라 주소에서 부터 문자열을 검색 해 ..

Study/IDA 2021.01.19

IDAPython API 정리

1. 주소 리턴 Idc.here(), idc.ScreenEA() : 현재 위치의 주소를 리턴해 준다 Idc.MinEA(), idc.MaxEA() : 최대, 최소 주소를 리턴해 준다 2. 세그먼트 값 리턴 Idc.SegName(주소), idc.SegStart(주소), idc.SegEnd(주소): 주소에 대한 세그먼트 이름,시작, 마지막 주소 리턴 3. 함수 정보 리턴 Idc.GetFunctionName(주소) : 입력 주소의 함수 이름을 리턴 Idautils.Functions(시작 주소, 마지막 주소) : 함수 목록을 리스트 형태로 리턴 Funcltems (주소) : 지정한 함수 주소에서 모든 주소를 리턴해 준다, 리턴 값이 iterator 이다 Names : 이름을 가지고 있는 주소를 리턴해 준다, 리턴..

Study/IDA 2021.01.12