KR20210057239A - Apparatus and method for disabling anti-debugging - Google Patents

Apparatus and method for disabling anti-debugging Download PDF

Info

Publication number
KR20210057239A
KR20210057239A KR1020190143201A KR20190143201A KR20210057239A KR 20210057239 A KR20210057239 A KR 20210057239A KR 1020190143201 A KR1020190143201 A KR 1020190143201A KR 20190143201 A KR20190143201 A KR 20190143201A KR 20210057239 A KR20210057239 A KR 20210057239A
Authority
KR
South Korea
Prior art keywords
debugging
program
function
disabling
api
Prior art date
Application number
KR1020190143201A
Other languages
Korean (ko)
Inventor
방지원
김종욱
최미정
Original Assignee
강원대학교산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 강원대학교산학협력단 filed Critical 강원대학교산학협력단
Priority to KR1020190143201A priority Critical patent/KR20210057239A/en
Publication of KR20210057239A publication Critical patent/KR20210057239A/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation

Abstract

The present invention provides an anti-debugging disabling apparatus to reduce time required for analyzing virus and a method thereof. According to one embodiment of the present invention, an anti-debugging disabling method using an anti-debugging disabling apparatus comprises the following steps: (a) determining whether an anti-debugging disabling target program is a program to which process environment block (PEB) structure- or application program interface (API)-based anti-debugging is applied; and (b) modifying field data or parameter data used for anti-debugging in the program to have a result value not detected by the debugger to disable anti-debugging.

Description

안티 디버깅 무력화 장치 및 그 방법{APPARATUS AND METHOD FOR DISABLING ANTI-DEBUGGING}Anti-debugging disabling device and its method {APPARATUS AND METHOD FOR DISABLING ANTI-DEBUGGING}

본 발명에 따른 안티 디버깅 무력화 장치 및 그 방법은 안티 디버깅이 적용된 프로그램에 대하여 디버깅을 수행하기 위해 안티 디버깅을 무력화하기 위한 장치 및 그 방법에 관한 것이다.An apparatus and method for disabling anti-debugging according to the present invention relates to an apparatus and method for disabling anti-debugging in order to perform debugging on a program to which anti-debugging is applied.

본 발명에 따른 안티 디버깅 무력화 방법을 설명하기에 앞서 이와 관련된 배경기술에 대하여 간략히 설명하기로 한다.Prior to describing the method of disabling anti-debugging according to the present invention, a brief description will be given of the related background technology.

1. Portable Executable(PE) 파일 포맷1. Portable Executable (PE) file format

PE 파일은 COFF(Common Object File Format) 포맷을 변화시킨 파일 포맷이다. PE 파일을 실행시키면 하나의 독립적인 프로세스가 생성되며, 플랫폼에 상관없이 Win32 기반 시스템인 경우에 그의 실행이 가능한 프로그램을 의미한다. 현재 다수의 악성코드가 PE 파일 포맷을 기반으로 생성되어 네트워크를 통해 유포되고 있다. PE 파일의 종류로는 실행, 드라이버, 라이브러리, 오브젝트 총 4개의 계열이 존재한다. 실행 계열로는 EXE, SCR 파일이 있으며, 드라이버 계열은 SYS, VXD 파일이 있고, 라이브러리 계열은 DLL, DRV 파일 등이 있다. 마지막으로 오브젝트 계열은 OBJ 파일이 있으며, 도 1의 (a)는 PE 파일의 종류를 나열한 것이다. 운영체제는 PE 파일을 실행시키기 위해서 실행 파일의 정보를 알고 있어야 하므로, 운영체제는 필요한 정보를 얻기 위해 맨 앞에 존재하는 PE 헤더 구조체를 읽는다. PE 파일은 'MZ(0x4D5A)'로 시작하는 IMAGE_DOS_HEADER 구조체와 도스와의 호환을 위한 코드를 담고 있는 Dos Stub으로 구성되어 있다. 도 1의 (b)에서는 PE 파일의 전체적인 구조를 볼 수 있다.The PE file is a file format that changes the COFF (Common Object File Format) format. Executing a PE file creates an independent process, which means a program that can be executed in the case of a Win32-based system regardless of the platform. Currently, many malicious codes are generated based on the PE file format and are distributed through the network. There are four types of PE files: execution, driver, library, and object. EXE and SCR files are included in the execution series, SYS and VXD files are in the driver series, and DLL and DRV files are in the library series. Lastly, there is an OBJ file as an object series, and FIG. 1A lists types of PE files. Since the operating system needs to know the information of the executable file to execute the PE file, the operating system reads the PE header structure that exists at the beginning to get the necessary information. PE file is composed of IMAGE_DOS_HEADER structure starting with'MZ(0x4D5A)' and Dos Stub containing code for compatibility with DOS. In Fig. 1(b), the overall structure of the PE pile can be seen.

2. 디버그(Debug)2. Debug

디버그란 프로그래밍 과정 또는 바이너리 파일을 분석하는 중에 발생할 수 있는 논리적인 오류, 비정상적인 연산, 버그 등을 찾고 수정하거나 악성코드를 분석하는 행위를 말하고, 이러한 과정을 디버깅(Debugging)이라고 하며, 디버깅을 할 수 있는 도구/프로그램을 디버거(Debugger)라고 한다. 디버깅은 바이너리 파일을 실행시켜 코드, 메모리 상태, 레지스터 등을 일일이 추적하면서 논리적 오류, 버그 수정 및 분석에 사용된다. 하지만, 디버깅을 악용하는 경우 프로그램의 지적 재산권을 무단으로 절취, 또는 해커들이 패스워드나 특정 키워드를 추출하거나 정상적인 프로그램을 변경하는데 용이하며, 프로그램의 흐름이나 데이터를 실시간으로 변경할 수 있기 때문에 문제가 되고 있다.Debug refers to the act of finding and correcting or analyzing malicious codes that may occur during the programming process or analyzing binary files, such as logical errors, abnormal operations, and bugs.This process is called debugging, and can be debugged. The tools/programs that exist are called debuggers. Debugging is used to fix and analyze logical errors, bugs, etc., by executing binary files and tracking code, memory status, registers, etc. However, if debugging is abused, it is a problem because it is easy for hackers to extract passwords or specific keywords or change normal programs without permission, or to change program flow or data in real time. .

3. 안티 디버깅(Anti-Debugging)3. Anti-Debugging

해커 및 악의적인 사용자들의 디버깅 행위를 방지하기 위해 안티 디버깅이라는 기술이 등장하게 되었다. 안티 디버깅이란 타겟 소프트웨어가 디버깅 당하고 있을 경우에 지적 재산권, 핵심 모듈, 패스워드 또는 특정 키워드를 보호하기 위해 에러를 발생시키거나 프로그램의 흐름을 우회시키는 방법을 의미한다. 이 기술을 통해 개발자들은 자신의 프로그램에 대한 지적 재산권, 핵심 모듈, 패스워드 또는 특정 키워드를 보호할 수 있게 되었으나. 바이러스를 개발하는 해커들도 안티 디버깅을 사용하여 그들의 바이러스를 보호하고 분석가들의 바이러스 분석 시간을 지연시킴으로써 바이러스의 수명을 증가시킬 수 있게 되었다. 따라서, 이 시점에서 악성코드 분석가들을 위한 안티 디버깅을 무력화하는 방안이 필요하다.In order to prevent the debugging behavior of hackers and malicious users, a technology called anti-debugging has emerged. Anti-debugging refers to a method of generating an error or bypassing the program flow in order to protect intellectual property rights, core modules, passwords, or specific keywords when the target software is being debugged. Although this technology allows developers to protect intellectual property rights, core modules, passwords, or certain keywords for their programs. Hackers developing viruses can also use anti-debugging to protect their viruses and increase the lifespan of viruses by delaying analysts' virus analysis time. Therefore, it is necessary to disable anti-debugging for malware analysts at this point.

4. 안티 디버깅 기술의 한계와 종래의 안티 디버깅 기술4. Limitations of anti-debugging technology and conventional anti-debugging technology

종래의 안티 디버깅 기술은 타겟 소프트웨어가 안티 디버깅 API의 사용 여부를 알 수 없었다. 안티 디버깅에 관한 대부분의 연구는 소프트웨어를 보호하는 방법에 관하여 진행이 되고 있으나, 악성코드 분석가를 위한 안티 디버깅 무력화 연구는 미미하게 진행이 되고 있다. 안티 디버깅 무력화에 관한 대표적인 연구로서 안티 디버깅 우회 기술이 있지만, 이 기술은 타겟 소프트웨어 자체를 수정하기 때문에 프로그램 흐름에 영향을 줄 수 있으며, HEAP 구조체를 이용한 안티 디버깅에는 대응할 수 없는 문제점이 있다.In the conventional anti-debugging technique, it was not possible to know whether the target software used the anti-debugging API. Most of the research on anti-debugging is on the way to protect software, but the research on disabling anti-debugging for malicious code analysts has been insignificant. As a representative study on disabling anti-debugging, there is an anti-debugging bypass technology, but since this technology modifies the target software itself, it may affect the program flow, and there is a problem that it cannot cope with anti-debugging using the HEAP structure.

최근에는 바이러스 및 키로거(Key Logger)와 같은 악성 프로그램이 다양한 방식으로 시스템에 접근하여 개인정보나 금융 정보를 탈취하여 치명적인 피해를 발생시킨다. 또한, 랜섬웨어(Ransomware)와 같은 바이러스는 피해자의 파일을 암호화하여 파일에 대한 몸값을 요구하여 피해자들의 금전적인 피해를 일으킨다. 바이러스로 인한 피해는 나날이 증가하고 있으며, 일 예로 시만텍 社의 'Internet Security Threat Report 2019'에 따르면 금융 트로이 목마는 16% 증가했다고 한다. 또한, Trend Micro 社의 'Unseen Threats, Imminent Losses' 보고서에 따르면 산업 제어 시스템 중 하나인 SCADA(Supervisory Control And Data Acquisition) 시스템에서 취약점이 발견되었고, 이러한 취약점으로 인해 해커들은 SCADA 시스템 내의 민감한 정보를 수집하고 제어할 수 있는 위험이 있다고 한다. 보안 전문가들은 다양한 방법으로 바이러스로 인한 피해를 줄이기 위해 노력하고 있으며, 분석가들은 디버거를 이용하여 랜섬웨어, 키로거, 트로이목마 등과 같은 바이러스를 분석한다. 그러나, 이에 대응하여 바이러스를 제작하는 해커들은 안티 디버깅과 같은 기술을 이용하여 자신들의 바이러스를 보호하고 수명을 증가시키고 있다. 따라서, 바이러스를 분석하는 분석가들을 위해 안티 디버깅을 무력화시키는 방안이 필요한 상황이다.Recently, malicious programs such as viruses and key loggers access the system in various ways and steal personal or financial information, causing fatal damage. In addition, viruses such as Ransomware cause financial damage to victims by encrypting the victim's files and requesting a ransom for the files. The damage caused by viruses is increasing day by day, and according to Symantec's Internet Security Threat Report 2019, for example, the number of financial Trojan horses increased by 16%. In addition, according to Trend Micro's'Unseen Threats, Imminent Losses' report, a vulnerability was found in the SCADA (Supervisory Control And Data Acquisition) system, one of the industrial control systems, and due to this vulnerability, hackers collect sensitive information in the SCADA system. It is said that there is a risk that you can control. Security experts are trying to reduce the damage caused by viruses in various ways, and analysts use debuggers to analyze viruses such as ransomware, keyloggers, and Trojan horses. However, in response to this, hackers who create viruses are using technologies such as anti-debugging to protect their viruses and increase their lifespan. Therefore, there is a need for a way to disable anti-debugging for analysts analyzing viruses.

본 발명에서는 바이러스에 적재된 안티 디버깅 기술을 무력화시키는 방법을 제안하고자 하며, 이는 구체적으로 PEB 기반의 안티 디버깅 무력화와 API 기반의 안티 디버깅 무력화 방법에 관한 것이고, 이를 통해 바이러스의 분석 시간을 감소시키고자 한다. The present invention proposes a method of disabling the anti-debugging technology loaded in the virus, and specifically relates to a PEB-based anti-debugging disabling method and an API-based anti-debugging disabling method, thereby reducing the analysis time of the virus. do.

본 발명의 일 실시예에 따른, 안티 디버깅(Anti-Debugging) 무력화 장치를 이용한 안티 디버깅 무력화 방법에 있어서, (a) 안티 디버깅 무력화 적용 대상 프로그램이 PEB(Process Environment Block) 구조체 또는 API(Application Program Interface) 기반의 안티 디버깅이 적용된 프로그램인지 판별하는 단계; 및 (b) 프로그램 내의 안티 디버깅에 사용되는 필드 데이터 또는 파라미터 데이터를 디버거(Debugger)가 검출되지 않는 결과값을 가지도록 수정하여 안티 디버깅을 무력화하는 단계를 포함하는, 안티 디버깅 무력화 방법을 제공하고자 한다.In the anti-debugging disabling method using an anti-debugging disabling device according to an embodiment of the present invention, (a) the anti-debugging disabling application target program is a PEB (Process Environment Block) structure or an API (Application Program Interface). ) Determining whether a program based anti-debugging is applied; And (b) disabling anti-debugging by modifying field data or parameter data used for anti-debugging in a program to have a result value that is not detected by a debugger. .

본 실시예에 있어서, (c) (b) 단계 이후에, 안티 디버깅이 적용된 프로그램을 디버깅하는 단계를 포함하는, 안티 디버깅 무력화 방법을 제공할 수 있다.In this embodiment, it is possible to provide a method of disabling anti-debugging, including the step of debugging a program to which anti-debugging has been applied, after steps (c) and (b).

본 실시예에 있어서, (b) 단계는, 프로그램이 PEB 구조체 기반의 안티 디버깅이 적용된 프로그램인 경우에, PEB 구조체 내의 BeingDebugged 필드 데이터와 NtGlobalFlag 필드 데이터, 및 PEB 구조체 내의 HEAP 구조부에 위치하는 Flag 필드 데이터와 ForceFlag 필드 데이터를 디버거가 검출되지 않는 결과값을 가지도록 수정하여 안티 디버깅을 무력화하는 단계를 포함하는, 안티 디버깅 무력화 방법을 제공할 수 있다.In the present embodiment, step (b) is, when the program is a PEB structure-based anti-debugging program, BeingDebugged field data and NtGlobalFlag field data in the PEB structure, and Flag field data located in the HEAP structure in the PEB structure. It is possible to provide an anti-debugging disabling method including the step of disabling anti-debugging by modifying the data of the and ForceFlag field to have a result value not detected by the debugger.

본 실시예에 있어서, BeingDebugged 필드 데이터 값을 0x0으로, NtGlobalFlag 필드 데이터 값을 0x0으로, Flag 필드 데이터 값을 0x2으로, ForceFlag 필드 데이터 값을 0x0으로 수정하여 안티 디버깅을 무력화하는, 안티 디버깅 무력화 방법을 제공할 수 있다.In this embodiment, the anti-debugging method is disabled by modifying the BeingDebugged field data value to 0x0, the NtGlobalFlag field data value to 0x0, the Flag field data value to 0x2, and the ForceFlag field data value to 0x0. Can provide.

본 실시예에 있어서, (b) 단계는, 프로그램이 API 기반의 안티 디버깅이 적용된 프로그램인 경우에, API가 PEB 구조체에 있는 BeingDebugged 필드의 데이터를 반환하는 IsDebuggerPresent() 함수를 포함한다면, IsDebuggerPresent() 함수의 반환값이 0x0이 되도록 설정하는 단계를 포함하는, 안티 디버깅 무력화 방법을 제공할 수 있다.In this embodiment, in step (b), if the program is a program to which API-based anti-debugging is applied, if the API includes an IsDebuggerPresent() function that returns the data of the BeingDebugged field in the PEB structure, IsDebuggerPresent() It is possible to provide a method of disabling anti-debugging, including setting the function return value to be 0x0.

본 실시예에 있어서, (b) 단계는, 프로그램이 API 기반의 안티 디버깅 이 적용된 프로그램인 경우에, API가 NtQueryInformationProcoess() 함수를 호출하여 안티 디버깅을 수행하는 CheeckRemoteDebuggerPresent() 함수를 포함한다면, NtQueryInformationProcoess() 함수가 호출되기 전에, CheeckRemoteDebuggerPresent() 함수의 반환값이 0x0이 되도록 설정하거나 NtQueryInformationProcoess() 함수를 우회하는 단계를 포함하는, 안티 디버깅 무력화 방법을 제공할 수 있다.In this embodiment, in step (b), if the program is a program to which API-based anti-debugging is applied, if the API includes a CheeckRemoteDebuggerPresent() function that performs anti-debugging by calling the NtQueryInformationProcoess() function, NtQueryInformationProcoess( ) Before the function is called, the return value of the CheeckRemoteDebuggerPresent() function is set to 0x0 or the NtQueryInformationProcoess() function is bypassed.

본 실시예에 있어서, (b) 단계는, 프로그램이 API 기반의 안티 디버깅이 적용된 프로그램인 경우에, API가 NtZwQueryInformationProcess() 함수 또는 ZwQueryInformationProcess() 함수를 포함한다면, NtZwQueryInformationProcess() 함수 또는 ZwQueryInformationProcess() 함수의 구문(Syntax)이 포함하는 ProcessInformationClass 파라미터의 데이터가 ProcessDebugPort(0x7)인지 여부를 검사하는 단계; 및 검사에 의해 ProcessInformationClass 파라미터의 데이터가 ProcessDebugPort(0x7)가 맞다면, NtZwQueryInformationProcess() 함수 또는 ZwQueryInformationProcess() 함수의 반환값이 0x0이 되도록 설정하는 단계를 포함하는, 안티 디버깅 무력화 방법을 제공할 수 있다.In this embodiment, step (b) is, if the program is a program to which API-based anti-debugging is applied, and the API includes the NtZwQueryInformationProcess() function or the ZwQueryInformationProcess() function, the NtZwQueryInformationProcess() function or the ZwQueryInformationProcess() function Checking whether the data of the ProcessInformationClass parameter included in the syntax (Syntax) of ProcessDebugPort (0x7); And setting the return value of the NtZwQueryInformationProcess() function or the ZwQueryInformationProcess() function to be 0x0, if the data of the ProcessInformationClass parameter by the inspection is ProcessDebugPort(0x7).It can provide an anti-debugging disabling method.

본 실시예에 있어서, (b) 단계는, 프로그램이 API 기반의 안티 디버깅이 적용된 프로그램인 경우에, API가 FindWindowW() 함수 또는 FindWindowA() 함수를 포함한다면, IpWindowName 파라미터의 데이터를 수정하여, FindWindowW() 함수 또는 FindWindowA() 함수의 반환값이 0x0이 되도록 설정하는 단계를 포함하는, 안티 디버깅 무력화 방법을 제공할 수 있다.In the present embodiment, step (b) is, if the program is a program to which API-based anti-debugging is applied, and if the API includes a FindWindowW() function or a FindWindowA() function, the data of the IpWindowName parameter is modified, and the FindWindowW It is possible to provide a method of disabling anti-debugging, including setting the return value of the () function or the FindWindowA() function to be 0x0.

본 발명의 일 실시예에 따른, 안티 디버깅(Anti-Debugging) 무력화 장치에 있어서, 안티 디버깅 무력화 프로그램이 저장된 메모리; 및 메모리에 저장된 프로그램을 실행하는 프로세서를 포함하고, 프로세서는 프로그램의 수행에 따라, 안티 디버깅 무력화 적용 대상 프로그램이 PEB(Process Environment Block) 구조체 또는 API(Application Program Interface) 기반의 안티 디버깅이 적용된 프로그램인지 판별하고, 프로그램 내의 안티 디버깅에 사용되는 필드 데이터 또는 파라미터 데이터를 디버거(Debugger)가 검출되지 않는 결과값을 가지도록 수정하여 안티 디버깅을 무력화하는 단계를 포함하는, 안티 디버깅 무력화 방법을 제공하고자 한다.An anti-debugging disabling device according to an embodiment of the present invention, comprising: a memory storing an anti-debugging disabling program; And a processor that executes a program stored in the memory, wherein the processor determines whether the target program to which anti-debugging is applied is a PEB (Process Environment Block) structure or an API (Application Program Interface)-based anti-debugging program according to the execution of the program. Discriminates and modifies field data or parameter data used for anti-debugging in a program to have a result value that is not detected by a debugger to provide a method of disabling anti-debugging, including the step of disabling anti-debugging.

본 발명의 일 실시예에 따른 안티 디버깅 무력화 방법들은 분석이 불가능했던 파일을 분석이 가능하도록 하고, PE 파일에 적용되는 패킹기법 중 제시했던 Yoda`s Protector와 같은 패킹 기술도 언패킹이 가능하다는 효과가 있다.The anti-debugging disabling methods according to an embodiment of the present invention enable analysis of a file that was impossible to analyze, and a packing technology such as Yoda`s Protector proposed among packing techniques applied to PE files can also be unpacked. There is.

또한, 프로그램의 기초 분석을 통해 얻을 수 있는 정보를 수집하기 위해서는 안티 디버깅을 무력화하는 것은 필수적이며, 본 발명의 일 실시예에 따른 안티 디버깅 무력화 방법에 따라 바이러스의 분석 시간을 감소시킬 수 있다.In addition, it is essential to disable anti-debugging in order to collect information that can be obtained through basic analysis of a program, and according to the method of disabling anti-debugging according to an embodiment of the present invention, analysis time of a virus may be reduced.

도 1은 PE 파일의 종류와 구조를 설명하기 위한 도면이다.
도 2는 PEB 구조체 기반의 프로그램에서 안티 디버깅에서 사용되는 필드를 보여주는 도면이다.
도 3은 API 기반의 안티 디버깅을 무력화하는 방법을 보여주는 순서도이다.
도 4는 본 발명의 일 실시예에 따른 안티 디버깅 무력화 장치의 구성을 보여주는 도면이다.
도 5는 PEB 기반 안티 디버깅 무력화를 위한 필드 정보를 보여주는 도면이다.
도 6은 IsDebuggerPresent() 함수를 포함하는 API의 원본 코드와 수정된 코드를 보여주는 도면이다.
도 7은 CheckRemoteDebuggerPresent() 함수를 포함하는 API의 원본 코드와 수정된 코드를 보여주는 도면이다.
도 8은 ZwQueryInformationProcess() 함수를 포함하는 API의 신택스(syntax)를 보여주는 도면이다.
도 9는 ZwQueryInformationProcess() 함수를 포함하는 API의 원본 코드와 수정된 코드를 보여주는 도면이다.
도 10은 FindWindowA() 함수 또는 FindWindowW() 함수를 포함하는 API의 코드를 보여주는 도면이다.
도 11은 FindWindowW() 함수의 원본 코드를 보여주는 도면이다.
도 12는 FindWindowW() 함수의 수정 코드를 보여주는 도면이다.
도 13은 안티 디버깅 무력화 방법의 동작 여부를 실험하기 위하여 설정한 PEB 구조체 및 API 각각의 코드를 보여주는 도면이다.
도 14는 비교예 및 본 발명의 일 실시예에 따른 안티 디버깅 무력화 실험 결과를 보여주는 도면이다.
1 is a diagram for explaining the type and structure of a PE file.
2 is a diagram showing fields used in anti-debugging in a PEB structure-based program.
3 is a flowchart showing a method of disabling API-based anti-debugging.
4 is a diagram showing the configuration of an anti-debugging disabling device according to an embodiment of the present invention.
5 is a diagram showing field information for disabling PEB-based anti-debugging.
6 is a diagram showing the original code and the modified code of the API including the IsDebuggerPresent() function.
7 is a diagram showing the original code and the modified code of the API including the CheckRemoteDebuggerPresent() function.
8 is a diagram showing syntax of an API including a ZwQueryInformationProcess() function.
9 is a view showing the original code and the modified code of the API including the ZwQueryInformationProcess() function.
10 is a diagram showing a code of an API including a FindWindowA() function or a FindWindowW() function.
11 is a diagram showing the original code of the FindWindowW() function.
12 is a diagram showing a modification code of the FindWindowW() function.
13 is a diagram showing codes of respective PEB structures and APIs set to test whether or not the anti-debugging disablement method is operated.
14 is a diagram showing a result of an anti-debugging disablement experiment according to a comparative example and an embodiment of the present invention.

이하에서는 첨부한 도면을 참조하여, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 본 발명의 실시예를 상세히 설명한다. 그러나, 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고, 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.Hereinafter, embodiments of the present invention will be described in detail with reference to the accompanying drawings so that those of ordinary skill in the art may easily implement the present invention. However, the present invention may be implemented in various different forms and is not limited to the embodiments described herein. In addition, in the drawings, parts irrelevant to the description are omitted in order to clearly describe the present invention, and similar reference numerals are assigned to similar parts throughout the specification.

명세서 전체에서, 어떤 부분이 다른 부분과 "연결"되어 있다고 할 때, 이는 "직접적으로 연결"되어 있는 경우뿐만 아니라, 그 중간에 다른 소자를 사이에 두고 "전기적으로 연결"되어 있는 경우도 포함한다. 또한, 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다.Throughout the specification, when a part is said to be "connected" with another part, this includes not only "directly connected" but also "electrically connected" with another element interposed therebetween. . In addition, when a part "includes" a certain component, it means that other components may be further included rather than excluding other components unless specifically stated to the contrary.

이하에서는, 본 발명에 따른 안티 디버깅 기술 및 이를 무력화하기 위한 악성 바이너리 파일 분석 기법에 대하여 설명하기로 한다.Hereinafter, an anti-debugging technique according to the present invention and a malicious binary file analysis technique for neutralizing the anti-debugging technique will be described.

도 2는 PEB 구조체 기반의 프로그램에서 안티 디버깅에서 사용되는 필드를 보여주는 도면이다.2 is a diagram showing fields used in anti-debugging in a PEB structure-based program.

도 2를 참조하면, 안티 디버깅은 대표적으로 PEB(Process Environment Block) 구조체 기반의 안티 디버깅과 API 기반의 안티 디버깅이 있다. TEB(Thread Environment Block) 구조체는 PEB 구조체를 가리키는 포인터 필드가 존재하며, 해당 필드를 참조하여 PEB 구조체를 찾아낼 수 있다. PEB 구조체의 필드 중 BeingDebugged 필드, NtGlobalFlag 필드와 PEB 구조체 내에 존재하는 HEAP 구조부의 포인터를 이용하여 안티 디버깅이 이루어진다. Referring to FIG. 2, anti-debugging typically includes anti-debugging based on a process environment block (PEB) structure and anti-debugging based on API. The TEB (Thread Environment Block) structure has a pointer field pointing to the PEB structure, and the PEB structure can be found by referring to the field. Among the fields of the PEB structure, the BeingDebugged field, the NtGlobalFlag field, and the pointer of the HEAP structure existing in the PEB structure are used to perform anti-debugging.

API 기반의 안티 디버깅에 사용되는 함수의 종류로는 IsDebuggerPresent(), CheckRemoteDebugge- rPresent(), BlockInput(), GetCurrentProcessId(), Nt(Zw)QueryInformationProcess() 등과 같은 많은 함수가 있다. 이렇게 다양한 함수로 인해 바이러스가 어떤 안티 디버깅 기술을 적재하고 있는지 찾아내기 힘들기 때문에 가능한 모든 안티 디버깅을 우회해야 한다.There are many functions such as IsDebuggerPresent(), CheckRemoteDebugge- rPresent(), BlockInput(), GetCurrentProcessId(), and Nt(Zw)QueryInformationProcess() as the types of functions used for API-based anti-debugging. Because of this variety of functions, it is difficult to find out which anti-debugging technology the virus is loaded with, so all possible anti-debugging should be bypassed.

도 3은 API 기반의 안티 디버깅을 무력화하는 방법을 보여주는 순서도이다.3 is a flowchart showing a method of disabling API-based anti-debugging.

도 3을 참조하면, 악성 바이너리 파일을 분석하기 위해서는 디버거 프로그램에 타겟 소프트웨어를 적재하는 것이 선행되어야 한다. 그 이후 안티 디버깅에 사용되는 PEB 구조체, HEAP 구조체의 필드와 안티 디버깅 API의 주소를 획득하여야 한다. PEB 구조체와 HEAP 구조부는 바이너리 파일이 메모리(RAM)에 적재되면서 필수적으로 생성되는 구조체들이므로 주소를 획득할 수 있으며, 획득한 주소를 사용하여 PEB, HEAP 구조체의 특정 필드의 데이터를 수정하여 PEB 구조체 기반의 안티 디비깅 기술을 우회할 수 있다. Referring to FIG. 3, in order to analyze a malicious binary file, loading the target software in the debugger program should be preceded. After that, you must obtain the fields of the PEB structure and HEAP structure used for anti-debugging, and the address of the anti-debugging API. The PEB structure and the HEAP structure are structures that are essentially created when a binary file is loaded into the memory (RAM), so an address can be obtained, and a PEB structure by modifying the data of a specific field of the PEB or HEAP structure using the obtained address. It can bypass the anti-debugging technology based.

그러나, 안티 디버깅 API는 윈도우즈(Windows) 운영체제에서 제공하는 DLL 파일에 종속되어 있는데, 만약 타겟 소프트웨어가 특정 DLL 파일을 사용하지 않는 경우 DLL 파일에 종속된 API의 주소를 획득할 수 없는 경우도 존재한다. 따라서, API의 주소를 획득하지 못하는 경우, 타겟 소프트웨어에서 안티 디버깅 API를 사용하지 않기 때문에 이를 간과해도 무방하다. 그러나, API의 주소를 획득한 경우에는 해당하는 API의 원본 코드를 프로그램의 흐름을 방해하지 않는 선에서 새로운 코드로 패치(patch)하여 안티 디버깅을 무력화시킬 수 있다.However, the anti-debugging API depends on the DLL file provided by the Windows operating system. If the target software does not use a specific DLL file, there may be cases where the address of the API dependent on the DLL file cannot be obtained. . Therefore, if the address of the API cannot be obtained, it can be overlooked because the target software does not use the anti-debugging API. However, when the address of the API is obtained, anti-debugging can be disabled by patching the original code of the corresponding API with new code without interfering with the flow of the program.

이하에서는, 본 발명의 일 실시예에 따른 안티 디버깅 무력화 장치(100)에 대하여 설명하기로 한다.Hereinafter, an anti-debugging disabling device 100 according to an embodiment of the present invention will be described.

도 4는 본 발명의 일 실시예에 따른 안티 디버깅 무력화 장치(100)의 구성을 보여주는 도면이다.4 is a diagram showing the configuration of an anti-debugging disabling device 100 according to an embodiment of the present invention.

본 발명의 일 실시예에 따른 안티 디버깅 무력화 장치(100)는 통신 모듈(110), 메모리(120), 프로세서(130), 데이터베이스(DB: 140)를 포함할 수 있다.The anti-debugging disabling device 100 according to an embodiment of the present invention may include a communication module 110, a memory 120, a processor 130, and a database (DB: 140).

통신 모듈(110)은 통신망과 연동하여 안티 디버깅 무력화 장치(100)에 통신 인터페이스를 제공하는데, 타 전자 기기와 데이터를 송수신하는 역할을 수행할 수 있다. 여기서, 통신 모듈(110)은 다른 네트워크 장치와 유무선 연결을 통해 제어 신호 또는 데이터 신호와 같은 신호를 송수신하기 위해 필요한 하드웨어 및 소프트웨어를 포함하는 장치일 수 있다.The communication module 110 provides a communication interface to the anti-debugging disabling device 100 by interworking with a communication network, and may perform a role of transmitting and receiving data with other electronic devices. Here, the communication module 110 may be a device including hardware and software necessary for transmitting and receiving a signal such as a control signal or a data signal through a wired or wireless connection with another network device.

메모리(120)는 안티 디버깅을 무력화하는 프로그램이 기록될 수 있다. 또한, 메모리(120)는 프로세서(130)가 처리하는 데이터를 일시적 또는 영구적으로 저장하는 기능을 수행할 수 있다. 여기서, 메모리(120)는 휘발성 저장 매체(volatile storage media) 또는 비휘발성 저장 매체(non-volatile storage media)를 포함할 수 있으나, 본 발명의 범위가 이에 한정되는 것은 아니다.In the memory 120, a program that disables anti-debugging may be recorded. In addition, the memory 120 may perform a function of temporarily or permanently storing data processed by the processor 130. Here, the memory 120 may include a volatile storage medium or a non-volatile storage medium, but the scope of the present invention is not limited thereto.

프로세서(130)는 안티 디버깅 무력화 장치(100)(100)에서 안티 디버깅을 무력화시키는 프로그램이 수행하는 전체 과정을 제어할 수 있다. 프로세서(130)가 수행하는 과정의 각 단계에 대해서는 도 5 내지 도 13을 참조하여 후술하기로 한다.The processor 130 may control an entire process performed by a program that disables anti-debugging in the anti-debugging disabling devices 100 and 100. Each step of the process performed by the processor 130 will be described later with reference to FIGS. 5 to 13.

여기서, 프로세서(130)는 프로세서(processor)와 같이 데이터를 처리할 수 있는 모든 종류의 장치를 포함할 수 있다. 여기서, '프로세서(processor)'는, 예를 들어 프로그램 내에 포함된 코드 또는 명령으로 표현된 기능을 수행하기 위해 물리적으로 구조화된 회로를 갖는, 하드웨어에 내장된 데이터 처리 장치를 의미할 수 있다. 이와 같이 하드웨어에 내장된 데이터 처리 장치의 일 예로서, 마이크로프로세서(microprocessor), 중앙처리장치(central processing unit: CPU), 프로세서 코어(processor core), 멀티프로세서(multiprocessor), ASIC(application-specific integrated circuit), FPGA(field programmable gate array) 등의 처리 장치를 망라할 수 있으나, 본 발명의 범위가 이에 한정되는 것은 아니다.Here, the processor 130 may include all types of devices capable of processing data, such as a processor. Here, the'processor' may refer to a data processing device embedded in hardware having a circuit physically structured to perform a function represented by, for example, a code included in a program or an instruction. As an example of a data processing device built into the hardware as described above, a microprocessor, a central processing unit (CPU), a processor core, a multiprocessor, and an application-specific integrated (ASIC) circuit), a field programmable gate array (FPGA), and the like, but the scope of the present invention is not limited thereto.

데이터베이스(140)는 사용자에게 안티 디버깅 무력화 방법을 수행하기 위한 기초 정보가 되는 다양한 패커 정보 PEB 구조체 정보, API 정보 등이 저장되는 것일 수 있다.The database 140 may store various packer information, PEB structure information, API information, and the like, which are basic information for performing the anti-debugging disabling method to the user.

이하에서는, 본 발명의 일 실시예에 따른 안티 디버깅 무력화 장치(100)에 의한 안티 디버깅 무력화 방법에 대하여 설명하기로 한다.Hereinafter, a method of disabling anti-debugging by the apparatus 100 for disabling anti-debugging according to an embodiment of the present invention will be described.

먼저, 안티 디버깅(Anti-Debugging) 무력화 장치를 이용하여 안티 디버깅 무력화 적용 대상 프로그램이 PEB(Process Environment Block) 구조체 또는 API(Application Program Interface) 기반의 안티 디버깅이 적용된 프로그램인지 판별하는 단계가 수행될 수 있다.First, using an anti-debugging disabling device, a step of determining whether the anti-debugging disabling application target program is a PEB (Process Environment Block) structure or an API (Application Program Interface) based anti-debugging program may be performed. have.

그 다음으로, 프로그램 내의 안티 디버깅에 사용되는 필드 데이터 또는 파라미터 데이터를 디버거(Debugger)가 검출되지 않는 결과값을 가지도록 수정하여 안티 디버깅을 무력화하는 단계가 수행될 수 있다.Next, a step of disabling anti-debugging may be performed by modifying field data or parameter data used for anti-debugging in the program to have a result value that is not detected by a debugger.

그 다음으로, 안티 디버깅이 적용된 프로그램을 디버깅하는 단계가 수행될 수 있다.Next, a step of debugging a program to which anti-debugging has been applied may be performed.

도 5는 PEB 기반 안티 디버깅 무력화를 위한 필드 정보를 보여주는 도면이다.5 is a diagram showing field information for disabling PEB-based anti-debugging.

도 5를 참조하면, 안티 디버깅 무력화 단계에서, 프로그램이 PEB 구조체 기반의 안티 디버깅이 적용된 프로그램인 경우에, PEB 구조체 내의 BeingDebugged 필드 데이터와 NtGlobalFlag 필드 데이터, 및 PEB 구조체 내의 HEAP 구조부에 위치하는 Flag 필드 데이터와 ForceFlag 필드 데이터를 디버거가 검출되지 않는 결과값을 가지도록 수정하여 안티 디버깅을 무력화할 수 있다.Referring to FIG. 5, in the anti-debugging step, when the program is a PEB structure-based anti-debugging program, BeingDebugged field data and NtGlobalFlag field data in the PEB structure, and Flag field data located in the HEAP structure in the PEB structure. It is possible to disable anti-debugging by modifying the data of the and ForceFlag fields to have a result value that the debugger does not detect.

구체적으로, PEB 기반의 안티-디버깅을 무력화시키기 위해 Immunity Debugger를 사용하여 각각의 PEB 구조체 및 HEAP 구조부에 접근한다. 수정할 데이터는 프로세스마다 가지고 있는 PEB 구조체의 BeingDebugged 필드, NtGlobalFlag 필드와 HEAP 구조체의 Flags 필드, ForceFlags필드이고, 이를 수정하여 PEB 기반 안티-디버깅을 무력화할 수 있다. Specifically, to disable PEB-based anti-debugging, each PEB structure and HEAP structure are accessed using the Immunity Debugger. The data to be modified are the BeingDebugged field of the PEB structure, the NtGlobalFlag field, the Flags field of the HEAP structure, and the ForceFlags field that each process has, and by modifying these, PEB-based anti-debugging can be disabled.

도 5를 참조하면, PEB 기반 안티-디버깅에서 사용되는 4가지 필드를 Not Debugging의 필드값과 동일하도록 수정하여 우회할 수 있다. 구체적으로, BeingDebugged 필드 데이터 값을 0x0으로, NtGlobalFlag 필드 데이터 값을 0x0으로, Flag 필드 데이터 값을 0x2으로, ForceFlag 필드 데이터 값을 0x0으로 수정하여 안티 디버깅을 무력화할 수 있다.Referring to FIG. 5, four fields used in PEB-based anti-debugging may be modified to be the same as the field values of Not Debugging and bypassed. Specifically, anti-debugging may be disabled by modifying the BeingDebugged field data value to 0x0, the NtGlobalFlag field data value to 0x0, the Flag field data value to 0x2, and the ForceFlag field data value to 0x0.

도 6은 IsDebuggerPresent() 함수를 포함하는 API의 원본 코드와 수정된 코드를 보여주는 도면이다.6 is a diagram showing the original code and the modified code of the API including the IsDebuggerPresent() function.

도 6을 참조하면, 안티 디버깅 무력화 단계에서, 프로그램이 API 기반의 안티 디버깅이 적용된 프로그램인 경우에, API가 PEB 구조체에 있는 BeingDebugged 필드의 데이터를 반환하는 IsDebuggerPresent() 함수를 포함할 수 있다. Referring to FIG. 6, in the anti-debugging step, when the program is an API-based anti-debugging program, the API may include an IsDebuggerPresent() function that returns data of the BeingDebugged field in the PEB structure.

이러한 경우에, IsDebuggerPresent() 함수의 반환값이 0x0이 되도록 설정하여 안티 디버깅을 무력화할 수 있다.In this case, anti-debugging can be disabled by setting the return value of the IsDebuggerPresent() function to be 0x0.

구체적으로, IsDebuggerPresent() API는 안티 디버깅의 대표적으로 사용되는 API로서, PEB 구조체에 있는 BeingDebugged 필드의 데이터를 반환하는 함수이다. 이 API는 디버거가 탐지될 경우 True(0x1)를 반환하고, 디버거가 탐지되지 않는다면 False(0x0)를 반환한다. 이를 무력화시키기 위해서는 최종적으로 0x0을 반환하도록 유도하여야 한다. 따라서, 도 6의 좌측에 있는 API의 원본 코드를 우측의 코드로 수정하였는데, 이는 SUB 명령어를 이용하여 EAX 레지스터가 항상 0x0을 저장하고 반환하도록 유도하여 안티 디버깅을 무력화시킨 것이다.Specifically, IsDebuggerPresent() API is a representative API used for anti-debugging, and is a function that returns the data of the BeingDebugged field in the PEB structure. This API returns True (0x1) if a debugger is detected, and False (0x0) if a debugger is not detected. In order to neutralize this, it must be induced to finally return 0x0. Therefore, the original code of the API on the left side of FIG. 6 was modified to the code on the right side, which induces the EAX register to always store and return 0x0 using the SUB instruction, thereby neutralizing anti-debugging.

도 7은 CheckRemoteDebuggerPresent() 함수를 포함하는 API의 원본 코드와 수정된 코드를 보여주는 도면이다.7 is a diagram showing the original code and the modified code of the API including the CheckRemoteDebuggerPresent() function.

도 7을 참조하면, 안티 디버깅 무력화 단계에서, 프로그램이 API 기반의 안티 디버깅이 적용된 프로그램인 경우에, API가 NtQueryInformationProcoess() 함수를 호출하여 안티 디버깅을 수행하는 CheeckRemoteDebuggerPresent() 함수를 포함할 수 있다. Referring to FIG. 7, in the anti-debugging step, when the program is an API-based anti-debugging program, the API may include a CheeckRemoteDebuggerPresent() function for performing anti-debugging by calling the NtQueryInformationProcoess() function.

이러한 경우에는 프로세스에서 NtQueryInformationProcoess() 함수가 호출되기 전에, CheeckRemoteDebuggerPresent() 함수의 반환값이 0x0이 되도록 설정하거나 NtQueryInformationProcoess() 함수를 우회하여 안티 디버깅을 무력화할 수 있다.In this case, before the NtQueryInformationProcoess() function is called in the process, the return value of the CheeckRemoteDebuggerPresent() function is set to be 0x0, or the NtQueryInformationProcoess() function can be bypassed to disable anti-debugging.

구체적으로, CheeckRemoteDebuggerPresent() API는 특정 프로세스가 디버깅 중인지 아닌지 확인하는 API이다. 이 함수는 디버깅 중일 때 True(0x1), 아닐 경우 False(0x0)를 반환하는데, 디버깅 여부를 판단하기 위해 API의 내부에서 NtQueryInformationPrcoess() API를 다시 호출한다. 도 7의 좌측 코드는 일부 생략된 함수의 내부 코드로, 이를 무력화시키기 위해서는 우측 코드와 같이 NtQueryInformationProcess() 함수가 호출되기 전에 EAX 레지스터에 0x0을 저장한 후 함수를 반환하여 무력화해야 한다. 본 실시예에서는 도 7의 우측 코드와 같이 PUSH 명령어로 0x0을 스택에 저장하고, POP 명령어로 EAX 레지스터에 0x0을 저장한 뒤, RETN 명령어로 함수를 종료하여 무력화시켰다. 이때, 스택에 저장된 복귀 주소를 반드시 POP 명령어로 EBP 레지스터에 저장한 뒤, 함수를 종료하는 것이 중요하다.Specifically, the CheeckRemoteDebuggerPresent() API is an API that checks whether a specific process is being debugged. This function returns True (0x1) when debugging is in progress, and False (0x0) when not. In order to determine whether to debug, the NtQueryInformationPrcoess() API is called again inside the API. The code on the left of FIG. 7 is an internal code of a function that is partially omitted, and in order to disable it, 0x0 must be stored in the EAX register before the NtQueryInformationProcess() function is called as in the right code, and then the function must be returned to neutralize it. In this embodiment, as shown in the code on the right side of FIG. 7, 0x0 is stored on the stack with a PUSH instruction, and 0x0 is stored in the EAX register with a POP instruction, and the function is terminated with a RETN instruction to neutralize it. At this time, it is important to terminate the function after storing the return address stored in the stack in the EBP register with the POP instruction.

도 8은 ZwQueryInformationProcess() 함수를 포함하는 API의 신택스(syntax)를 보여주는 도면이다. 도 9는 ZwQueryInformationProcess() 함수를 포함하는 API의 원본 코드와 수정된 코드를 보여주는 도면이다.8 is a diagram showing syntax of an API including a ZwQueryInformationProcess() function. 9 is a view showing the original code and the modified code of the API including the ZwQueryInformationProcess() function.

도 8및 도9를 참조하면, 안티 디버깅 무력화 단계에서, 프로그램이 API 기반의 안티 디버깅이 적용된 프로그램인 경우에, API가 NtZwQueryInformationProcess() 함수 또는 ZwQueryInformationProcess() 함수를 포함할 수 있다. 8 and 9, in the anti-debugging disabling step, when the program is a program to which API-based anti-debugging is applied, the API may include a NtZwQueryInformationProcess() function or a ZwQueryInformationProcess() function.

이러한 경우에, NtZwQueryInformationProcess() 함수 또는 ZwQueryInformationProcess() 함수의 구문(Syntax)이 포함하는 ProcessInformationClass 파라미터의 데이터가 ProcessDebugPort(0x7)인지 여부를 검사하는 단계가 수행될 수 있다.In this case, a step of checking whether the data of the ProcessInformationClass parameter included in the syntax of the NtZwQueryInformationProcess() function or the ZwQueryInformationProcess() function is ProcessDebugPort (0x7) may be performed.

그 다음으로, 위의검사에 의해 ProcessInformationClass 파라미터의 데이터가 ProcessDebugPort(0x7)가 맞다면, NtZwQueryInformationProcess() 함수 또는 ZwQueryInformationProcess() 함수의 반환값이 0x0이 되도록 설정하는 단계를 순차적으로 수행하여 안티 디버깅을 무력화할 수 있다.Next, if the data of the ProcessInformationClass parameter is ProcessDebugPort(0x7) by the above inspection, the steps of setting the return value of the NtZwQueryInformationProcess() function or ZwQueryInformationProcess() function to be 0x0 are performed sequentially to disable anti-debugging. can do.

구체적으로, Nt(Zw)QueryInformationProcess() API는 안티 디버깅 외에 프로세스에 대한 정보를 확인할 수 있는 API이기 때문에 프로그램 흐름을 방해하지 않는 선에서 무력화가 진행되어야 한다. 이러한 API를 무력화시키는 방법을 이해하기 위해 도 8을 참조하면, 이는 Nt(Zw)QueryInform- ationProcess() API의 신택스(Syntax)를 나타낸 것으로, 이 함수를 호출할 때 ProcessInformationClass 파라미터에 ProcessDebugPort(0x7)가 사용된다면 안티 디버깅이 이루어지는 것을 알 수 있다. Specifically, since the Nt(Zw)QueryInformationProcess() API is an API that allows you to check information about processes other than anti-debugging, it must be neutralized without interfering with the program flow. Referring to FIG. 8 to understand how to disable these APIs, this shows the syntax of the Nt(Zw)QueryInformationProcess() API. When calling this function, ProcessDebugPort(0x7) is in the ProcessInformationClass parameter. If used, you can see that anti-debugging is done.

그러므로, 이 함수를 무력화시키기 위해서는 도 9의 좌측에 있는 원본 코드를 우측 코드와 같이 ProcessInformationClass 파라미터의 데이터가 ProcessDebugPort(0x7) 맞는지 검사할 필요가 있으며, ProcessDebugPort가 맞다면 PUSH 명령어를 이용하여 스택에 0x0을 저장하고, 다시 POP 명령어를 사용하여 EAX 레지스터에 0x0을 저장하여 반환한다. 만약 PorcessDebugPort(0x7)가 아니라면 좌측의 원본 코드를 실행시켜 프로그램 흐름을 방해하지 않도록 유도할 수 있다.Therefore, in order to disable this function, it is necessary to check whether the data of the ProcessInformationClass parameter is ProcessDebugPort(0x7) in the original code on the left of FIG. 9 as in the code on the right. If ProcessDebugPort is correct, 0x0 is written to the stack using the PUSH command. Save and return by storing 0x0 in the EAX register by using the POP instruction again. If it is not PorcessDebugPort(0x7), you can induce it not to interfere with the program flow by executing the original code on the left.

도 10은 FindWindowA() 함수 또는 FindWindowW() 함수를 포함하는 API의 코드를 보여주는 도면이다. 도 11은 FindWindowW() 함수의 원본 코드를 보여주는 도면이다. 도 12는 FindWindowW() 함수의 수정 코드를 보여주는 도면이다.10 is a diagram showing a code of an API including a FindWindowA() function or a FindWindowW() function. 11 is a diagram showing the original code of the FindWindowW() function. 12 is a diagram showing a modification code of the FindWindowW() function.

도 10 내지 도 12를 참조하면, 안티 디버깅 무력화 단계에서, 프로그램이 API 기반의 안티 디버깅이 적용된 프로그램인 경우에, API가 FindWindowW() 함수 또는 FindWindowA() 함수를 포함할 수 있다.Referring to FIGS. 10 to 12, in the step of disabling anti-debugging, when the program is a program to which API-based anti-debugging is applied, the API may include a FindWindowW() function or a FindWindowA() function.

이러한 경우에, IpWindowName 파라미터의 데이터를 수정하여, FindWindowW() 함수 또는 FindWindowA() 함수의 반환값이 0x0이 되도록 설정하여 안티 디버깅을 무력화할 수 있다.In this case, it is possible to disable anti-debugging by modifying the data of the IpWindowName parameter and setting the return value of the FindWindowW() function or the FindWindowA() function to 0x0.

구체적으로, FindWindowW(), FindWindowA() 두 함수는 디버깅을 탐지 여부 자체를 판단하는 함수는 아니다. 이 함수들은 타 프로그램의 윈도우 핸들을 획득하는 함수로서 동일한 운영체제에서 디버거 프로그램의 여부를 확인하는 방법으로 안티 디버깅이 수행될 수 있다. 도 10을 참조하면, FindWindowA()와 FindWindowW() 함수의 파라미터를 볼 수 있고, lpClassName은 특정 클래스 이름을, lpWindowName은 특정 윈도우 이름을 전달하 여 함수를 호출하는 것을 알 수 있다. 만약 해당 윈도우를 찾았다면 윈도우 핸들을 반환하며, 찾지 못했을 경우 0x0을 반환하게 된다. Specifically, the two functions FindWindowW() and FindWindowA() are not functions that determine whether debugging is detected or not. These functions obtain the window handle of another program, and anti-debugging can be performed by checking whether there is a debugger program in the same operating system. Referring to FIG. 10, parameters of the FindWindowA() and FindWindowW() functions can be viewed, and it can be seen that the function is called by passing a specific class name for lpClassName and a specific window name for lpWindowName. If the window is found, the window handle is returned. If not, 0x0 is returned.

이러한 함수를 호출할 때, lpWindowName 파라미터에 특정 디버거의 윈도우 이름을 입력하여 Anti-Debugging이 가능하다. 이 함수를 우회하기 위해서는 0x0을 반환하게 하면 가능하다. 도 11의 코드는 FindWindowW()의 원본 기계어 코드이며, 도 12의 코드는 수정된 함수 코드이다. 0x0을 반환하기 위해 본 실시예에서는 가상 주소 (0x00520000)를 할당하여, 새로운 코드를 작성하여 안티 디버깅을 무력화하였다. 이하의 순서대로 기존의 CALL 명령어를 실행한 후, XOR 명령어를 이용하여 레지스터에 0x0을 저장하고, 복귀 주소를 EBP 레지스터에 POP 명령어를 사용하여 저장한 후 함수를 불러와서 안티 디버깅을 우회할 수 있다.When calling these functions, anti-debugging is possible by entering the window name of a specific debugger in the lpWindowName parameter. To bypass this function, it is possible to return 0x0. The code in FIG. 11 is the original machine code of FindWindowW(), and the code in FIG. 12 is a modified function code. In this embodiment, in order to return 0x0, a virtual address (0x00520000) was allocated and a new code was written to disable anti-debugging. After executing the existing CALL instruction in the following order, you can bypass anti-debugging by storing 0x0 in the register using the XOR instruction, storing the return address in the EBP register using the POP instruction, and calling the function. .

이하에서는, 위에서 설명한 안티 디버깅 무력화 방법의 동작 여부를 두 가지 방법으로 나누어 실험한 방법과 그 결과에 대하여 설명하기로 한다. Hereinafter, a method of experimenting by dividing whether or not the anti-debugging disablement method described above operates in two ways, and a result thereof will be described.

도 13은 안티 디버깅 무력화 방법의 동작 여부를 실험하기 위하여 설정한 PEB 구조체 및 API 각각의 코드를 보여주는 도면이다.13 is a diagram showing codes of respective PEB structures and APIs set to test whether the anti-debugging disablement method is operated.

먼저 첫 번째 실험에서는 안티 디버깅 방법을 포함한 간단한 예제 프로그램을 구현하였으며, 안티 디버깅무력화 여부를 정확히 검증하기 위해 PEB 구조체 및 안티 디버깅 함수를 포함하는 API에 의해 반환되는 값을 출력이 되는지 확인하였다. 두 번째 실험은 언패킹 시스템을 위해 패킹된 파일을 사용하여 본 실시예에서 제안하는 안티 디버깅 무력화 기능의 결과를 확인하는 실험을 수행하였다.First, in the first experiment, a simple example program including an anti-debugging method was implemented, and in order to accurately verify whether anti-debugging was disabled, it was checked whether the value returned by the API including the PEB structure and the anti-debugging function is output. In the second experiment, an experiment was performed to confirm the result of the anti-debugging disablement function proposed in the present embodiment using a file packed for the unpacking system.

첫 번째 실험에서 사용할 예제 프로그램은 도 13의 코드와 같은 방법으로 구현하였다. 구체적으로, 안티 디버깅 방법에 사용되는 PEB 구조체와 관련된 함수들을 사용하여 구현하였으며, 디버거 탐지 여부에 따라 출력하는 내용이 다르게 구성하였다. 두 번째 실험의 데이터는 5종류의 패커로 Windows 7의 계산기 프로그램(calc.exe)을 패킹한 데이터를 사용하였다. 이 때 사용한 패커들의 공통적인 특징은 안티 디버깅 함수들을 적용하여 소프트웨어를 보호한다는 것이다.The example program to be used in the first experiment was implemented in the same way as the code of FIG. 13. Specifically, it was implemented using functions related to the PEB structure used in the anti-debugging method, and the output contents were configured differently depending on whether or not the debugger was detected. The data for the second experiment were packed with the Windows 7 calculator program (calc.exe) with 5 types of packers. The common feature of the packers used at this time is that the software is protected by applying anti-debugging functions.

도 14는 비교예 및 본 발명의 일 실시예에 따른 안티 디버깅 무력화 실험 결과를 보여주는 도면이다.14 is a diagram showing results of an anti-debugging disablement experiment according to a comparative example and an embodiment of the present invention.

첫 번째 실험에서 제안한 방법을 사용하지 않고 사용자 레벨 디버거에서 분석한 결과, 도 14의 (a)와 같이 실험 프로그램에서 사용된 안티 디버깅 방법들은 디버거를 탐지한 것을 확인할 수 있다. 다음으로 제안한 안티 디버깅 무력화 방법을 사용하여 다시 분석한 결과, 도 14의 (b)와 같이 예제 프로그램에서 사용된 안티 디버깅 기법들을 모두 탐지되지 않으므로 제안한 안티 디버깅 무력화 방법이 제대로 동작된 것을 검증하였다.As a result of analysis in the user-level debugger without using the method proposed in the first experiment, it can be confirmed that the anti-debugging methods used in the experimental program as shown in FIG. 14A detect the debugger. Next, as a result of re-analysis using the proposed anti-debugging disabling method, it was verified that the proposed anti-debugging disabling method was properly operated because all of the anti-debugging techniques used in the example program were not detected as shown in FIG. 14B.

두 번째 실험에서는 사용한 패커들은 'Yoda's Protector', 'Themida', 'ACprotect', 'Armadilo', 'PECompact' 사용하였다. 각각의 패커는 하나 또는 두 개 이상의 안티 디버깅 API를 가지고 있으며, 표 1의 기법들 중 각각의 패커가 가지고 있는 안티 디버깅 기법을 확인할 수 있다. 표 2, 3은 Yoda's Protector 패커, 표 4, 5는 ACprotect 패커에서 사용된 안티 디버깅 기법과 안티 디버깅 무력화 방법이 적용된 새로운 코드를 보여주는 것이다.The packers used in the second experiment were'Yoda's Protector','Themida','ACprotect','Armadilo', and'PECompact'. Each packer has one or more anti-debugging APIs, and among the techniques in Table 1, you can check the anti-debugging techniques each packer has. Tables 2 and 3 show the Yoda's Protector packer, and Tables 4 and 5 show the anti-debugging technique used in the ACprotect packer and the new code to which the anti-debugging disabling method was applied.

[표 1][Table 1]

Figure pat00001
Figure pat00001

[표 2][Table 2]

Figure pat00002
Figure pat00002

[표 3][Table 3]

Figure pat00003
Figure pat00003

[표 4][Table 4]

Figure pat00004
Figure pat00004

[표 5][Table 5]

Figure pat00005
Figure pat00005

이상으로 설명한, 본 발명의 일 실시예에 따른 안티 디버깅 무력화 방법들은 분석이 불가능했던 파일을 분석이 가능하도록 하고, PE 파일에 적용되는 패킹기법 중 제시했던 Yoda`s Protector와 같은 패킹 기술도 언패킹이 가능하다는 효과가 있다.또한, 프로그램의 기초 분석을 통해 얻을 수 있는 정보를 수집하기 위해서는 안티 디버깅을 무력화하는 것은 필수적이며, 본 발명의 일 실시예에 따른 안티 디버깅 무력화 방법에 따라 바이러스의 분석 시간을 감소시킬 수 있다.As described above, the anti-debugging disabling methods according to an embodiment of the present invention enable analysis of files that could not be analyzed, and unpacking techniques such as Yoda`s Protector suggested among packing techniques applied to PE files are also unpacked. In addition, it is essential to disable anti-debugging in order to collect information that can be obtained through basic analysis of a program, and analysis time of virus according to the method of disabling anti-debugging according to an embodiment of the present invention. Can be reduced.

한편, 본 발명의 일 실시예에 따른 안티 디버깅 무력화 방법은 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터에 의해 실행가능한 명령어를 포함하는 기록 매체의 형태로도 구현될 수 있다. 컴퓨터 판독 가능 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 가용 매체일 수 있고, 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체를 모두 포함한다. 또한, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체를 포함할 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 모두 포함한다. 본 발명의 방법 및 시스템은 특정 실시예와 관련하여 설명되었지만, 그것들의 구성 요소 또는 동작의 일부 또는 전부는 범용 하드웨어 아키텍쳐를 갖는 컴퓨터 시스템을 사용하여 구현될 수 있다.Meanwhile, the anti-debugging disabling method according to an embodiment of the present invention may be implemented in the form of a recording medium including instructions executable by a computer, such as a program module executed by a computer. Computer-readable media can be any available media that can be accessed by a computer, and includes both volatile and nonvolatile media, removable and non-removable media. Further, the computer-readable medium may include a computer storage medium. Computer storage media includes both volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions, data structures, program modules or other data. Although the methods and systems of the present invention have been described in connection with specific embodiments, some or all of their components or operations may be implemented using a computer system having a general-purpose hardware architecture.

이상의 설명은 본 발명의 기술적 사상을 예시적으로 설명한 것에 불과한 것으로서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명에 개시된 실시예는 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술적 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.The above description is merely illustrative of the technical idea of the present invention, and those of ordinary skill in the art to which the present invention pertains will be able to make various modifications and variations without departing from the essential characteristics of the present invention. Accordingly, the embodiments disclosed in the present invention are not intended to limit the technical idea of the present invention, but to explain the technical idea, and the scope of the technical idea of the present invention is not limited by these embodiments. The scope of protection of the present invention should be interpreted by the following claims, and all technical ideas within the scope equivalent thereto should be construed as being included in the scope of the present invention.

100: 안티 디버깅 무력화 장치
110: 통신 모듈
120: 메모리
130: 프로세서
140: 데이터베이스
100: anti-debugging disabled device
110: communication module
120: memory
130: processor
140: database

Claims (10)

안티 디버깅(Anti-Debugging) 무력화 장치를 이용한 안티 디버깅 무력화 방법에 있어서,
(a) 안티 디버깅 무력화 적용 대상 프로그램이 PEB(Process Environment Block) 구조체 또는 API(Application Program Interface) 기반의 안티 디버깅이 적용된 프로그램인지 판별하는 단계; 및
(b) 상기 프로그램 내의 안티 디버깅에 사용되는 필드 데이터 또는 파라미터 데이터를 디버거(Debugger)가 검출되지 않는 결과값을 가지도록 수정하여 안티 디버깅을 무력화하는 단계를 포함하는, 안티 디버깅 무력화 방법.
In the anti-debugging disabling method using an anti-debugging disabling device,
(a) determining whether the anti-debugging neutralization application target program is a PEB (Process Environment Block) structure or an API (Application Program Interface) based anti-debugging program; And
(b) disabling anti-debugging by modifying field data or parameter data used for anti-debugging in the program to have a result value that is not detected by a debugger.
제1항에 있어서,
(c) 상기 (b) 단계 이후에, 상기 안티 디버깅이 적용된 프로그램을 디버깅하는 단계를 포함하는, 안티 디버깅 무력화 방법.
The method of claim 1,
(c) after the step (b), including the step of debugging the program to which the anti-debugging has been applied.
제1항에 있어서,
상기 (b) 단계는,
상기 프로그램이 PEB 구조체 기반의 안티 디버깅이 적용된 프로그램인 경우에, 상기 PEB 구조체 내의 BeingDebugged 필드 데이터와 NtGlobalFlag 필드 데이터, 및 상기 PEB 구조체 내의 HEAP 구조부에 위치하는 Flag 필드 데이터와 ForceFlag 필드 데이터를 디버거가 검출되지 않는 결과값을 가지도록 수정하여 안티 디버깅을 무력화하는 단계를 포함하는, 안티 디버깅 무력화 방법.
The method of claim 1,
The step (b),
When the program is a PEB structure-based anti-debugging program, the BeingDebugged field data and NtGlobalFlag field data in the PEB structure, and the Flag field data and ForceFlag field data located in the HEAP structure in the PEB structure are not detected by the debugger. A method of disabling anti-debugging, comprising the step of disabling anti-debugging by modifying to have a result that is not a result.
제3항에 있어서,
상기 BeingDebugged 필드 데이터 값을 0x0으로, 상기 NtGlobalFlag 필드 데이터 값을 0x0으로, 상기 Flag 필드 데이터 값을 0x2으로, 상기 ForceFlag 필드 데이터 값을 0x0으로 수정하여 안티 디버깅을 무력화하는, 안티 디버깅 무력화 방법.
The method of claim 3,
A method of disabling anti-debugging by modifying the BeingDebugged field data value to 0x0, the NtGlobalFlag field data value to 0x0, the Flag field data value to 0x2, and the ForceFlag field data value to 0x0.
제1항에 있어서,
상기 (b) 단계는,
상기 프로그램이 상기 API 기반의 안티 디버깅이 적용된 프로그램인 경우에, 상기 API가 PEB 구조체에 있는 BeingDebugged 필드의 데이터를 반환하는 IsDebuggerPresent() 함수를 포함한다면, IsDebuggerPresent() 함수의 반환값이 0x0이 되도록 설정하는 단계를 포함하는, 안티 디버깅 무력화 방법.
The method of claim 1,
The step (b),
When the program is a program to which the API-based anti-debugging is applied, if the API includes the IsDebuggerPresent() function that returns the data of the BeingDebugged field in the PEB structure, the return value of the IsDebuggerPresent() function is set to be 0x0. A method of disabling anti-debugging comprising the step of.
제1항에 있어서,
상기 (b) 단계는,
상기 프로그램이 API 기반의 안티 디버깅이 적용된 프로그램인 경우에, 상기 API가 NtQueryInformationProcoess() 함수를 호출하여 안티 디버깅을 수행하는 CheeckRemoteDebuggerPresent() 함수를 포함한다면, NtQueryInformationProcoess() 함수가 호출되기 전에, CheeckRemoteDebuggerPresent() 함수의 반환값이 0x0이 되도록 설정하거나 NtQueryInformationProcoess() 함수를 우회하는 단계를 포함하는, 안티 디버깅 무력화 방법.
The method of claim 1,
The step (b),
If the program is a program to which API-based anti-debugging is applied, and the API includes a CheeckRemoteDebuggerPresent() function that performs anti-debugging by calling the NtQueryInformationProcoess() function, before the NtQueryInformationProcoess() function is called, CheeckRemoteDebuggerPresent() A method of disabling anti-debugging, comprising setting the return value of the function to be 0x0 or bypassing the NtQueryInformationProcoess() function.
제1항에 있어서,
상기 (b) 단계는,
상기 프로그램이 API 기반의 안티 디버깅이 적용된 프로그램인 경우에, 상기 API가 NtZwQueryInformationProcess() 함수 또는 ZwQueryInformationProcess() 함수를 포함한다면, 상기 NtZwQueryInformationProcess() 함수 또는 ZwQueryInformationProcess() 함수의 구문(Syntax)이 포함하는 ProcessInformationClass 파라미터의 데이터가 ProcessDebugPort(0x7)인지 여부를 검사하는 단계; 및
상기 검사에 의해 상기 ProcessInformationClass 파라미터의 데이터가 ProcessDebugPort(0x7)가 맞다면, NtZwQueryInformationProcess() 함수 또는 ZwQueryInformationProcess() 함수의 반환값이 0x0이 되도록 설정하는 단계를 포함하는, 안티 디버깅 무력화 방법.
The method of claim 1,
The step (b),
When the program is a program to which API-based anti-debugging is applied, if the API includes the NtZwQueryInformationProcess() function or the ZwQueryInformationProcess() function, the processInformationClass included in the syntax of the NtZwQueryInformationProcess() function or the ZwQueryInformationProcess() function Checking whether the parameter data is ProcessDebugPort (0x7); And
If the data of the ProcessInformationClass parameter by the check is ProcessDebugPort(0x7), then setting the return value of the NtZwQueryInformationProcess() function or the ZwQueryInformationProcess() function to be 0x0.
제1항에 있어서,
상기 (b) 단계는,
상기 프로그램이 API 기반의 안티 디버깅이 적용된 프로그램인 경우에, 상기 API가 FindWindowW() 함수 또는 FindWindowA() 함수를 포함한다면, IpWindowName 파라미터의 데이터를 수정하여, FindWindowW() 함수 또는 FindWindowA() 함수의 반환값이 0x0이 되도록 설정하는 단계를 포함하는, 안티 디버깅 무력화 방법.
The method of claim 1,
The step (b),
If the program is a program to which API-based anti-debugging has been applied, and the API includes the FindWindowW() function or the FindWindowA() function, the data of the IpWindowName parameter is modified and the FindWindowW() function or the FindWindowA() function is returned. A method of disabling anti-debugging comprising setting the value to be 0x0.
안티 디버깅(Anti-Debugging) 무력화 장치에 있어서,
안티 디버깅 무력화 프로그램이 저장된 메모리; 및
상기 메모리에 저장된 프로그램을 실행하는 프로세서를 포함하고,
상기 프로세서는 상기 프로그램의 수행에 따라,
안티 디버깅 무력화 적용 대상 프로그램이 PEB(Process Environment Block) 구조체 또는 API(Application Program Interface) 기반의 안티 디버깅이 적용된 프로그램인지 판별하고, 상기 프로그램 내의 안티 디버깅에 사용되는 필드 데이터 또는 파라미터 데이터를 디버거(Debugger)가 검출되지 않는 결과값을 가지도록 수정하여 안티 디버깅을 무력화하는 단계를 포함하는, 안티 디버깅 무력화 방법.
In the anti-debugging disabling device,
Memory in which the anti-debugging disable program is stored; And
A processor that executes a program stored in the memory,
According to the execution of the program, the processor,
Determining whether the target program to which anti-debugging is applied is a PEB (Process Environment Block) structure or API (Application Program Interface)-based anti-debugging program, and debug field data or parameter data used for anti-debugging in the program A method of disabling anti-debugging comprising the step of disabling anti-debugging by modifying to have a result value that is not detected.
제1항 내지 제8항 중 어느 한 항의 방법을 구현하기 위한 프로그램이 기록된 컴퓨터로 판독 가능한 기록 매체.A computer-readable recording medium on which a program for implementing the method of claim 1 is recorded.
KR1020190143201A 2019-11-11 2019-11-11 Apparatus and method for disabling anti-debugging KR20210057239A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020190143201A KR20210057239A (en) 2019-11-11 2019-11-11 Apparatus and method for disabling anti-debugging

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190143201A KR20210057239A (en) 2019-11-11 2019-11-11 Apparatus and method for disabling anti-debugging

Publications (1)

Publication Number Publication Date
KR20210057239A true KR20210057239A (en) 2021-05-21

Family

ID=76157489

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190143201A KR20210057239A (en) 2019-11-11 2019-11-11 Apparatus and method for disabling anti-debugging

Country Status (1)

Country Link
KR (1) KR20210057239A (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113760770A (en) * 2021-09-14 2021-12-07 上海观安信息技术股份有限公司 Anti-debugging method and system based on automatic static resource detection

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113760770A (en) * 2021-09-14 2021-12-07 上海观安信息技术股份有限公司 Anti-debugging method and system based on automatic static resource detection

Similar Documents

Publication Publication Date Title
EP3039608B1 (en) Hardware and software execution profiling
Sun et al. OAT: Attesting operation integrity of embedded devices
RU2514141C1 (en) Method of emulating system function calls for evading emulation countermeasures
EP2237186B1 (en) Method for accelerating hardware emulator used for malware detection and analysis
US9471514B1 (en) Mitigation of cyber attacks by pointer obfuscation
JP2018041438A (en) System and method for detecting malicious codes in file
Shi et al. Handling anti-virtual machine techniques in malicious software
JP6370098B2 (en) Information processing apparatus, information processing monitoring method, program, and recording medium
WO2021247187A1 (en) Undetectable sandbox for malware
Zhang et al. A defense framework against malware and vulnerability exploits
Chevalier et al. Co-processor-based behavior monitoring: Application to the detection of attacks against the system management mode
CN103970574B (en) The operation method and device of office programs, computer system
Piromsopa et al. Survey of protections from buffer-overflow attacks
US20120096554A1 (en) Malware identification
US20240004967A1 (en) Software protection method and apparatus, electronic device, and storage medium
CN106127054B (en) A kind of system-level safety protecting method towards smart machine control instruction
Zeng et al. Tailored application-specific system call tables
KR20210057239A (en) Apparatus and method for disabling anti-debugging
Lakhotia et al. Abstracting stack to detect obfuscated calls in binaries
Tian et al. A policy‐centric approach to protecting OS kernel from vulnerable LKMs
Bouffard et al. Hardening a Java Card Virtual Machine Implementation with the MPU
Durães et al. A methodology for the automated identification of buffer overflow vulnerabilities in executable software without source-code
Kim et al. Disabling anti-debugging techniques for unpacking system in user-level debugger
Kim et al. Defeating anti-debugging techniques for malware analysis using a debugger
RU101217U1 (en) PROCESS EMULSION ACCELERATION SYSTEM

Legal Events

Date Code Title Description
E601 Decision to refuse application