목록Hacking & Security (134)
선릉역 1번 출구

처음 stack을 공부했을 때 stack이 메모리안에서 가지는 특성을 모르고 여기서 한참 헤맸었다. stack의 역할 1. 함수 내의 로컬 변수 임시 저장 2. 함수 호출 시 파라미터 전달 3. 복귀 주소 저장 stack의 가장 중요한 특징은 FILO 구조라는 것 exe가 메모리에 load되면 OS에 의해서 memory 영역이 할당되는데 이때 보면 stack은 맨 위에 위치한다. 그림이 좀 잘못되었는데 위에가 high이고 아래가 low이다. (아래 사진이 정확함) stack은 high address영역부터 아래로 데이터가 쌓이기 때문에 stack에 값을 PUSH하면 메모리가 낮아진다. 즉 높은 주소에서 낮은 주소 방향으로 스택이 자라남(거꾸로 자라난다고 생각하면 될듯?) =스택에 값을 입력하면 ESP는 ..
Byte ordering 컴퓨터에서 메모리에 데이터를 저장하는 방식 BIg Endian and Little Endian DWORD dw = 0x12345678일 때, 빅 엔디언은 [12][34][56][78]로 저장하고 리틀 엔디언은 [78][56][34][12]로 저장한다. 1byte씩 끊었을 때 빅 엔디언은 사람이 보는 방식과 동일하게 왼->오이고 리틀 엔디언은 역순으로 저장함 =1byte 자체는 정상적인 순서이고 2byte 이상부터 빅 엔디언은 정상, 리틀 엔디언은 역순 =문자열은 char의 1byte이기 때문에 문자열 자체는 정상적인 순서임 빅 엔디언의 경우 RISC계열의 CPU와 네트워크 프로토콜에 사용되고, 리틀 엔디언은 intel x86 cpu에 사용된다. 산술 연산과 데이터의 타입이 확장/..

#include "windows.h" #include "tchar.h" int _tmain(int argc, TCHAR* argv[]) { MessageBox(NULL, L"Hello World!", L"www.reversecore.com", MB_OK); return 0; } 이 코드를 visual studio에서 x86, release로 build를 해준다. 그럼 파일안에 Release라는 이름의 폴더가 생성되고 그 안의 HelloWorld.exe라는 응용 프로그램 파일이 하나 생성됨 백신이 깔려있다면 이를 악성파일로 보고 삭제하기 때문에 악성코드 분석을 진행할 때는 가상 머신에서 진행하든가 아님 백신을 잠시 꺼두자 그럼 이제 기계어를 어셈블리어로 변환해주는 디버거 유틸리티인 OllyDbg를 사용해 ..

reverse engineering 물건이나 기계장치 혹은 시스템 등의 구조, 기능, 동작 등을 분석해 그 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 작업 분석 방법 정적 분석: 말 그대로 실행 시키지 않고 파일의 겉모습만 보고 분석하는 것 (파일 종류, 크기, 헤더, Import/Export, 내부 문자열, 실행 압축 여부, 디스어셈블러를 이용해 내부 코드와 구조를 확인하는 것) 동적 분석: 파일을 직접 실행시켜 행위를 분석하고 디버깅을 통해 코드 흐름과 메모리 상태 등을 자세히 살펴보는 방법 source code, hex code, assembly code source code는 c언어 같은 고급레벨 언어를 의미함 hex code는 2진수 형식으로 이루어진 실행 파일을 16진수..
code 인젝션이란? 상대방 프로세스에 독립 실행 코드를 삽입한 후 실행하는 기법임 CreateRemoteThread() API를 이용해 원격 스레드 형태로 실행해 Thread injection이라고도 부름 인젝션 대상이 되는 target.exe process에 code와 data를 삽입함 code = 스레드 프로시져 형식, data = 스레드의 파라미터로 전달함 주의해야 할 내용 DLL 인젝션의 경우 DLL을 삽입하면 DLL 안에 코드와 데이터가 모두 존재하기 때문에 코드가 정상적으로 실행됨 그러나 Code 인젝션의 경우 필요한 코드를 인젝션하는 것이기 때문에 데이터도 같이 인젝션을 해주어야 함 그래야 코드의 실행이 정상적으로 가능해짐 -> 코드 인젝션이 DLL 인젝션보다 고려해야 할 사항이 많음 그럼..
보호되어 있는 글입니다.