Gary Kessler Associates

Just a few software utilities...

Over the years, I have written a few little software utilities that I have shared with some others and they have encouraged me to make them more readily available.

Most of these programs are written in Perl. If you have a MacOS X, Linux, or Unix system, a Perl interpreter is part of the operating system. For Windows users, you can run these programs in a Cygwin environment or, even easier, use one of the many Perl interpreters for Windows, such as Strawberry Perl or ActivePerl.

See License and Warranty section below for additional information.

  • AIS-related tools:

    • AIS BlackToolkit (12/04/2018): Two programs — a preprocessor/user interface and NMEA encoder — both written in Perl, contributed to the TrendMicro AIS BlackToolkit project at GitHub.

    • AIS Tools (02/04/2019): A set of Perl scripts, as described below, to customize and parse NMEA sentences for AIS applications. The README.TXT file provides more detail. These programs are very much under development and augment the AIS BlackToolkit.
      [MD5 ( = 460f8ed0fecc8f465ee1382de58a7fd6]

      • (v3.19.2, 02/04/2019) is a preprocessor to create an input command line to AIS Ping.
      • (v5.4.2, 02/04/2019) creates custom AIVDM messages; the program produces output for AIS NMEA or for the GnuRadio program found in the AIS BlackToolkit.
      • (v3.2.0, 02/03/2019) accepts the binary output from AIS Ping to form NMEA_formatted sentences.
      • (v1.3.1, 01/27/2019) parses an NMEA binary string or sentence to display the contents, field by field.
      • (v1.2, 02/03/2019) produces an HTML file from the output of the parser program.
      • is a Linux/Unix script file that will auto-run AIS_menu, AIS_ping, and AIS_NMEA.
      • MaritimeIdentificationDigits-20591760-ITU.csv contains a list of Maritime Identification Digits (MID) codes for use with the AIS Parser.
      • README.TXT (02/06/2019) is the README file for these programs. It is essential reading to understand how the programs work and, in particular, how they work together.
  • Boot record and other parsers: These are a number of programs that parse a variety of file system and other logical structures. All of the programs are written in Perl:

    • apmparser (v1.5, 3/14/2013) parses an Apple Partition Map (APM)
      [MD5 ( = 590e3edf6c5d3017d68768265bfb2f10]
    • bsparser (v3.1, 3/13/2013) parses a FAT or NTFS boot sector
      [MD5 ( = c3cc1a6a8ead08eabdcbc9c5d1375049]
    • dirparser (v2.1,01/03/2018) parses a FAT directory
      [MD5 ( = cd3f1ee8cef58e6eb5491931537761b9]
    • fatparser (v2.1, 07/01/2016) parses a FAT12, FAT16, or FAT32 table. Output can be directed to the screen or CSV file.
      MD5 ( = c19e7d9774f9d1b79992b5803303ed9b
    • gptparser (v1.4beta, 3/14/2013) parses a GUID Partition Table (GPT) header
      [MD5 ( = f0dcf44dd888e985461e455ca9f1cfcb]
    • info2parser (v1.4, 4/9/2013) parses an NTFS INFO2 file
      [MD5 ( = 3a31e5bce5fa103e16304f89fb514e1f]
    • mbrparser (v2.1, 3/13/2013) parses a standard DOS/Windows Master Boot Record (MBR)
      [MD5 ( = 8fa2f1654b956c4c8870cdba4de3b8b1]
    • mftparser (v2.1, 6/11/2013) parses NTFS Master File Table (MFT) records
      [MD5 ( = 0a5d22d2e513f45befd1da30706e2b39]
    • sqlite_parser (v2.3, 3/14/2013): This Perl program accepts as input a set of SQL records and will parse the contents for you. If you happen to know the schema, the output will match up the fields to the headers. This program is useful if you are able to carve SQL records out of unallocated space and don't have the entire file structure (in which case you could just use an SQLite browser).
      [MD5 ( = 1c66caff10b3e2745d640986618f09ab]
  • cisco7 (v1.0a, 4/24/2012): Two programs -- one in C and one in Perl -- that "cracks" a Cisco Type 7 password. Not much to the cracking, actually, since the password is merely an XOR applied to the password and a fixed string. Well, read more in the README file or in my crypto paper!
    MD5 ( = 48aaf634c34052e08254c996245b8df2

  • entropy (v1.5, 03/30/2017): This Perl program calculates the entropy (randomness) of a given file. The program displays entropy as a value from 1-8, and can optional show a histogram and/or percentage of each of the 256 values of the bytes in the file.
    MD5 ( = 0344ce782ec607dcaf56f7c49f03e35d

  • FileSigs (12/13/2015, corrected 09/20/2016): This ZIP archive contains versions of my File Signatures Table in a format usable by FTK, Tim Coakley's Simple Carver and Simple Carver Lite, Scalpel, and Marco Pontello's TrID - File Identifier utility. The _README.txt file describes how the files can be used and their formats. *** If there are other useful formats, please let me know and I will try to accomodate. ***
    [MD5 ( = 606c95dfc33ea1b6d44dd79f4858d0a4]

  • include (v2.2, 2/2/2011): For good or for bad, I have been writing my own HTML code since about 1993. This program is a small Perl script that allows you to insert a small block of HTML code into multiple HTML files without the use of server-side scripting or that kind of stuff. As an example, all of the main pages on the GKA Web site have a consistent left navigation bar; it has the look and feel of using frames but each page is actually fully self-contained. I can change the leftnav bar on all of the site's pages in a few seconds merely by updating a file that contains just the leftnav code and running a script that inserts the new code into the HTML files. The Perl program and documentation are in the ZIP file.
    [MD5 ( = 8ff5ada1ab89fe7a2ee6eaf81f269ff1]

  • LiveSystem (v5.0a, 02/28/2015): This ZIP file contains a set of free utilities from a variety of sources that can be used to acquire volatile data from a running Windows system. The type of information includes currently open TCP/UDP ports and the processes associated with those ports, currently logged on users, running processes, and more! Read the _README.TXT file for more information.
    [MD5 ( = cefd3114da216e621673e44487ec61f4]

  • LiveSystem for Mac (v0.9, 6/17/2013): This ZIP file contains a batch file that can be used to acquire volatile data from a running Mac OS X (Unix) system. The type of information includes currently open TCP/UDP ports, currently logged on users, running processes, and more! Read the _README.TXT file for more information.
    [MD5 ( = 33b518a6761c0bc5091155e462c1d5e2]

  • Luhn Test (v1.4, 07/20/2014): This Perl program will inspect a numeric string — ostensibly a credit card number — and indicate whether it is valid per the Luhn algorithm, the scheme commonly used to validate credit card numbers. In addition, if the number is a valid Luhn value, it is checked against a list of credit card format templates to see whether it could be an actual valid credit card number. Run with the -h switch for more information; some sample numbers are provided for testing.
    MD5 ( = 9fd1fd1b8438840d4c24395497f0cd59

  • Manual Cryptography (v0.8.05, 06/08/2018): A Perl program that implements a variety of manual crypto schemes, including the (misnamed) Vigenère cipher, Autokey cipher, Beaufort cipher, ADFGVX, and one-time pad. Good for playing around....
    MD5 ( = f6b82e0adaf535318a39330cbcabbe22

  • PictureAlbum (v4.3, 02/25/2018): Picture Album is a Perl program that provides a simple way to take directories of pictures and create an HTML-formatted album suitable for posting on a Web site; one example of such a photo album can be found at GCK's SCUBA Photos. PictureAlbum will organize photographs by directory, showing a series of thumbnail images that are hot-linked to full-size images. A user manual describes how to set up the directories. NOTE: This program requires that ImageMagick be installed on your computer.
    [MD5 ( = 86aeefa552e5da186eaa8bea71b89767]

  • PictureReporter (v2.1, 02/19/2016): Picture Reporter is a Perl program that offers a simple way to take directories of pictures and create an HTML-formatted report. This was designed primarily for digital forensics examiners who might take a series of screen shots, for example, categorizing the pictures by placing them in different subdirectories. PictureReporter will organize the pictures by directory, showing a series of thumbnail images that are hot-linked to full-size images. A user manual describes how to set up the directories.
    [MD5 ( = faec37011e70a699139fce34223a9358]

  • pingsweep (v1.6, 12/22/2015): A simple Perl program that pings a range of hosts in a Class C address range. Use the -h switch for the help file.
    [MD5 ( = 863b76dc8dd728eda89b8a755c25cf61]

  • RC4 (v1.3, 11/23/2012): RC4 is a simple Perl implementation of the Rivest Cipher 4 (or Ron's Code 4) algorithm. The program is intended as a teaching tool rather than as a serious encryption application since it does not protect the key in any way, such as erasing it from RAM after use. Use the -h switch to get a list of program options or the -a switch to learn how the program works.
    [MD5 ( = 1b41ea3771c243f2a9a8d50990bff703]

  • sms7 (v2.1, 2/25/2011): Short Message Service (SMS) text messages up to 160 characters in length employ 7-bit characters that are packed into 8-bit octets. This Perl program will accept a text message and display the packed hexadecimal or accept the packed hex and display the unpacked text.
    [MD5 ( = a1c5474901485bf39e98a06749e9b274]

  • SCUBA-related utilities: The ZIP files below contain JavaScripts and their HTML front-end for various dive-related calculations:

    • PADI dive tables — Dive Table Calculator using the PADI Recreational Dive Planner.
      [MD5 ( = 770804c7c35ae1b4bd15f95471fd7147]
      • PADI dive tables (metric) — Metric version of the Dive Table Calculator using the PADI Recreational Dive Planner, by Sonya Imm. (Distributed with permission.)
        [MD5 ( = 69458490b92b8c8a789b1bd2927c6e42]
    • NAUI dive tables — Dive Table Calculator using the NAUI recreational dive tables.
      [MD5 ( = 695d65b28952540602d4048eae9bcb06]
    • Nitrox maximum operating depth (PADI) — Maximum Operating Depth calculator when using Nitrox, based on PADI tables.
      [MD5 ( = 8677c26c8bd1e5652c735503d4f768b3]
    • Nitrox maximum operating depth (NAUI) — Maximum Operating Depth calculator when using Nitrox, based on NAUI tables.
      [MD5 ( = 8a335cb7de9a533dc87ca0bb058be265]
    • Nitrox maximum operating depth (Cobra) — Maximum Operating Depth calculator when using Nitrox, based on Suunto Cobra dive computers.
      [MD5 ( = f00242272b437a835b9dc16ba7db2972]
  • EAN Gas Mix Calculator (v3.1, 06/23/2015): This Excel spreadsheet is a utility for partial pressure gas blending for Enhanced Air Nitrox mixes. Given a starting pO2 and tank pressure, and desired pO2 and tank pressure, the spreadsheet will indicate how much fill gas to add, followed by top off gas. Fill gas and top off gas default to 100% O2 and air (20.9% O2), respectively, but these parameters can be changed in the spreadsheet. One tab of the spreadsheet shows calculations in psi and another tab in bar.
    [MD5 ( = aa24a2f5c38a6501d22b13a6d9b041cf]

  • Latitude/Longitude Coordinate Converter (v1.0, 2/17/2012): This Excel spreadsheet converts between degree/minute/second (D°M"S'), GPS (D°M.MMM), and decimal (D.DDD°) formats for expressing latitude and longitude.
    [MD5 (DMS_GPS_Decimal.xlsx) = f5f38218531f3883213739f6810a36c9]

  • Latitude/Longitude Converter (v1.0, 9/19/2013): This Perl script can be used to convert latitude/longitude coordinates between degree/minute/second (D°M"S'), GPS (D°M.MMM), and decimal (D.DDD°) formats.
    [MD5 ( = ca0413ccc29eb70e0fbb8646e91df487]

License and Warranty

All software on this page is distributed as open source and free software under version 3 of the GNU General Public License (aka GPLv3).

These programs are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

All material on this site © 1996-2019, Gary C. Kessler. All rights reserved. Permission to use the material on this site is extended for individual personal use and for non-commercial distribution, as long as appropriate attribution is provided and the information is not altered in any way without express written permission of the author.