전체 글 33

사기꾼을 위한 햄날먹 드라이버 개발 - 5

이번에도 다시 돌아온 vmx 지원체크 이번에는 드라이버에서 지원을 체크해봄 유저모드에서 체크하고 혹시 모르니 커널모드에서도 체크하는게 좋음 유저모드와 다르게 msr을 읽어서 확인하는 부분이 있음 msr관련해서는 인텔 문서를 참고 https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3c-part-3-manual.pdf HTML 삽입 미리보기할 수 없는 소스 빌드하고 vm에서 실행하면 다음과 같은 결과를 볼 수 있음

사기꾼을 위한 햄날먹 드라이버 개발 - 4

이전에 드라이버 통신 예제를 살펴봄 뭐 햄는지 기억안나면 이전글 보셈 https://boa9448.tistory.com/34 사기꾼을 위한 햄날먹 드라이버 개발 - 3 이번에는 커널 드라이버와 유저모드 프로그램이 통신하는 예제 뭐 했는지 기억안나면 앞에 글 보셈 빈 솔루션을 하나 만들고 프로젝트 2개를 추가한다 유저모드 프로그램으로 작성될 빈 프로젝 boa9448.tistory.com 드라이버와 유저모드 프로그램이 통신하려면 다음 작업들이 필요함 유저모드 요청에 대응할 루틴 등록 (IRP_MJ_*) 디바이스 생성(IoCreateDevice) 프로그램에 노출시킬 심볼릭링크 생성(IoCreateSymbolicLink) 유저모드와 드라이버와 통신하는 방법은 파일을 읽고 쓰는것과 매우 유사함 CreateFile..

사기꾼을 위한 햄날먹 드라이버 개발 - 3

이번에는 커널 드라이버와 유저모드 프로그램이 통신하는 예제 뭐 했는지 기억안나면 앞에 글 보셈 빈 솔루션을 하나 만들고 프로젝트 2개를 추가한다 유저모드 프로그램으로 작성될 빈 프로젝트 (CommunicationApp) 커널모드 드라이버로 작성될 빈 커널 드라이버 프로젝트 (CommunicationDriver) CommunicationApp 프로젝트에 main.cpp를 추가함 CommunicationDriver 프로젝트에 driver.cpp를 추가함 그리고 main.cpp에 다음 코드를 작성 HTML 삽입 미리보기할 수 없는 소스 driver.cpp에 다음 코드를 작성 HTML 삽입 미리보기할 수 없는 소스 모두 작성이 끝났으면 빌드함 그리고 vm으로 옮겨서 다음 커맨드로 드라이버를 설치 cmd 관리자 ..

사기꾼을 위한 햄날먹 드라이버 개발 - 2

앞에서 작성한 예제의 일부를 살펴봄 뭐했는지 기억안나면 보셈 https://boa9448.tistory.com/31 사기꾼을 위한 햄날먹 드라이버 개발 - 1 유저모드 치트는 커널모드 안티치트를 이길 수 없음 그 반대도 마찬가지임 이 이유 하나만으로 드라이버 작성을 배우는 이유는 충분함 Kernel Mode Driver, Empty를 선택한 뒤 프로젝트를 생성 프로젝 boa9448.tistory.com 살펴볼 코드는 다음과 같음 HTML 삽입 미리보기할 수 없는 소스 DriverEntry 드라이버가 로드되면 첫번째로 호출되는 함수임 드라이버 초기화를 담당함 드라이버가 필요한 전역변수를 할당하는 작업을 여기서 진행하면됨 파라미터는 WDM드라이버를 나타내는 DriverObject 레지스트리에서 드라이버의 경..

사기꾼을 위한 햄날먹 드라이버 개발 - 1

유저모드 치트는 커널모드 안티치트를 이길 수 없음 그 반대도 마찬가지임 이 이유 하나만으로 드라이버 작성을 배우는 이유는 충분함 Kernel Mode Driver, Empty를 선택한 뒤 프로젝트를 생성 프로젝트 이름은 HelloDriver Source Files에 driver.cpp를 추가한 뒤 다음 코드를 작성함 HTML 삽입 미리보기할 수 없는 소스 대상 플랫폼을 x64로 변경한 뒤 빌드를 누르면 HelloWorld.sys가 생성됨 빌드된 드라이버를 vm으로 옮김 서비스를 설치하고 시작하기 전에 DebugView를 관리자 권한으로 실행한 뒤 커널 출력을 캡쳐하도록함 Capture Kernel을 체크함 cmd를 관리자 권한으로 실행한 뒤 sc를 이용해서 드라이버 서비스를 설치하고 실행함 sc crea..

c++ x64에서 vmx지원 체크

하이퍼바이저를 로드하기 전에 vmx를 지원하는지 체크해야함 vmx를 지원하지 않는 상태에서 하이퍼바이저 관련 명령어를 사용하게 되면 의도치 않는 동작이나 예외가 발생할 수 있음 인라인 어셈블리를 사용하는 방법은 다음 게시글 참고 https://boa9448.tistory.com/26 https://boa9448.tistory.com/27 visual studio2019에서 인라인 어셈블리 - 2 머갈통말 앞에서 작성한 프로젝트를 기반으로 x64지원까지 추가해서 만들어봄 결과는 x86과 x64에서 둘 다 작동하는 작은 어셈블리 프로젝트임 뭐 했는지 기억 안난다면 이전글 참고 https://boa9448.t boa9448.tistory.com cpu 공급업체를 가져오는 방법 https://boa9448.ti..

c++ x64에서 cpu 공급업체 가져오기

일부 프로그램이나 환경에서 cpu를 조사해야하는 경우가 있을 수가 있음 나중에 하이퍼바이저 작성할 떄 쓰려고 만든 코드임 x64에서 인라인 어셈블리를 사용하는 방법은 다음 게시글 참고 https://boa9448.tistory.com/26 visual studio2019에서 인라인 어셈블리 - 1 머갈통말 vs는 컴파일러를 통해서 x64인라인 어셈블리를 지원하지 않음간단한 어셈블리 프로젝트를 작성하는데 nasm와 같은 외부 어셈블러 사용시 어려움을 느낄 수 있음이번 글을 통해서 외부 boa9448.tistory.com https://boa9448.tistory.com/27 visual studio2019에서 인라인 어셈블리 - 2 머갈통말 앞에서 작성한 프로젝트를 기반으로 x64지원까지 추가해서 만들어봄..

visual studio2019에서 인라인 어셈블리 - 2

머갈통말 앞에서 작성한 프로젝트를 기반으로 x64지원까지 추가해서 만들어봄 결과는 x86과 x64에서 둘 다 작동하는 작은 어셈블리 프로젝트임 뭐 했는지 기억 안난다면 이전글 참고 https://boa9448.tistory.com/26 visual studio2019에서 인라인 어셈블리 - 1 머갈통말 vs는 컴파일러를 통해서 x64인라인 어셈블리를 지원하지 않음간단한 어셈블리 프로젝트를 작성하는데 nasm와 같은 외부 어셈블러 사용시 어려움을 느낄 수 있음이번 글을 통해서 외부 boa9448.tistory.com 순서 asm_lib_x64.asm 추가 asm_lib.asm, asm_lib_x64.asm 파일 속성 수정 코드 작성 끝 asm_lib_x64.asm 추가 앞에서 추가한 asm_lib.asm과..

visual studio2019에서 인라인 어셈블리 - 1

머갈통말 vs는 컴파일러를 통해서 x64인라인 어셈블리를 지원하지 않음간단한 어셈블리 프로젝트를 작성하는데 nasm와 같은 외부 어셈블러 사용시 어려움을 느낄 수 있음이번 글을 통해서 외부 어셈블러를 사용하지 않고 간단한 어셈블리 프로젝트를 작성해봄 미리 말함 x86에서는 코드에서 asm, _asm을 사용 가능 x64에서는 코드에서 asm, _asm을 사용 불가 이 글에서는 x86과 x64의 플랫폼 변경시에 비교적 유연하게 대처할 수 있도록 asm파일을 따로 만들어서 실습함 순서 프로젝트 생성 main.cpp, asm_lib.asm 추가 사용자 지정 빌드 추가 코드 작성 끝 프로젝트 생성 프로젝트 생성 -> c++ 빈프로젝트 생성 main.cpp, asm_lib.asm 추가 main.cpp를 만든 뒤에 ..