syscall 4

win32u.dll는 뭐임?

윈도우에서 OpenProcess와 같은 winapi를 호출한 뒤 계속해서 타고 들어가면 ntdll.dll 내부에 있는 Nt...로 시작하는 함수를 호출하게 됩니다 Nt함수 내부에선 syscall을 통해서 커널모드로 진입하게 됩니다 ntdll은 시스템 서비스 루틴에 대한 스텁으로 볼 수 있습니다 그 외 지원 함수들도 있지만 이 글에서 언급하진 않습니다 ntdll가 네이티브 시스템을 위한 dll이라면 서브시스템을 위한 스텁을 가진 dll도 존재합니다 DC와 윈도우와 관련된 작업을 하게되면 검증이나 변환 과정을 거친 뒤에 win32u.dll에 있는 NtUser...함수로 이동하게 되고 syscall을 통해서 커널모드로 진입하게 됩니다 다음은 인자를 받지않는 GetForegroundWindow함수의 내용입니다 ..

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..