이렇게 생긴 칩이 있습니다. 옛날 오락실 게임들은 보안용으로 이렇게 내부에 마스크롬이 들어가있는 MCU를 달아놓곤 했는데, 이번에는 이걸 덤프해보았습니다. 이 기판을 FPGA에 쑤셔넣으려고 하는데, MAME 롬셋에 덤프가 없었기 때문입니다.
다들 아시겠지만 칩을 까면 돌이 나옵니다. 고대석판이죠.
고대석판을 200배 확대하면 안농문자가 나옵니다. 여기서 1과 0을 판단해봅시다.
저렇게 가운데에 뭔가 세로줄이 있는 게 1, 없는 게 0입니다. 이런 게 32768비트가 있습니다. 이걸 한 개의 에러 없이 모두 덤프해야 합니다.
그런데 식별을 좀 더 쉽게 하기 위해서 3% 불산을 부어버리면
이렇게 됩니다. 실리콘 바로 위의 diffusion만 남기고, 메탈과 폴리실리콘은 다 불산에 날아가 버립니다. 보기 쉬워졌죠? 불산국물을 보면 메탈과 폴리실리콘이 조각조각 떨어져나와서 둥둥 떠 있는 걸 볼 수 있습니다. NMOS니깐, 게이트랑 배선들이 다 날아가고, 소스와 드레인만이 남는겁니다. 트랜지스터가 있으면 1, 없으면 0입니다.
이때 불산은 3%를 사용해도 무난합니다. 10%불산을 사용하면 작업이 더 빠릅니다. 어찌됐든 질산 뒷산 황산 불산 이러한 산 종류들은 공돌이 잇템으로 집에 있으면 아주 좋습니다.
옛날같았으면 32768개의 비트를 하나하나 보고 키보드로 1010111 이렇게 쳐야 했는데, 요새는 격자만 찍찍 그러주면 이미지 픽셀의 스레숄드를 지정해서 1인지 0인지 판독해줄수 있는 툴이 있습니다. 하지만, 이것도 능사는 아니라 결국 사람이 32768비트를 전부 수차례 검사해야합니다. 시대가 변해도 중요한건 근성이란 말입니다.
아참, 그리고 덤프가 성공했다고 해도, 우리가 볼 수 있는 롬파일처럼 FF 07 A0 이렇게 친절하게 배열되어 있지 않았기 때문에, 별도로 이렇게 CPU주변을 추적해서 어드레스와 데이터 버스의 순서를 알아내고, 주소 디코더를 분석해서 파이썬으로 데이터 변환과정을 거쳐야 합니다.
그리고 롬파일 대충 넣고 돌려보면 이렇게 잘 되는 것을 볼 수 있습니다.
베릴로그로 끄적여봤자 유효 코드줄 3000줄정도로 끝나는 쬐끄만 칩도(YM3812, 왼쪽) 30000게이트 수준의 1um 게이트 어레이(TC0630FDP, 오른쪽) 사랑과 근성만 있다면 모두 FPGA에 박아넣을 수 있습니다.
현미경 사고싶네요.