본문 바로가기
반응형

전체 글95

[x64 Windows]프로세스 보호기능 구현 집에서 쉬면서 주말동안 했던 코딩했던 것들을 정리해봅니다.본 포스팅 은 프로세스 보호기능 구현에 관련해 작성되었으며 드라이버 테스트환경은 Windows 7 x64에서 이루어졌음을 알립니다. 최근에 알게 된 프로세스 보호기능에 대해 간단히 알아보고자 한다. 소개할 방법은 통해 프로세스뿐만아니라 파일보호 레지스터보호 또한 가능하다. 이번에 소개할 프로세스 보호 방법은 ObRegisterCallbacks를 통한 방법이다. ObRegisterCallbacks는 Thread나 Process에 대한 핸들 작업이 이루어질 때 호출되는 콜백루틴를 등록하는 함수이다. 해당 방법은 x86에서 x64로 넘어오면서 Patch Guard의 존재로 SSDT나 KiSystemCall등의 후킹이 어려워졌는데 해당 방법은 MS에서 허.. 2018. 4. 30.
Intel이 Anti-Virus회사를 위해 내장 GPU사용을 허용. [ https://thehackernews.com/2018/04/intel-threat-detection.html ] 최근 해외 기사를 통해 흥미로운 소식을 접했다. Intel이 Anti-Virus 메모리스캔의 부담을 덜어주기 위해 내장 GPU사용을 허용해 주었다.실제 컴퓨터 작업중 갑자기 느려지는 순간들이 있을때, Anti-Virus CPU점유율을 엄청 높아짐을 알 수 있다.이런 이유로 Anti-Virus를 종료할때도 가끔 있다.아무튼, 이번에 GPU사용을 허용함으로써 Anti-Virus 벤더사들은 CPU점유율에 대해서 한시름 놓을수 있을 것 같다.최근 많은 물량을 악성코드들이 쏟아지고 이러한 방대한 데이터들을 처리하기 위해서는 좀더 빠른 매체가 필요하기 때문이다.실제 기사에 보면 테스팅중 Anti-V.. 2018. 4. 18.
Windows x64커널 진입 : 커널모드편 x64에서 커널진입이후, 동작을 알아보기 위해 ntdll!ZwCreateFile의 경우를 알아보자. ntdll!ZwCreateFile내부를 보자. ntdll!ZwCreateFile: 0033:00000000`77b91860 4c8bd1 mov r10,rcx ; 첫번째 인수를 r10에 백업시킨다. 이는 syscall이후 반환주소가 rcx로 전달되기 때문 0033:00000000`77b91863 b852000000 mov eax,52h ; ServiceNumber를 eax로 전달 0033:00000000`77b91868 0f05 syscall ; 커널진입 0033:00000000`77b9186a c3 ret Syscall명령어를 통해 커널에 진입하게 되는데 eax를 통해 ServiceNumber를 전달하는것.. 2018. 4. 14.
x64 Calling Convention(Windows) x64커널진입을 정리하면서 x64의 파라미터 전달관계를 알기 위해 진행되었던 내용들을 간단하게 정리한다. 먼저, 파라미터 전달관계를 위해 다음과 같이 코딩했는데 코딩내용은 굉장히 굉장히 간단하다. 테스트를 위한 함수를 만들고 파라미터를 14개 정도 전달받도록 만들었다. 별건아니니 코드를 보는게 더 편할것이다. #include void X64Call(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, int n){ printf("%d", a + b + c + d + m + n); return;} int main(){ X64Call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12.. 2018. 4. 14.
조급함이 느껴질때.... 종종 생각처럼 되지 않을때나 다른사람과 비교할때 조급함이 느껴진다.... 하염없이 흘러가는 시간 그럴때일수록 멀리 그리고 천천히 보자~! 또 생각하자! "지금도 계속 발전하고 있다. 결코 더디지 않고 나만의 방법대로 발전하고 있다"라고!!!! 2018. 4. 12.
64 Windows커널 진입 차이 : 유저모드편 최근에 x64를 보면서 x86과 커널진입이 다른것을 발견하게 되어 정리하게 되었다....본내용은 x64에서의 커널진입과 x86과의 차이점에 대해서 이야기해본다. (분석환경 : Windows 7 x86/x64) 먼저, x86에서 커널진입에 대해서 알아보도록 한다. 그 예로 Kernel32.CreateFileA x86의 커널진입은 다음 그림과 같다. 진입순서 : Kernel32!CreateFileA -> Kernel32!CreateFileW -> ntdll!ZwCreateFile -> ntdll!KiFastSystemCall()로 진입하게 된다. 큰 특징으로는 커널진입 이전에 ntdll!KiFastSystemCall을 지나야 한다는 점이다. 그러나 ntdll!KiFastSystemCall는 유저레벨에서 커널.. 2018. 4. 12.
SetUnhandledExceptionFilter를 이용한 AntiDebugging 최근에 발견된 악성코드에서 SetUnhandledExceptionFilter를 이용한 Anti Debugging기법이 있어 끄적여본다.우선 SetUnhandledExceptionFilter에 대해 알아보자. ※SetUnhandledExceptionFilter란? After calling this function, if an exception occurs in a process that is not being debugged, and the exception makes it to the unhandled exception filter, that filter will call the exception filter function specified by the lpTopLevelExceptionFilter p.. 2018. 4. 10.
kernel32 vs kernelbase kernel32 vs kernelbase 2018. 4. 5.
※디버그레지스터란? ▣Debug Register 하드웨어 breakpoint를 가능하게 하는 레지스터 [그림 : http://hackability.kr/entry/익스플로잇-개발-12-EMET-52] DR0~3 : 하드웨어 브레이크포인터의 주소. 해당주소 접근/쓰기/실행 시 INT1발생 DR6(Debug Status Register) INT1이 발생한 이유를 알려주는 레지스터. 프로세스에 의해 세트되고 사용자가 직접 지워줘야함 - B0~3(Bit0~Bit3) : 어떤 레지스터에 의해 엑세스되어졌는지 나타냄. - BD(Break for Debug register access,Bit13) : DR7의 GD비트에 의해 디버그레지스터가 잠겨있을 때 디버그 레지스터를 엑세스하면 INT1을 1로 세트되어짐 - BS(Break for .. 2018. 3. 7.
반응형