본문 바로가기

[CSAW 2013 CTF] DotNetRevering.exe 문제를 보면 알 수 있지만 .NET 프로그램을 리버싱해야 하는 것 같다. 파일을 실행하니 사용자로부터 입력을 받는다. 임의의 수를 넣었더니 에러가 뜬다.. .NET 기반의 프로그램은 .NET 용 디컴파일러를 이용해 분석할 수 있다. .NET Reflector 라는 프로그램으로 디컴파일되어 소스코드를 확인할 수 있다. 정확한 num 값을 넣는다면 복호화 작업을 거친 후 플래그를 출력하는 것 같다. 위 소스코드에서 중요한 부분은 num, num2, num3 변수와 if((num^num2)==num3) 소스 코드이다. xor 연산의 특징으로 2개의 값을 알고 있다면 나머지 1개의 값도 알 수 있다. 따라서 num2^num3 하면 num을 구할 수 있다. num2^num3 값을 10진수로 입력하면 다음과 같이 .. 더보기
프롤로그(prolog), 에필로그(epilog) 프롤로그와 에필로그는 함수 호출 시 과정으로,​ ​ 프롤로그는 일반적으로 스택의 프레임(Stack Frame)을 생성하기 위한 과정이다. 다음 어셈블리어로 스택 프레임을 구성한다. push ebp mov ebp, esp 에필로그는 스택의 프레임(Stack Frame)을 해제하기 위한 과정이다. 즉, 함수 호출이 끝난 후 처음 호출한 지점으로 돌아가기 위해 스택을 복원한다. 다음 어셈블리어로 스택을 복원한다. mov esp, ebp pop ebp 더보기
BOF protection techniques BOF protection techniques Canary(Stack Cookie, Security Cookie, /GS) : 컴파일러가 Buffer 와 RET 사이에 Cookie(RET 변조를 막기 위한 메모리 공간)을 추가하거나 위치시켜 종료 시점에 원본 데이터와 체크하여 Overflow를 감지하고 방어한다. NX-bit(Not Excutable, DEP(Data Execution prevention)) : NX-bit는 이름 그대로 메모리 영역에 읽기, 쓰기, 실행 권한을 필요한 만큼 부여하여 공격자가 stack, heap, data section에서 shellcode 같은 공격코드를 실행하는 것을 금지한다. ASCII Armor : 공유 라이브러리들의 기본주소를 mmap() 함수를 사용하여 함수의.. 더보기