mirror of
https://github.com/DarkMatterCore/nxdumptool.git
synced 2024-11-23 02:36:41 +00:00
173 lines
15 KiB
Markdown
173 lines
15 KiB
Markdown
|
# gcdumptool
|
|||
|
닌텐도 스위치 게임 카드 덤프 도구
|
|||
|
|
|||
|
주요 기능
|
|||
|
--------------
|
|||
|
|
|||
|
* 선택적 인증서 제거 및 선택적인 트리밍을 통해 전체 카트리지 이미지 덤프 (XCI)를 생성.
|
|||
|
* 카트리지 응용 프로그램에서 설치 가능 패키지 (NSP)를 생성.
|
|||
|
- Lockpick을 사용하여 미리 전체 NCA 키 집합을 검색해야합니다. "sdmc:/switch/prod.keys"에 저장해야합니다.
|
|||
|
* 멀티 게임 카트 지원.
|
|||
|
* XCI/NSP 덤프에 대한 CRC32 체크섬 계산.
|
|||
|
* NSWDB.COM (NSWreleases.xml)의 XML 데이터베이스를 사용하여 전체 XCI 덤프 확인.
|
|||
|
* libcurl을 통한 XML 데이터베이스, 인앱 업데이트.
|
|||
|
* 게임 카드에서 루트 HFS0 헤더를 사용하여 정확한 HFS0 원시 파티션 덤프.
|
|||
|
* HFS0 파티션 파일 데이터 덤프.
|
|||
|
* 수동 파일 덤프 지원하는 HFS0 파티션 파일 브라우저.
|
|||
|
* RomFS 섹션 파일 데이터 덤핑.
|
|||
|
* 수동 파일 덤프 지원하는 RomFS 섹션 파일 브라우저.
|
|||
|
* 수동 게임 카드 인증서 덤프.
|
|||
|
* 잔여 SD 카드 공간 확인.
|
|||
|
* 모든 작업에 대한 파일 분할 지원.
|
|||
|
* NCM 및 NS 서비스를 사용한 게임 카드 메타 데이터 검색.
|
|||
|
* 덤프 속도, ETA 계산, 진행률 표시 줄.
|
|||
|
|
|||
|
감사
|
|||
|
--------------
|
|||
|
|
|||
|
* MCMrARM, 오리지널 응용 프로그램 제작.
|
|||
|
* RSDuck, vba-next-switch 포트 용. UI 메뉴 코드는이 응용 프로그램의 기초로 사용.
|
|||
|
* Foen, NCM 서비스를 사용하는 방법에 대한 좋은 힌트 제공.
|
|||
|
* Yellows8, 일부 NCM 서비스 IPC 호출을 구현할 때 버그를 수정하도록 도움.
|
|||
|
* SciresM, hactool. AES 암호 처리 및 외부 키 파일 구문 분석 코드는 NSP 덤프 프로세스 중에 사용.
|
|||
|
* The-4n, 4NXCI 및 hacPack 용. 4NXCI에서 사용된 NCA 내용 패치 절차는 hacPack의 NACP XML 생성과 응용 프로그램 복제
|
|||
|
* shchmue, Lockpick 용. NSP 덤프 및 RomFS 덤프/탐색 절차에 필요한 키 수집 알고리즘에 대한 참조로 사용
|
|||
|
* Björn Samuelsson, C에 대한 공개 도메인 CRC32 체크섬 계산 코드 (crc32_fast.c).
|
|||
|
* AnalogMan, 지속적인 지지와 아이디어.
|
|||
|
* RattletraPM, 응용 프로그램에 사용되는 멋진 아이콘.
|
|||
|
* GNOME 프로젝트, 파일 브라우저 모드에 대한 고대비 디렉토리 / 파일 아이이 검색.
|
|||
|
* ReSwitched의 사람들은 좋은 홈브류 에코 시스템을 창조하기 위해 노력.
|
|||
|
|
|||
|
변경이력
|
|||
|
--------------
|
|||
|
|
|||
|
**v1.1.0:**
|
|||
|
* RattletraPM이 만든 새롭고 세련된 응용 프로그램 아이콘으로 대체. 고맙습니다!
|
|||
|
* 게임 카드 기본 응용 프로그램 아이콘이 검색되어 메뉴에 표시.
|
|||
|
* 모든 항목을 즉시 표시하는 대신 멀티 게임 카트가 삽입되어 있으면 L/ZL/R/ZR 버튼을 사용하여 표시된 기본 응용 프로그램 정보를 변경할 수 있음.
|
|||
|
* 닌텐도 확장 공유 글꼴은 이제 텍스트를 사용하는 대신 컨트롤러 버튼과 스틱을 나타내는 비트 맵을 표시하는데 사용.
|
|||
|
* mbedtls 기반 AES 및 SHA-256 구현을 libnx의 하드웨어 가속 암호화 API의 기능으로 대체.
|
|||
|
* 분할 NSP 덤프처럼 보관 비트가 설정된 디렉토리를 사용하여 분할 XCI 덤프를 생성하는 옵션 추가. "분할 출력 덤프"가 활성화 된 경우에만 나타남.
|
|||
|
* ETA 계산 수정.
|
|||
|
* 전체 HFS0 파티션 데이터 덤프에서 ETA 계산 활성화.
|
|||
|
* 게임카드 인증서 덤프에 대한 CRC32 체크섬 계산 수정.
|
|||
|
* NCA RomFS 섹션 파서 추가 된 프로그램 :
|
|||
|
- 파일 시스템 덤프, 파일 시스템 브라우징, 수동 파일 덤핑, 파일 분할 지원. 당신의 게임카드 데이터 수집을 즐기십시오!
|
|||
|
- 멀티 게임 카트와 호환. 하위 메뉴에서 덤프/브라우즈 할 기본 응용 프로그램을 선택할 수 있음.
|
|||
|
- 출력 파일은 다음과 같이 저장: "sdmc:/[GameName] v[GameVersion] ([TitleID]) (RomFS)/".
|
|||
|
* 그놈 프로젝트에서 파일 찾아보기 모드 (HFS0/RomFS)에 고대비 디렉토리/파일 아이콘 추가.
|
|||
|
* NSP 생성 코드 (4NXCI/hacPack 기반) 수정.
|
|||
|
- 델타 조각은 이제 삭제.
|
|||
|
- SHA-256 체크섬은 수정 된 후 모든 NCA 콘텐츠에 대해 다시 계산되어 새로운 NCA ID가 생성.
|
|||
|
- ACID 공개 키는 프로그램 NCA의 NPDM 섹션에서 대체. 관련된 모든 NCA/PFS0 수퍼 블록 SHA-256 해시가 다시 계산.
|
|||
|
- 프로그램 NCA 헤더의 NPDM 서명이 이제 대체
|
|||
|
- 응용 프로그램 CNMT의 콘텐츠 레코드는 적절한 SHA-256 해시 및 새 NCA ID로 업데이트. 관련된 모든 NCA/PFS0 수퍼 블록 해시가 다시 계산.
|
|||
|
- 이제 NACP XML도 생성.
|
|||
|
- 이러한 모든 변경 때문에 CRC32 체크섬은 덤프 프로시저가 완료될 때까지 계산할 수 없음.
|
|||
|
- 이 옵션을 사용하면 응용 프로그램이 CRC32 체크섬을 계산하기 위해 NSP 덤프가 완료된 후 추가 시간이 소요. 그럼에도 불구하고 이 절차를 취소 할 수 있음.
|
|||
|
- CRC32 체크섬 계산이 활성화되어 NSP 덤프 메뉴에 경고 메시지가 표시되면 사용자에게 이 추가 단계를 알림.
|
|||
|
- 또한 출력 CRC32 체크섬은 새로운 덤프마다 다를 수 있음. 프로그램 NCA 헤더의 NPDM 서명이 임의 시드를 사용하기 때문.
|
|||
|
- 이로 인해 효과적으로 생성된 NSP는 ES 패치만 작동하면 됨. ACID 패치는 더 이상 필요하지 않음.
|
|||
|
* 번들로 제공되는 업데이트/DLC를 포함하는 게임카드로 패치 및 AddOnContent 타이틀 유형에 대한 NSP 덤핑 지원 추가:
|
|||
|
- 주 메뉴에 표시된 정보에는 삽입 된 게임 카드에 번들로 제공되는 업데이트 / DLC의 수 (응용 프로그램 및 총)가 표시.
|
|||
|
- 번들로 제공되는 게임카드 업데이트에 권한이 부여된 비트맵이 있는 경우 해당 티켓과 인증서가 모두 출력 NSP에 추가.
|
|||
|
- 또한 NSP 덤프 메뉴는 기본 응용 프로그램, 업데이트, DLC의 세 가지 하위 범주로 나뉨.
|
|||
|
- 각 하위 메뉴는 삽입된 게임카드가 해당 범주에 속한 타이틀을 하나 이상 보유한 경우에만 나타남.
|
|||
|
- 대부분의 게임카드처럼 기본 응용 프로그램만 포함되어 있으면 메뉴에서 NSP 덤프 옵션을 선택하면 기본 응용 프로그램 덤프 메뉴로 바로 이동할 수 있음.
|
|||
|
- 하위 메뉴에 들어가면 해당 카테고리에 속하는 덤프할 타이틀을 정확하게 선택할 수 있습니다.
|
|||
|
- 출력 업데이트 NSP는 어떤 방식으로도 수정되지 않기에 기본 응용 프로그램 및 DLC의 NSP와 달리 CRC32 체크섬은 항상 동일.
|
|||
|
* 확장된 CNMT 헤더 구조체의 최소 시스템 버전 필드 크기 수정. @0Liam 감사합니다!
|
|||
|
* 출력 NSP 덤프의 명명 규칙 변경:
|
|||
|
- 기본 응용 프로그램: "sdmc:/[GameName] v[GameVersion] ([TitleID]) (BASE).nsp".
|
|||
|
- 엡데이트: "sdmc:/[GameName] v[UpdateVersion] ([UpdateTitleID]) (UPD).nsp".
|
|||
|
- 일치하는 기본 응용 프로그램을 찾을 수 없는 경우: "sdmc:/[UpdateTitleID] v[UpdateVersion] (UPD).nsp".
|
|||
|
- DLC: "sdmc:/[GameName] v[DLCVersion] ([DLCTitleID]) (DLC).nsp".
|
|||
|
- 일치하는 기본 응용 프로그램을 찾을 수 없는 경우: "sdmc:/[DLCTitleID] v[DLCVersion] (DLC).nsp".
|
|||
|
* 이제 응용 프로그램은 SPL 서비스를 사용하여 NCA 헤더 키를 검색하고 런타임에 NCA 키 영역 암호 해독을 수행 할 수 있습니다. 따라서 NSP를 덤프하거나 (RomFS 데이터를 덤프 / 브라우즈하지 않기 위해) 미리 Lockpick을 실행하지 않아도됩니다.
|
|||
|
* 삽입된 게임카드에 번들로 제공되는 업데이트가 포함되어있는 경우 해당 버전 번호가 이제 XCI, HFS0, 게임카드 인증서 덤프의 출력 파일 이름에 사용.
|
|||
|
* 파일 분할 코드의 사소한 개선.
|
|||
|
- 파일 분할이 활성화 된 경우 현재 작업의 파일 이름이 표시되고 모든 작업에 대해 업데이트.
|
|||
|
* 응용 프로그램 업데이트 기능은 argv에서 실행 경로를 사용할 수 있는 경우 이를 사용합니다. 그렇지 않은 경우 기본값은 "sdmc:/switch/gcdumptool.nro" 입니다.
|
|||
|
* UI 레이아웃 수정.
|
|||
|
* NCM 서비스 자원이 이제 제대로 닫힘.
|
|||
|
* 불필요한 서비스 (탈)초기화가 없어짐.
|
|||
|
|
|||
|
이러한 변화를 테스트 한 PatrickD85, unvaluablespace, wartutor, Slim45에게 큰 감사를 드립니다!
|
|||
|
|
|||
|
**v1.0.8:**
|
|||
|
|
|||
|
* 멀티 게임 카트에서 적절한 메타 데이터 읽기 추가.
|
|||
|
* gamecard -> NSP 덤프 옵션 추가:
|
|||
|
- 파일 분할과 호환 (FAT32 지원). splitNSP.py와 동일한 레이아웃이 사용: 번호가 매겨진 파트 파일 (00, 01 등)이 있는 디렉토리. 아카이브 비트는 이 디렉토리에서 즉시 활성화되어 HOS가 전체 파일인 것처럼 처리할 수 있음. 이 방법은 NSP 처리 기능이 있는 모든 응용 프로그램에서 사용할 수 있음.
|
|||
|
- CRC32 체크섬 계산과 호환. 면책 조항: NSP 덤프는 XML 데이터베이스에 대해 확인할 수 없음.
|
|||
|
- 출력 NSP에는 응용 프로그램에 대한 CNMT NCA의 정보를 기반으로 메타 데이터 XML 파일이 들어 있으며 hactool의 코드를 사용하여 암호 해독. 필요한 키셋은 "sdmc:/switch/prod.keys"에서 로드되며 Lockpick을 사용하여 생성할 수 있음.
|
|||
|
- 멀티 게임 카트를 사용하면 메뉴에서 덤프할 응용 프로그램을 선택할 수 있음.
|
|||
|
* 덤프 확인 프로세스가 멀티 게임 카트에 맞게 조정. 이제 번들로 제공되는 모든 응용 프로그램의 타이틀 ID를 사용하여 가능한 체크섬 일치를 찾음.
|
|||
|
* 쓰기 조작이 실패할 때 dumper.c의 향상된 오류보고. 또한 FAT32 파일 크기 제한 (0xFFFFFFFF 바이트)을 넘은 오프셋에 데이터를 쓰려고 할 때 쓰기 오류가 발생하면 응용 프로그램에서 사용자에게 파일 분할 옵션을 사용하도록 제안.
|
|||
|
* 분할된 덤프의 부품 크기 조정: XCI/raw partition/수동 파일 덤프 파트 크기가 이제 XCI-Cutter에서 사용되는 파트 크기와 일치하지만 NSP 파트 크기는 splitNSP.py에서 사용되는 부품 크기와 일치
|
|||
|
* UI 코드에 대한 사소한 수정.
|
|||
|
|
|||
|
**v1.0.7:**
|
|||
|
|
|||
|
* 타이틀 ID가 일치하는 NSWReleases.xml의 Scene 릴리스가 해당 노드와 관련된 데이터를 누락한 경우 유효하지 않은 XML 노드 데이터 포인터를 해제하려고 시도할 때 세그먼트화 오류 수정
|
|||
|
* 업데이트 성공 후 사용자에게 응용 프로그램을 다시 시작하라는 메시지를 추가.
|
|||
|
|
|||
|
**v1.0.6:**
|
|||
|
|
|||
|
* 최신 devkitA64 및 libnx 릴리즈와 호환되도록 응용 프로그램 코드베이스 업데이트.
|
|||
|
* libnx에 포함되어있는 fsext.c/h에서 일부 fs-srv 서비스 기능 제거 (아직 수정하지 않은 기능을 수정).
|
|||
|
* GFX 코드를 개조하여 pl 서비스와 FreeType을 사용하여 8x8 ASCII 글꼴을 공유 시스템 글꼴 대체.
|
|||
|
* 인앱 업데이트 옵션을 활성화 (및 수정). HTTPS 호환성은 mbedtls portlib를 통해 이루어짐.
|
|||
|
* 비활성화된 화면 디밍 및 자동 절전.
|
|||
|
* 파티션 브라우저에 파일 카운터 추가.
|
|||
|
* 분할된 게임 카드 덤프의 이름 지정 규칙을 SX OS 및 기타 도구와 즉시 호환되도록 *.xc[부품 번호]로 변경.
|
|||
|
* 새로운 게임카드를 1 초 삽입한 후 지연 시간이 증가.
|
|||
|
* 게임카드 상태 변경 사항을 보다 나은 방법으로 모니터링 할 수 있는 게임카드 탐지 스레드 추가. 이 스레드는 IEventNotifier 개체를 통해 검색된 게임카드 검색 커널 핸들에 연결.
|
|||
|
* 수동 HFS0 파티션 헤더 구문 분석으로 fs-srv 서비스 호출을 통해 파티션 된 파일 시스템 마운트 대체. 이 경우 0x02 유형의 게임카드에서 로고 파티션을 탐색할 때 문제 수정.
|
|||
|
* 애플릿 대신 일반/시스템 응용 프로그램으로 실행 중일 때 홈 버튼이 눌려 있습니다. 응용 프로그램이 애플릿으로 실행중인 경우 작업이 시작될 때마다 경고 메시지가 표시.
|
|||
|
* 번들로 제공되는 FW 버전 6.0.0 - 8.0.0에 대한 감지 추가.
|
|||
|
|
|||
|
**v1.0.5:**
|
|||
|
|
|||
|
* 캐시된 Control.nacp에서 ncm 서비스를 검색하는 대신 ncm 서비스를 사용하는 게임 카드 버전 읽기 수정.
|
|||
|
* 게임 카드와 함께 제공되는 FW 업데이트 버전을 읽고 식별하는 기능 추가.
|
|||
|
* 게임 카드 타이틀 ID를 읽는 중 오류가 발생하는 경우 응용 프로그램은 설명과 함께 번들로 제공되는 FW 버전 업데이트도 표시
|
|||
|
* nswdb.com의 XML 데이터베이스를 기반으로 출력 XCI 덤프 이름 바꾸기가 제거.
|
|||
|
* 출력 명명 체계가 변경. ASCII 범위를 벗어나는 문자는 밑줄로 변경:
|
|||
|
- XCI 덤프: "sdmc:/[GameName] v[GameVersion] ([TitleID]).xci".
|
|||
|
- 원시 파티션 덤프: "sdmc:/[GameName] v[GameVersion] ([TitleID]) - 파티션 [PartitionIndex] ([PartitionName]).hfs0".
|
|||
|
- 파티션 데이터 덤프 (디렉토리): "sdmc:/[GameName] v[GameVersion] ([TitleID]) - 파티션 [PartitionIndex] ([PartitionName])/".
|
|||
|
- 인증서 덤프: "sdmc:/[GameName] v[GameVersion] ([TitleID]) - Certificate ([CRC32]).bin".
|
|||
|
* 수동 파일 덤프는 이제 SD 카드 루트가 아닌 해당 디렉토리에 저장.
|
|||
|
* 주 메뉴에 XML 데이터베이스 업데이트 옵션 추가
|
|||
|
* 주 메뉴에 업데이트 응용 프로그램 옵션 추가. libcurl은 보안 연결을 다루는데 문제가 있기 때문에 현재로서는 작동하지 않음. 따라서 옵션이 비활성화되었습니다 (A를 누르면 아무 것도하지 않습니다). 그럼에도 불구하고 GitHub API에서 JSON 응답을 구문 분석하는 코드는 거의 준비가되어 있으므로 시간 문제 일뿐.
|
|||
|
|
|||
|
**v1.0.4:**
|
|||
|
|
|||
|
* exFAT 모드는 기본적으로 켜져 있음.
|
|||
|
* 패딩 옵션을 트림 출력 덤프 옵션으로 변경 (XCI-Cutter와 동일).
|
|||
|
* 덤프 속도 및 ETA 계산 추가..
|
|||
|
* nswdb.com (NSWreleases.xml)의 XML 데이터베이스를 사용하여 XCI 덤프 확인 추가. 파일은 SD 카드 루트 디렉토리에 저장함. 또한 덤프 검증은 전체 덤프 (인증서 포함 또는 제외)를 작성하기로 한 경우에만 수행되며 절단되지 않은 경우에는 수행되지 않음.
|
|||
|
* CRC32 체크섬 계산 + XCI 덤프 확인을 구성 가능한 옵션 제작.
|
|||
|
* nswdb.com의 XML 데이터베이스를 사용하여 일치하는 항목이 발견되면 출력 XCI 덤프의 이름이 해당 Scene 릴리스로 변경 (예: "sdmc:/0100000000010000_20180625-234930.xci"-> "sdmc:/Super.Mario.Odyssey.NSW- BigBlueBox.xci").
|
|||
|
|
|||
|
**v1.0.3:**
|
|||
|
|
|||
|
* 0xFF 패딩 기능을 구성 가능한 옵션 제작.
|
|||
|
* XCI 덤프에 대한 CRC32 체크섬 계산 추가.
|
|||
|
|
|||
|
**v1.0.2:**
|
|||
|
|
|||
|
* 파일 분할 코드에서 바보같은 버그 수정.
|
|||
|
|
|||
|
**v1.0.1:**
|
|||
|
|
|||
|
* 사소한 UI 수정 및 조정.
|
|||
|
* uiLoop()에서 누락 된 타이틀 ID 확인을 일부 추가.
|
|||
|
* uiStatusMsg()에 대한 모든 호출이 이제 올바르게 식별.
|
|||
|
* 새로운 gamecard가 감지되면 대기 시간이 2 초로 증가.
|
|||
|
|
|||
|
**v1.0.0:**
|
|||
|
|
|||
|
첫 릴리즈.
|