Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
This python module is usable for manipulation with Device Tree Data and primary was created for imxsb tool
Some parts in this module have been inspired from: https://github.com/superna9999/pyfdt project.
pip install fdt
To install the latest version from master branch execute in shell following command:
pip install -U https://github.com/molejar/pyFDT/archive/master.zip
In case of development, install it from cloned sources:
git clone https://github.com/molejar/pyFDT.git
cd pyFDT
pip install -U -e .
NOTE: You may run into a permissions issues running these commands. Here are a few options how to fix it:
sudo
to install fdt
and dependencies globally--user
option to install locally into your home directory (export "~/.local/bin" into PATH variable if haven't).fdt module has intuitive and self describing API, what is presented in following example. Many of general requirements for manipulation with FDT Nodes, Properties and dts/dtb files are already implemented.
import fdt
#-----------------------------------------------
# convert *.dtb to *.dts
# ----------------------------------------------
with open("example.dtb", "rb") as f:
dtb_data = f.read()
dt1 = fdt.parse_dtb(dtb_data)
with open("example.dts", "w") as f:
f.write(dt1.to_dts())
#-----------------------------------------------
# convert *.dts to *.dtb
# ----------------------------------------------
with open("example.dts", "r") as f:
dts_text = f.read()
dt2 = fdt.parse_dts(dts_text)
with open("example.dtb", "wb") as f:
f.write(dt2.to_dtb(version=17))
#-----------------------------------------------
# add new Node into dt2
# ----------------------------------------------
# create node instance
node = fdt.Node('test_node1')
# add properties
node.append(fdt.Property('basic_property'))
node.append(fdt.PropStrings('string_property', 'value1', 'value2'))
node.append(fdt.PropWords('words_property', 0x80000000))
node.append(fdt.PropBytes('bytes_property', 0x00, 0x01, 0x02))
# PropBytes constructor take also complex data object as bytes() or bytearray()
node.append(fdt.PropBytes('bytes_property2', data=b"\x00\x01\x02"))
# add created node into root path of dt2
dt2.add_item(node)
# use set_property method to update or create new property
dt2.set_property('words_property', [0, 1], path='/test_node1')
dt2.set_property('bytes_property', b"\x00\x01", path='/test_node1')
dt2.set_property('string_property', ['value1', 'value2', 'value3'], path='/test_node1')
# use search method for find all string properties and then update it
items = dt2.search("", itype=fdt.ItemType.PROP_STRINGS, path="/test_node1")
for item in items:
item.data = ['value1', 'value2']
#-----------------------------------------------
# merge dt2 into dt1
# ----------------------------------------------
dt1.merge(dt2)
with open("merged.dtb", "wb") as f:
f.write(dt1.to_dtb(version=17))
#-----------------------------------------------
# diff two fdt objects
# ----------------------------------------------
out = fdt.diff(dt1, dt2)
print(out[0]) # same in dt1 and dt2
print(out[1]) # specific for dt1
print(out[2]) # specific for dt2
The python device tree converter pydtc is a tool for conversion *.dts to *.dtb and vice versa. Is distributed together with fdt module. This tool can be in some cases used as replacement of device tree compiler.
$ pydtc -h
usage: pydtc [-h] [-v] {pack,unpack,merge,diff} ...
Flat Device Tree (FDT) tool for manipulation with *.dtb and *.dts files
positional arguments:
{pack,unpack,merge,diff}
pack Pack *.dts into binary blob (*.dtb)
unpack Unpack *.dtb into readable format (*.dts)
merge Merge more files in *.dtb or *.dts format
diff Compare two files in *.dtb or *.dts format
optional arguments:
-h, --help show this help message and exit
-v, --version show program's version number and exit
Unpack Device Tree from binary blob *.dtb into readable text file *.dts
dtb_file - Single DTB file with dtb
extension
pydtc unpack test.dtb
DTS saved as: test.dts
Pack Device Tree from readable text file *.dts into binary blob *.dtb
dts_file - Single DTS file as *.dts
pydtc pack -v 17 test.dts
DTB saved as: test.dtb
Merge two and more *.dtb or *.dts files into one *.dts file
out_file - The output file name with *.dts extension
in_files - Two or more input files with *.dtb or *.dts extension
pydtc merge out.dts test1.dtb test2.dtb
Output saved as: out.dts
Compare two dtb/dts files and generate 3 dts files (same in 1 and 2, specific for 1, specific for 2)
in_file1 - Input file 1
in_file2 - Input file 2
pydtc diff test1.dtb test2.dtb
Output saved into: diff_out
FAQs
Flattened Device Tree Python Module
We found that fdt demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.