Skip to main content

Tool to Fix Yabinary File

Project description

This is Python Library to fix “Yabinary” file like foremost. The term “Yabinary” in Japanese mean “Dangerous Binary”.
This library can be useful for CTF. It supports Python 2 & 3.

change log

0.3.0
fix bug
extract() return dict
change -x to -c, -a to -x
0.2.9
update signatures
add check_hidden_data()
0.2.8
add many signatures
change extract single files to extract many files
0.2.7
bug fix
0.2.6
add get_signature_index(), rewite identify(), extract()
0.2.5
add write()
0.2.4
fix README
0.2.3
change fixYabinary command, import to fy
0.2.2
bug fix
0.2.1
rewrite something, and change how to extend().
0.2.0
can use in command line.

Installation

PyPI

The recommended process is to install the PyPI package, as it allows easily staying update.

$ pip install fixYabinary

github

Download from https://github.com/tkmru/fixYabinary/. Let’s push star!!

Usage

look(file_path)

print Binary like hexdump command.

>> import fy
>> fy.look("./test.png")

           00 01 02 03 04 05 06 07   08 09 0A 0B 0C 0D 0E 0F
0x000000   00 00 00 00 49 45 4e 44   ae 42....

It can be used in command line.

$ fy -l test.png

get(file_path, option)

return Binary data. If option is “f” , you get Formated Binary.
You must not set option.
>> import fy
>> fy.get("./test.png")
0000000049454e44ae42....

>>fy.get("./test.png", "f")
00 00 00 00 49 45 4e 44 ae 42....

write(file_path, binary, option)

This function write new file from binary string.
If option is “l” , set binary list to second arg.
You must not set option.
>> import fy
>> fy.write('test','01ff4c')
>> fy.get('test')
u'01ff4c'

>> fy.write('test',['01','ff','4c'],'l')
>> fy.get('test')
u'01ff4c'

extend(file_path, new_file_path, hex, bytes, option)

make new file that file is extended. extend function intepret that byte is decimal.
option is None or “t” or “b”. option is None by default.
>> import fy
>> fy.get("./test.png", "./extended", "00", 3)

Succeeded in making ./extended.
# 000000 + ./test.png's Binary Data + 000000 in ./extended


>> fy.get("./test.png", "./extended", "00", 3, "t")

Succeeded in making ./extended.
# 000000 + ./test.png's Binary Data in ./extended


>> fy.get("./test.png", "./extended", "00", 3, "b")

Succeeded in making ./extended.
# ./test.png's Binary Data + 000000 in ./extended

It can be used in command line in case option is None.

$ fy -e test.png extended 00 3

identify(file_path)

identify file type in file. return file type.

>> import fy
>> fy.identify("./extended")
./expanded include following FILE SIGNATURES
This file include hidden file.
File type: gif Detect: 4 files
HEADER
0 bytes - 5 bytes, 2791486 bytes - 2791491 bytes, 5578481 bytes - 5578486 bytes, 8366075 bytes - 8366080 bytes
FOOTER
6941 bytes - 6942 bytes, 2793128 bytes - 2793129 bytes, 2794238 bytes - 2794239 bytes, 5580894 bytes - 5580895 bytes, 8368828 bytes - 8368829 bytes

File type: png Detect: 4 files
HEADER
6943 bytes - 6958 bytes, 2794240 bytes - 2794255 bytes, 5580896 bytes - 5580911 bytes, 8368830 bytes - 8368845 bytes
FOOTER
9715 bytes - 9726 bytes, 2796205 bytes - 2796216 bytes, 5583366 bytes - 5583377 bytes, 8371920 bytes - 8371931 bytes

It can be used in command line.

$ fy -i extended

extract(file_path, new_file_path, start_address, end_address)

cut out binary data, and write it into new file. Return value is result file path OrderdDict.
OrderedDict([('file_type', ['result_file_path1', 'result_file_path2']), ('file_type2', ['result_file_path3'])])
If start_address and end_address is str, they are interpreted hex.
If start_address and end_address is int, they are interpreted decimal.
>> import fy
>> fy.extract('./extended', './result', 4 , 124)
OrderedDict([(None, ['./cutout'])])

and auto detect file in file, and write it into new file.

>> import fy
>> fy.extract('./extended', './result')
OrderedDict([('png', ['result1.png', 'result2.png', 'result3.png', 'result4.png']), ('gif', ['result5.gif', 'result6.gif', 'result7.gif', 'result8.gif']), ('jpg', ['result9.jpg', 'result10.jpg', 'result11.jpg', 'result12.jpg'])])

It can be used in command line.

$ fy -c extended result 4 124  # set start_address and end_address

$ fy -x extended result        # auto extract file in file

$ fy -x extended               # if new_file_path is None, auto set ./result to new_file_path

get_signature_index(binary_string, signatures_dict)

get file signature index in file. signature is fy.headers, fy.footers
Retun value is signture index dict.
{file type:[[begin index, end index], [begin index, end index]]}
example
>> fy.headers
{'pgd': ['504750644d41494e6001'], 'html': ['3c21646f63747970652068746d6c3e', '3c21444f43545950452068746d6c3e'], 'java': ['cafebabe'], 'pdf': ['25504446'], 'pins': ['50494e5320342e32300d']...
>> fy.get_signature_index(fy.get('extended'), fy.headers)
{'gif': [[0, 11], [5582972, 5582983], [11156962, 11156973], [16732150, 16732161]], 'jpg': [[19454, 19459], [5592434, 5592439], [11166756, 11166761], [16743864, 16743869]]}

License

MIT License

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Copyright (c) @tkmru

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fixYabinary-0.3.0.tar.gz (10.9 kB view details)

Uploaded Source

Built Distributions

fixYabinary-0.3.0-py3-none-any.whl (14.7 kB view details)

Uploaded Python 3

fixYabinary-0.3.0-py2-none-any.whl (14.7 kB view details)

Uploaded Python 2

File details

Details for the file fixYabinary-0.3.0.tar.gz.

File metadata

  • Download URL: fixYabinary-0.3.0.tar.gz
  • Upload date:
  • Size: 10.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for fixYabinary-0.3.0.tar.gz
Algorithm Hash digest
SHA256 da0a0910191eb5729a1ca1c361cce6fd255d01c990cb1a5c4510f293e7a76a8c
MD5 c61946fc82d514c4d6019b91fcbf4cc2
BLAKE2b-256 a7661455c54987241ea11cc57ae6261ed3c86e4f9f4912c4ab3e8fb3cd2ac825

See more details on using hashes here.

File details

Details for the file fixYabinary-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for fixYabinary-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9f73c41037ddf2f8326cf5b349536b9ccc6763ede772f7c390abc60ba0e31773
MD5 661c469920aef5bbb192d267162c3915
BLAKE2b-256 e72ec7d172791e6ddcdde94f320bc310a6bb9dafc222c0c6336ecdea2287c3bb

See more details on using hashes here.

File details

Details for the file fixYabinary-0.3.0-py2-none-any.whl.

File metadata

File hashes

Hashes for fixYabinary-0.3.0-py2-none-any.whl
Algorithm Hash digest
SHA256 8eef16a6f084d3281e67c728d4c0c446e336ffe901b82842a9ffa075567915e1
MD5 aaa8ef5506a175d67598cc3ec69cb90c
BLAKE2b-256 a951e2f451b11f893be92cf5f0814424ab6dacbf7d8a703d77f720546ac208a8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page