본문 바로가기
[이노소프트]/SW개발정보

실행파일(exe) 분석/디컴파일/리버스엔지니어링

by BOOX 2024. 12. 13.

설비 업체분의 연락이 왔습니다. 몇 가지 통화상 질의를 이어가다 업체를 방문하기로 합니다.

PLC와 카메라 등이 연결된 소프트웨어 프로그램으로 잘 구동중에 있었습니다.

문제는 여기서 발생합니다. 담당자 분은 프로그램의 기능 업데이트를 하고자 합니다. 하지만 소프트웨어 프로그램의 소스코드가 없습니다. 없다면 어쩔 수 없이 프로그램을 새로 만들면 됩니다... 하지만....

더 큰 문제는 PLC의 Map Address (또는 통신 프로토콜) 문서가 존재하지 않는다는 것입니다.

 

이런 문제가 발생하는 경우를 종종 보게 되는 것 같습니다. 소스 코드는 소프트웨어 개발업체의 자산이자 창작물임은 명확하지만 이렇게 관리를 하지 않는 업체라면 차라리 설비에 소스 코드를 남겨두거나 제공을 하는 것이 어떨까 하는 생각을 합니다.

저는 이런 문제 발생을 없애기 위해 최종 소스코드 및 환경 파일, 빌드 방법 등을 문서화 및 자동화 해두고 GIT, NAS, CLOUD 등에 이중삼중 백업을 하고 있습니다. 추후 제가 관리할 수 없는 상황이 된다면 업체에 소스코드를 자동으로 제공하는 방안이 없을까 고민하고 있습니다. 여튼..

 

실행 파일만 존재할 때에 해당 파일을 어떻게어떻게 하여(디컴파일링, 리버스엔지니어링) 소스코드를 제대로 또는 정보 구조라도 볼 수 있는 방법이 없을까 하는 고민은 전세계 개발자들의 공통 난제입니다.

현재까지 찾은 노력에 대해 공유합니다. 많은 시간을 내어 분석하면 더 좋은 정보를 얻을 수 있겠지만 무상으로 진행하는 만큼 몇 시간의 작은 노력으로 최대의 정보를 찾기 위한 노력입니다.

 

1. Detect It Easy(DiE) 
  • https://horsicq.github.io/
  • 실행 파일이 어떤 프로그래밍 언어로 개발되었는지를 확인해주는 프로그램
  • 무료 및 공개 소프트웨어

          해당 프로그램으로 업체의 실행 파일을 분석해봅니다. C# 계열의 Native code이길 바랍니다...

 

         C# .Net Framework라면 ILSpy 등 다양한 툴을 사용하여 쉽게 접근할 수 있습니다. 

         하지만 결과는 Boland C++ Builder!!! 후음.. 일단 쉽지 않겠습니다. 최대한의 정보를 찾기위한 노력으로 진행합니다.

 

 

2. Relze 시도
  • https://www.relyze.com/
  • 정보가 너무 없고 결과물은 역시나 Assembly 코드 기반으로 유용한 정보라도 찾기 위해 노력하였으나 폼 이름 정도의 정보를 취득하였습니다.

 

원래의 코드를 알 수 없다보니 func_xxx라는 이름의 함수로 어셈블리 코드를 보여줍니다. 

 

Data Type을 볼 수 있습니다. 구조체 등의 정보를 취득할 수 있겠습니다.

 

 

3. Reko Decompiler

 

 

 

4. IDA
  • https://hex-rays.com/ 의 유료 프로그램인데, x86|x64에 한하여 무료 licence key를 제공합니다.
  • For Individual Use로 이메일을 입력하고 진행합니다.

 

 

  • 이메일로 전달된 코드를 이용하여 로그인 하면 Download center에서 IDA Free Windows를 다운로드 받을 수 있습니다. 다운받아 설치하면 라이선스가 없다고 나옵니다. 

 

 

  • License 탭으로 가면 라이선스를 생성하여 Download Key를 이용하여 라이선스 파일을 다운받고, 해당 파일을 IDA 라이선스 파일로 적용하면 프로그램 구동이 가능합니다.

 

  • 유료버전이라 좀더 소스코드에 유사하거나 좀더 유용한 정보를 취득할 수 있지 않을까 하였지만, 상기 프로그램들과 비슷한 결과물을 얻었습니다.

 

 

소스코드를 C++ 언어로 얻기에는 턱없이 부족하였지만, 해당 내용들을 기반으로 조금이라도 필요한 정보를 얻기 위해 활용하시어 업무에 도움이 되기를 바랍니다.