본문 바로가기
반응형

Security33

※TLS(Thread Local Storage)란? 이미 전에 공부해서 알고 있는 내용들이지만 다시 한번 정리하는 개념으로 TLS에 대한 내용을 진행해보았습니다. 이후 예제코드는 TLS를 이용한 안티디버깅프로그램을 제작해보았습니다. ※TLS(Thread Local Storage)란? - Thread별로 독립된 데이터 저장공간. 쓰레드내에서 독립적으로 전역변수나 정적변수를 만들어줄때 사용 ※DataDirectory - TLS프로그래밍시 PE포맷에서 optionalHeader의 DataDirectory[9]이 세팅되며 다음의 구조를 가진다. typedef struct _IMAGE_TLS_DIRECTORY64 { ULONGLONG StartAddressOfRawData; ULONGLONG EndAddressOfRawData; ULONGLONG AddressOf.. 2017. 8. 21.
윈도우 부팅과정(Windows Boot Process) ※부팅과정(Windows Boot Process) : 부팅 전체적인 그림은 다음과 같습니다. 1. Run BootManager ① BIOS Firmware - POST : 부팅시 가장 먼저 동작. 하드웨어를 점검합니다. - Load Boot Manager : 디스크의 첫번째 섹터인 MBR(Master Boot Record)로 부터 파티션 테이블을 검색하여 부팅가능한 파티션의 VBR(Volume Boot Record)를 읽습니다. VBR은 16bit Boot Manager(%System-Drive%\bootmgr) 프로그램을 읽습니다. 16bit코드는 (32bit/64bit)코드 앞에 붙어서 존재합니다. ② EFI Firmware - POST : BIOS과정과 동일합니다. - Load BootCode : .. 2017. 8. 21.
MBR부팅과정 디버깅 ※MBR부팅과정 디버깅방법 ①VMX파일 수정 - vm을 종료한 뒤, 다음을 vmx파일에 추가합니다. debugStub.listen.guest32 = "TRUE" debugStub.hideBreakpoints = "TRUE" debugStub.listen.guest32.remote = "TRUE" monitor.debugOnStartGuest32 = "TRUE" 추가가 되었다면 vm을 부팅합니다. 해당 VM은 일시정지상태로 신호를 기다립니다. ②IDA를 통하여 VM에 Attach. OK이후 : 선택 ③16비트로 설정. -[Edit]-Segments-[Edit segment]로 접근 - Segment bitness를 16bit로 설정. ④BIOS이후인 0x7c00에 bp를 걸고 진행. 2017. 8. 8.
IRQL(Interrupt Request Level)-동기화방법(2) ※ 동기화가 필요한 이유 실행도중 메모리에 접근(임계영역) 및 수정하는데 있어서 인터럽트가 발생하여 해당 메모리값이 유효하지 않은 값이 되며 발생하는 오류들을 제거하기 위함. 말이 조금 어려울수 있으니 간단한 예를 통하여 설명하겠습니다. 예) DISPATCH_LEVEL(2)실행도중 인터럽트가 발생하여 DIRQLs(8)루틴실행시 발생하는 오류 설명을 하자면 MOV eax,0x8가 실행된 직후 인터럽트가 발생하여 DIRQLs(7)이실행되며 EAX값이 EDI의 주소값으로 바뀐다. 이후 다시 DISPATCH_LEVEL로 복귀하였을 때 유효하지 않은 EAX값을 파라미터로 넘기고 함수를 호출하기 때문에 에러가 발생하게 된다. ※동기화 문제 해결책 ①IRQL조작을 조작한다. KeRaiseIrql(),와 KeLower.. 2017. 8. 3.
반응형