study/보안 20

C언어로 다운로더 만들기

Downloader이란? 주요 API URLDownloadToFile: 인터넷에서 비트를 다운로드하여 파일에 저장한다. WinExec: 지정된 응용 프로그램을 실행한다. 동작 방식 실습 프로젝트 파일을 열면 다음과 같이 코드가 나온다 #include #pragma comment(lib, "urlmon.lib") int main() { LoadLibrary(L"urlmon.dll"); HRESULT hResult = URLDownloadToFile(0, L"http://app.pc.kakao.com/talk/win32/KakaoTalk_Setup.exe", L"c:\\Program Files\\a.exe", 0,0); WinExec("c:\\Program Files\\a.exe", SW_SHOW); ret..

study/보안 2024.02.04

수동 언패킹 실습

MsgBox_upx.exe 를 올리디버거로 실행해보자 맨 처음에 PUSHAD 라는게 보일텐데, 얘는 레지스터 A~D(EAX부터 EDI까지) 까지 다 스택에 push 하라는 거다 이걸 왜 하냐? 레지스터에 있는 값을 보관하기 위해 함. 왜 보관을 하냐? 패커는 종종 이렇게 레지스터의 값 임의로 저장을 해두고 나중에 다시 복원해서 씀! 그럼 PUSHAD 가 있으면 그 반대는 POPAD이다!! ctrl+S 로 popad를 찾아보면 다음과 같이 나옴 upx에는 popad가 하나가 아닐 수 있기 때문에 일단 F2를 눌러 bp를 설정하고 ctrl+L을 눌러 다음 popad를 찾는다 여기에도 마찬가지로 bp를 걸어준다 여기서 한번 더 ctrl+L을 눌러주면 밑에 Item Not Found 라고 오류메세지가 뜬다!! ..

study/보안 2024.02.02

UPX 언패킹 실습

MessageBoxW라는 함수 하나만 들어가 있고 실행하면 다음과 같은 화면이 나온다. 실행을 하면 Release에 이렇게 exe 실행파일이 생성된 걸 볼 수 있는데 여기서 upx 패킹/언패킹을 한번 해보자!! (지금 저 경로 안에 upx.exe가 이미 있음. upx가 다른 경로에 있을 경우 환경변수 설정이 필요함!!) 윈도우7 폴더에서 cmd창 바로 여는 꿀팁... 그냥 우클릭하면 안되고 shift+우클릭을 해야 "Open command window here" 이라고 뜬다!!! 난 맥북 써서 몰랐다..... 여기서 이제 upx를 쳐보면 이렇게 뜨는데 압축을 하고 싶으면 upx MsgBox.exe -o MsgBox_upx.exe 라고 하면 바로 압축되는걸 볼 수 있다! (아까 실습파일에 이미 있어서 지우..

study/보안 2024.01.31

IDA 단축키 모음

이름 재설정(n): 함수, 변수의 이름을 변경 숫자-문자 아스코드 변환(r): 아스키코드 테이블에 따라 숫자는 문자로, 문자는 숫자로 변환 함수/주소 이동(g): 입력한 함수, 주소로 이동 상호참조(x): 함수, 변수를 사용하는 곳을 찾기 브레이크 포인트(F2): 중단점 설정 Step Over(F8): 디버깅 시 인스트럭션 하나 실행. 함수 만날 시 함수 바로 실행 실행(F9): 바이너리 실행. 중단점 만나면 멈춤 Pseudocode(F5): 해당 함수의 디컴파일된 코드를 볼 수 있음 함수 및 변수 타입 변경(y): 해당 함수 및 변수의 타입 지정 가능. 함수의 경우 전달되는 매개 변수를 추가하거나 타입 변경 가능 문자열 조회(Shift + F12): 문자열 조회 가능

study/보안 2023.09.15

x64 어셈블리 언어 - 주요 명령어 정리 (1)

데이터 이동 mov dst, src : src에 들어있는 값을 dst에 대입 mov rdi, rsi rsi의 값을 rdi에 대입 mov QWORD PTR[rdi], rsi rsi의 값을 rdi가 가리키는 주소에 대입 mov QWORD PTR[rdi+8*rcx], rsi rsi의 값을 rdi+8*rcx가 가리키는 주소에 대입 lea dst, src : src의 유효 주소(Effective Address, EA)를 dst에 저장 lea rsi, [rbx+8*rcx] rbx+8*rcx 를 rsi에 대입 퀴즈! [Register] rbx = 0x401A40 ================================= [Memory] 0x401a40 | 0x0000000012345678 0x401a48 | 0x0..

study/보안 2023.09.08

윈도우 메모리 구조

섹션 윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성되어 있음 섹션: 유사한 용도로 사용되는 데이터가 모여있는 영역 .text: PE의 코드가 적혀있음 .data: PE가 실행중에 참조하는 데이터가 적혀있음 PE 헤더에 저장되는 섹션에 관한 데이터 섹션의 이름 섹션의 크기 섹션이 로드될 주소의 오프셋 섹션의 속성과 권한 .text 실행 가능한 기계 코드가 위치하는 영역 읽기/실행 권한 부여 (프로그램이 동작하려면 실행할 수 있어야함) 쓰기 권한은 제거함 -> 공격자가 악의적인 코드 삽입 가능 ex) 정수 31337을 반환하는 main 함수가 컴파일 되면 554889e5b8697a00005dc3라는 기계코드로 변환되는데, 이 코드가 세그먼트에 위치하게 됨 int main() { return 3..

study/보안 2023.09.07

정적분석 vs 동적분석

정적 분석 프로그램을 실행시키지 않고 분석하는 방법 [장점] 프로그램의 전체 구조를 파악하기 쉬움 구성된 함수, 함수간의 호출관계, 사용된 API, 포함된 문자열 등을 종합적으로 살펴볼 수 있음 분석 환경의 제약에서도 비교적 자유로움 안드로이드의 apk 파일을 소프트웨어 사용하지 않고도 분석 가능 바이러스와 악성 프로그램의 위협으로부터 안전함 바이러스를 동적 분석한다면 실행한 컴퓨터가 감염될 수 있음 정적 분석은 프로그램을 실행하지 않으므로 감염이 되지 않음 [단점] 난독화(Obfuscation)가 적용되면 분석이 매우 어려워짐 난독화가 적용되면 코드가 변형되어 실행흐름을 파악하기가 어려워짐 해제(Deobfuscation)하기 위한 여러 연구가 진행되고 있지만, 여전히 난독화 서비스들을 모두 무력하하는 ..

study/보안 2023.09.07

Computer Architecture 컴퓨터 구조

컴퓨터 구조와 명령어 집합 구조 컴퓨터 구조 컴퓨터가 효율적으로 작동할 수 있도록 HW 및 SW의 기능을 고안하고, 이들을 구성하는 방법을 말함 컴퓨터의 기능 구조에 대한 설계, 명령어 집합 구조, 마이크로 아키텍처, 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등 포함 ‘컴퓨터의 기능 구조에 대한 설계’ : 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고 설계하는 분야 폰노이만 구조, 하버드 구조, 수정된 하버드 구조 명령어 집합 구조 : CPU의 명령어에 대한 설계 → CPU가 처리해야하는 명령어를 설계하는 분야 ARM, MIPS, AVR, 인텔 X86 및 x86-64 마이크로 아키텍처 : CPU의 하드웨어적 설계 → 정의된 명령어 집합을 효율적으로 처리할 수 있도록, C..

study/보안 2023.09.07