Hack/Reversing
-
Memory BreakPointHack/Reversing 2015. 1. 16. 23:06
메모리브레이크포인트를 사용하기위해서는 메모리영역의 베이스주소, 페이지크기를 구해야한다. 그 해당메모리영역도 Guard Page로 설정해야한다. 하지만 CPU가 보호 페이지에 접근하려고 하면 GUARD_PAGE_EXCEPTION이라는 예외가 발생한다. 이 예외를 처리하는 핸들은 복원하고 실행이 되도록 만든다. 페이지의 크기를 제대로계산하기위해서는 운영체제 디폴트 페이지크기를 질의해야하는데,GetSystemInfo()함수를 이용해 SYSTEM_INFO구조체 정보를 얻어와야한다. dwPageSize가 시스템 페이지 크기값을 나타내서 해당 인자를 출력시키면된다.
-
GetProcAddress()Hack/Reversing 2015. 1. 16. 18:09
해당 함수를 이용해서 특정함수의가상 메모리주소를 알아낼수있다. 이 함수는 kernel32.dll에서 export하는 함수다. 해당함수는 함수가 속한 프로그램, 라이브러리등 핸들이 필요한데, 이 핸들을 쉽게 GetModuleHandle() 함수로 얻을수있다. GetProcAddress()와 GetModuleHandle()은 친구인셈.. 이제 브레이크포인트를 이용해야하는데 원리는 간단하게 모듈의 핸들을구하고 해당 모듈에서 브레이크포인트를 설정할 함수의 주소를 구해서 넣으면된다!
-
Soft BreakPointHack/Reversing 2015. 1. 16. 17:41
저번강의에서 소프트 브레이크포인트는 INT 3를 사용하고 하드 브레이크포인트는 INT 1을 사용한다고 했었다. INT 3,1은 인터럽트 구분을 위해서 사용되고, 이번엔 소프트 브레이크포인트에대해서 다룰것이다. 브레이크포인트를 설정하려면 프로세스의 메모리를 읽기,쓰기가 되어야하기때문에 두개의 함수가 필요하다. ReadProcessMemory(), WriteProcessMemory() 말그대로 프로세스메모리값을읽고, 쓰는 함수다. Read나 Write나 파라미터는 하나빼고 모두 같기때문에 하나의 파라미터만 올린다. 우선 hProcess는 메모리주소를 읽을 프로세스의 핸들 값이다. 그리고, lpBaseAddress는 읽거나 쓰기의 메모리 영역 시작주소를 넣는다. lpBuffer는 데이터를 읽거나 쓸때 사용하는..
-
DLL InjectionHack/Reversing 2015. 1. 15. 18:13
안녕하세요 송사리입니다. 이번 강의에서는 DLL Injection에대해서 다뤄보려합니다. DLL Injection이란 프로그램실행시 프로세스에 올라가게됩니다. 그 프로세스를 이용해서 DLL을 인젝션, 즉 주입시키는것입니다그럼 DLL은 메인에서는 자기의역할을하고 프로세스에서는 지정된역할을 할수있습니다 DLL Injection기법을이용하면 정말 최강의 공격이 탄생합니다 이로서, 강의해드리려합니다 일단 기본적인것부터 강의해드리려합니다. 아래와같이 DLL을 만들어봅시다 ㅎㅎ 우선 Visual C++ 6.0을 기준으로 설명해드릴겁니다. 우선 프로젝트생성을하시고 Win32 Dynamic-Link Library를 선택하신후 파일명을 입력해주시면됩니다 DLL은 Dynamic-Link Library의 약자입니다. 참고해..
-
CreateToolhelp32Snapshot()Hack/Reversing 2015. 1. 15. 02:52
해당함수는 kernel32d에서 임포트하는 함수다. 전에 OpenThread() 함수에서 설명한대로 쓰레드 리스트를 뽑아와야하는데 해당 함수가 쓰레드 리스트를 뽑아와준다. 추가로 이 함수는 프로세스의 힙리스트, 모듈리스트 까지 모두 뽑아와준다. 함수의 프로토타입이다. dwFlags에서는 해당함수가 무엇을 구할지 선택하는 인자이다. 이렇게 많은 인수들이있다. 우리는 실행중인 스레드의 리스트를 구하려면 TH32CS_SNAPTHREAD, 0ㅌ00000004를 주어야한다. 그뒤에 인자는 스냅샷을 구하고자하는 프로세스의 아이디를 입력하면된다.