Python TypeError: cannot use a string pattern on a bytes-like object

430 Views Asked by At

I tried to use python script to find a repeated copies of the configuration section within the binary dump file, using pattern and magic header.The config section always starts with 202 '0xff' bytes followed by 4 bytes '\x00\x00\x23\x27'. The script should identify different copies of config section within the partition and print the addresses where they start.

#!/usr/bin/env python3
import re
import mmap
import sys

magic = '\xff' * 202
pattern = magic + '\x00\x00\x23\x27'

fh = open(sys.argv[1], "r+b")
mf = mmap.mmap(fh.fileno(), 0)
mf.seek(0)
fh.seek(0)
for occurence in re.finditer(pattern, mf):
    print(occurence.start())
mf.close()
fh.close()

I got the error:

$ ./matcher.py dump.bin
Traceback (most recent call last):
  File "/home/eviecomp/BC2UTILS/dump_previous_profile/./matcher.py", line 13, in <module>
    for occurence in re.finditer(pattern, mf):
  File "/usr/lib/python3.9/re.py", line 248, in finditer
    return _compile(pattern, flags).finditer(string)
TypeError: cannot use a string pattern on a bytes-like object

Please advice how to fix script.

1

There are 1 best solutions below

0
Lexx Luxx On

So I find the answer myself: I have to use b'' literals:

magic = b'\xff' * 202
pattern = magic + b'\x00\x00\x23\x27'

so the script is:

#!/usr/bin/env python3
import re
import mmap
import sys

magic = b'\xff' * 202
pattern = magic + b'\x00\x00\x23\x27'

fh = open(sys.argv[1], "r+b")
mf = mmap.mmap(fh.fileno(), 0)
mf.seek(0)
fh.seek(0)
for occurence in re.finditer(pattern, mf):
    print(occurence.start())
mf.close()
fh.close()