반응형

전체 글 298

시스템 콜

응용프로그램을 위한 라이브러리라이브러리라이브러리는 응용프로그램이 활용할 수 있도록 미리 작성된 함수들의 집합으로, 컴파일되어 바이너리 형태로 제공개발자는 라이브러리를 활용하지 않고서는 응용프로그램을 작성하기 어렵.라이브러리의 종류표준 라이브러리:응용프로그램을 위해 구현된 함수를 제공운영체제(OS)나 하드웨어(HW)에 상관없이 이름 및 사용법이 동일시스템 콜 라이브러리:시스템 콜 함수를 제공시스템 콜 함수들은 시스템 콜을 통해 커널 모드로 전환하고 커널에 진입하여 함수를 실행OS마다 시스템 콜의 구현이 다름사용자 코드와 라이브러리 코드의 링킹실행 파일 생성 과정:컴파일 과정에서 사용자 코드와 라이브러리 코드가 링킹되어 하나의 실행 파일로 만들어짐이 과정에서 각 함수와 변수의 주소가 계산응용프로그램 실행:응..

프로그램 수행과 예외처리

지난시간에 컴퓨터 하드웨어와 구성 요소CPU는 메모리에서 명령어를 하나씩 가져와 해석하고 실행함.데이터와 코드는 메모리에 저장됨.자주 사용하는 데이터는 '로컬리티'라는 특성 때문에 캐시 메모리에 저장됨.메모리는 계층 구조를 가짐.프로세스의 코어에 가장 가까운 것은 레지스터.그 다음은 캐시 메모리, 그 아래는 메인 메모리, 그리고 마지막으로 HDD나 SSD 같은 저장 장치로 구성됨.위로 올라갈수록 크기는 작고, 속도는 빠르며, 가격은 비쌈.하드디스크에 가까워질수록 가격은 싸고, 용량은 크며, 접근 속도는 느림.데이터, 제어, 주소 신호가 오가는 통로를 버스라고 함.IO 장치 주소를 지정하는 방식은 두 가지로 나뉨:메모리 맵드 IO: 메모리 주소의 일부를 IO 주소로 사용.포트 맵드 IO: IO 전용 주소를..

8장. abex' crackme #2

이 파일 다운받아서 시작해보겠습니다..  시리얼 키 알아내는 프로그램이다.  암거나 눌러보았는데 wrong serial 메시지 박스가 출력된다.  Visual Basic 파일 특징위에 파일은 Visual Basic으로 제작됨 VB 전용 엔진VB 파일은 MSVBVM60.dll (Microsoft Visual Basic Virtual MAchine 6.0)이라는 VB 전용 엔진 사용N(Native) code, P(Pseudo) codeVB 파일은 컴파일 옵션에 따라 N code와 P code로 컴파일이 가능N code: IA-32 Instruction 사용P code: Interpreter 언어 개념으로서 VB 엔진으로 가상 머신을 구현하여 자체적으로 해석 가능한 명령어(바이트 코드)를 사용∴ P code를..

7장. 스택 프레임

목표- 스택 프레임의 동작 원리 이해- 간단한 프로그램을 만들고 디버거를 이용해서 스택 프레임 확인- 간단한 어셈블리 명령어의 상세 설명 스택 프레임EBP(베이스 포인터) 레지스터 이용해서 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법ESP 레지스터 값은 프로그램 안에서 수시로 변경됨 -> 파라미터 접근하려할 때 ESP 기준으로 하면 프로그램 만들기 힘듦 -> EBP 기주능로 하면 안전하게 함수의 변수, 파라미터, 복귀 주소에 접근 가능 스택 프레임의 구조PUSH EBP함수 시작(EBP를 사용하기 전에 기존의 값을 스택의 저장)MOV EBP, ESP현재의 ESP(스택포인터)를 EBP에 저장 ...함수 본체여기서 ESP가 변경되더라고 EBP가 변경되지 않으므로안전하게 로컬 변수와 파라미터를 ..

5장. 스택

스택로컬 변수 저장, 함수 파라미터 전달, 복귀 주소 저장 등의 다양한 용도로 사용 스택의 역할1. 함수 내의 로컬 변수 임시 저장2. 함수 호출 시 파라미터 전달3. 복귀 주소(return address) 저장-> FILO(후입선출) 구조인 스택이 유리함 스택의 특징- 스택 포인터(ESP)의 초기값은 Stack Bottom에 근접- PUSH 명령에 의해 Stack에 값 추가 시 ESP는 Stack Top 향해 움직이고 POP 하면 Stack Bottom쪽으로 움직임 (높은 주소에서 낮은 주소 방향으로)

4장. IA-32 Register 기본 설명

CPU 레지스터Register: CPU 내부에 존재하는 다목적 저장 공간 Basic program execution register- General Purpose Register(32bit)- Segment Registers(16bit)- Program Status and Control Register(32bit)- Instruction Pointer(32bit)  범용 레지스터IA-32에서 32비트의 크기를 가짐상수/ 주소 등을 저장할 때 사용특정 어셈블리 명령어에서는 특정 레지스터를 조작 EAXAccumulator for operands and results data 함수 리턴값에 사용EBSPointer to data in the DS segmentECXCounter for string and loo..

2장. Hello World! 리버싱

올리디버거 메인 화면 구성Code Windowdisassembly code 표시코드 분석하여 loop, jump 위치 등의 정보 표시Register WindowCPU register 값을 실시간으로 표시Dump Window프로세스에서 원하는 memory 주소 위치를 Hex, ASCII/ 유니코드 값으로 표시Stack WindowESP register가 가리키는 프로세스 stack memory를 실시간 표시   EP(Entry Point): 디버거가 멈춘 곳, windows 실행 파일의 코드 시작점. 프로그램이 실행될 때  CPU에 의해 가장 먼저 실행되는 코드 시작 위치Address프로세스의 가상 메모리 내의 주소InstructionIA32(or x86) CPU 명령어Disassembled codeOP ..

1장. 리버싱 스토리

리버스 엔지니어링 : 물건이나 기계장치 혹은 시스템 등의 구조, 기능, 동작 등을 분석하여 그 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 작업 리버스 코드 엔지니어링: 소프트웨어 분야의 리버스 엔지니어링 리버싱 분석 방법정적 분석파일의 겉모습을 관찰하여 분석하는 방법파일을 실행하지 않음동적 분석파일을 직접 실행시켜 행위를 분석파일, registry, network 관찰하면서 프로그램의 행위를 분석프로그램 구조, 동작 원리 예측디버깅은 리버싱의 하위개념 Source Code, Hex Code, Assembly CodeSource Code: 개발 도구에서 소스코드(helloworld.cpp)를 build하면 helloworld.exe 실행 파일이 생성됨Hex Code: 실행 파일은 B..

[SuNiNaTas(써니나타스)] Write up - 19번

18번이랑 비슷한 늒김..이번에는 바이너리로되어있는거같아서 바이너리를 아스키코드로 변환했다. https://www.rapidtables.org/ko/convert/number/binary-to-ascii.html  바이너리에서 텍스트로 변환기 | 바이너리 번역기바이너리-텍스트 번역기 접두사 / 접미사 / 구분 기호와 함께 이진수를 입력하고 변환 버튼을 누릅니다 (예 : 01000101 01111000 01100001 01101101 01110000 01101100 01100101) : 이진 변환기 텍스트 ► ASCII 텍스트www.rapidtables.org요 사이트이용했음  역시나 암호화된것처럼 보이는 문자열이 보임. 18번이랑 동일한가 해서 base64돌려보니 안나온다. 다시보니 뭔가 쉬프트 암호일거..

반응형