ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2022/03/18][짤막한 이야기 - 예외 기반 분석방지 기술(SingleStep)]
    짤막한 이야기 2022. 3. 21. 16:04
    728x90
    반응형

    [2022/03/18][짤막한 이야기 - 예외 기반 분석방지 기술(SingleStep)]
    “SingleStep(싱글스텝)”은 예외를 발생시키는 방법 중 하나이다.
    싱글스텝은 트랩플래그(TrapFlag, TF)에 의하여 실행될 수 있는 하나의 “모드”이다.
    흔히 알려진 플래그로는 제로플래그(ZeroFlag, ZF)가 있는데, 이런 플래그는 1비트(0[False] 혹은 1[True])로 토글(Toggle)되는 성질을 가지고 있다.
    트랩플래그와 제로플래그 등의 플래그는 모두 EFLAGS라는 레지스터에 포함되는 플래그 값이다.
    트랩플래그의 값이 1[True]로 셋팅되어 있으면 CPU가 싱글스텝 모드에 진입하게 된다.
    이 싱글스텝 모드는 간단히 말하면 예외가 발생하게되는 상태이고, 엄밀히 말하면 어셈블리어 하나를 실행 시킨 후 싱글스텝 예외를 발생시킨 후 트랩플래그를 0으로 초기화하는 상태이다.
    그런데 트랩플래그는 EFLAGS에 포함되어있기 때문에 직접 이를 0에서 1로 셋팅하는 것은 어려우며, EFLAGS의 특정 비트를 1로 셋팅함으로써 트랩플래그를 1로 셋팅할 수 있다.
    위 그림의 pushfd가 EFLAGS 레지스터를 스택에 저장하는 것이고, 그 후 or, popfd 연산을 통하여 트랩플래그의 위치에만 1을 더하는 것이다.
    이렇게 함으로써 싱글스텝 모드가 발동하게 되며 이후 nop 어셈블리어를 실행한 후 예외 상태로 진입하게 된다.
    예외 상태로 진입한 경우 예외 처리문 내부의 “return FALSE;” 혹은 예외 처리문 외부의 “return TRUE;”를 실행하게 되는데, 이것의 실행 조건은 분석 도구의 존재여부라는 것을 이전 포스트에서 언급하였다.
    분석 도구 자체에서 예외 발생문을 실행하게 된다면, 강제로 예외를 발생시키는 기술이 예외 기반 분석방지 기술을 우회(Anti-Anti-Analysis)하는 가장 대표적인 방법이다.
    위 코드와 여러 타입의 분석방지 기술 구현방법 및 우회방법, 우회코드 구현은 아래 관련된 문서를 통하여 확인할 수 있다.
    [관련된 짤막한 이야기 - 예외 기반 분석방지 기술(예시)[2022/03/18]]
    [관련된 문서 - 핀툴 프로그래밍 기본서[제4부. 핀툴로 Anti-PinTool 우회하기]]
    #이야기 #루니프 #핀 #핀툴 #예외 #분석방지 #예외 #싱글스텝 #EFLAGS #플래그 #탐지 #대응 #우회 #프로그래머 #해커 #개발자 #분석가 #코딩

    728x90
    반응형
Designed by Tistory.