리버스 엔지니어링(Reverse engineering)이란 무언가를 분해하고 내부에서 어떻게 작동하는지 알아내는 것을 말합니다. 리버스 엔지니어링을 시작하려면 프로그램을 관찰하고 다양한 입력에 반응하여 프로그램이 어떻게 작동하는지 관찰해야 합니다. 가장 인기 있는 리버스 엔지니어링 도구 중 일부를 살펴보고 해당 도구가 수행하는 작업을 소개합니다.
※ 이 글은 아래 기사 내용을 토대로 작성되었습니다만, 필자의 개인 의견이나 추가 자료들이 다수 포함되어 있습니다.
- 원문: 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 과제를 살펴보고 관심이 있는지 확인하는 것이 좋습니다.
'IT Info' 카테고리의 다른 글
Windows에서 Microsoft Copilot을 사용하는 8가지 팁 (4) | 2024.01.03 |
---|---|
Microsoft Word 문서에 자필 서명을 추가하는 방법 (2) | 2024.01.03 |
챗GPT로 업무 효율성을 높이는 6가지 방법 (0) | 2024.01.02 |
새해선물(3) ㅡ 일상을 바꿔 놓을 줄 챗GPT 확장 10개 (0) | 2024.01.02 |
생산성 향상을 위해 활용할 수 있는 생성형 AI 4가지 (2) | 2024.01.01 |