C++ 7

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를 만든 뒤에 ..

ssdt index 뷰어

QT 공부하면서 만들어봤습니다 다운로드 링크 : https://github.com/boa9448/qt_study/releases/tag/ssdt_index_view_v0.1.0-demo Release ssdt index view · boa9448/qt_study github.com view_ssdt_index.exe 실행하면 다음과 같은 창이 나타납니다 에디트 컨트롤에 문자열을 입력하면 검색된 결과를 보여줍니다 ssdt index를 구하는 방법은 다음 게시글을 참고합니다 https://boa9448.tistory.com/15 ntdll.dll에서 SSDT Index 가져오기 드라이버에서 SSDT를 후킹하기 전에 후킹하고자 하는 함수의 인덱스를 알아야합니다 windows api는 호출이되면 함수 내부에서 ..

ntdll.dll에서 SSDT Index 가져오기

드라이버에서 SSDT를 후킹하기 전에 후킹하고자 하는 함수의 인덱스를 알아야합니다 windows api는 호출이되면 함수 내부에서 일부 검증과 변환 같은 처리를 한 뒤에 ntdll에 있는 Nt로 시작하는 함수들을 호출합니다 Nt함수들은 다음 사진과 같이 SSDT 인덱스를 eax레지스터에 넣고 syscall을 호출합니다 syscall을 하기전에 mov eax, 00000055 와 같이 SSDT 인덱스를 넣는 모습을 볼 수 있습니다 이번 글에서는 Nt함수의 시작부분에서 가까운 위치의 mov명령어를 찾고 그 뒤에 있는 SSDT 인덱스를 가져오는 방법에 대해서 알아봅니다 실습은 exe프로그램에서 진행하고 추후에 드라이버로 이식합니다 64비트에서 실습을 진행합니다(제가 64비트 쓸거라서ㅋㅋㅋ) ntdll.dll은..

SSDT Shadow의 인덱스

win32u.dll에서 syscall을 할 때 인덱스는 0x1000이상부터 시작된다 SSDT Shadow를 후킹할 때 해당 인덱스를 바로 사용하면 SSDT Shadow의 범위를 벗어나게 되고 잘못된 결과를 불러올 수 있다 사용하기 전에 0x1000을 빼고 해당 값이 테이블의 서비스 갯수를 초과하지 않는지 체크한 뒤 사용하는게 안전하다 SSDTStruct* SSDT = SSDTShadowfind(); if (!SSDT) { Log("SSDT not found...\n"); return 0; } ULONG_PTR SSDTbase = (ULONG_PTR)SSDT->pServiceTable; if (!SSDTbase) { Log("ServiceTable not found...\n"); return 0; } in..