얼마 전에 NAND 플래시를 덤프하고 binwalk
.Binwalk를 사용하여 SQUASHFS 파일 시스템을 찾을 수 있었지만 안타깝게도 UBI 위에 설치되어 unsquashfs
유틸리티나 sasquatch
특정 작업을 수행하는 기능을 사용할 수 없었기 때문에 데이터를 검색할 수 없었습니다. .
그러나 binwalk
UBI 미러도 찾을 수 있습니다. 그래서 나의 다음 접근 방식은 해당 이미지에서 콘텐츠를 추출하고 결국 squashfs 파일 시스템을 만드는 것이었습니다.
이를 위해 도구를 사용하고 싶습니다 ubireader
(https://github.com/jrspruitt/ubi_reader).
ubireader_display_info
나에게 다음과 같은 결과를 주었다:
UBI File
---------------------
Min I/O: 2048
LEB Size: 126976
PEB Size: 131072
Total Block Count: 847
Data Block Count: 377
Layout Block Count: 2
Internal Volume Block Count: 0
Unknown Block Count: 468
First UBI PEB Number: 10
Image: 1681423409
---------------------
Image Sequence Num: 1681423409
Volume Name:spare
Volume Name:data1
Volume Name:root1
Volume Name:root0
Volume Name:data0
PEB Range: 0 - 855
Volume: spare
---------------------
Vol ID: 4
Name: spare
Block Count: 142
Volume Record
---------------------
alignment: 1
crc: '0x743003a9'
data_pad: 0
errors: ''
flags: 0
name: u'spare'
name_len: 5
padding: u'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
rec_index: 4
reserved_pebs: 386
upd_marker: 0
vol_type: 'dynamic'
Volume: data1
---------------------
Vol ID: 3
Name: data1
Block Count: 8
Volume Record
---------------------
alignment: 1
crc: '0xefc3e0d'
data_pad: 0
errors: ''
flags: 0
name: u'data1'
name_len: 5
padding: u'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
rec_index: 3
reserved_pebs: 34
upd_marker: 0
vol_type: 'dynamic'
Volume: root1
---------------------
Vol ID: 1
Name: root1
Block Count: 110
Volume Record
---------------------
alignment: 1
crc: '0x4a7089bd'
data_pad: 0
errors: ''
flags: 0
name: u'root1'
name_len: 5
padding: u'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
rec_index: 1
reserved_pebs: 232
upd_marker: 0
vol_type: 'dynamic'
Volume: root0
---------------------
Vol ID: 0
Name: root0
Block Count: 108
Volume Record
---------------------
alignment: 1
crc: '0x38a2ed27'
data_pad: 0
errors: ''
flags: 0
name: u'root0'
name_len: 5
padding: u'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
rec_index: 0
reserved_pebs: 232
upd_marker: 0
vol_type: 'dynamic'
Volume: data0
---------------------
Vol ID: 2
Name: data0
Block Count: 9
Volume Record
---------------------
alignment: 1
crc: '0x7c2e5a97'
data_pad: 0
errors: ''
flags: 0
name: u'data0'
name_len: 5
padding: u'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
rec_index: 2
reserved_pebs: 34
upd_marker: 0
vol_type: 'dynamic'
알 수 없는 청크가 여러 개 있습니다. 이것이 문제인지는 모르겠지만 다음 명령을 사용하여 파일을 추출하려고 하면 ubireader_extract_files
다음 오류가 발생합니다.
Extracting files to: ubifs-root/1681423409/spare
extract_files Error: No inodes found
Extracting files to: ubifs-root/1681423409/data1
read Error: LEB: 10 is corrupted or has no data.
extract_files Error: 1
UBIFS Fatal: Super block error: Wrong node type.
확실하지는 않지만 UBI 이미지(또는 전체 덤프)가 어떤 방식으로든 손상되었을 수 있다고 생각합니다.
제가 사용하고 있는 NAND 플래시에는 내부 ECC가 활성화되어 있고 데이터시트에 다음과 같이 나와 있기 때문에 이에 대해 설명할 수 없습니다.
During a READ operation, the page data is read from the array to the cache
register, where the ECC code is calculated and compared with the ECC code
value read from the array. If error bits are detected, the error is corrected
in the cache register. Only corrected data is output on the I/O bus.
이와 같은 데이터를 검색하기 위해 내가 할 수 있는 일이 있습니까? 아니면 제가 뭔가 잘못하고 있는 걸까요?