KR100781554B1 - Method for preventing from debugging computer program in real time and recording material thereof - Google Patents
Method for preventing from debugging computer program in real time and recording material thereof Download PDFInfo
- Publication number
- KR100781554B1 KR100781554B1 KR1020050079134A KR20050079134A KR100781554B1 KR 100781554 B1 KR100781554 B1 KR 100781554B1 KR 1020050079134 A KR1020050079134 A KR 1020050079134A KR 20050079134 A KR20050079134 A KR 20050079134A KR 100781554 B1 KR100781554 B1 KR 100781554B1
- Authority
- KR
- South Korea
- Prior art keywords
- debugging
- computer program
- computer
- program
- interrupt
- Prior art date
Links
- 238000004590 computer program Methods 0.000 title claims abstract description 81
- 238000000034 method Methods 0.000 title claims abstract description 28
- 230000006870 function Effects 0.000 description 16
- 230000002265 prevention Effects 0.000 description 4
- 239000000700 radioactive tracer Substances 0.000 description 3
- 230000000903 blocking effect Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
Abstract
실시간 컴퓨터 프로그램의 디버깅 방지 방법 및 그 기록 매체가 개시되어 있다. 본 발명은, A) 실행 중인 컴퓨터 프로그램에서 발생된 디버깅을 위한 인터럽트(Interrupt)에 상응하는 인터럽트 테이블을 후킹(Hooking)하는 단계와; B) 상기 디버깅이 발생된 상기 컴퓨터 프로그램이 안티-디버깅(Anti-Debugging)을 수행하기 위한 대상 프로그램인지 여부를 판단하는 단계와; C) 상기 컴퓨터 프로그램이 상기 안티-디버깅 대상 프로그램인 경우, 상기 인터럽트에 따른 디버깅(Debugging)이 수행되고 있다는 사실을 등록하는 단계와; D) 상기 등록된 디버깅 수행 사실을 상기 컴퓨터 프로그램으로 전송하는 단계와; E) 상기 컴퓨터 프로그램이 실행 중인 컴퓨터의 운영 체제(Operation System)의 오리지날 코드(Original Code)를 호출하는 단계를 포함하여, 실시간으로 컴퓨터 프로그램의 디버깅을 방지하여 역 어셈블링 되지 않도록 즉, 해킹을 방지할 수 있다.Disclosed are a method for preventing debugging of a real-time computer program and a recording medium thereof. The present invention includes the steps of: A) hooking an interrupt table corresponding to an interrupt for debugging generated in a running computer program; B) determining whether the computer program for which the debugging has occurred is a target program for performing anti-debugging; C) if the computer program is the anti-debugging target program, registering the fact that debugging according to the interruption is being performed; D) sending said registered debugging performance to said computer program; E) including the step of calling the original code of the operating system (Operation System) of the computer on which the computer program is running, to prevent debugging of the computer program in real time to prevent disassembly, that is to prevent hacking can do.
컴퓨터 프로그램, 해킹, 디버그, 브레이크 포인터, 인터럽트 Computer Program, Hack, Debug, Break Pointer, Interrupt
Description
도 1은 본 발명의 일 실시예에 따른 실시간 컴퓨터 프로그램의 디버깅 방지 방법을 설명하기 위한 순서도이다.1 is a flowchart illustrating a debugging prevention method of a real-time computer program according to an embodiment of the present invention.
도 2는 본 발명의 다른 실시예에 따른 실시간 컴퓨터 프로그램의 디버깅 방지 방법을 설명하기 위한 순서도이다.2 is a flowchart illustrating a method for preventing debugging of a real-time computer program according to another embodiment of the present invention.
도 3은 본 발명의 일 실시예에 따라 윈도우 NT 계열에서 구현되는 인터럽트의 핸들러 처리를 도시한 것이다.3 illustrates handler processing of interrupts implemented in the Windows NT series according to an embodiment of the present invention.
도 4는 본 발명의 일 실시예에 따라 윈도우 9x 계열에서 구현되는 인터럽트의 핸들러 처리를 도시한 것이다.4 illustrates handler processing of an interrupt implemented in the Windows 9x series according to an embodiment of the present invention.
본 발명은 컴퓨터 프로그램의 디버깅 방지에 관한 것으로, 보다 상세하게는 실행 중인 컴퓨터 프로그램이 역 어셈블링 되지 않도록 차단하기 위한 실시간 컴퓨터 프로그램의 디버깅 방지 방법 및 그 기록 매체에 관한 것이다.The present invention relates to preventing debugging of a computer program, and more particularly, to a debugging prevention method of a real-time computer program and a recording medium for blocking a running computer program from being disassembled.
디버거(Debugger)란 일반적으로 프로그램의 오류발생 원인을 찾기 위한 툴을 지칭하나, 이 외에 프로그램의 내용을 분석하고, 수정하는데 이용되기도 한다.Debuggers generally refer to tools for finding the source of errors in a program, but can also be used to analyze and correct the contents of a program.
상기 디버거는 브레이크 포인터(Break Pointer), 트레이스(Trace), 및 고우(Go) 등의 기능을 가지고 있어 사용자가 원하는 부분에서 프로그램을 중단시킬 수 있고, 프로그램을 명령어 단위로 수행시킴으로써 프로그램 디버깅을 수행하는 것이 가능하다. The debugger has functions such as a break point, trace, and go, so that the program can be stopped at a part desired by the user, and the program can be debugged by executing the program in units of instructions. It is possible.
상기 브레이크 포인터는 일반적인 디버깅 시스템에서 프로그램의 수행 진로 도중 사용자가 원하는 지점에서 프로그램이 빠져 나오게 하는 기능이다. 따라서, 프로그램이 실행 되는 도중 브레이크 포인터가 걸리면 소프트웨어 어보트(Software Abort)가 입력되어 수행을 중단하고 디버깅 할 수 있는 상태로 된다. 상기 소프트웨어 어보트는 외부의 하드웨어 인터럽트를 사용하여 프로그램이 어떤 무한 루프를 수행할 때나 프로그램 수행 중에 잠시 중단하고 강제로 디버깅을 할 수 있는 상태로 빠져나오게 하는 기능이다.The break pointer is a function for causing a program to exit at a point desired by a user during a course of executing a program in a general debugging system. Therefore, if the break pointer is caught while the program is running, the software abort is input to stop the execution and debug. The software abort is a function that causes an external hardware interrupt to exit a state in which the program can be paused and forced to debug while the program executes an infinite loop or during program execution.
상술한 브레이크 포인터, 트레이스, 및 고우 등의 기능을 포함하는 디버거를 통해 프로그램의 구조를 파악하여 다른 사람들이 만든 프로그램을 역 어셈플리(Assembly)하는 것이 가능하다. It is possible to grasp the structure of a program and to disassemble the program created by others through a debugger including the functions such as the break pointer, the trace, and the go.
따라서, 일반적으로 전문 해커(Hacker)들은 해킹 툴(Hacking Tool)을 제작하기 위하여 해킹 대상에 대한 분석을 수행해야 하는데, 이 때 사용되는 가장 유용한 툴(Tool)이 바로 상술한 디버거(Debugger)라는 프로그램이다. Therefore, in general, professional hackers have to perform an analysis on the hacking target in order to produce a hacking tool, and the most useful tool used at this time is a program called a debugger. to be.
그러므로, 정당 사용자가 아닌 불법 사용자가 컴퓨터 프로그램을 정당하지 않은 방법으로 디버깅함으로써 컴퓨터 프로그램이 해킹되어 변경되는 것을 방지할 필요성이 대두되고 있다.Therefore, there is a need to prevent a computer program from being hacked and changed by debugging a computer program in an illegal manner by an illegal user who is not a party user.
본 발명은 상기한 사정을 감안하여 창출된 것으로서, 본 발명의 목적은 실행 중인 컴퓨터 프로그램이 역 어셈블링 되지 않도록 차단하기 위한 실시간 컴퓨터 프로그램의 디버깅 방지 방법 및 그 기록 매체를 제공하는데 있다.SUMMARY OF THE INVENTION The present invention has been made in view of the above circumstances, and an object of the present invention is to provide a method for preventing debugging of a real-time computer program and a recording medium thereof for preventing a running computer program from being disassembled.
상기 목적을 달성하기 위한 본 발명의 제 1 관점에 따른 실시간 컴퓨터 프로그램의 디버깅 방지 방법은,
A-1) 유저 레벨의 코드(User Level Code)가 디버거의 실행 여부를 조회하는 단계; Debugging prevention method of a real-time computer program according to a first aspect of the present invention for achieving the above object,
A-1) inquiring whether or not the debugger is executed by a user level code;
A-2) 상기 디버거가 동작하는 경우, 실행 중인 컴퓨터 프로그램에서 발생된 디버깅을 위한 인터럽트(Interrupt)에 상응하는 인터럽트 테이블을 후킹(Hooking)하는 단계;A-2) when the debugger is operating, hooking an interrupt table corresponding to an interrupt for debugging generated in a running computer program;
B) 상기 디버깅이 발생된 상기 컴퓨터 프로그램이 안티-디버깅(Anti-Debugging)을 수행하기 위한 대상 프로그램인지 여부를 판단하는 단계;B) determining whether the computer program where the debugging has occurred is a target program for performing anti-debugging;
C) 상기 컴퓨터 프로그램이 상기 안티-디버깅 대상 프로그램인 경우, 상기 인터럽트에 따른 디버깅(Debugging)이 수행되고 있다는 사실을 등록하는 단계;C) registering the fact that debugging according to the interruption is performed when the computer program is the anti-debugging target program;
D) 상기 등록된 디버깅 수행 사실을 상기 컴퓨터 프로그램으로 전송하는 단계; 및D) sending said registered debugging performance to said computer program; And
E) 상기 컴퓨터 프로그램이 실행 중인 컴퓨터의 운영 체제(Operation System)의 오리지날 코드(Original Code)를 호출하는 단계를 포함한다.E) calling an original code of an operating system of a computer on which the computer program is running.
상기 목적을 달성하기 위한 본 발명의 제 2 관점에 따른 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체는,
가-1) 유저 레벨의 코드(User Level Code)가 디버거의 실행 여부를 조회하는 단계; A computer-readable recording medium having recorded thereon a program according to the second aspect of the present invention for achieving the above object,
(A) inquiring whether a user level code is executed or not;
가-2) 상기 디버거가 동작하는 경우, 실행 중인 컴퓨터 프로그램에서 발생된 디버깅을 위한 인터럽트(Interrupt)에 상응하는 인터럽트 테이블을 후킹(Hooking)하는 단계;A-2) hooking an interrupt table corresponding to an interrupt for debugging generated in a running computer program when the debugger operates;
나) 상기 인터럽트가 발생된 상기 컴퓨터 프로그램이 안티-디버깅(Anti-Debugging)을 수행하기 위한 대상 프로그램인지 여부를 판단하는 단계;B) determining whether the computer program generating the interrupt is a target program for performing anti-debugging;
다) 상기 컴퓨터 프로그램이 상기 안티-디버깅 대상 프로그램인 경우, 상기 인터럽트에 따른 디버깅(Debugging)이 수행되고 있다는 사실을 등록하는 단계;C) registering the fact that debugging according to the interruption is performed when the computer program is the anti-debugging target program;
라) 상기 등록된 디버깅 수행 사실을 상기 컴퓨터 프로그램을 실행시키는 프로세서에 전달하여, 상기 컴퓨터 프로그램의 실행을 종료하는 단계;D) transmitting the registered debugging execution fact to a processor for executing the computer program to terminate execution of the computer program;
마) 상기 컴퓨터 프로그램이 실행 중인 컴퓨터의 운영 체제(Operation System)의 오리지날 코드(Original Code)를 호출하는 단계;E) calling an original code of an operating system of a computer on which the computer program is running;
바) 상기 인터럽트 테이블의 소정 인터럽트에 설정된 안티-디버깅 트레이스(Anti-Debugging Trace)의 핸들러(Handler)가 변경되었는지 여부를 조회하는 단계; 및F) inquiring whether a handler of an anti-debugging trace set to a predetermined interrupt of the interrupt table has changed; And
사) 상기 조회 결과 상기 핸들러가 변경된 경우 상기 컴퓨터 프로그램에 상기 핸들러의 변경 사실을 전송하는 단계를 실현시키기 위한 프로그램을 기록한다.G) If the handler is changed as a result of the inquiry, the program for realizing the step of transmitting the change of the handler to the computer program is recorded.
따라서 본 발명에 의하면, 실시간으로 컴퓨터 프로그램의 디버깅을 방지하여 역 어셈블링 되지 않도록 즉, 해킹을 방지할 수 있다.Therefore, according to the present invention, it is possible to prevent debugging of a computer program in real time so that it is not disassembled, that is, hacking can be prevented.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예에 대하여 설명한 다.Hereinafter, with reference to the accompanying drawings will be described a preferred embodiment of the present invention.
도 1은 본 발명의 일 실시예에 따른 실시간 컴퓨터 프로그램의 디버깅 방지 방법을 설명하기 위한 순서도이다.1 is a flowchart illustrating a debugging prevention method of a real-time computer program according to an embodiment of the present invention.
컴퓨터에서 실행되고 있는 컴퓨터 프로그램에서 디버깅(Debugging)을 위한 인터럽트(Interrupt)가 발생된 경우, 상기 인터럽트에 상응하는 인터럽트 테이블을 후킹(Hooking)한다(S100, S110).When an interrupt for debugging occurs in a computer program running in the computer, the interrupt table corresponding to the interrupt is hooked (S100 and S110).
상기 디버깅을 위한 인터럽트는 인터럽트 테이블(Interrupt Description Table)에서 그 기능을 정의하기 위하여 인터럽트와 소정의 핸들러(Handler)를 매핑(Mapping)시키고 있다. 따라서, 인터럽트가 발생되는 경우 디버거가 상기 인터럽트를 감지하고 그 인터럽트에 따라 상술한 바와 같은 동작이 수행된다. 즉, 인터럽트가 발생함으로써 알 수 있는 소정의 정보가 사용자 단말기의 화면에 디스플레이 된다.The interrupt for debugging maps an interrupt and a predetermined handler to define its function in an interrupt description table. Thus, when an interrupt occurs, the debugger detects the interrupt and the operation as described above is performed according to the interrupt. That is, predetermined information that can be known by generating an interrupt is displayed on the screen of the user terminal.
부언하면, 상기 제1 및 제2 인터럽트가 발생되면 상기 인터럽트 테이블에 정의되어 있는 코드 주소에 따라 소정의 함수를 실행하도록 구현되어 있다. In other words, when the first and second interrupts are generated, a predetermined function is executed according to a code address defined in the interrupt table.
예컨대, CPU에는 255개의 인터럽트가 정의되어 있는데, 특히 인텔 마이크로 소프트 사에서 생산되는 CPU에서는 인터럽트 3(Interrupt 3) 및 인터럽트 1(Interrupt 1)이 디버깅을 수행하도록 지정되어 있다.For example, there are 255 interrupts defined on the CPU, especially for CPUs produced by Intel Microsoft Inc. and Interrupt 3 and Interrupt 1 are specified to perform debugging.
따라서, 상기 컴퓨터 프로그램에 디버깅을 수행하기 위한 브레이크 포인트(110), 및 트레이스 또는 싱글 스탭(120)의 발생은 상기 인터럽트 테이블에서 매핑된 핸들러의 앞 단에서 감지된다.Thus, the occurrence of a
부언하면, 상기 인터럽트 테이블에서 상기 인터럽트 1 및 3에 매칭되는 안티 디버거 트레이서 핸들러(Anti-Debugger Tracer Handler)를 설치하며, 상기 인터럽트 1 및 3의 본래의 기능을 수행하기 위한 핸들러는 따로 저장한다. 따라서, 상기 제1 및 제2 인터럽트가 발생되는 경우 안티 디버거 트레이서 핸들러(Anti-Debugger Tracer Handler)에 의해 다음의 동작이 수행된다.In other words, an anti-debugger tracer handler matching the interrupts 1 and 3 is installed in the interrupt table, and a handler for performing the original functions of the interrupts 1 and 3 is stored separately. Therefore, when the first and second interrupts are generated, the following operations are performed by an anti-debugger tracer handler.
즉, 상기 인터럽트에 상응하는 인터럽트 테이블을 후킹한 후, 상기 디버깅을 수행하기 위한 인터럽트가 발생된 컴퓨터 프로그램이 디버깅을 방지하기 위한 컴퓨터 프로그램인지 여부를 판단한다(S120). That is, after hooking the interrupt table corresponding to the interrupt, it is determined whether or not the computer program generating the interrupt for performing the debugging is a computer program for preventing debugging (S120).
이는 개발자들이 프로그램을 개발하는 과정에서 디버깅이 수행되는 경우는 안티-디버깅(Anti-Debugging) 대상 프로그램에서 제외하기 위함이다(S170).This is to exclude from the anti-debugging target program when debugging is performed during the development of the program by the developers (S170).
상기 단계 S120에서 상기 컴퓨터 프로그램이 디버깅을 방지하기 위한 즉, 안티-디버깅 대상 컴퓨터 프로그램인 경우, 디버깅이 수행되고 있음을 등록한다(S130).In step S120, when the computer program is to prevent debugging, that is, an anti-debugging target computer program, it is registered that debugging is being performed (S130).
또한, 주기적으로 바람직하게는 실시간으로 디버깅이 수행 사실을 상기 컴퓨터 프로그램으로 전달하여 상기 컴퓨터 프로그램 자체의 실행을 종료한다(S140).In addition, periodically, the execution of the computer program itself is terminated by transmitting the fact that debugging is performed in real time to the computer program (S140).
또한, 상기 안티 디버거 트레이서 핸들러가 변경되었는지 여부를 시스템 쓰레드(Tred)란 별도의 함수로 조회하여 상기 핸들러가 변경되었다면 상기 컴퓨터 프로그램에 디버깅이 수행되고 있다는 것이므로, 상기 컴퓨터 프로그램으로 상기 디버깅이 수행되고 있다는 것을 전달함으로써 상기 컴퓨터 프로그램이 종료하도록 한다(S360).In addition, if the anti-debugger tracer handler is changed, the system thread (Tred) is inquired as a separate function, and if the handler is changed, the debugging is performed on the computer program. Therefore, the debugging is performed by the computer program. The computer program is terminated by transferring the information (S360).
그러나, 상기 단계 S360에서 상기 핸들러가 변경되지 않은 경우에는 상기 컴퓨터의 운영 체제(Operation System)의 오리지날 코드(Original Code)를 호출하여 상기 컴퓨터의 타 프로그램들이 정상적으로 진행되도록 한다.However, if the handler is not changed in step S360, the original code of the operating system of the computer is called to allow other programs of the computer to proceed normally.
도 2는 본 발명의 다른 실시예에 따른 실시간 컴퓨터 프로그램의 디버깅 방지 방법을 설명하기 위한 순서도이다.2 is a flowchart illustrating a method for preventing debugging of a real-time computer program according to another embodiment of the present invention.
컴퓨터의 하드웨어와 바로 통신하기 위한 커널 레벨(Kornel level) 및 일반 프로그램을 구동시키기 위한 유저 레벨(User Level)로 분리하여 구현된다. It is implemented by separating the kernel level for directly communicating with the hardware of the computer and the user level for running general programs.
상기 유저 레벨의 소정의 코드(Code)가 상기 커널 레벨에서 동작하는 디버거의 실행 여부를 조회한다(S200).The predetermined code of the user level inquires whether a debugger operating at the kernel level is executed (S200).
이는 디버거를 수행하는 디버거용 프로그램이 안티-디버거 대상 프로그램에 실행되는 경우 이를 감지하여 상기 안티-디버거 대상 프로그램을 종료함으로써 역 어셈블링 되기 않도록 하기 위함이다.This is to detect when a debugger program that executes a debugger is executed in the anti-debugger target program and to prevent the disassembly by terminating the anti-debugger target program.
따라서, 상기 유저 레벨의 소정 코드는 상기 디버거의 드라이버(Driver)정보를 이용하여 크리에이트 파일(Create file)을 호출하여, 상기 크리에이트 파일이 오픈(Open)된 경우 상기 디버거가 동작하는 것으로 판단한다(S210). 상기 디버거의 일 예로는 소프트 아이스(Soft Ice) 가 있다.Therefore, the predetermined code of the user level calls the create file using the driver information of the debugger, and determines that the debugger operates when the create file is opened (S210). ). One example of the debugger is Soft Ice.
다른 응용 예에서, 상기 유저 레벨의 소정 코드는 커널 레벨로 컴퓨터의 윈도우 내부 정보를 소유한 소정의 함수를 호출한다. 그리고, 상기 윈도우 내부 정보 중 현재 실행 중인 드라이버 리스트(Driver List)에 상기 디버거의 드라이버가 포함되어 있는지 조회하여 상기 리스트에 포함되어 있는 경우, 상기 디버거가 동작하 는 것으로 판단한다. 상기 소정 함수의 일 예로는 NtQuerySystemInformation이 있다.In another application, the user-level predetermined code invokes a predetermined function that possesses the Windows internal information of the computer at the kernel level. If the driver list is included in the currently running driver list in the internal information of the window and the driver is included in the list, it is determined that the debugger operates. An example of the predetermined function is NtQuerySystemInformation.
디버거가 동작한다고 판단되면, 상기 디버거가 동작하는 대상 컴퓨터 프로그램이 디버거가 수행되지 않도록 설정된 컴퓨터 프로그램인지 여부를 판단하기 위하여, 상기 커널 레벨에 위치한 소정 함수를 호출하여 그 리턴 값을 수신한다(S215).If it is determined that the debugger operates, in order to determine whether the target computer program in which the debugger operates is a computer program configured to not execute the debugger, a predetermined function located at the kernel level is called to receive a return value (S215). .
상기 리턴 값이 안티 디버깅 대상 프로그램 리스트에 포함되는 경우, 상기 디버깅이 수행되고 있음을 등록하고, 상기 디버깅 수행 사실을 상기 컴퓨터 프로그램으로 전달하여 상기 컴퓨터 프로그램이 종료되도록 한다(S220, S230, S240).If the return value is included in the anti-debugging target program list, it registers that the debugging is being performed, and transmits the debugging performance to the computer program to terminate the computer program (S220, S230, S240).
상기 컴퓨터 프로그램이 종료되더라도 상기 컴퓨터의 다른 프로그램들은 제대로 구동되어야 하며, 또한, 상기 단계 S220의 판단 결과 디버깅이 수행되고 있는 프로그램이 안티-디버깅 대상 프로그램이 아닌 경우에도 종료되지 않고 실행되어야 하므로 컴퓨터 운영 시스템의 오리지날 코드를 호출한다(S250).Even if the computer program is terminated, other programs of the computer should be properly run, and as a result of the determination in step S220, the program being debugged should be executed without being terminated even when the program is not an anti-debugging target program. Call the original code (S250).
상술한 바와 같은 본 발명의 방법은 프로그램으로 구현되어 컴퓨터로 읽을 수 있는 형태로 기록매체 예컨대, 씨디롬, 램, 롬, 플로피 디스크, 하드 디스크, 광자기 디스크 등에 저장된다.As described above, the method of the present invention is implemented as a program and stored in a recording medium such as a CD-ROM, a RAM, a ROM, a floppy disk, a hard disk, a magneto-optical disk, and the like.
상술한 바와 같이 구성된 본 발명의 작동 상태에 대하여 보다 상세히 설명한다.The operating state of the present invention configured as described above will be described in more detail.
도 3은 본 발명의 일 실시예에 따라 윈도우 NT 계열에서 구현되는 인터럽트의 핸들러 처리를 도시한 것이다.3 illustrates handler processing of interrupts implemented in the Windows NT series according to an embodiment of the present invention.
실행 중인 컴퓨터 프로그램에 브레이크 포인트가 발생되면 컴퓨터 내부적으 로 인터럽트 3이 발생되며, 싱글 스탭에 의한 디버깅(Debugging)이 발생되면 컴퓨터 내부적으로 인터럽트 1이 발생된다(S310, S320).When a break point occurs in a running computer program, interrupt 3 is generated internally in the computer, and when debugging by a single step occurs, interrupt 1 is generated internally in the computer (S310 and S320).
상기 인터럽트 1 또는 상기 인터럽트 3이 발생되면, 상기 컴퓨터 내부에 존재하는 범용 레지스터인, CS(Code Segment) 레지스터, SS(Stack Segment) 레지스터, DS(Data Segment) 레지스터, FS 레지스터의 값을 저장한다(S330). When the interrupt 1 or the interrupt 3 is generated, values of the CS (Code Segment) register, the SS (Stack Segment) register, the DS (Data Segment) register, and the FS register, which are general-purpose registers existing in the computer, are stored ( S330).
그 후, 디버거 핸들러 안에서 윈도우즈(Windows)의 커널(Kenel) API를 사용하고 있기 때문에 커널 레벨과 유저 레벨의 값이 다른 FS 레지스터의 값만 커널 레벨의 값으로 세팅한다(S340).After that, since the kernel API of Windows is used in the debugger handler, only the value of the FS register having a different kernel level and user level value is set to the kernel level value (S340).
수정이 완료된 후 상기 디버깅이 발생되었다는 사실을 Work Item에 등록하고 APC(Asynchronous Procedure Call) 함수를 이용하여 상기 컴퓨터 프로그램에 전달한다(S350, S360). After the modification is completed, the fact that the debugging has occurred is registered in the Work Item and transmitted to the computer program using an Asynchronous Procedure Call (APC) function (S350, S360).
그리고, 이렇게 상기 컴퓨터 프로그램에 APC 함수를 이용하여 상기 디버깅 발생 사실을 전송하는 작업이 완료된 후 이전의 레지스터 값들로 원상 복구하고, 그리고 나서 본래의 인터럽트와 매핑되어 있는 핸들러를 호출하여 주게 된다(S370).Then, after the operation of transmitting the debugging occurrence fact by using the APC function to the computer program is completed, it is restored to the original register values, and then the handler mapped to the original interrupt is called (S370). .
이 때, 커널 디버거 핸들러가 존재하는 경우에는 커널 디버거 핸들러를 호출 한 후, 윈도우 운영 체계 핸들러를 호출한다(S380, S390).At this time, if there is a kernel debugger handler, the kernel debugger handler is called and then the Windows operating system handler is called (S380 and S390).
도 4는 본 발명의 일 실시예에 따라 윈도우 9x 계열에서 구현되는 인터럽트의 핸들러 처리를 도시한 것이다.4 illustrates handler processing of an interrupt implemented in the Windows 9x series according to an embodiment of the present invention.
윈도우 9x 계열의 경우 상술한 윈도우 NT 계열과의 차이점을 중심으로 설명 하며 동일한 부분에 있어서는 설명을 생략한다.In the case of the Windows 9x series, the description will be mainly focused on the differences from the above-described Windows NT series, and the descriptions thereof will be omitted.
디버거 트레이싱 핸들러에서 별도의 특별한 커널 레벨의 API(Application Protocol Interface)를 호출하지 않으며 단지 커널 레벨에 존재하는 전역 변수 즉, 모든 레지스터의 값을 저장한다(S430).The debugger tracing handler does not call a separate special kernel level application protocol interface (API) and stores only global variables, that is, values of all registers existing at the kernel level (S430).
또한, 인터럽트가 발생하게 되면 단지 코드 세그먼트(Code Segment) 및 스택 세그먼트(Stack Segment)만이 커널 레벨에 맞도록 수정되어 있으므로, 본 발명의 전역 변수를 수정하기 위해서는 데이터 세그먼트(Data Segment) 역시 커널 레벨에서 동작이 가능한 것으로 수정하여 주어야 하며, 상기 값은 스택 세그먼트와 동일한 값으로 세팅하면 된다(S440).In addition, when an interrupt occurs, only the code segment and the stack segment are modified to fit the kernel level. Thus, in order to modify the global variable of the present invention, the data segment is also required at the kernel level. The operation should be modified to be possible, and the value may be set to the same value as the stack segment (S440).
핸들러의 호출 즉, 디버깅이 수행되고 있음을 알리기 위한 플래그(Flag)라는 외부 메모리 변수를 설치하고, 상기 플래그를 체크한 후 APC 함수를 이용하여 상기 컴퓨터 프로그램에 상기 디버깅이 수행되고 있음을 알려준다(S450, S460).A call to a handler, that is, an external memory variable called flag is installed to indicate that debugging is being performed, the flag is checked and the computer program is notified to the computer program using an APC function (S450). , S460).
그리고, 이렇게 상기 컴퓨터 프로그램에 APC 함수를 이용하여 상기 디버깅 발생 사실을 전송하는 작업이 완료된 후 이전의 레지스터 값들로 원상 복구하고, 그리고 나서 본래의 인터럽트와 매핑되어 있는 핸들러를 호출하여 주게 되는 과정은 윈도우 NT 계열과 동일하다(S470, S480, S490).After the operation of transmitting the debugging occurrence fact to the computer program by using the APC function is completed, the process of restoring the previous register values to the original register values and then calling the handler mapped to the original interrupt is performed. Same as NT series (S470, S480, S490).
이상에서 상세히 설명한 바와 같이, 본 발명의 실시간 컴퓨터 프로그램의 디버깅 방지 방법 및 그 기록 매체에 의하면, 안티-디버깅 대상 컴퓨터 프로그램이 실행 중에 브레이크 포인터, 트레이스 등의 기능을 사용한 디버깅이 수행되는 경 우, 디버깅 사실을 안티-디버깅 대상 컴퓨터 프로그램에 전달함으로써, 실시간으로 디버거가 실행되는 것을 차단함으로써 컴퓨터 프로그램이 해킹되는 것을 방지하는 효과가 있다.As described in detail above, according to the method for preventing debugging of a real-time computer program of the present invention and a recording medium thereof, when debugging is performed using a function such as a break pointer or a trace while an anti-debugging target computer program is running, debugging is performed. By passing the fact to the computer program to be anti-debugged, it is possible to prevent the computer program from being hacked by blocking the debugger from running in real time.
따라서, 온라인 게임 등과 같이 사용자가 임의로 디버깅을 수행하여 프로그램에 대한 역 어셈블리를 수행하고 더 나아가 임의로 조작하는 것을 방지할 수 있을 뿐만 아니라, 정당한 권리를 갖고 디버깅을 수행하는 프로그램의 문제점을 발견하기 위하여 수행되는 디버깅에 대하여서는 비록 디버깅이 수행되더라도 프로그램이 종료되지 않도록 하는 효과가 있다.Therefore, it is possible not only to prevent the user from performing arbitrary assembly and further manipulation of the program by debugging arbitrarily, such as online games, but also to find a problem of a program that performs debugging with right rights. For debugging, the program does not terminate even if debugging is performed.
지금까지 본 발명을 바람직한 실시예를 참조하여 상세히 설명하였지만,본 발명이 상기한 실시예에 한정되는 것은 아니며, 이하의 특허청구범위에서 청구하는 본 발명의 요지를 벗어남이 없이 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 누구든지 다양한 변형 또는 수정이 가능한 범위까지 본 발명의 기술적 사상이 미친다 할 것이다. Although the present invention has been described in detail with reference to preferred embodiments, the present invention is not limited to the above-described embodiments, and the technical field to which the present invention belongs without departing from the gist of the present invention as claimed in the following claims. Anyone skilled in the art will have the technical idea of the present invention to the extent that various modifications or changes are possible.
Claims (15)
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020040098897 | 2004-11-29 | ||
KR20040098897 | 2004-11-29 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20060059792A KR20060059792A (en) | 2006-06-02 |
KR100781554B1 true KR100781554B1 (en) | 2007-12-03 |
Family
ID=37156913
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020050079134A KR100781554B1 (en) | 2004-11-29 | 2005-08-27 | Method for preventing from debugging computer program in real time and recording material thereof |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR100781554B1 (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11409635B2 (en) | 2019-08-23 | 2022-08-09 | Raytheon Company | Hacker-resistant anti-debug system |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100893137B1 (en) * | 2007-08-14 | 2009-04-16 | 주식회사 안철수연구소 | Method for detecting a debugging of client in server |
KR100939210B1 (en) * | 2007-12-27 | 2010-01-28 | 주식회사 안철수연구소 | Apparatus and method for prevention an debugging in a virtual environment |
CN101246449B (en) * | 2008-02-25 | 2011-08-10 | 华为技术有限公司 | Tracking function invocation track method and device |
KR101861952B1 (en) * | 2017-01-25 | 2018-05-28 | 한양대학교 에리카산학협력단 | Anti-debugging method for preventing software break point and apparatus therefor |
JP7076014B2 (en) * | 2018-05-29 | 2022-05-26 | ライン プラス コーポレーション | Java Debugger blocking method and system for program protection |
CN114036056B (en) * | 2021-11-16 | 2024-03-26 | 企查查科技股份有限公司 | Anti-debug method, apparatus, device, storage medium, and program product |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20000032364A (en) * | 1998-11-13 | 2000-06-15 | 황한규 | Blowing duct of air conditioner |
US6237137B1 (en) | 1997-10-15 | 2001-05-22 | Dell Usa, L.P. | Method and system for preventing unauthorized access to a computer program |
JP2003005854A (en) | 2001-04-20 | 2003-01-08 | Matsushita Electric Ind Co Ltd | Information processor |
JP2005128773A (en) | 2003-10-23 | 2005-05-19 | Toshiba Corp | Microprocessor and compiling method |
KR20060018693A (en) * | 2004-08-25 | 2006-03-02 | 삼성전자주식회사 | Protection method for software and device thereof |
-
2005
- 2005-08-27 KR KR1020050079134A patent/KR100781554B1/en active IP Right Grant
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6237137B1 (en) | 1997-10-15 | 2001-05-22 | Dell Usa, L.P. | Method and system for preventing unauthorized access to a computer program |
KR20000032364A (en) * | 1998-11-13 | 2000-06-15 | 황한규 | Blowing duct of air conditioner |
JP2003005854A (en) | 2001-04-20 | 2003-01-08 | Matsushita Electric Ind Co Ltd | Information processor |
JP2005128773A (en) | 2003-10-23 | 2005-05-19 | Toshiba Corp | Microprocessor and compiling method |
KR20060018693A (en) * | 2004-08-25 | 2006-03-02 | 삼성전자주식회사 | Protection method for software and device thereof |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11409635B2 (en) | 2019-08-23 | 2022-08-09 | Raytheon Company | Hacker-resistant anti-debug system |
Also Published As
Publication number | Publication date |
---|---|
KR20060059792A (en) | 2006-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100781554B1 (en) | Method for preventing from debugging computer program in real time and recording material thereof | |
KR101519845B1 (en) | Method For Anti-Debugging | |
US10896253B2 (en) | Processor trace-based enforcement of control flow integrity of a computer system | |
RU2698776C2 (en) | Method of maintaining database and corresponding server | |
US10055585B2 (en) | Hardware and software execution profiling | |
US7293251B2 (en) | Initiating and debugging a process in a high assurance execution environment | |
WO2021057057A1 (en) | Target-code coverage testing method, system, and medium of operating system-level program | |
KR20120031745A (en) | Malware auto-analysis system and method using kernel call-back mechanism | |
CN109101815B (en) | Malicious software detection method and related equipment | |
US20140181794A1 (en) | System and method for correct execution of software | |
JP2005317023A (en) | Breakpoint logic unit, debug logic, and breakpoint method for data processing apparatus | |
US20190370106A1 (en) | Unexpected event detection during execution of an application | |
US20100077385A1 (en) | Debugger exception filtering with target-based rules | |
CN112231198B (en) | Malicious process debugging method and device, electronic equipment and medium | |
US11361077B2 (en) | Kernel-based proactive engine for malware detection | |
US9003236B2 (en) | System and method for correct execution of software based on baseline and real time information | |
JP2008176352A (en) | Computer program, computer device and operation control method | |
CN107291617B (en) | Vulnerability analysis method based on implicit taint propagation | |
US20220335135A1 (en) | Vulnerability analysis and reporting for embedded systems | |
KR20110057297A (en) | Dynamic analyzing system for malicious bot and methods therefore | |
CN112685745B (en) | Firmware detection method, device, equipment and storage medium | |
US11409635B2 (en) | Hacker-resistant anti-debug system | |
CN113646763B (en) | shellcode detection method and device | |
CN110516445B (en) | Identification method and device for anti-detection malicious code and storage medium | |
US10460108B1 (en) | Method and system to identify and rectify input dependency based evasion in dynamic analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E90F | Notification of reason for final refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
G170 | Publication of correction | ||
FPAY | Annual fee payment |
Payment date: 20121123 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20131127 Year of fee payment: 7 |
|
FPAY | Annual fee payment |
Payment date: 20141127 Year of fee payment: 8 |
|
FPAY | Annual fee payment |
Payment date: 20151127 Year of fee payment: 9 |
|
FPAY | Annual fee payment |
Payment date: 20161128 Year of fee payment: 10 |
|
FPAY | Annual fee payment |
Payment date: 20171127 Year of fee payment: 11 |
|
FPAY | Annual fee payment |
Payment date: 20181127 Year of fee payment: 12 |
|
FPAY | Annual fee payment |
Payment date: 20191127 Year of fee payment: 13 |