본문 바로가기

reversing55

고급 안티 디버깅 고급 안티 디버깅 기법 PE 프로텍터에서 주로 사용되는 고급 안티 디버깅 기법의 공통된 특징은 기술적인 난이도가 높을뿐만 아니라 리버서를 정신적, 육체적으로 지치게 만든다는 것입니다. 수없이 많은 가비지 코드, 조건 분기문, 루프문, 암호화/복호화 코드 그리고 도대체 그, 깊이를 파악할 수 없는 Call_tree에 빠져서 허우적대다 보면 자신이 지금 어디쯤 와 있는지 알 수 없게 되버립니다. 정작 분석하고 싶은 코드에서 접근조차 못하고 엉뚱한 곳에서 헤매게 되는 것이죠. 이런식으로 리버서를 혼란시켜놓고, 중간 중간 Dynamic 아티디버깅 기법을 살짝 섞어 놓으면 그야말로 속수무책으로 당할 수박에 없는 상황이 되어버립니다. 물론 디버깅 자체가 아예 불가능한 것은 아닙니다만, 그 난이도가 매우 높습니다. .. 2022. 10. 20.
안티 디버깅 Dynamic 안티 디버깅 분류 Static, Dynamic - Static 기법은 디버깅 시작할 때 한번만 해체를 해주는 기법 - Dynamic 기법은 디버깅을 진행하면서 (해당 Anti기법을) 만날 때마다 해결하는 기법 Dynamic 안티 디버깅의 목적 목적은 내부 코드와 데이터를 리버싱으로부터 감추고 보호하는 것. 보통PE 프로텍터들에서 많이 사용되며 원본 프로그램의 핵심 알고리즘을 보호하기 위하여 사용됩니다. 디버거로 해당 프로그램이 실행될 수는 있을지언정 원본 프로그램의 핵심코드(OEP)로 트레이싱 하여 찾아갈 수 없도록 방해합니다. 예외 예외(Exception)를 이용하는 방법은 안티 디버깅의 단골 메뉴입니다. 정상적으로 실행된 프로세스에서 예외가 발생하면 SEH(Structured Exception Han.. 2022. 10. 5.
안티 디버깅 Static 안티 디버깅 분류 Static, Dynamic - Static 기법은 디버깅 시작할 때 한번만 해체를 해주는 기법 - Dynamic 기법은 디버깅을 진행하면서 (해당 Anti기법을) 만날 때마다 해결하는 기법 Static 안티 디버깅의 목적 디버기 프로세스에서 자신이 디버깅 당하는지 여부를 파악하는 기법 만약 디버깅 중이라고 판단되면 일반 실행과는 다른 코드(주로 종료 코드)를 실행하는 것이 핵심입니다. 구현 방법으로는 디버거를 탐지하는 방법, 디버깅 환경을 탐지하는 방법, 디버거를 강제 분리시키는 방법등이 있습니다. 회피 방법은 탐지 코드에서 얻어 오는 정보를 파악하여 아예 그 정보 자체를 변경해버리는 것입니다. PEB 현재 프로세스의 디버깅 여부를 판단하기 위해 PEB(Process Environme.. 2022. 10. 4.
NtQueryInformationProcess 디버거를 탐지해내는 기법에 대한 설명입니다. ntdll!NtQueryInformationProcess() API를 이용하면 프로세스의 디버깅 관련 정보를 비롯하여 매우 다양한 정보를 얻을 수 있습니다. NTSTATUS WINAPI NtQueryInformationProcess( __inHANDLE ProcessHandle, __inPROCESSINFOCLASS ProcessInforamtionClass, __outPVOID ProcessInformation, __inULONG ProcessInformationLength, __out_optPULONG ReturnLength ) 두 번재 파라미터 PROCESSINFOCLASS ProcessInformationClass에 원하는 정보형식을 입력한 후 NtQu.. 2022. 9. 29.
IA-32 Instruction 포맷 IA-32 Instruction은 다음과 같이총 6개의 항목으로 구성되어있습니다. 여기서 Opcode 항목은 반드시 존재해야 하며, 나머지 항목은 옵션입니다. Instruction Prefixes Instruction Prefixes는 옵션 항목으로, 뒤에 특정한 Opcode가 나올 때 사용되어 Opcode의 의미를 보조하는 역할을 합니다. Prefix 항목은 1바이트 크기를 가집니다. Opcode Opcode(Operation Code)는 필수 항목이며 실제적인 명령어를 나타냅니다. Opcode는 1~3 바이트 크기를 가집니다. 일반적인 응용프로그램 디버깅에서는 주로 1바이트 크기의 Opcode가 대부분이고, 가끔 2바이트 크기의 Opcode들이 있습니다. 3바이트 크기의 Opcode는 주로 MMX(M.. 2022. 9. 27.
TEB TEB TEB는 프로세스에서 실행되는 스레드에 대한 정보를 담고 있는 구조체입니다. 스레드별로 TEB구조체가 하나씩 할당됩니다. 또한 TEB구조체는 OS종류별로 그 모양이 조금씩 달라지며 세부적인 내용에 대해서는 문서화되어 있습니다. TEB 구조체 정의 typedef struct _TEB { PVOID Reserved1[12]; PPEB ProcessEnvironmentBlock; PVOID Reserved2[399]; BYTE Reserved3[1952]; PVOID TlsSlots[64]; BYTE Reserved4[8]; PVOID Reserved5[26]; PVOID ReservedForOle; PVOID Reserved6[4]; PVOID TlsExpansionSlots; } TEB, *PTEB.. 2022. 9. 16.
반응형