64bit 디버깅
64bit os에선 32bit프로그램과 64bit프로그램이 돌아가서 둘 다 디버깅이 가능함.
32bit os에선 32bit프로그램만 돌아가서 64bit프로그램은 디버깅 불가.
64bit windows에서는 PE32는 WOW64모드로 실행.
ASLR(Address Space Layout Randomization)
windows kernel 6부터 사용 가능한 기능.
PE 파일이 메모리에 로딩될 때 로딩 시작 주소 값을 랜덤하게 바꾸는 것.
또한 해당 프로세스의 스택, 힙의 시작 주소도 실행될 때마다 랜덤으로 바뀜.
보안 취약점을 노리는 코드에는 메모리 주소가 하드코딩 되어있는데( DLL이 언제나 정해진 주소에 올라오기때문) 이러한 취약점을 노리는 코드 작성을 어렵게하기 위해 ASLR 기술을 적용하게 됨.
ASLR이 적용된 파일은 .reloc섹션이 있고 header에 characteristics file_relocs_stripped(1)가 1이고 optional header의 dll characteristics에 dllcharacteristics_dynamic_base(40)이 1이다.
ASLR을 제거하려면
optional header의 dll characteristics에 dllcharacteristics_dynamic_base(40)의 값을 제거해주면 된다.
session in kernel 6
kernel6이전에는 첫번째 사용자가 시스템 세션(session 0)을 사용했는데 kernel6부터는 첫번쨰 사용자는 session1부터 사용하여 session 0 을 isolation 시킴(보안의 이유로)
read/writeprocessmemory, virtualallocex 등은 동작하는데 createremoteThread가 일부 프로세스(서비스)에서 제대로 동작하지 않음
다른 세션의 일부 프로세스에 createremoteThread가 오류가 발생함.
createRemoteThread - > 내부에서 suspend 모드로 생성시키고 remoteprocess가 session 0 이면 error
kernel6이상이면 NtCreateThreadEx를 호출해서 해결 가능.