7월, 2019의 게시물 표시

Python time.ctime()

이미지
사용 버전 : Python 3.6.8 사용 프로그램 : Atom 1.34.0 x64 ​ 파이썬 time.ctime()에 대해서 알아보겠습니다. ​ time.ctime()은 시간을 str 타입으로 나타내줍니다. 표현되는 방식은 (요일, 월, 일, 시:분:초, 연도)입니다. 현재 위치를 반영하여, 한국의 표준 시간으로 나타내줍니다. ​ 괄호 안에 아무것도 넣지 않으면, 현재 시스템 시간을 알려줍니다. 그리고, 다른 기능으로는 괄호 안에 초를 입력할 수 있습니다. 그러면, 입력된 초를 위의 형식으로 만들어줍니다. 저는 초깃값이 1970년 1월 1일 목요일 09시로 잡혀있군요. 그래서 ctime(1)은 09시 1초, ctime(2)는 09시 2초로 나타내졌습니다. ​ 끝. 카테고리: Python, time

Python bytes.fromhex()

이미지
사용 버전: Python 3.6.8 사용 프로그램: Atom 1.38.2 x64 ​ 파이썬 bytes.fromhex()에 대해서 알아보겠습니다. 괄호 안에는 bytes 형식으로 바꿀 hex 숫자가 들어갑니다. ​ bytes.fromhex()은 hex 숫자에 '\x'를 붙여 bytes 형식으로 변형합니다. 끝. 카테고리: Standard Library, Python

Python bytes()

이미지
사용 버전: Python 3.6.8 사용 프로그램: Atom 1.38.2 x64 ​ 파이썬 bytes()에 대해서 알아보겠습니다. 괄호 안에는 '숫자' 또는 'range()' 또는 '바이트 타입'이 들어갑니다. ​ 주의할 점은, 표현할 수 있는 범위가 0부터 255까지입니다. ​ bytes()는 bytes 글자를 만들 때 사용합니다. bytes 타입을 만드는 법은 다양합니다. bytes() 안에 숫자가 들어가면, 해당 bytes 만큼 0으로 값이 채워집니다. bytes() 안에 range가 들어가면, range의 연속된 숫자를 bytes로 변환할 수 있습니다. 그리고, 인덱스를 사용하면, 해당 바이트의 10 진수 정수를 알 수 있습니다. 끝. 카테고리: Standard Library, Python

Python bytes.hex()

이미지
사용 버전: Python 3.6.8 사용 프로그램: Atom 1.38.2 x64 ​ 파이썬 bytes.hex()에 대해서 알아보겠습니다. 괄호 안에는 아무것도 들어가지 않습니다. ​ bytes.hex()는 바이트 형식을 16 진수 hex 형식으로 변경해줍니다. '\x'가 붙지 않은 일반 글자의 바이트 형식의 경우, 16 진수 ASCII 값으로 반환합니다. 끝. 카테고리: Standard Library, Python

Python range()

이미지
사용 버전: Python 3.6.8 사용 프로그램: Atom 1.38.2 x64 ​ 파이썬 range()에 대해서 알아보겠습니다. 괄호 안에는 '시작 번호', '끝 번호', '간격'이 들어갑니다. ​ range()는 순차적인 숫자를 만들 때 사용합니다. 특히, for 문에 많이 사용됩니다. ​ ​ ​ 괄호 안에 인자 하나만 적으면, 0 ~ '숫자 -1'까지의 숫자를 생성합니다. 0 ~ '5 - 1'까지의 숫자가 만들어진 것을 확인할 수 있습니다. 즉, 입력한 숫자는 포함이 안 됩니다. ​ ​ 인자 두 개를 적으면, 시작 번호와 끝 번호를 정할 수 있습니다. '시작 번호' ~ '끝 번호 - 1' 2 ~ '5 - 1'까지의 숫자가 만들어진 것을 볼 수 있습니다. 즉, 끝 번호 숫자는 포함되지 않습니다. ​ ​ ​ 인자 세 개를 넣으면, 시작 번호, 끝 번호, 간격을 정할 수 있습니다. 여기서부터는 간격에 음수를 넣어, 작아지는 숫자 배열도 가능합니다. '시작 번호 + 간격 * 0', '시작 번호 + 간격 * 1', '시작 번호 + 간격 * 2', ... 작아지는 경우는 시작이 더 크게 적어줍니다. range() 내용을 보고 싶다면, list 형식으로 만들어줍니다. 리스트처럼 인덱스로 내부 숫자를 볼 수 있습니다. 마지막 번호는 포함되지 않는다는 사실 기억해주세요. ​ 끝. 카테고리: Standard Library, Python

Python music21.stream.Stream().index()

이미지
사용 버전: Python 3.6.8 사용 프로그램: Atom 1.38.2 x64 ​ 파이썬 music21.stream.Stream().index()에 대해서 알아보겠습니다. 괄호 안에는 note 오브젝트가 들어갑니다. ​ music21.stream.Stream().index()는 Stream 오브젝트에 들어있는 Note 오브젝트 위치를 알려줍니다. 찾는 Note 오브젝트가 없다면, 에러가 발생합니다. 끝. 카테고리: Python, music21

PE(Portable Executable) 파일

이미지
PE 파일에 대해서 알아보겠습니다. ​ PE 파일은 윈도우 운영체제에서 실행 가능한 파일을 말합니다. '.acm', '.ax', '.cpl', '.dll', '.drv', '.efi', '.exe', '.mui', '.ocx', '.scr', '.sys', '.tsp' 등이 있습니다. ​ ​ 파일 내부를 보게 되면, 대부분 'MZ'와 'This program cannot be run in DOS mode'라는 글자가 나타납니다. 그리고 아래에 'PE'라는 글자가 있습니다. Section은 9 가지가 있습니다. .text, .bss, .rdata, .data, .rsrc, .edata, .idata, .pdata, .debug Executable Code Section: .text Data Section: .data, .rdata, .bss Export Data Section: .edata Import Data Section: .idata Debug Information Section: .debug 그리고 실행 시, 물리 주소에서 빈 공간을 뽑아 가상주소를 만듭니다. 이때, VA와 RVA로 나뉩니다. VA는 가상 주소의 절대값이고, RVA는 가상 주소의 상대값입니다. ​ OS는 Page Table을 만들어, 물리 주소와 가상 주소를 관리합니다. Page Table을 만들면, 각 섹션이 독립적일 수 있고, 섹션이 깨끗한 Page에서 시작할 수 있습니다. 그리고, 섹션이 작동하지 않을 때에는 HDD에 임시 저장을 할 수 있어, RAM의 한계를 늘려줍니다. File Offset 구하는 법은 다음과 같습니다. File Offset = RVA - VirtualAddress + PointerToRawData입니다. 시작 주소가

DLL(Dynamic Linked Library)

DLL(Dynamic Linked Library)에 대해서 알아보겠습니다.​ DLL은 코드에 함수를 집어넣는 것이 아닌, '.dll' 확장자로 함수를 저장하여 프로그램에서 불러오도록 만든 파일 형식입니다. ​ DLL에는 내부용 함수(Internal function)와 외부용 함수(exported function)가 있습니다. 내부용 함수는 DLL 내부에서만 사용하는 함수입니다. 외부용 함수는 DLL 외부에서 호출이 가능한 함수입니다. ​ 보통 GetProcAddress API로 함수 주소를 알아냅니다. ​ 사용이 끝나면 메모리에서 해제되는 Explicit Linking 방법과 프로그램이 종료될 때 메모리에서 해제되는 Implicit Linking 방법이 있습니다. 끝. ​ 카테고리: Reversing

Windows 시작 메뉴 애니메이션 끄기

이미지
사용 버전: Windows 10 Home x64 ​ 윈도우 시작 메뉴 애니메이션 끄기에 대해서 알아보겠습니다. ​ 설정 - 접근성에 들어갑니다. 밑으로 조금 내리면, Windows 단순화 및 개인화가 있습니다. 애니메이션을 꺼줍니다. ​ 그러면, 시작 메뉴를 누를 때, 애니메이션 없이 바로 나옵니다. ​ ​ 끝. 카테고리: Windows

리버싱 Lenas Reversing for Newbies 10

이미지
사용 버전; x32dbg Mar 10 2019 ​ 10번 문제를 풀어보겠습니다. 문제는 여기서 다운로드할 수 있습니다. https://tuts4you.com/download/category/17// 'Tut.RevereseMe1.exe'를 실행해 봅시다. 참고로 실행을 위해선 msvbvm50.dll 파일이 필요합니다. 구글에서 다운로드하시면 될 거예요. Nag Screen이 나옵니다. '잔소리를 없애고, 올바른 등록키를 찾아라'가 리버싱 목표인가 봅니다. '확인'을 누릅니다. 해당 창이 나옵니다. 'Register me!'를 누르면, 아래의 창이 나옵니다. 'Nag?'를 누르면, Nag Screen이 나옵니다. 자, 리버싱을 시작해봅시다. '모든 모듈' - '모듈간 호출'을 눌러줍니다. ​ ​ ​ 필터에 'box'를 적어서, MessageBox 관련 함수를 모두 찾습니다. 'F2'로 Break Point를 설정합니다. Entry Point를 찾습니다. Entry Point의 위의 구조는 VB 언어로 만들어진 프로그램입니다. 'F9'를 눌러 프로그램을 실행합니다. '740AEE13' 주소에서 Break Point가 걸립니다. 'F8'로 실행하면, 메시지 박스가 나옵니다. 잘 찾은 것 같습니다. '740AEE13' 주소의 'CALL DWORD PTR [<&MessageBoxIndirectA>]가 끝난 다음에 EAX가 1로 설정된 것이 보입니다.