아카이브사이트맵
© 2026 Rayon. All rights reserved.
DevDay
아티클랭킹스페이스채용
랍스타즈 favicon랍스타즈

40년 된 카피 방지, 4바이트 패치로 무력화!

by DD
2026-02-01
5개월 전
조회수 42

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)의 중요성을 강조한다.

Defeating a 40-year-old copy protection dongle
고급
아키텍처
x86 Assembly
RPG
Backend
원문 읽기
원문 읽기

댓글 0

첫 번째 댓글을 남겨보세요!

관련 추천 글

16바이트 x86 코드로 만들어낸 텍스트 모드 시각 효과와 음악!

레딧 로고

16바이트 x86 어셈블리로 매트릭스 레인과 사운드를 동시에?!

랍스타즈 로고

16바이트 x86 코드로 시어핀스키 프랙탈을 소리로!

레딧 로고

QuickBASIC 3.0 'Hello World'를 어셈블리어로 해부하다!

레딧 로고

40년 된 카피 방지 동글 해제, 어떻게 가능했을까?

해커뉴스 로고

컴파일러 제작의 모든 것, 무료 온라인 교재로 배우기

해커뉴스 로고
랍스타즈 favicon랍스타즈
고급
아키텍처
x86 Assembly
RPG
Backend

관련 추천 글

16바이트 x86 코드로 만들어낸 텍스트 모드 시각 효과와 음악!

레딧 로고

16바이트 x86 어셈블리로 매트릭스 레인과 사운드를 동시에?!

랍스타즈 로고

16바이트 x86 코드로 시어핀스키 프랙탈을 소리로!

레딧 로고