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


237

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

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


3
페이스 북에서 멀웨어 ?? 당신은 그것을 설명 할 수
아 디트 Mukherji

답장을 늦게 미안하지만 ... 내가 생각한 방식은 악성 코드를 실행 한 것입니다. 그녀는 어느 시점에서 FB (me)의 모든 연락처를 스팸으로하여 "비디오"링크를 요청했습니다. "새로운 코덱"을 다운로드하십시오. 나는 이런 의미에서 웜처럼 행동한다고 ​​가정합니다.
swilliams

답변:


446

디버거 를 사용하면 대화식으로 프로그램 어셈블리를 단계별 로 진행할 수 있습니다. 디스어셈블러를
사용 하면 프로그램 어셈블리를보다 자세히 볼 수 있습니다. 디 컴파일러를 사용하면 작성된 내용을 알고 있다고 가정하여 프로그램을 부분 소스 코드로 다시 전환 할 수 있습니다 ( 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에 반하는 것입니다. :)


16
나는 일반적이고 좋은 조언으로 마지막 단락을 고맙게 생각하지만 질문의 맥락에서 재미있다 : 나는 바이러스가 EULA와 함께 제공된다는 의심! ;-)
PhiLho

4
실제로 일부 악성 코드와 늦게 트로이 목마에는 EULA가 포함되어 있습니다 (오, 그 러시아인). 물론, 아무도 고소를하지 않을 것이라고 가정 할 수 있기 때문에 연구에 의해 무시 될 수 있습니다. .. 또한, 법정에서 어떤 의미로든 의미가없는 경우가 많습니다.
anon6439

2
IDA Pro의 이전 버전은 비상업적 용도로는 무료입니다.
Simon Buchan

6
요즘 대부분의 맬웨어 (적어도 컴파일 된 맬웨어)는 VMWare, Virtual PC, WINE, VirtualBox 등에서 실행되고 있는지 쉽게 감지 할 수 있습니다.
Mick

VM에서 실행중인 경우 Blue Pill 공격에주의하십시오.
Siqi Lin

44

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

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

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

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

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

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

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

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

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

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

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


1
이것은 분해에 대해 자세히 설명하지만 디 컴파일에 대한 자세한 내용을 듣고 싶습니다. 과일이 없을 것 같습니까? 이것의 경고는 무엇입니까?
Prometheus

@has : 네이티브 코드를 디 컴파일하는 것은 어려운 과제이며 종종 불가능합니다. 옵티마이 저는 매우 공격적이고 자주 소스 코드를 전혀 변환하지 않습니다. 아무것도 디 컴파일 할 수 없습니다.
IInspectable


11

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




6

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

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


4

어셈블리에서 정보를 볼 수 있지만 가장 쉬운 방법은 가상 머신을 실행하고 수행하는 작업을 보는 것입니다. 공개 주식이나 그와 비슷한 것을 가지고 있지 않아야합니다.


그래, 나는 그것에 대해 생각했지만 VM을 죽이기 위해 VM을 설정하는 번거 로움을 피하고 싶지는 않다. :)
swilliams

1
사실,이 경우에는 번거롭지 만 항상 새로운 소프트웨어 또는 이와 같은 것을 테스트하기 위해 VM을 유지하는 것이 유용하다는 것을 알았습니다. 그런 다음 원하는 작업을 수행하고 마지막에 상태를 저장하지 않고 다음 실행을 위해 클린 VM으로 돌아갑니다.
Rob Prouse

4

부메랑 도 체크 아웃 할 가치가 있습니다.


실제로는 아닙니다. 가장 사소한 실행 파일보다 더 복잡한 작업이 발생하면 충돌이 발생합니다.
shoosh


3

아직 Immunity Debugger 에 대해 아무 말도하지 않았다는 것을 믿을 수 없습니다 .

Immunity Debugger는 익스플로잇을 작성하고 맬웨어를 분석하며 바이너리 파일을 리버스 엔지니어링하는 강력한 도구입니다. 처음에는 Ollydbg 1.0 소스 코드를 기반으로했지만 이름이 resoution 버그로 수정되었습니다. 쉽게 확장 할 수 있도록 잘 지원되는 Python API 를 제공하므로 분석에 도움이되는 Python 스크립트를 작성할 수 있습니다.

또한 Corelan 팀의 Peter가 훌륭한 도구 btw 인 mona.py 라는 좋은 기사를 작성했습니다 .


2

컴퓨터를 감염시키지 않고 프로그램을 실행하여 VMWare 또는 Microsoft VPC 와 같은 가상 시스템 또는 SandboxIE 와 같은 프로그램을 샌드 박스 할 수있는 프로그램과 함께 사용 하려는 경우




2

2019 년에 Ghidra ( https://ghidra-sre.org/ )는 체크 아웃 할 가치가 있다고 말합니다 . 오픈 소스 (무료)이며, 읽을 수있는 C 코드로 다시 디 컴파일하는 기능을 포함하여 경이로운 코드 분석 기능이 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.