study 55

수동 언패킹 실습

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

XOR 연산 정리

공부하면서... 내가 헷갈렸던 부분 정리! 1. 왜 xor 연산을 하려면 바이트형식으로 바꿔서 해야하는걸까? -> 주된 이유는 xor 연산이 비트 단위 연산이기 때문에!! 파이썬에서는 정수형끼리는 xor 연산 가능!! (자동적으로 2진수로 바꿔서 실행됨) ex) print(2^4) # 결과: 6 그러면 16진수는 어떨까? ex) hex_A = 0x1A hex_B = 0x3F byte_A = int.to_bytes(hex_A, length=1, byteorder='big') byte_B = int.to_bytes(hex_B, length=1, byteorder='big') result = bytes(x ^ y for x, y in zip(byte_A, byte_B)) result_hex = int.from..

study/수학&암호 2024.01.03

[논문] 윈도우 환경에서의 메모리 해킹 방지 시스템 연구

기본 정보 논문 저자: 김요식 , 윤영태, 박상서 게재처: 정보보증논문지 연도: 2005 요약: 역공학(Reverse Engineering) 기술이 진보함에 따라 컴퓨터 소프트웨어에 대한 불법 조작 및 변조 등의 위협이 증가하고 있으며, 인터넷에 공개된 단순한 도구를 이용하여 누구나 쉽게 크래킹(Cracking)을 할 수 있게 되었다. 자사의 소프트웨어를 위협으로부터 방어하고자 하는 제작사들의 노력과 이를 무력화시키고자 하는 소위 크래커들의 노력은 지금까지도 계속되고 있다. 이에 본 논문에서는 소프트웨어가 가지는 위협 모델과 크래킹 기술에 대해 분석 및 실험하고, 소프트웨어를 위협으로부터 보호하기 위한 윈도우 환경에서의 메모리 해킹 방지 시스템을 제안한다. 주제: Malware, reverse engin..

study/논문 2023.11.20

[논문] 단편화된 실행파일을 위한 데이터 구조 역공학 기법

기본 정보 저자: 이종협 연도: 2012 게재처: 정보보호학회논문지 요약: 실행파일에 대한 정적인 분석을 통한 역공학 과정은 소프트웨어 보안에서 필수적인 단계이다. 역공학은 크게 소프트웨어가 사용하는 데이터 구조와 제어 구조에 대하여 수행된다. 특히 데이터 역공학은 소프트웨어를 이해하기 위해 필수적이지만 기존의 VSA기법은 단편화된 실행파일에 대한 한계를 가지고 있다. 본 논문에서는 동적인 영역할당을 통해 이러한 문제점을 해결하고 데이터 구조 역공학의 성능을 향상시킨다. I. 서론 및 배경지식 단편화된 실행파일이란? Fragmentation binary code → 함수가 여러개로 쪼개진 형태를 가지고 있는 파일 역공학(reverse engineering)이란? 실행파일만을 가지고 주어진 실행 파일이 어..

study/논문 2023.10.01

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