Excel & IT Info

아이엑셀러 닷컴, 엑셀러TV

IT Info

리버스 엔지니어링이란 무엇이며 어떻게 시작하나요?

권현욱(엑셀러) 2024. 1. 2. 20:00
반응형

리버스 엔지니어링(Reverse engineering)이란 무언가를 분해하고 내부에서 어떻게 작동하는지 알아내는 것을 말합니다. 리버스 엔지니어링을 시작하려면 프로그램을 관찰하고 다양한 입력에 반응하여 프로그램이 어떻게 작동하는지 관찰해야 합니다. 가장 인기 있는 리버스 엔지니어링 도구 중 일부를 살펴보고 해당 도구가 수행하는 작업을 소개합니다.

 

권현욱(엑셀러) | 아이엑셀러 닷컴 대표 · Microsoft Excel MVP · Excel 솔루션 프로바이더 · 작가

 

※ 이 글은 아래 기사 내용을 토대로 작성되었습니다만, 필자의 개인 의견이나 추가 자료들이 다수 포함되어 있습니다.


  • 원문: Reverse engineering: What is it and how to get started?
  • URL: https://www.xda-developers.com/reverse-engineering/

리버스 엔지니어링이 필요한 이유

리버스 엔지니어링은 특정한 목표를 염두에 두고 수행될 수 있습니다. 예를 들어, 맬웨어나 기타 악의적인 활동을 찾기 위해 프로그램과 기타 소프트웨어를 분해하여 내부 작동 방식을 파악하는 연구자가 많이 있습니다. 다른 사람들은 주장을 입증하거나 반증하기 위해 그렇게 할 수도 있습니다.

 

때때로 사람들은 특정한 것을 염두에 두지 않고 재미로 리버스 엔지니어링을 수행합니다. 땅을 파면 무엇이든 찾을 수 있고, 이는 기술 능력을 향상시키는 좋은 방법입니다. 예를 들어, 이는 사람들이 장치와 페어링하는 데 사용되는 기존 애플리케이션을 분해하고 내부에서 새로 출시될 제품에 대한 참조를 찾기 때문에 회사에서 곧 출시될 제품이 유출될 수 있는 한 가지 방법입니다.

 

오늘날 애호가와 전문가 모두가 현재 사용하는 가장 인기 있는 도구 중 3가지를 살펴보겠습니다.

 

1. 기드라 ㅡ 어떤 프로그램이라도 분해

 

업계 최고의 무료 도구인 기드라(Ghidra)는 미국 국가 안보국(National Security Agency)에서 개발한 무료 오픈 소스 도구입니다. 본질적으로 Ghidra가 수행하는 많은 작업을 수행할 수 있는 유료 도구인 IDA Pro의 경쟁자입니다. 표면적으로는 간단해 보이지만 컴퓨터 과학 개념과 프로그래밍에 대한 이해가 필요합니다. 위 스크린샷에서 Ghidra가 어셈블리가 수행한다고 생각하는 작업을 나타내는 C 코드와 함께 디컴파일되는 프로그램 어셈블리를 볼 수 있습니다.

 

Ghidra는 해당 어셈블리 코드가 C 표준 라이브러리의 문자열 비교 함수를 호출하여 명령줄의 첫 번째 인수를 로컬 변수와 비교한다는 것을 보여줍니다. 첫 번째 명령줄 인수가 지역 변수와 일치하면 통과하고, 그렇지 않으면 잘못된 암호입니다. 또한 프로그램이 어떻게 실행되고 해당 기능 사이를 이동하는지에 대한 기능 그래프를 보는 등 리버스 엔지니어링 중인 프로그램에 대한 더 자세한 정보를 볼 수도 있습니다.

 

 

위에서는 기본 입력 함수와 출력을 변경하는 if/else 블록이 있는 것을 볼 수 있습니다. 이를 통해 분석 중인 프로그램과 그 작동 방식을 쉽게 시각화하고 프로그램 메모리에 있을 수 있는 문자열을 검색할 수 있습니다. 위 이미지에서 필자가 분석하고 있는 프로그램은 리버스 엔지니어링 기술 습득을 돕는 웹사이트인 Crackmes에 있는 기본 프로그램입니다.

 

더 많은 것을 배우고 싶다면, 기본적인 것 이상을 가르쳐 줄 수 있는 Ghidra에 대한 온라인 튜토리얼이 많이 있습니다. 이리저리 살펴보고 기능을 발견하는 것은 학습하는 좋은 방법이 될 수 있지만, 이와 같은 도구를 사용하여 리버스 엔지니어링의 깊이를 탐구하는 Stacksmashing(이전 Ghidra Ninja)과 같은 YouTube 사용자가 있습니다.

 

2. 프로세스 해커 ㅡ 실행 중인 프로그램의 메모리에 접근

프로세스 해커(Process Hacker)를 사용하면 현재 애플리케이션 메모리에 로드된 모든 문자열을 덤프하는 것을 포함하여 실행 중인 프로그램의 메모리를 보고 수정할 수 있습니다. 여기에는 URL, 키 등이 포함될 수 있습니다. 특히 디컴파일된 버전은 난독화되어 원하는 것을 찾기 어렵게 만들 수 있으므로 프로그램의 내부 작동을 엿볼 수 있는 좋은 방법입니다.

 

Process Hacker는 표면적으로는 Process Monitor의 약어인 Microsoft 도구인 ProcMon과 매우 유사하지만 Process Hacker에도 몇 가지 추가 옵션이 있습니다. 여기에는 다른 사용자로 애플리케이션을 실행하고 기존 서비스를 수정하는 것과 같은 추가 기능과 함께 수많은 그래프와 통계가 있습니다.

 

Process Hacker는 대부분 이러한 도구를 포함하지만 Process Monitor 및 Process Explorer는 리버스 엔지니어링 커뮤니티에서 특히 널리 퍼져 있습니다. 즉, Process Hacker에서는 얻을 수 없는 스크립트와 플러그인을 사용할 수 있습니다. 이는 절충점이지만 정확히 무엇을 하려는지에 따라 다릅니다.

 

3. x64dbg ㅡ 프로그램을 단계별로 진행

 

x64dbg는 여기서 가장 복잡한 프로그램이지만 프로그램을 리버스 엔지니어링하려는 모든 사람에게 필수적인 도구입니다. 이를 통해 프로그램을 단계별로 진행하고 한 줄씩 무슨 일이 일어나고 있는지 확인할 수 있습니다. 프로그램에서 중지할 위치인 "중단점"을 추가하여 어떤 일이 발생하기 전에 실행을 일시 중지할 수 있습니다. x64dbg는 맬웨어 분석에 자주 사용되지만 거의 모든 소프트웨어에 사용할 수 있습니다.

 

이는 리버스 엔지니어의 무기고에 있는 고급 도구이지만 다른 도구와 비교할 때 비교적 사용자 친화적입니다. 또한 오픈 소스이며 사용 가능한 최고의 64비트 디버거 중 하나입니다. 많은 연구자들은 프로그램이 작동하지 않는 이유를 알아내려고 할 때 이 도구를 사용할 것이며 Nathan Baggs는 Windows 95 버전의 SimCity 2000이 최신 Windows 버전에서 작동하도록 하는 데 이 도구를 사용하는 방법을 시연했습니다. 그의 비디오에서는 x64dbg의 강력한 기능을 Ghidra 및 ProcMon과 결합하여 분석을 시작하는 데 필요한 기능을 확인하는 모습을 볼 수 있습니다.

 

리버스 엔지니어링 시작

리버스 엔지니어링을 시작하고 싶다면 온라인에서 확인할 수 있는 리소스가 매우 많습니다. Stacksmashing LiveOverflow는 필자가 가장 좋아하는 두 가지입니다. Nathan Baggs는 오래된 게임을 조사하고 최신 컴퓨터에서 작동하도록 만드는 모든 단계를 단계별로 안내하는 훌륭한 콘텐츠를 제작해 왔습니다.

 

IDA Pro, Frida, CFF Explorer 등의 다른 도구도 있습니다. 세상은 아주 넓습니다. 항상 더 많은 것을 찾고 싶은 호기심이 있다면 Crackmes에서 몇 가지 작은 문제를 시도해 보거나 먼저 CTF 과제를 살펴보고 관심이 있는지 확인하는 것이 좋습니다.

728x90
반응형