6个版本 (1个稳定版)
2.0.0 | 2019年4月20日 |
---|---|
1.0.0 |
|
0.3.0-alpha.1 | 2018年12月16日 |
0.2.3 | 2018年9月18日 |
0.2.2 | 2018年8月30日 |
#503 in 嵌入式开发
46KB
1K SLoC
scalpel
二进制切割和缝合工具。也许还可以用作签名工具。
围绕二进制进行剪切,缝合或移植二进制文件
主要用于需要提取或替换二进制文件部分的情况。
用例
-
将整体blob中的固件分割成多个部分
scalpel stance --range 0..4Ki --output bootloader.bin firmware.bin scalpel stance --range 4Ki+241664 --output part_A.bin firmware.bin --file-format bin scalpel stance --range 282624+241664 --output part_B.bin firmware.hex --file-format hex
-
将固件部分(如引导加载程序和应用)缝合在一起
scalpel stitch --binary tmp/test_bytes --offset 0 --binary tmp/test_bytes --offset 2048 --fill-pattern zero --output stitched.bin scalpel stitch --binary tmp/test_bytes --offset 2Ki --binary tmp/test_bytes --offset 0 --fill-pattern one --output stitched.hex --file-format hex scalpel stitch --binary tmp/test_bytes --offset 2058 --binary tmp/test_bytes --offset 10 --fill-pattern random --output stitched.bin
-
用新文件替换部分
scalpel graft --range 1Ki..2Ki --replace tmp/test_cut_out --output cut tmp/test_bytes scalpel graft --range 0..2Ki --replace tmp/test_cut_out --output cut tmp/test_bytes --file-format bin scalpel graft --range 1Ki+1Ki --replace tmp/test_cut_out --output cut tmp/test_bytes scalpel graft --range 1Ki+1Ki --replace tmp/test_cut_out --output cut tmp/test_bytes.hex --file-format hex
功能
- 在指定的开始和结束/大小处切割二进制文件
- 正确处理校验和的端序
- 替换部分(例如,证书文件或非易失性存储器及其/或部分)
- 允许十六进制输入
- 允许多个输入量级(K = 1000,Ki = 1024,M = 1e6,Mi = 1024*1024,...)
- 添加验证器选项以对齐给定的扇区/页面大小
- 允许使用IntelHex格式进行输入和输出
常见 / 提示
-
您需要提取的二进制文件作为include?使用
xxd -i sliced.bin > sliced_binary.h
将结果创建为头文件。 -
使用openssl将.pem格式的RSA密钥转换为pkcs8格式(参见
ring
文档 doc-ring ),openssl
目前仅在master
上支持Ed25519算法openssl pkcs8 -toppk8 -nocrypt -outform der -in [key.pem] > [pkcs8_key.pk8]
-
使用来自
ring
作者的小工具生成有效的Ed25519密钥对cargo install kt kt generate ed25519 --out=FILE
依赖项
~8–17MB
~213K SLoC