PCB를 튀겨?
전자제품을 기름에 튀기다.
이전에 들은, 충격적으로 아직도 강렬하게 기억하는 리버스 엔지니어링 기법은,
교수님의 경험담인지는 모르겠지만,
교수님께서 설명해 주신 청계천에서 행해진 리버스 엔지니어링 이야기였다.
보통 전자제품 하면 녹색의 파란색 기판에 여러 가지 전자 제품이 붙어 있는 것을 보게 된다.
이것을 PCB(Printed Circuit Board)라 하고,
이 기판 보드는 4~12층까지 여러 층으로 만들고 압착해서 만들어지는데,
완성품은 중간의 층에서 어떻게 배선이 되어 있는지 모르기 때문에
그것을 분석하기 위해서, PCB를 기름에 튀겼다고 한다.
기름에 튀기게 되면 PCB의 층이 벌어지게 되고,
각 층간 내부 배선 기법을 알아내었다고 한다.
그래서 복제품을 만들거나 하였다고 한다.
아마도 1970~80년대 정도에 그랬지 않을까 싶다.
당시 소프트웨어들은 메모리에서 직접 뽑아내고,
특별한 보호 기법들은 적용이 되지 않았던 것으로 생각된다.
2미터 위성 안테나 제어 보드 역공학
우리 연구실에서 실행코드를 디컴파일해서 소스를 분석을 한 적은 여러 번이었었지만,
리버스 엔지니어링의 극치는 2미터 안테나 컨트롤러였다.
2미터 안테나는 위성용 안테나로, 무궁화 위성과 같은 정지 위성의 방송을 수신하는 안테나였다.
스카이라이프처럼 정지 위성의 방송을 집에서 수신하면 한 곳을 바라보고 있으면 되는데,
이동하는 배에서 방송을 수신하려면, 배가 움직이니
정지되어 있는 위성을 계속 추적하고 바라보아야 방송을 수신할 수 있다.
물론, 요즘은 고속버스에 달린 것처럼, 옴니 안테나로 모든 방향의 신호를 수신할 수도 있지만,
당시에는 한 방향의 신호만 수신할 수 있기 때문에
이동체가 이동하더라도 위성을 계속 바라보게 만들어야 했다.
통상 접시의 크기가 크게 되면 위성의 미약한 신호를 수신하기에 용이하고,
고속으로 배가 이동을 하는 경우에도 수월하게 전파를 수신하게 된다.
접시에 반사된 신호는 가운데에 달려있는 실제 전파 수신 안테나에 모이게 되고,
그 신호를 증폭하게 된다.
이 것은 볼록렌즈로 빛을 한 군데 모으는 것과 같은 역할을 한다고 보면 된다.
여하튼, 당시 해외 최고의 안테나를 하나 구입해서 어떻게 동작을 하는지 분석을 하고,
다른 코드들을 넣어서 동작이 어떻게 되는지 리버스엔지니어링 해보기로 했다.
디어셈블러와 어셈블러
이 내용은 비전공자들은 이해하기 힘들 수가 있기는 한데, 최대한 쉽게 설명해 보겠다.
컴퓨터는 알다시피, 십진수가 아닌, 0과 1 두 개인 2진수를 계산하는데 최적화되어 있다.
컴퓨터의 CPU에 더하기 빼기 곱하기 나누기 등과 같은 명령을 내리면,
더하기라는 명령어와 무엇과 무엇을 더해야 하는지 두 개가 있어야 한다.
그래서, 컴퓨터가 알아듣는 것은, 만약 8비트 컴퓨터이고,
더하기 명령어가 16진수로 0x00이라면,
0x00 0x01 0x02 이런 식으로 될 것이다.
이것은 1과 2를 더하라는 명령어이다.
초기의 컴퓨터 명령은 이런 식으로 명령을 내렸고,
이런 명령어들의 집합이 "실행파일"이다.
이것은 사람이 알아보기 힘드니, 사람이 좀 알아볼 수 있는 것으로,
ADD 1, 2
이렇게 하면 사람이 알아보기는 좋지만, 컴퓨터는 바로 실행이 안된다.
그래서, 어셈블러 하는 것을 통해서 0x00 0x01 0x02 이렇게 변환하게 되는데,
이것을 어셈블러라고 한다.
그런데, 0x00 0x01 0x02 이렇게 메모리에 저장되어 있는 것을,
거꾸로 ADD 1, 2 이렇게 변환하는 것을 디어셈블러 라고 한다.
요런 상식(?)을 기본으로 아래 좀 더 읽어보자!
고난의 리버스 엔지니어링
제조사에서 온 실행 파일을 모토로라 사의 디어셈블러를 이용해서 디어셈블을 하고,
어셈블리 코드를 분석하고, 새로운 제어 코드를 집어넣고
어셈블러로 다시 실행 파일을 만들었다.
물론, 코드의 동작과 소스 코드에 대한 사전 정보는 하나도 없었다.
당연히(?) 처음에 이것저것 수정해 보니 안테나가 제대로 동작하지도 않았고,
위성 방송도 물론 수신되지 않았다.
그래서 사용한 방법은 디어셈블을 한 어셈블리 코드에 브레이크를 걸어 놓고
프로그램을 실행을 한 다음 실제 안테나가 어떻게 동작할 때 브레이크가 걸리는지 확인했다.
그렇게 함으로써, 제어코드가 실제 안테나 제어의 어느 부분인지 확인을 할 수 있었다.
선박용 안테나의 동작 원리
선박용 위성 안테나가 동작하는 방법은 처음에는 안테나가 고개를 숙이고 있다가,
전원이 들어오게 되면 고개를 들어 상하좌우로 움직여 보고,
현재의 위치정보를 기반으로 위성의 대략의 위치를 찾아가고,
거기에서 수신되는 방송 신호가 커지는 방향으로 안테나를 움직여
정확한 위성의 위치를 찾는 방법으로 구동했다.
이렇게 처음에 위성을 찾아내는 방법을 서칭 (탐색)이라고 하고,
그다음에는 배가 움직이는데 따라서 신호의 세기가 가장 센 방향으로 위성을 계속 바라보게 되고,
이것을 트래킹 (추적)이라고 한다.
국산화의 도전과 실패
나중에 연구실의 동료 중고는 이렇게 수정한 탐색 알고리즘을 기반으로 논문을 써서 석사 졸업을 하였다.
논문은 십자 탐색 알고리즘이었다.
처음에 안테나가 자신의 위치정보가 없는 경우에 이리저리 움직여 보고 신호가 있는 곳을 찾아야 하는데,
이때 나선형으로 찾기도 하고, 십자로 검색하기도 하고, 계단식으로 검색하기도 하고,
각각의 방법을 사용하게 된다.
그중의 가장 효율성 있는 방법과 새로운 탐색 방법을 논문으로 쓴 것이었다.
이때는 내가 한참 뒤에 위성 방송용 수신 제한 시스템 (Conditional Access System, CAS)과 관련된 회사에 입사할 줄은 꿈에도 생각을 못했다.
그 프로젝트의 시작은, 당시 선박용 위성 안테나가 모두 외산이라서 국산화를 하고 싶었는데,
하드웨어는 비슷하게 만들 수가 있었지만,
소프트웨어를 제작을 업체에서 못해서 우리 연구실에 의뢰한 것이었다.
나중에 계속 연구를 해서, 국산화를 할 수 있을 줄 알았는데,
결국 안타깝게 국산화에 실패를 하였다는 이야기를 들었다.
복제 방지 기술의 발전과 현대 보안 기술
통상 복제는 하드웨어의 복제와 소프트웨어의 복제를 하게 되는데,
하드웨어가 복제가 어려울 것 같지만, 실제로 PCB 하드웨어는 튀기거나,
반도체의 경우 디캡슐레이션(De-Cap)이라는 것을 통해 하드웨어를 복제하게 된다.
그리고, 소프트웨어는 보안 부트로드 (Secure Bootloader)라는 것으로 보호하고,
안에 저장된 코드를 암호화하여 저장하는 등 요즘은 많은 보호 방책들이 적용되어서,
소프트웨어 복제도 상당히 어려운 현황이다.
그런데, 필자는 또, 이 하드웨어 복제가 안되게 하는 기술을 가진 회사에 다니고 있다. :-)
시스템 반도체 (SoC, System on Chip)은 하나의 반도체 칩에 프로세서, 메모리, 입출력 인터페이스,
주변장치와 같은 시스템 전체를 통합하여 하나의 칩에 만든 것이고, 작은 PC라고 생각해도 된다.
이 SoC를 복제를 하여 복제칩을 만드는 경우가 있고,
중국에서 상당한 기술력을 가지고 있는 것으로 알고 있다.
필자가 다니는 회사는, 칩을 동일하게 복제를 해도,
안에 암호 역할을 하는 키 값이 동일하게 발생하지 않는 기술을 가지고 있고,
세계 최초로 이 기술을 상용화한 기술력을 가지고 있다.
물리적 복제방지 기술(PUF, Physically Unclonable Function)이라는 기술인데,
관심 있는 분은 찾아보면 좋겠다. ^^
국뽕은 아니지만, 이 기술은 자랑스러운 우리 토종 기술이며,
해외에 수출하여 국위를 선양하는 것이 필자가 다니는 회사가 하고 싶은 일이다.
졸업 후 직장생활을 하면서, 다른 사람이 짠 코드를 분석하는 일도 많았고,
구입한 소프트웨어의 설명서를 보면서 소프트웨어 디버깅을 한 경우도 있었다.
지금은 개발자들이 AI를 이용해 만든 코드를 적용하거나, 오픈소스를 이용해서 구현을 많이 하곤 하는데,
여전히 중요한 것이 이러한 코드를 정확하게 분석할 수 있어야 한다고 생각한다.
여하튼, 이런 여러 가지 업무들의 시작점이
이전의 연구실의 경험과 연관된다는 것이 참으로 재미있는 일이기도 하고,
예전 연구실에서의 여러 경험들이 이런 회사들로 필자를 이런 일들로 이끈 것은 아닌가 생각해 본다.