40년 된 카피 방지, 4바이트 패치로 무력화!
40년 된 회계 소프트웨어 실행을 위해 하드웨어 동글(Hardware Dongle)을 분석
RPG 컴파일러(RPG Compiler)의 카피 방지 루틴(Copy Protection Routine)을 역분석
Reko 디스어셈블러(Disassembler)를 사용하여 어셈블리 코드(Assembly Code)를 분석
4바이트 패치(4-byte Patch)를 통해 동글 검증 루틴을 우회하여 소프트웨어 실행 성공
레거시 시스템 분석: RPG 컴파일러의 부활
저자는 40년 된 회계 소프트웨어 실행을 위해 RPG(Report Program Generator)로 작성된 레거시 시스템을 분석했다. 특히, 1990년대에 개발된 Software West Inc.의 RPG II 컴파일러를 대상으로, 하드웨어 동글(Hardware Dongle)의 카피 방지 메커니즘을 파악하는 데 주력했다. 이는 오래된 소프트웨어의 보존과 현대 시스템에서의 활용 가능성을 탐구하는 중요한 사례로, 소프트웨어 고고학(Software Archaeology)적 가치를 지닌다.
디스어셈블러(Disassembler)를 활용한 카피 방지 우회
저자는 Reko 디스어셈블러(Disassembler)를 사용하여 RPG 컴파일러의 실행 파일을 분석했다. 초기에는 in/out 명령어를 찾지 못했지만, 코드 세그먼트(Code Segment)를 면밀히 검토한 결과, 병렬 포트(Parallel Port)와 통신하는 카피 방지 루틴을 발견했다. 이 루틴은 0x90 바이트로 구성되어 있어 분석이 용이했고, 저자는 어셈블리 코드(Assembly Code)를 패치하여 동글 검증을 우회하는 데 성공했다.
4바이트 패치(4-byte Patch)를 통한 동글 무력화
저자는 동글 검증 루틴의 결과를 고정된 값으로 변경하기 위해 4바이트 패치를 적용했다. 분석 결과, 병렬 포트(Parallel Port) 루틴은 입력값 없이 고정된 값을 반환하는 단순한 구조였다. 저자는 브루트 포스(Brute Force) 방식으로 256가지 경우의 수를 시도하여, 올바른 값을 찾아내고, 컴파일러의 모든 실행 파일에 동일한 패치를 적용하여 카피 방지를 완전히 우회했다. 이는 매우 단순한 형태의 카피 방지 메커니즘이었음을 보여준다.
보안 취약점 및 소프트웨어 아키텍처(Software Architecture)에 대한 고찰
이번 분석은 구형 소프트웨어의 보안 취약점을 드러내는 동시에, 당시의 소프트웨어 아키텍처(Software Architecture)와 카피 방지 기술의 한계를 보여준다. 특히, 하드웨어 동글이 단순히 고정된 값을 반환하는 방식은 현대적인 보안 기준에 비추어 볼 때 매우 취약하다. 저자는 이러한 분석을 통해, 레거시 시스템의 보안 취약점을 이해하고, 더 나아가 소프트웨어 개발 및 보안 분야에서 지속적인 개선(Continuous Improvement)의 중요성을 강조한다.