Microsoft MVP성태의 닷넷 이야기
Debug : 19. IsDebuggerPresent API 이야기 [링크 복사], [링크+제목 복사],
조회: 16875
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 


IsDebuggerPresent


.NET 응용 프로그램이 점차로 늘어가는 요즘 시기에, IsDebuggerPresent를 이야기한다는 것이 ^^ 이상하군요.

Native 응용 프로그램에서 IsDebuggerPresent API를 사용하는 경우는 아마도 Debugger를 통한 로직 검사를 막기 위해서일 것입니다. 하지만, 이 API를 호출한다고 해서 100% 막을 수는 없습니다.

John Robbins가 그의 책 "Debugging Applications ..."에서 이에 대해 짚어 놨지요. 간단하게 IsDebuggerPresent 함수가 0을 반환하도록 역공학 작업을 하면 된다는... 내용.

다음의 토픽은, 어려운 역공학까지 갈 것도 없이 간단하게 WinDBG에서 IsDebuggerPresent를 무력화시키는 방법을 소개하고 있습니다.

[Windbg Script] Disabling IsDebuggerPresent() 
; https://learn.microsoft.com/en-us/archive/blogs/debuggingtoolbox/windbg-script-disabling-isdebuggerpresent

이 때문에, John Robbins는 다음과 같은 inline 어셈블리 코드를 사용할 것을 그의 책에서 제안하고 있습니다.

BOOL AntiHackIsDebuggerPresent()
{
  BOOL bRet = TRUE;
  
  __asm
  {
    MOV EAX, FS:[00000018H]
    MOV EAX, DWORD PTR [EAX+030H]
    MOVZX EAX, BYTE PTR [EAX+002H]
    MOV bRet, EAX
  }
  
  return bRet;
}

참고로, 위의 코드에서는 inline 어셈블리 코드를 사용하고 있는데, "x64" 환경에서는 inline 어셈블리 코드가 지원되지 않으므로, 별도의 ASM 파일을 만들어서 외부 어셈블러로 컴파일 한 다음 링크를 시켜야 합니다. 이를 위해 "MASM for x64"(실행 파일명 ml64.exe)가 필요하며 이는 VS.NET 2005/Orcas를 설치하면 다음의 폴더에 위치해 있습니다.

ml64.exe 실행 파일 위치

VS.NET 2005 - C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin\amd64 
Orcas - C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64

관련해서는 다음의 도움말을 참조할 수 있습니다.

Microsoft Macro Assembler Reference  
MASM for x64 (ml64.exe)  
; https://learn.microsoft.com/en-us/cpp/assembler/masm/microsoft-macro-assembler-reference



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 12/3/2022]


비밀번호

댓글 작성자
 




... 31  [32]  33  34  35  36  37  38  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
398정성태8/12/200613227Debug : 4. SOS로 Managed 객체의 크기 구하는 방법
397정성태8/12/200613673IIS - 4. Extending the TreeView in IIS 7 in Windows Vista파일 다운로드1
396정성태8/11/200612989TFS : 21. Process Template Schemas Download
395정성태8/10/200612854개발환경 구성 : 21. Introduction to Visual Studio 2005 Team System Guide
394정성태8/10/200615036개발환경 구성 : 20. VHD 파일 크기 줄이기파일 다운로드1
392정성태8/9/200612850개발환경 구성 : 19. 몇 가지 유용한 ASP.NET 아티클 링크
393정성태8/10/200612595    답변글 개발환경 구성 : 19.1 몇 가지 유용한 ASP.NET 아티클 링크
391정성태8/9/200612265개발환경 구성 : 18. CardSpace 구현 예제파일 다운로드1
390정성태8/9/200611971개발환경 구성 : 17. 주의해야 할 프로그래밍 패턴
389정성태8/8/200617366C# event 와 delegate 의 차이?파일 다운로드1
388정성태8/7/200611911.NET : 10. C# 3.0 소식
387정성태10/20/200612739Vista : 7. System Services change in Windows Vista
385정성태10/20/200613314.NET 3.0 : 2. WCF Service with .asmx extentions 파일 다운로드1
384정성태10/20/200613068Vista : 6. Programming the Windows Vista Event Log [1]
383정성태10/20/200613111Vista : 5. MSDE Will Not Be Supported on Vista
382정성태10/20/200615337Vista : 4. IE 7+ 이름 변경
381정성태8/7/200611835개발환경 구성 : 16. Windows RSS API 사용법파일 다운로드1
380정성태8/4/200611842개발환경 구성 : 15. Windows Command Line Auto Completion
379정성태8/1/200611511.NET : 9. Self compiling scripts for .NET languages: C#, VB.NET and JScript.NET파일 다운로드1
378정성태8/1/200611929개발환경 구성 : 14. [사용설명서] SQL Server Everywhere 버전
377정성태7/31/200612124개발환경 구성 : 13. 도움말 생성기 - Sandcastle
386정성태8/7/200611779    답변글 개발환경 구성 : 13.1 Sandcastle 사용예파일 다운로드1
376정성태7/25/200611428TFS : 20. TFS 사용 현황 사례
375정성태7/25/200611706개발환경 구성 : 12. [CodePlex] 신규 프로젝트 - TFS File Sync
374정성태7/24/200613560Reflection 의 속도 향상을 원한다면?
373정성태7/23/200612713.NET : 8. The ADO.NET Entity Framework Overview [2]
... 31  [32]  33  34  35  36  37  38  39  40  41  42  43  44  45  ...