벨로그를 시작합니다.보안을 공부하며 가장 나를 힘들게 한 과목은 리버싱이었다.리버싱 전공을 두번이나 수강했음에도 여전히 어려웠다. 어떻게 하면 리버싱의 난이도를 극복할 수있을까. 스터디를 진행하며 기록으로 남기면 된다. 누군가가 읽었을 때 알아볼 수 있는 기록을 남기기
결국 리버싱에서 제일 원하는 것은 main함수를 찾는 것이다. 가장 간단한 Hello World를 출력하는 바이너리를 생각해보자.여기서 사용할 툴은 ollydbg라는 강력한 무료 툴이다. 이 툴을 이용해서 hello world.exe를 분석해보면 내가 작성한 소스코드에
자자 스택프레임을 할 차례이다. 내가 적을게 많다.스택은 abstract한 데이터 구조이다. 우리가 코드를 적고 함수를 만들면 그 함수들이 사용하는 데이터들의 일부는 스택이란 영역에서 저장된다고 볼 수 있다. 메모리가 정적으로 할당되는 경우 스택이 사용되고, 동적으로
crackme2.exe 다운로드해당 링크에서 crackme2.exe 파일을 다운받아서 진행하는 실습이다. 실행하면 다음과 같은 메시지박스가 나타난다.
함수를 호출할 때 전달되는 파라미터는 함수 호출이 종료되고 나면 스택에서 정리되어야 한다.calling convention이라 불리는 함수 호출 규약은 인자를 전달하고 스택에서 정리하는 방식에 따라 구별한 것이다.C 언어에 기본으로 적용된다.명시적으로는 \_\_cdec
윈도우에서 리버싱을 하다보면 Process Explorer라는 도구를 들어보게 된다. 프로세스의 상태를 관측하는데 아주 도움 되는 도구인데 대체 어떤 부문에서 장점이 있는지 살펴보고 가겠다.Parent/Child 프로세스 트리 구조 파악 가능프로세스 실행과 종료를 각각
PE File Format PE란? 명령(OP Code)에 따라서 지시된 작업을 수행하는 파일을 Executable File, 실행파일이라고 한다. 이런 실행파일은 디스크 상에 저장되어 있다가 실행 시 메모리에 적재되어 실행된다. 실행 파일의 포맷 종류는 사용되는 운
데이터 압축 데이터 압축은 파일의 크기를 줄일 때 이용한다. 비손실(Lossless) 압축 한번 압축된 파일을 완전히 원래대로 복원 가능 우리가 흔히 아는 알집, 반디집을 사용하는 경우가 바로 비손실 압축이다. 이런 비손실 압축 알고리즘은 Run-Length, Lem
PE파일이 실제 저장장치에서 프로세스 가상 메모리로 로드되면 PE헤더에 적힌 ImageBase를 읽고 메모리에 그 주소에 로딩된다. 하지만 생각해보면 같은 exe 파일이면 기본적으로 같은 ImageBase를 가진다. DLL이나 SYS파일도 같은 ImageBase를 가진
지난번 포스트에서 재배치를 배웠다. 생각해보면 PE 파일에서 Base Relocation Table 항목에서 .reloc 섹션을 날렵려도 실행이 될 것이다. exe 파일을 제일 먼저 실행시키기 때문에.(DLL이나 sys 형식 파일은 base relocation tabl
Ultimate PE Packer의 줄임말로 실행 압축기이다. 굉장히 독특하게 PE 헤더를 변형시켜버려서 pe view 같은 기존의 분석기들이 제대로 파일을 열어보거나 분석할 수 없었다.<리버싱 핵심원리>의 교재 순서대로 설명을 진해하기보단 좀 더 쉬운 순서라고
코드를 수정하고 싶은데 직접 접근해서 수정하기 어려울 때 사용하는 우회 방법이다. Code Cave라는 패치 코드를 파일에 삽입하고 패치코드를 실행시키게 만드는 방법이다.타깃 프로그램이 암호화되어있거나 실행압축되어있는 경우에 사용한다.만약 내가 수정하고 싶은 코드가 O
메시지 훅 Windows 운영체제에서는 키보드나 마우스 같은 입력장치로 메뉴 선택, 버튼 선택, 마우스 이동, 스크롤 등등은 모두 event로 칭한다. 이벤트가 발생하면 OS는 미리 정의된 메시지를 해당 응용프로그램으로 보낸다. 그럼 응용프로그램은 그 메시지를 분석하
공공장소나 회사 등에서 있는 PC에서 자신의 개인정보를 입력해야 할 때 혹여 입력 정보가 유출되는 악성 키로거에 당할까봐 염려된다면 간단한 팁이 있다.만약 비밀번호가 123345678이라면 비밀번호를 입력할 때, "56781234"로 입력한다.그 후 '5678'만 떼어
dll 인젝션은 내가 원하는 타깃 프로세스에 특정한 DLL 파일을 강제로 삽입해서 실행시키는 것이다.기술적으로 설명하면 이런 말이다.타깃 프로세스가 LoadLibrary( ) API를 스스로 호출하도록 명령한다. dll 인젝션의 경우, 삽입된 dll은 타깃 프로세스의
소프트웨어에 원하는 DLL을 로딩하는 방법으로 전에 dll 인젝션을 배웠다. 하지만 이렇게 인젝션 말고 그냥 직접 pe를 수정해서 dll을 끼워넣어도 된다. 이지하다. 원리 설명하기 전에 실습을 설명한다. 뜯어고칠 실행파일은 Textview.exe라는 것으로 그냥
솔직히 이번게 ㄹㅇ 젤 이해 안됨. 포인터가 많아서. Code Injection 상대방 프로세스에 독립된 실행 코드를 삽입시키고 그걸 싱행시키는 것이라고 한다. CreateRemoteThread( ) API를 이용한 원격 스레드방식이라서 Thread Injectio