벨로그를 시작합니다.보안을 공부하며 가장 나를 힘들게 한 과목은 리버싱이었다.리버싱 전공을 두번이나 수강했음에도 여전히 어려웠다. 어떻게 하면 리버싱의 난이도를 극복할 수있을까. 스터디를 진행하며 기록으로 남기면 된다. 누군가가 읽었을 때 알아볼 수 있는 기록을 남기기
결국 리버싱에서 제일 원하는 것은 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

API 후킹 API 계속 나왔던 API는 대체 뭘까? 하는 짓이나 꼴을 보면 함수 같은데 왜 함수라고 안하고 API라고 할까? 디버그 테크닉 많은 API 후킹 중에서 이번에 다룰 건 디버그 테크닉이다. 테크맵에서 HOW에 해당하는 디버그 테크닉이다. 후킹을 위해서

이번에 할 건 계산기를 후킹하는 것이다.타깃 : calc.exe목적 : 숫자를 입력하는데 출력되는 화면엔 한글로 바뀌도록 함( 1-> 일)나는 아직 리버싱을 잘하지 못한다. 교재를 보고 따라하는 정도니까. 교재를 따라할 때마다 가끔씩 '실전에선 이걸 어떻게 알고 하라는

이번에는 지난 시간과 비슷한 dll 인젝션 테크닉이지만 조금 차이가 있다. 바로 공략을 하는 위치인 Location이 다르다.지난번 20장에서 했던 것이 IAT 영역에 기존 api 시작 주소에서 내 공격 api 주소로 바꿨다면,이번에는 기존 API 코드 자체를 수정해

지난번에 했던 API 코드 패치는 오리지널 API의 첫 시작 5바이트를 수정하는 것이다. 그리고 인젝션된 DLL의 후킹함수로 흐름이 넘어오면 이런 과정이 필요했다.다시 언훅 (무한루프 방지)다시 오리지널 API 호출\~~뭐 원하는 거 하겠지? 오리지널 API 흐름다시

타깃 : Internet Explorer 후킹 목표: 특정 사이트에 접속할 시 공격자가 원하는 사이트(my velog)로 우회시키기 약간 유해사이트 차단이랑 비슷하다. 특정 사이트의 접속을 막아두는 것 타깃 API 찾기 후킹할 API를 찾는게 중요하다고 전에 말했지
32비트 CPU 환경에서 물리 메모리는 4GB였다. 근데 이 중에서 절반 2GB는 유저 영역에, 절반 2GB는 커널 영역에 할당하고 보면, 결국 프로세스가 돌아갈 메모리가 너무 적지 않냐는 의견이 생기면서 2GB보다 더 많은 영역에 대한 수요가 생김.그래서 32비트에서

Address Space Layout Randomization은 프로세스가 실행되어 메모리에 탑재될 때마다 로딩되는 메모리 주소의 시작을 매번 다르게 랜덤화하는 기술이다.항상 고정된 메모리 주소를 가지게 된다면 그점을 노린 보안 취약점이 발생할 수 있기 때문이다.그런데

Thread Local Storage는 스레드마다 독립적으로 가지는 저장 공간이다. 스레드 내에서도 프로세스의 글로벌 데이터와 정적 static 데이터를 로컬 데이터처럼 독립적으로 취급하고자 할 때 사용하게 된다.콜백함수는 특정 동작시 자동으로 호출되는 함수였다.프로세

스레드는 스레드마다 자신의 정보를 담고 있는 Thread Environmnet Block이란 것을 가지고 있다.운영체제마다 다르고 버전마다 조금씩 다르며, 그 구조체에는 그냥 보면 너무 숨겨져 있어서 커널 디버거로 열어봐야 하는데 열어보며 너어어무 길다.오프셋 0 |

정적 안티디버깅이란 처음에 한번 실행할 때 안티디버깅이 걸려있는 것으로 실행 전에 한번 해체를 하면 된다.동적으로 매번 각각의 기법으로 해제해줘야하는 것들보다 훨씬 쉽겠다.프로세스 정보를 담고 있는 구조체 PEB를 이용한 경우가 접근이 쉬워 많이 이용한다.PEB 구조체

*yenas0님과 함께한 실습의 아카이빙입니다. 서비스 프로세스 서비스 프로세스란? 그냥 검색하면 마케팅에서 사용하는 서비스 프로세스만 나온다. Windows에서 "서비스 프로그램" 은 일반 프로세스와 다른 특성을 가지는 특별한 백그라운드 프로세스 를 의미한다.

yenas0님과 함께한 실습의 아카이빙입니다. Self Creation 어떤 부모 프로세스가 자식 프로세스를 생성한다. 근데 그 자식 프로세스가 자기 자신일 때 이걸 self creation이라고 한다. 어떨 때 의미있는가? 부모로서 실행될 때와, 자식으로서 실행될

PE파일 구조는 이제 다들 잘 알잖아. 이미지 스위칭만 공부해보자.이미지 스위칭이란 껍데기는 A프로세스라고 실행되는 것처럼 보이는데 실행되는 것은 B프로세스인 것이다.요런 개념이라고 생각하면 된다.이런 이미지 스위칭은 운영체제의 보안이 강화되면서 윈도우즈7부터는 일반
종강종강 Debug Blocker 자기 자신 또는 다른 실행파일을 디버그 모드로 실행하는 기법. CreateProcess() API에서 DEBUGPROCESS나 DEBUGONLYTHISPROCESS 옵션을 사용해 부모 프로세스를 디버거, 자식 프로세스를 디버기로