
Claude Code가 내 노트북의 BIOS를 해제했습니다!
요약
Claude Code를 활용하여 HP 노트북의 BIOS 보안 검증 로직을 우회하고 숨겨진 설정 필드를 활성화하는 과정을 다룹니다. Ghidra, Unicorn Engine 등 다양한 도구와 함께 Claude가 직접 BIOS 덤프 분석 및 패치 스크립트 작성을 수행했습니다.
핵심 포인트
- Claude Code를 이용한 BIOS 덤프 분석 및 RSA-2048 서명 체크 우회 성공
- Ghidra와 Unicorn Engine을 활용한 바이너리 역공학 및 에뮬레이션 수행
- 1바이트 패치를 통해 BIOS 손상 감지 로직을 무력화
- 숨겨진 55개의 Setup 필드 및 Advanced/Power/Debug 탭 활성화
면책 조항: 만약 이것을 시도하고 싶다면, BIOS를 플래싱하고 문제가 발생했을 때 복구할 수 있도록 ch341a와 같은 칩 플래셔(chip flasher)를 준비하세요! 제 노트북은 BIOS 버전 F.68을 사용하는 HP 15-dw1036ne(놀라운 이름이네요)입니다. HP의 BIOS는 BIOS에서 어떠한 수정 사항이라도 감지되면 "BIOS Corruption Detected(BIOS 손상 감지)" 메시지를 띄웁니다. 그리고 제 노트북의 BIOS를 해제할 수 있는 사람을 찾지 못해서, Claude Code에게 제 BIOS 덤프(dump)와 몇 가지 도구를 주어 BIOS 해제를 시도하게 했습니다. 그리고 해냈습니다! 이 게시물의 나머지 내용은 Claude가 작성했습니다... 마지막에는 BIOS 파일을 수정하는 Python 스크립트가 포함되어 있으며, 제 노트북으로 시도해 보았으나 유사한 HP 모델에서 작동할 수도 있습니다!
사용된 도구:
Ghidra (GhidrAssistMCP를 통해): BIOS 드라이버를 읽고 역어셈블(disassembling)하여, tab-blocklist 함수와 signature-check 코드를 찾음
UEFITool / UEFIExtract / UEFIFind: BIOS 이미지를 드라이버 파일로 분해함
Unicorn Engine: 실제 하드웨어에 플래싱하기 전, 실제 BIOS 외부에서 추출된 signature-check 함수를 유효한 서명 및 손상된 서명을 대상으로 실행함
Capstone: 해당 에뮬레이션 테스트 중에 명령어를 디코딩(decoded)함
cryptography (Python 라이브러리): 에뮬레이션된 체크가 가짜 데이터가 아닌 실제 암호 기술을 대상으로 실행되도록 유효한 테스트 서명을 생성함
Python (커스텀 스크립트): Ghidra 자체 분석에서 놓친 상수(constants)와 함수 호출(function calls)을 스캔함
발견 사항 #1: RSA-2048 DXE-FV 서명 체크 우회
HP/Compal은 전체 압축된 DXE 펌웨어 볼륨(firmware volume)에 분리된 RSA-2048 서명을 적용합니다. 순정 펌웨어 상태의 해당 볼륨에서 단 1바이트만 건드려도 "BIOS corruption detected" 화면이 뜨며 부팅이 거부됩니다. 검증기(verifier) 자체는 LZMA로 압축되어 있어 플래시 이미지의 로우 바이트 스캔(raw byte scan)에서는 나타나지 않으며, 압축 해제 후에만 존재합니다. 검증 함수의 SHA-256 및 SHA-1 코드 경로 모두에는 다음과 같은 꼬리(tail) 부분이 있습니다:
CALL RsaVerifyCore
TEST AL, AL
JNZ ok ; 검증 통과
MOV EBX, 0x8000001a ; 검증 실패
ok: RET
1바이트 패치: JNZ ( 0x75 )를 JMP ( 0xEB )로 변경.
이제 이 함수는 RSA 수학 연산 결과와 상관없이, 키(key)나 서명(signature)을 건드리지 않고도 항상 성공을 반환합니다.
찾은 내용 #2: 55개의 숨겨진 Setup 필드
많은 Setup 필드들이 SetupUtility의 IFR 폼(forms)에 컴파일되어 있지만, 하드코딩된 불리언 상수(SuppressIf{True} / GrayOutIf{True})에 의해 차단되어 있습니다. 해당 상수 바이트를 뒤집으면(TRUE 0x46을 FALSE 0x47로 변경) 필드가 나타납니다. SuppressIf 27개, GrayOutIf 28개로 총 55개가 있으며, 각각 1바이트씩 차지합니다.
찾은 내용 #3: Advanced / Power / Debug / Boot 탭
FormBrowser.efi가 어떤 탭을 보여줄지 결정하는데, Advanced, Power, Debug, Boot 이 네 가지 탭을 숨깁니다. 이 숨김 처리 뒤에 있는 체크 로직은 이 하드웨어에서 항상 부정(negative)으로 돌아옵니다. 1바이트 패치: 해당 체크가 항상 긍정(positive)으로 돌아오도록 뒤집습니다. 이제 Advanced, Power, Debug, Boot 탭이 모두 나타납니다.
수정 스크립트
사용자의 순정 덤프(stock dump)를 가져와 세 가지 패치를 모두 재현하는 Python 스크립트입니다. 이것이 제가 제 노트북에서 사용하는 이미지를 만든 도구입니다: https://files.catbox.moe/f5m8mv.py 누군가에게 도움이 되길 바랍니다!
제출자: /u/Reddit_2049 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/ClaudeAI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기