[debugging] Windows .exe를“디 컴파일”할 수 있습니까? 아니면 적어도 의회를 보십니까?

내 친구가 Facebook에서 일부 악성 코드를 다운로드했으며, 자신을 감염시키지 않고 그 기능이 무엇인지 궁금합니다. .exe를 실제로 디 컴파일 할 수는 없지만 적어도 어셈블리에서 보거나 디버거를 연결할 수 있습니까?

.NET 실행 파일이 아니며 CLI 헤더가 없다고 편집하십시오.



답변

디버거 를 사용하면 대화식으로 프로그램 어셈블리를 단계별 로 진행할 수 있습니다. 디스어셈블러를
사용 하면 프로그램 어셈블리를보다 자세히 볼 수 있습니다. 디 컴파일러를
사용하면 작성된 내용을 알고 있다고 가정하여 프로그램을 부분 소스 코드로 다시 전환 할 수 있습니다 ( PEiD 와 같은 무료 도구로 찾을 수 있습니다 -프로그램이 포장되어 있으면 먼저 압축을 풀어야합니다) 또는 어디에서나 PEiD를 찾을 수없는 경우 Detect-it-Easy . DIE는 현재 github 에 강력한 개발자 커뮤니티를 보유하고 있습니다).

디버거 :

  • 무료 32 비트 디버거 인 OllyDbg (무료)는 사용자가 만든 수많은 플러그인과 스크립트를 찾아서 더욱 유용하게 사용할 수 있습니다.
  • WinDbg 는 무료이며 Microsoft의 뛰어난 디버거입니다. WinDbg는 Windows 디버거를 보는 데 특히 유용합니다. 다른 디버거보다 데이터 구조에 대해 더 많이 알고 있기 때문입니다.
  • SoftICE , 친구에게 SICE. 상용 및 개발은 2006 년에 중단되었습니다. SoftICE는 운영 체제에서 실행되는 하드 코어 도구의 일종이며 호출되면 전체 시스템을 정지시킵니다. SoftICE는 여전히 많은 전문가들이 사용하지만, 구하기 힘들고 일부 하드웨어 (또는 소프트웨어, 즉 Vista 또는 NVIDIA gfx 카드에서는 작동하지 않을 수 있음)에서는 작동하지 않을 수 있습니다.

디스어셈블러 :

  • IDA Pro (상업용)-라인 디스어셈블러 / 디버거 상단. 멀웨어 분석가와 같은 대부분의 전문가가 사용합니다. 비용은 꽤 비싸지 만 무료 버전 이 있지만 상당히 제한적입니다.
  • W32Dasm (무료)-약간 날짜가 있지만 작업을 완료합니다. 나는 W32Dasm이 요즘 포기되고 있다고 생각하며 매우 유용한 기능을 추가하기 위해 수많은 사용자가 만든 해킹이 있습니다. 최고의 버전을 찾으려면 둘러 봐야합니다.

디 컴파일러 :

  • Visual Basic : 상용 VB 디 컴파일러 는 식별 가능한 바이트 코드를 생성합니다.
  • Delphi : DeDe 는 무료이며 양질의 소스 코드를 생성합니다.
  • C : HexRays (상업용, 동일한 회사의 IDA Pro 용 플러그인). 훌륭한 결과를 만들어 내지 만 큰 비용이 들며 다른 사람에게 판매되지 않습니다.
  • .NET (C #) : dotPeek , free .NET 1.0-4.5 어셈블리를 C #으로 디 컴파일합니다. .dll, .exe, .zip, .vsix, .nupkg 및 .winmd 파일을 지원합니다.

현재 수행중인 작업에 유용 할 수있는 관련 도구로는 ResourceHacker (무료)와 같은 리소스 편집기와 Hex Workshop (상업용) 과 같은 16 진수 편집기가 있습니다.

또한 맬웨어 분석을 수행하거나 SICE를 사용 하는 경우 가상 머신 내부의 모든 것을 실행하는 것이 좋습니다 (예 : VMware Workstation) . SICE의 경우 BSOD로부터 실제 시스템을 보호하고 맬웨어의 경우 대상 시스템으로부터 실제 시스템을 보호합니다. VMware 에서 맬웨어 분석에 대한 내용은 여기를 참조하십시오 .

개인적으로 Olly, WinDbg & W32Dasm 및 일부 더 작은 유틸리티 도구를 사용합니다.

또한 다른 사람들의 소프트웨어 를 분해하거나 디버깅 하는 것은 대개 EULA에 반하는 것입니다. 🙂


답변

psoul의 훌륭한 게시물은 귀하의 질문에 대한 답변이므로 그의 훌륭한 작품을 복제하지는 않지만 이것이 왜 완벽하게 유효하지만 어리석은 질문인지 설명하는 것이 도움이 될 것입니다. 결국 이곳은 배울 곳입니다.

현대의 컴퓨터 프로그램은 사람이 읽을 수있는 텍스트 명령 본문 ( “소스 코드”라고 함)의 입력부터 시작하여 컴퓨터가 읽을 수있는 명령 본문 (또는 “이진”또는 “기계라고 함)으로 끝나는 일련의 변환을 통해 생성됩니다. 암호”).

컴퓨터가 일련의 기계 코드 명령을 실행하는 방식은 궁극적으로 매우 간단합니다. 프로세서가 취할 수있는 각 작업 (예 : 메모리에서 읽고 두 값 추가)은 숫자 코드로 표시됩니다. 숫자 1이 비명을 의미하고 숫자 2가 낄낄 거림을 의미한다고 말한 다음 그에 따라 소리지르거나 낄낄 거림을 기대하면서 1 또는 2로 카드를 들고 있으면 컴퓨터에서 사용하는 것과 본질적으로 동일한 시스템을 사용하게됩니다 작동합니다.

이진 파일은 코드 (일반적으로 “op 코드”라고 함)와 op 코드가 작동하는 정보 ( “인수”)의 집합입니다.

이제 어셈블리 언어는 언어의 각 명령 단어가 프로세서에서 정확히 하나의 op 코드를 나타내는 컴퓨터 언어입니다. 어셈블리 언어 명령과 프로세서 op 코드 사이에는 직접적인 1 : 1 변환이 있습니다. 이것이 x386 프로세서의 코딩 어셈블리가 ARM 프로세서의 코딩 어셈블리와 다른 이유입니다.

디스 어셈블리는 간단합니다. 프로그램은 바이너리 (머신 코드)를 읽고 op 코드를 동등한 어셈블리 언어 명령으로 바꾸고 결과를 텍스트 파일로 출력합니다. 이것을 이해하는 것이 중요합니다. 컴퓨터에서 이진 파일을 읽을 수 있으면 수동으로 op 코드 테이블 (ick)을 사용하거나 디스어셈블러를 통해 이진 파일도 읽을 수 있습니다.

디스어셈블러에는 몇 가지 새로운 트릭이 있지만 모두 디스어셈블러가 검색 및 교체 메커니즘이라는 것을 이해하는 것이 중요합니다. 이것이 금지하는 EULA가 궁극적으로 뜨거운 공기를 불어내는 이유입니다. 컴퓨터가 프로그램 데이터를 읽도록 허용하거나 컴퓨터가 프로그램 데이터를 읽지 못하게 할 수는 없습니다.

(나를 틀리지 말아라. 그렇게하려는 시도가 있었다. 그들은 노래 파일에서 DRM뿐만 아니라 잘 작동한다.)

그러나 분해 방법에는 경고가 있습니다. 변수 이름이 존재하지 않습니다. 그러한 것은 CPU에 존재하지 않습니다. 라이브러리 호출은 지옥처럼 혼란스럽고 종종 추가 바이너리를 분해해야합니다. 최상의 조건에서 조립하기는 쉽지 않습니다.

대부분의 전문 프로그래머는 두통없이 어셈블리 언어를 읽고 읽을 수 없습니다. 아마추어에게는 일어나지 않을 것입니다.

어쨌든, 이것은 다소 광택있는 설명이지만 도움이되기를 바랍니다. 모든 사람은 내 편견을 자유롭게 고칠 수 있습니다. 오랜만이야. 😉


답변

좋은 소식. IDA Pro는 현재 이전 버전에서 무료로 제공됩니다 :
http://www.hex-rays.com/idapro/idadownfreeware.htm


답변

괜찮은 디버거라면 이것을 할 수 있습니다. OllyDbg를 사용해보십시오 . (편집 : 매개 변수를 WinAPI 호출로 디코딩하는 훌륭한 디스어셈블러가 있습니다!)


답변

x64dbg 적극적으로 유지 관리되는 좋은 오픈 소스 디버거입니다.


답변

물론, IDA Pro를 살펴보십시오 . 그들은 당신이 그것을 시도 할 수 있도록 평가 버전을 제공합니다.


답변

맬웨어의 기능을 파악하려는 경우 파일 시스템, 레지스트리, 포트 등에 액세스하려고 할 때마다보고 하는 무료 도구 프로세스 모니터 와 같은 도구로 실행하는 것이 훨씬 쉽습니다 .

또한 무료 VMWare 서버 와 같은 가상 시스템을 사용하면 이런 종류의 작업에 매우 도움이됩니다. “깨끗한”이미지를 만든 다음 맬웨어를 실행할 때마다 해당 이미지로 돌아갈 수 있습니다.