Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
binwalk
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fact-gitdep
binwalk
Commits
e3d190b1
Commit
e3d190b1
authored
Nov 17, 2013
by
heffnercj
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Basic signature scans now work in python3; other features TBD
parent
6cf71c2d
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
12 additions
and
7 deletions
+12
-7
__init__.py
src/binwalk/__init__.py
+4
-1
common.py
src/binwalk/common.py
+2
-0
compat.py
src/binwalk/compat.py
+2
-2
parser.py
src/binwalk/parser.py
+4
-4
No files found.
src/binwalk/__init__.py
View file @
e3d190b1
...
@@ -539,8 +539,11 @@ class Binwalk(object):
...
@@ -539,8 +539,11 @@ class Binwalk(object):
results
=
[]
results
=
[]
results_offset
=
-
1
results_offset
=
-
1
# In python3 we need a bytes object to pass to magic.buffer
candidate_data
=
str2bytes
(
data
[
i
+
candidate
:
i
+
candidate
+
fd
.
MAX_TRAILING_SIZE
])
# Pass the data to libmagic, and split out multiple results into a list
# Pass the data to libmagic, and split out multiple results into a list
for
magic_result
in
self
.
parser
.
split
(
self
.
magic
.
buffer
(
data
[
i
+
candidate
:
i
+
candidate
+
fd
.
MAX_TRAILING_SIZE
]
)):
for
magic_result
in
self
.
parser
.
split
(
self
.
magic
.
buffer
(
candidate_data
)):
i_set_results_offset
=
False
i_set_results_offset
=
False
...
...
src/binwalk/common.py
View file @
e3d190b1
...
@@ -158,6 +158,8 @@ class BlockFile(io.FileIO):
...
@@ -158,6 +158,8 @@ class BlockFile(io.FileIO):
data
=
self
.
read
(
self
.
READ_BLOCK_SIZE
+
self
.
MAX_TRAILING_SIZE
)
data
=
self
.
read
(
self
.
READ_BLOCK_SIZE
+
self
.
MAX_TRAILING_SIZE
)
if
data
and
data
is
not
None
:
if
data
and
data
is
not
None
:
data
=
bytes2str
(
data
)
# Get the actual length of the read in data
# Get the actual length of the read in data
dlen
=
len
(
data
)
dlen
=
len
(
data
)
seek_offset
=
dlen
-
self
.
READ_BLOCK_SIZE
seek_offset
=
dlen
-
self
.
READ_BLOCK_SIZE
...
...
src/binwalk/compat.py
View file @
e3d190b1
...
@@ -33,7 +33,7 @@ def str2bytes(string):
...
@@ -33,7 +33,7 @@ def str2bytes(string):
For cross compatibility between Python 2 and Python 3 strings.
For cross compatibility between Python 2 and Python 3 strings.
'''
'''
if
isinstance
(
string
,
type
(
''
))
and
sys
.
version_info
.
major
>
2
:
if
isinstance
(
string
,
type
(
''
))
and
sys
.
version_info
.
major
>
2
:
return
bytes
(
string
,
'
ascii
'
)
return
bytes
(
string
,
'
latin1
'
)
else
:
else
:
return
string
return
string
...
@@ -42,7 +42,7 @@ def bytes2str(bs):
...
@@ -42,7 +42,7 @@ def bytes2str(bs):
For cross compatibility between Python 2 and Python 3 strings.
For cross compatibility between Python 2 and Python 3 strings.
'''
'''
if
isinstance
(
bs
,
type
(
b
''
))
and
sys
.
version_info
.
major
>
2
:
if
isinstance
(
bs
,
type
(
b
''
))
and
sys
.
version_info
.
major
>
2
:
return
bs
.
decode
(
'
ascii
'
)
return
bs
.
decode
(
'
latin1
'
)
else
:
else
:
return
bs
return
bs
...
...
src/binwalk/parser.py
View file @
e3d190b1
...
@@ -141,6 +141,7 @@ class MagicParser:
...
@@ -141,6 +141,7 @@ class MagicParser:
try
:
try
:
for
line
in
io
.
FileIO
(
file_name
)
.
readlines
():
for
line
in
io
.
FileIO
(
file_name
)
.
readlines
():
line
=
bytes2str
(
line
)
line_count
+=
1
line_count
+=
1
# Check if this is the first line of a signature entry
# Check if this is the first line of a signature entry
...
@@ -164,7 +165,7 @@ class MagicParser:
...
@@ -164,7 +165,7 @@ class MagicParser:
# Keep writing lines of the signature to the temporary magic file until
# Keep writing lines of the signature to the temporary magic file until
# we detect a signature that should not be included.
# we detect a signature that should not be included.
if
include
:
if
include
:
self
.
fd
.
write
(
line
)
self
.
fd
.
write
(
str2bytes
(
line
)
)
self
.
build_signature_set
()
self
.
build_signature_set
()
except
Exception
as
e
:
except
Exception
as
e
:
...
@@ -191,14 +192,14 @@ class MagicParser:
...
@@ -191,14 +192,14 @@ class MagicParser:
# Quick and dirty pre-filter. We are only concerned with the first line of a
# Quick and dirty pre-filter. We are only concerned with the first line of a
# signature, which will always start with a number. Make sure the first byte of
# signature, which will always start with a number. Make sure the first byte of
# the line is a number; if not, don't process.
# the line is a number; if not, don't process.
if
bytes2str
(
line
[:
1
])
<
'0'
or
bytes2str
(
line
[:
1
])
>
'9'
:
if
line
[:
1
]
<
'0'
or
line
[:
1
]
>
'9'
:
return
None
return
None
try
:
try
:
# Split the line into white-space separated parts.
# Split the line into white-space separated parts.
# For this to work properly, replace escaped spaces ('\ ') with '\x20'.
# For this to work properly, replace escaped spaces ('\ ') with '\x20'.
# This means the same thing, but doesn't confuse split().
# This means the same thing, but doesn't confuse split().
line_parts
=
bytes2str
(
line
)
.
replace
(
'
\\
'
,
'
\\
x20'
)
.
split
()
line_parts
=
line
.
replace
(
'
\\
'
,
'
\\
x20'
)
.
split
()
entry
[
'offset'
]
=
line_parts
[
0
]
entry
[
'offset'
]
=
line_parts
[
0
]
entry
[
'type'
]
=
line_parts
[
1
]
entry
[
'type'
]
=
line_parts
[
1
]
# The condition line may contain escaped sequences, so be sure to decode it properly.
# The condition line may contain escaped sequences, so be sure to decode it properly.
...
@@ -281,7 +282,6 @@ class MagicParser:
...
@@ -281,7 +282,6 @@ class MagicParser:
Returns an ordered list of offsets inside of data at which candidate offsets were found.
Returns an ordered list of offsets inside of data at which candidate offsets were found.
'''
'''
candidate_offsets
=
[]
candidate_offsets
=
[]
data
=
bytes2str
(
data
)
for
regex
in
self
.
signature_set
:
for
regex
in
self
.
signature_set
:
candidate_offsets
+=
[
match
.
start
()
for
match
in
regex
.
finditer
(
data
)
if
match
.
start
()
<
end
]
candidate_offsets
+=
[
match
.
start
()
for
match
in
regex
.
finditer
(
data
)
if
match
.
start
()
<
end
]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment