Immediate download (Ebook) Mastering Python forensics : master the art of digital forensics and analysis with Python by kan ebooks 2024
Immediate download (Ebook) Mastering Python forensics : master the art of digital forensics and analysis with Python by kan ebooks 2024
com
https://ebooknice.com/product/mastering-python-forensics-
master-the-art-of-digital-forensics-and-analysis-with-
python-50195232
OR CLICK HERE
DOWLOAD EBOOK
ebooknice.com
ebooknice.com
https://ebooknice.com/product/doing-math-with-python-doing-math-with-
python-50196050
ebooknice.com
ebooknice.com
(Ebook) The Basics of Digital Forensics: The Primer for
Getting Started in Digital Forensics by John Sammons ISBN
9781597496612, 1597496618
https://ebooknice.com/product/the-basics-of-digital-forensics-the-
primer-for-getting-started-in-digital-forensics-4155398
ebooknice.com
ebooknice.com
ebooknice.com
Every effort has been made in the preparation of this book to ensure the
accuracy of the information presented. However, the information
contained in this book is sold without warranty, either express or implied.
Neither the authors, nor Packt Publishing, and its dealers and distributors
will be held liable for any damages caused or alleged to be caused
directly or indirectly by this book.
Livery Place
ISBN 978-1-78398-804-4
www.packtpub.com
Credits
Authors
Reviewers
Richard Marsden
Puneet Narula
Yves Vandermeer
Commissioning Editor
Kartikey Pandey
Acquisition Editor
Sonali Vernekar
Shweta Pant
Technical Editor
Pranil Pathare
Copy Editor
Vibha Shukla
Project Coordinator
Shipra Chawhan
Proofreader
Safis Editing
Indexer
Mariammal Chettiyar
Production Coordinator
Arvindkumar Gupta
Cover Work
Arvindkumar Gupta
About the Authors
Dr. Michael Spreitzenbarth holds a degree of doctor of engineering in IT
security from the University of Erlangen-Nuremberg and is a CISSP as
well as a GMOB. He has been an IT security consultant at a worldwide
operating CERT for more than three years and has worked as a
freelancer in the field of mobile phone forensics, malware analysis, and
IT security consultancy for more than six years. Since the last four years,
he has been giving talks and lectures in the fields of forensics and mobile
security at various universities and in the private sector.
First of all, I would like to thank my wife, Daniela, for her moral
support and willingness to give up on some family time while I was
writing. I also would like to thank my coauthor and colleague, Dr.
Michael Spreitzenbarth, for talking me into writing this book and
handling a great deal of the organizational overhead of such a
project. Furthermore, the great people working on all the open source
software projects that we used and mentioned in this book deserve
credit. You are the guys who keep the IT world spinning.
About the Reviewers
Richard Marsden has over twenty years of professional experience in
software development. After starting in the fields of geophysics and oil
exploration, he has spent the last twelve years running the Winwaed
Software Technology LLC, an independent software vendor. Winwaed
specializes in geospatial tools and applications, which include web
applications, and operates the http://www.mapping-tools.com website for
tools and add-ins for geospatial products, such as Caliper's Maptitude
and Microsoft's MapPoint.
He started his career in banking and finance and then moved to the ever
growing domain of data and analytics.
Did you know that Packt offers eBook versions of every book published,
with PDF and ePub files available? You can upgrade to the eBook
version at www.PacktPub.com and as a print book customer, you are
entitled to a discount on the eBook copy. Get in touch with us at
<service@packtpub.com> for more details.
https://www2.packtpub.com/books/subscription/packtlib
Why subscribe?
Fully searchable across every book published by Packt
Copy and paste, print, and bookmark content
On demand and accessible via a web browser
Chapter 3, Using Python for Windows and Linux Forensics, is the first
step on your journey to understanding digital evidence. We will provide
examples to detect signs of compromise on Windows and Linux systems.
We will conclude the chapter with an example on how to use machine
learning algorithms in the forensic analysis.
Chapter 6, Using Python for Mobile Forensics, will give you an insight on
how to retrieve and analyze forensic data from mobile devices. The
examples will include analyzing Android devices as well as Apple iOS
devices.
Chapter 7, Using Python for Memory Forensics, demonstrates how to
retrieve memory snapshots and analyze these RAM images forensically
with Linux and Android. With the help of tools such as LiME and Volatility,
we will demonstrate how to extract information from the system memory.
What you need for this book
All you need for this book is a Linux workstation with a Python 2.7
environment and a working Internet connection. Chapter 1, Setting Up
the Lab and Introduction to Python ctypes, will guide you through the
installation of the additional Python modules and tools. All of our used
tools are freely available from the Internet. The source code of our
samples is available from Packt Publishing.
To get the most out of this book, you should have decent skills in Python
and understand at least some inner workings of your forensic targets. For
example, some file system details.
Conventions
In this book, you will find a number of text styles that distinguish between
different kinds of information. Here are some examples of these styles
and an explanation of their meaning.
Code words in text, database table names, folder names, filenames, file
extensions, pathnames, dummy URLs, user input, and Twitter handles
are shown as follows: "Note that in the case of Windows, msvcrt is the
MS standard C library containing most of the standard C functions and
uses the cdecl calling convention (on Linux systems, the similar library
would be libc.so.6)."
def multi_hash(filename):
"""Calculates the md5 and sha256 hashes
of the specified file and returns a list
containing the hash sums as hex strings."""
<Event
xmlns="http://schemas.microsoft.com/win/2004/08/events
/event"><System><Provider Name="Microsoft-Windows-
Security-Auditing" Guid="54849625-5478-4994-a5ba-
3e3b0328c30d"></Provider>
<EventID Qualifiers="">4724</EventID>
<Version>0</Version>
<Level>0</Level>
<Task>13824</Task>
Note
Warnings or important notes appear in a box like this.
Tip
Tips and tricks appear like this.
Reader feedback
Feedback from our readers is always welcome. Let us know what you
think about this book—what you liked or disliked. Reader feedback is
important for us as it helps us develop titles that you will really get the
most out of.
If there is a topic that you have expertise in and you are interested in
either writing or contributing to a book, see our author guide at
www.packtpub.com/authors.
Customer support
Now that you are the proud owner of a Packt book, we have a number of
things to help you to get the most from your purchase.
Errata
Although we have taken every care to ensure the accuracy of our
content, mistakes do happen. If you find a mistake in one of our books—
maybe a mistake in the text or the code—we would be grateful if you
could report this to us. By doing so, you can save other readers from
frustration and help us improve subsequent versions of this book. If you
find any errata, please report them by visiting
http://www.packtpub.com/submit-errata, selecting your book, clicking on
the Errata Submission Form link, and entering the details of your errata.
Once your errata are verified, your submission will be accepted and the
errata will be uploaded to our website or added to any list of existing
errata under the Errata section of that title.
Piracy
Piracy of copyrighted material on the Internet is an ongoing problem
across all media. At Packt, we take the protection of our copyright and
across all media. At Packt, we take the protection of our copyright and
licenses very seriously. If you come across any illegal copies of our
works in any form on the Internet, please provide us with the location
address or website name immediately so that we can pursue a remedy.
We appreciate your help in protecting our authors and our ability to bring
you valuable content.
Questions
If you have a problem with any aspect of this book, you can contact us at
<questions@packtpub.com>, and we will do our best to address the
problem.
Chapter 1. Setting Up the Lab and
Introduction to Python ctypes
Cyber Security and Digital Forensics are two topics of increasing
importance. Digital forensics especially, is getting more and more
important, not only during law enforcement investigations, but also in the
field of incident response. During all of the previously mentioned
investigations, it's fundamental to get to know the root cause of a security
breach, malfunction of a system, or a crime. Digital forensics plays a
major role in overcoming these challenges.
In this book, we will teach you how to build your own lab and perform
profound digital forensic investigations, which originate from a large
range of platforms and systems, with the help of Python. We will start
with common Windows and Linux desktop machines, then move forward
to cloud and virtualization platforms, and end up with mobile phones. We
will not only show you how to examine the data at rest or in transit, but
also take a deeper look at the volatile memory.
If you have already worked with Python ctypes and have a working lab
environment, feel free to skip the first chapter and start directly with one
of the other chapters. After the first chapter, the other chapters are fairly
independent of each other and can be read in any order.
Setting up the Lab
As a base for our scripts and investigations, we need a comprehensive
and powerful lab environment that is able to handle a large number of
different file types and structures as well as connections to mobile
devices. To achieve this goal, we will use the latest Ubuntu LTS version
14.04.2 and install it in a virtual machine (VM). Within the following
sections, we will explain the setup of the VM and introduce Python
virtualenv, which we will use to establish our working environment.
Ubuntu
To work in a similar lab environment, we suggest you to download a copy
of the latest Ubuntu LTS Desktop Distribution from
http://www.ubuntu.com/download/desktop/, preferably the 32-bit version.
The distribution provides a simple-to-use UI and already has the Python
2.7.6 environment installed and preconfigured. Throughout the book, we
will use Python 2.7.x and not the newer 3.x versions. Several examples
and case studies in this book will rely on the tools or libraries that are
already a part of the Ubuntu distribution. When a chapter or section of the
book requires a third-party package or library, we will provide the
additional information on how to install it in the virtualenv (the setup of
this environment will be explained in the next section) or on Ubuntu in
general.
To write your first Python script, you can use a simple editor such as vi or
a powerful but cluttered IDE such as eclipse. As a really powerful
alternative, we would suggest you to use atom, a very clean but highly
customizable editor that can be freely downloaded from https://atom.io/.
This is also what we will use in the following chapters to keep a common
environment for all the readers of the book and not run into any
compatibility issues. First of all, we have to install the virtualenv
package. This is done by the following command:
We will now create a folder in the users' home directory for our virtual
Python environment. This directory will contain the executable Python
files and a copy of the pip library, which can be used to install other
packages in the environment. The name of the virtual environment (in our
case, it is called labenv) can be of your choice. Our virtual lab
environment can be created by executing the following command:
Now, you can see that the command prompt starts with the name of the
virtual environment that we activated. From now on, any package that
you install using pip will be placed in the labenv folder, isolated from the
global Python installation in the underlying Ubuntu.
Throughout the book, we will use this virtual python environment and
install new packages and libraries in it from time to time. So, every time
you try to recap a shown example remember or challenge to change into
the labenv environment before running your scripts.
If you are done working in the virtual environment for the moment and
you want to return to your "normal" Python environment, you can
deactivate the virtual environment by executing the following command:
(labenv)user@lab:~$ deactivate
user@lab:~$
This puts you back in the system's default Python interpreter with all its
installed libraries and dependencies.
If you are using more than one virtual or physical machine for the
investigations, the virtual environments can help you to keep your
libraries and packages synced with all these workplaces. In order to
ensure that your environments are consistent, it's a good idea to "freeze"
the current state of environment packages. To do this, just run:
This will create a requirements.txt file, which contains a simple list of all
the packages in the current environment and their respective versions. If
you want to now install the same packages using the same version on a
different machine, just copy the requirements.txt file to the desired
machine, create the labenv environment as described earlier and
execute the following command:
Now, you will have consistent Python environments on all the machines
and don't need to worry about different library versions or other
dependencies.
After we have created the Ubuntu virtual machine with our dedicated lab
environment, we are nearly ready to start our first forensic analysis. But
before that, we need more knowledge of the helpful Python libraries and
backgrounds. Therefore, we will start with an introduction to the Python
ctypes in the following section.
Introduction to Python ctypes
According to the official Python documentation, ctypes is a foreign
function library that provides C compatible data types and allows calling
functions in DLLs or shared libraries. A foreign function library means that
the Python code can call C functions using only Python, without requiring
special or custom-made extensions.
This module is one of the most powerful libraries available to the Python
developer. The ctypes library enables you to not only call functions in
dynamically linked libraries (as described earlier), but can also be used
for low-level memory manipulation. It is important that you understand the
basics of how to use the ctypes library as it will be used for many
examples and real-world cases throughout the book.
C:\Users\Admin>python
>>> from ctypes import *
>>> libc = cdll.msvcrt
>>> print libc.time(None)
1428180920
(labenv)user@lab:~$ python
C data types
When looking at the two examples from the earlier section in detail, you
can see that we use None as one of the parameters for a dynamically
linked C library. This is possible because None, integers, longs, byte
strings, and unicode strings are the native Python objects that can be
directly used as the parameters in these function calls. None is passed as
a C, NULL pointer, byte strings, and unicode strings are passed as
pointers to the memory block that contains their data (char * or wchar_t
*). Python integers and Python longs are passed as the platform's
default C int type, their value is masked to fit into the C type. A complete
overview of the Python types and their corresponding ctype types can be
seen in Table 1:
ctypes type C type
c_bool _Bool
(https://docs.python.org/2/library/ctypes.html#ctypes.c_bool)
c_char char
(https://docs.python.org/2/library/ctypes.html#ctypes.c_char)
c_wchar wchar_t
(https://docs.python.org/2/library/ctypes.html#ctypes.c_wchar)
c_byte char
(https://docs.python.org/2/library/ctypes.html#ctypes.c_byte)
c_ubyte unsigned
(https://docs.python.org/2/library/ctypes.html#ctypes.c_ubyte) char
c_short short
(https://docs.python.org/2/library/ctypes.html#ctypes.c_short)
c_ushort unsigned
(https://docs.python.org/2/library/ctypes.html#ctypes.c_ushort) short
c_long long
(https://docs.python.org/2/library/ctypes.html#ctypes.c_long)
c_ulong unsigned
(https://docs.python.org/2/library/ctypes.html#ctypes.c_ulong) long
c_longlong __int64 or
(https://docs.python.org/2/library/ctypes.html#ctypes.c_longlong) long long
c_ulonglong unsigned
(https://docs.python.org/2/library/ctypes.html#ctypes.c_ulonglong) __int64 or
unsigned
long long
c_float float
(https://docs.python.org/2/library/ctypes.html#ctypes.c_float)
c_double double
(https://docs.python.org/2/library/ctypes.html#ctypes.c_double)
c_longdouble long
(https://docs.python.org/2/library/ctypes.html#ctypes.c_longdouble) double
c_char_p char *
(https://docs.python.org/2/library/ctypes.html#ctypes.c_char_p) (NUL
terminated)
terminated)
c_wchar_p wchar_t *
(NUL
(https://docs.python.org/2/library/ctypes.html#ctypes.c_wchar_p) terminated)
c_void_p void *
(https://docs.python.org/2/library/ctypes.html#ctypes.c_void_p)
This table is very helpful because all the Python types except integers,
strings, and unicode strings have to be wrapped in their corresponding
ctypes type so that they can be converted to the required C data type in
the linked library and not throw the TypeError exceptions, as shown in the
following code:
(labenv)user@lab:~$ python
class case(Union):
fields = [
("evidence_int", c_int),
("evidence_long", c_long),
("evidence_char", c_char 4)
]
A structure is very similar to unions, but the members do not share the
same memory location. You can access any of the member variables in
the structure using dot notation, such as case.name. This would access
the name variable contained in the case structure. The following is a very
brief example of how to create a structure (or struct, as they are often
called) with three members: name, number, and investigator_name so that
all can be accessed by the dot notation:
class case(Structure):
fields = [
("name", c_char 16),
("number", c_int),
("investigator_name", c_char * 8)
]
Tip
Downloading the example code
You can download the example code files from your account at
http://www.packtpub.com for all the Packt Publishing books you have
purchased. If you purchased this book elsewhere, you can visit
http://www.packtpub.com/support and register to have the files e-
mailed directly to you.
Summary
In the first chapter, we created our lab environment: a virtual machine
running Ubuntu 14.04.2 LTS. This step is really important as you can
now create snapshots before working on real evidence and are able to
roll back to a clean machine state after finishing the investigation. This
can be helpful, especially, when working with compromised system
backups, where you want to be sure that your system is clean when
working on a different case afterwards.
After completing this chapter, you will have a basic environment created
to be used for the rest of the book, and you will also understand the
fundamentals of Python ctypes that will be helpful in some of the
following chapters.
Chapter 2. Forensic Algorithms
Forensic algorithms are the building blocks for a forensic investigator.
Independent from any specific implementation, these algorithms describe
the details of the forensic procedures. In the first section of this chapter,
we will introduce the different algorithms that are used in forensic
investigations, including their advantages and disadvantages.
Algorithms
In this section, we describe the main differences between MD5, SHA256,
and SSDEEP—the most common algorithms used in the forensic
investigations. We will explain the use cases as well as the limitations
and threats behind these three algorithms. This should help you
understand why using SHA256 is better than using MD5 and in which
cases SSDEEP can help you in the investigation.
Before we dive into the different hash functions, we will give a short
summary of what a cryptographic hash function is.
1. It must be easy to compute the hash value for any given input.
2. It must be infeasible to generate the original input from its hash.
3. It must be infeasible to modify the input without changing the hash.
4. It must be infeasible to find two different inputs with the same hash
(collision-resistant).
In the ideal case, if you create a hash of the given input and change only
one bit of this input, the newly calculated hash will look totally different,
as follows:
MD5
The MD5 message-digest algorithm was the most commonly used (and
is still a widely used) cryptographic hash function that produces a 128-bit
(16-byte) hash value, typically expressed in the text format as a 32-digit
hexadecimal number (as shown in the previous example). This message
digest has been utilized in a wide variety of cryptographic applications
and is commonly used to verify data integrity in forensic investigations.
This algorithm was designed by Ronald Rivest in 1991 and has been
heavily used since then.
"We already knew that MD5 is a broken hash function" and that "no
one should be using MD5 anymore".
We would not go that far (especially because a lot of tools and services
still use MD5), but you should try switching to SHA256 or at least double-
check your results with the help of different hash functions in cases
where it is critical. Whenever the chain of custody is crucial, we
recommend using multiple hash algorithms to prove the integrity of your
data.
SHA256
SHA-2 is a set of cryptographic hash functions designed by the NSA
(U.S. National Security Agency) and stands for Secure Hash Algorithm
2nd Generation. It has been published in 2001 by the NIST as a U.S.
federal standard (FIPS). The SHA-2 family consists of several hash
functions with digests (hash values) that are between 224 bits and 512
bits. The cryptographic functions SHA256 and SHA512 are the most
common versions of SHA-2 hash functions computed with 32-bit and 64-
bit words.
Despite the fact that these algorithms calculate slower and that the
calculated hashes are larger in size (compared to MD5), they should be
the preferred algorithms that are used for integrity checks during the
the preferred algorithms that are used for integrity checks during the
forensic investigations. Nowadays, SHA256 is a widely used
cryptographic hash function that is still collision-resistant and entirely
trustworthy.
SSDEEP
The biggest difference between MD5, SHA256, and SSDEEP is the fact
that SSDEEP is not considered to be a cryptographic hash function as
it only changes slightly when the input is changed by one bit. For
example:
SSDEEP can be used to check how similar the two files are and in which
part of the file the difference is located. This feature is often used to
check if two different applications on the mobile devices have a common
code base, as shown in the following:
In the previous example, you can see that the second sample matches
the first one with a very high likelihood. These matches indicate the
potential source code reuse or at least a large number of files inside the
apk file are identical. A manual examination of the files in question is
required to tell exactly which parts of the code or files are identical;
however, we now know that both the files are similar to each other.
Supporting the chain of custody
The outcomes of forensic investigations can have a severe impact on
organizations and individuals. Depending on your field of work, your
investigation can become evidence in the court.
With Linux, one can easily create MD5 and SHA256 hashes from a drive
or multiple files. In the following example, we will calculate MD5 sums
and SHA256 sums for two files to provide a proof of identical content:
While the method shown in the previous example works, it has a big
disadvantage, the evidence and its copy have to be read twice to
calculate the hash sums. If the disk is a 1 TB hard drive, it can slow down
the overall process by several hours.
The following Python code reads the data only once and feeds it into two
hash calculations. Therefore, this Python script is almost twice as fast as
running md5sum followed by sha256sum and produces exactly the same
hash sums as these tools:
#!/usrbinenv python
import hashlib
import sys
def multi_hash(filename):
"""Calculates the md5 and sha256 hashes
of the specified file and returns a list
containing the hash sums as hex strings."""
md5 = hashlib.md5()
sha256 = hashlib.sha256()
if __name__ == '__main__':
hashes = []
print '---------- MD5 sums ----------'
for filename in sys.argv[1:]:
h = multi_hash(filename)
hashes.append(h)
print '%s %s' % (h[0], filename)
In the following call of the script, we calculate the hash sums of some of
the common Linux tools:
It is crucial to document the hash sums of the original data and the
forensic copy in the forensic report. An independent party can then read
the same piece of evidence and confirm that the data that you analyzed
is exactly the data of the evidence.
#!/usrbinenv python
When he was suffered to escape after his attempt upon Brant’s life
in the private room at Elitch’s, James Harding tarried in Denver only
so long as the leaving time of the first westward bound train
constrained him. Nevertheless, he went as one driven, and with
black rage in his heart, adding yet another tally to the score of his
account against the man who had banished him.
But, like Noah’s dove, he was destined to find no rest for the sole of
his foot. Having very painstakingly worn out his welcome in the
larger mining camps, he was minded to go to Silverette, hoping to
pick a living out of the frequenters of Gaynard’s. Unluckily, he was
known also in Silverette; and unluckily again, word of his coming
preceded him from Carbonado, the railway station nearest to the
isolated camp at the foot of Jack Mountain. Harding walked up from
Carbonado, was met at a sharp turn in the wagon road by a
committee from the camp above, and was persuaded by arguments
in which levelled rifles played a silent but convincing part to retrace
his steps.
Returning to Carbonado, his shrift was but a hand’s breadth longer.
On the second day, when he was but barely beginning to draw
breath of respite, he was recognised as the slayer of one William
Johnson, was seized, dragged into the street, and after an
exceedingly trying half hour was escorted out of camp and across
the range by a guard of honour with drawn weapons.
Under such discouragements he promptly determined to face the ills
he knew, drank deeply at the well of desperation, and, making a
forced march to the nearest railway station, boarded the first train for
Denver. It was a hazardous thing to do. Brant was a man of his word,
and the banished one had known him to go to extremities upon
slighter provocation. But, on the other hand, Denver was a
considerable city, and their ways might easily lie apart in it.
Moreover, if the worst should come, it was but man to man, with
plenty of old scores to speed the bullet of self-defence.
So reasoning, Harding stepped from the train at the Denver Union
Station in the gray dawn of an October morning, Argus-eyed, and
with his hand deep buried in the pocket of his ulster. The time was
auspicious, and he reached a near-by lodging house without mishap.
Through one long day he remained in hiding, but after dark, when
the prowling instinct got the better of prudence, he ventured out. In a
kennel some degrees lower in the scale descending than Draco’s he
met a man of his own kidney whom he had once known in the
camps, and who was but now fresh from the Aspen district and from
an outpost therein known as Taggett’s Gulch.
This man drank with Harding, and when his tongue was a little
loosened by the liquor grew reminiscent. Did the Professor recall the
killing of a man in the Gulch a year or so back—a man named
Benton, or Brinton? Harding had good cause to remember it, and he
went gray with fear and listened with a thuggish demon of
suffocation waylaying his breath. Assuredly, everybody remembered.
What of it? Nothing much, save that the brother of the murdered man
was in Colorado with the avowed intention of finding and hanging the
murderer, if money and an inflexible purpose might contribute to that
end.
That was the gist of the matter, and when Harding had pumped his
informant dry, he shook the man off and went out to tramp the streets
until he had fairly taken the measure of the revived danger. Summed
up, it came to this: sooner or later the avenger of blood would hear of
Brant, and after that the end would come swiftly and the carpenters
might safely begin to build the gallows for the slayer of Henry
Brinton. Harding had a vivid and disquieting picture of the swift
sequence of events. The brother would find Brant, and the latter
would speedily clear up the mystery and give the avenger the proofs.
Then the detective machinery would be set in motion, and thereafter
the murderer would find no lurking place secret enough to hide him.
Clearly something must be done, and that quickly. Concealment was
the first necessity; James Harding must disappear at once and
effectually. That preliminary safely got over, two sharp corners
remained to be turned at whatever cost. The incriminating evidence
now in Brant’s hands must be secured and destroyed, and Brant
himself must be silenced before the avenger of blood should find and
question him.
The disguise was a simple matter. At one time in his somewhat
checkered career Harding had been a supernumerary in a Leadville
variety theatre. Hence, the smooth-shaven, well-dressed man who
paid his bill at the Blake Street lodging house at ten o’clock that night
bore small likeness to the bearded and rather rustic-looking person
who engaged a room a few minutes later at a German Gasthaus in
West Denver. The metamorphosis wrought out in artistic detail,
Harding put it at once to the severest test. Going out again, he
sought and found the man from Taggett’s Gulch, and was
unrecognised. Introducing himself as a farmer from Iowa, he
persuaded the man to pilot him through the mazes of the Denver
underworld, and when he had met and talked with a dozen others
who knew the Professor rather better than he knew himself, he went
back to the West Side Gasthaus with a comforting abatement of the
symptoms of strangulation.
Having thus purchased temporary safety, the castaway began
presently to look about him for the means to the more important end.
Night after night he haunted the purlieus, hoping that a lucky chance
might reveal Brant’s whereabouts. But inasmuch as Brant was yet
walking straitly, nothing came of this, and in his new character
Harding could not consistently ask questions. Twice he met William
Langford face to face, and, knowing that the boy could probably give
him Brant’s street and number, he was about to risk an interview with
his protégé in his proper person when the god of evil-doers gave him
a tool exactly fitted to his hand.
It was on the Sunday evening of Brant’s relapse. Harding had been
making his usual round, and at Draco’s he met a man whose face he
recognised despite its gauntness and the change wrought by the
razor. A drink or two broke the ice of unfamiliarity, and then Harding
led the way to a card room in the rear on the pretext of seeking a
quiet place where they might drink more to their better acquaintance.
In the place of withdrawal Harding kept up the fiction of bucolic
simplicity only while the waiter was bringing a bottle and glasses.
Then he said: “I reckon you’d be willing to swear you had never seen
me before, wouldn’t you, Gasset?”
The big man gone thin was in the act of pouring himself another
drink, but he put the bottle down and gave evidence of a guilty
conscience by starting from his chair, ready for flight or fight as the
occasion might require.
“Who the blazes are you, anyway?” he demanded, measuring the
distance to the door in a swift glance aside.
Harding pulled off the wig and beard and leered across at him. “Does
that help you out any?”
Gasset sprang to his feet with a terror-oath choking him and
retreated backward to the door, hand on weapon.
“Don’t you do it, Jim!” he gasped. “Don’t, I say. I never meant to hurt
her—any of ’em will swear to that!”
Harding struck a match and relighted his cigar. He did it with leisurely
thoroughness, turning the match this way and that and ignoring his
quarry much as a cat ignores a mouse which can by no means
escape. Gasset stood as one fascinated, watching every movement
of the slim fingers and feeling blindly behind him for the knob of the
door. Whereat Harding laughed mockingly and pointed to the bottle
on the table.
“You had better come back here and take a little more of the same to
stiffen your nerve, Ike. You couldn’t hit the broad side of a barn just
now.”
Gasset found the doorknob finally and breathed freer when it yielded
under his hand. “Give me a show for my life, Jim!” he begged,
widening the opening behind him by stealthy half inches. “It ain’t
worth much, but, by God, I want it for a little while yet!”
Harding laughed again. “What is the matter with you? You would
have been a dead man long ago if I had wanted to drop you. Come
back here and finish your drink.”
Having more than once set his life over against his thirst, Gasset did
it once again, filling his glass with hands that shook, and swallowing
the drunkard’s portion at a gulp. The liquor steadied him a little and
he sat down.
“Then you ain’t out gunning for me?” he ventured.
“No; what made you think I was?”
Gasset scratched his head and tilted the bottle again. “I don’t know, if
you don’t. But it appears like to me, if anybody had killed a sister of
mine I’d want to get square. And I reckon I wouldn’t split any hairs
about his being drunk or sober at the time, nor yet about whether he
went for to do it meaningly or just did it by happen-so.”
Harding ignored the implied reproach and went on to the more
important matter:
“Damn that! It is enough for me to know that you were trying to kill
George Brant,” he said coolly. “Do you still feel that way?”
Gasset rose unsteadily and the dull eyes of him glowed in their
sockets. “Look at me now, Jim, and then recollect, if you can, what-
all I used to be. You know what that was; not any man in the camp
could put me on my back unless I was drunk. And now look at me—
a poor, miser’ble, broke-up wrack, just out o’ the horspital! He done it
—filled me plum full of lead when I was too crazy drunk to see
single; that’s what he done!”
“Then I suppose you wouldn’t be sorry if you had the chance to even
up with him,” said Harding, hastily building up a plan which would
enable him to make use of this opportune ally.
“Now you are talking! Say, Jim, I’m hanging on to what little scrap of
life he has left me for just nothing else. Understand?”
“Good; that is business,” quoth Harding. “I am with you to stay. Find
him for me, and I’ll help you square the deal.”
“Find him?” echoed Gasset. “Why, man alive, he is right out yonder
at the faro table! You rubbed up against him coming in here!”
“The devil you say!” Harding hastily resumed the wig and the false
beard, with a word explanatory. “He mustn’t recognise me, or the
game will be up before it begins. Pull up your chair and we’ll talk this
thing over.”
Half an hour later the two conspirators left the card room and made
their way singly through the crowd in the game room to meet at the
bar. Gasset had lingered a moment at Brant’s elbow, and, having
seen the winnings, incautiously spoke of them to Harding in Tom
Deverney’s hearing. Harding shook his head, and dragged his
companion out to the sidewalk.
“You will have to look out for Deverney—the barkeeper,” he said. “He
is Brant’s friend. The first thing is to find out where he sleeps. We’ll
go over to the other corner and wait for him till he comes out.”
CHAPTER XVI
THE GOODLY COMPANY OF MISERY
Having gone so far astray on the Sunday, it was inevitable that Brant
should awake repentant and remorseful on the Monday. He slept
late, and when he had breakfasted like a monk and had gone
downtown to face another day of enforced idleness in his office,
conscience rose up and began to ply its many-thonged whip.
What a thrice-accursed fool he had made of himself, and how
completely he had justified Mrs. Langford’s opinion of him! How
infinitely unworthy the love of any good woman he was, and how
painstakingly he had put his future beyond the hope of redemption! If
Colonel Bowran would only come back and leave him free to go and
bury himself in some unheard-of corner of the world! This was the
burden of each fresh outburst of self-recrimination.
So much by way of remorse, but when he thought of Dorothy,
something like a measure of dubious gratitude was mingled
therewith—a certain thankfulness that the trial of his good
resolutions had come before he had been given the possible chance
of free speech with her—a chance which might have involved her
happiness as well as his own peace of mind.
“Good Lord!” he groaned, flinging himself into a chair and tossing his
half-burned cigar out of the window. “I ought to be glad that I found
myself out before I had time to pull her into it. If they had let me go
on, and she would have listened to me, I should have married her
out of hand—married an angel, and I with a whole nest of devils
asleep in me waiting only for a chance to come alive! God help me!
I’m worse than I thought I was—infinitely worse.—Come in!” This last
to some one at the door.
It was only the postman, and Brant took the letters eagerly, hoping to
find one from Hobart. He was disappointed, but there was another
note from the end-of-track on the Condorra Extension, setting forth
that the chief engineer’s home-coming would be delayed yet other
days.
Brant read the colonel’s scrawl, and what was left of his endurance
took flight in an explosion of bad language. A minute later he burst
into Antrim’s office.
“Where is Mr. Craig?” he demanded.
“He has gone to Ogden,” said Antrim, wondering what had happened
to disturb the serenity of the self-contained draughtsman.
“The devil he has! When will he be back?”
“I don’t know—the last of the week, maybe.”
“Damn!”
Antrim laughed. “What ails you this morning? You look as if you’d
had a bad night. Come inside and sit down—if you’re not too busy.”
Brant let himself in at the wicket in the counter-railing and drew up a
chair.
“I am not busy enough—that is one of the miseries. And I want you
to help me out, Harry. You have full swing here when the old man is
away, haven’t you?”
“Why—yes, after a fashion. What has broke loose?”
Brant looked askance at the stenographer, and the chief clerk rightly
interpreted the glance.
“O John,” he said, “I wish you would take these letters down and put
them on No. 3. Hand them to the baggageman yourself, and then
you’ll be sure they have gone.” And when the door closed behind the
young man he turned back to Brant. “Was that what you wanted?”
“Yes, but I don’t know as it was necessary. There is nothing
particularly private about what I want to say. You see, it is this way:
Colonel Bowran is out on the Extension, and Grotter is with him. I am
alone here in the office, and I’ve got to leave town suddenly. What I
want you to do is to put somebody in there to keep house till the
colonel returns.”
The chief clerk smiled. “It must be something pretty serious to rattle
you that way,” was his comment. “You are a good enough railroad
man to know that my department has nothing to do with yours,
except to ask questions of it. And that reminds me: here is a letter
from the general manager asking if we have a late map of the
Denver yards. The president is coming west in a day or two, and
there is a plan on foot for extensions, I believe.”
“Well?” said Brant.
“It isn’t well—it’s ill. We haven’t any such map, and I don’t see but
what you will have to stay and make one.”
Now, to a man in Brant’s peculiar frame of mind employment was
only one degree less welcome than immediate release. Wherefore
he caught at the suggestion so readily that Antrim was puzzled.
“I thought you had to go away, whether or no,” he said curiously.
“Oh, I suppose I can put it off if I have to,” Brant rejoined, trying to
hedge.
“Which is another way of telling me to mind my own business,”
retorted Antrim good-naturedly. “That’s all right; only, if you have
struck a bone, you can comfort yourself with the idea that you have
plenty of good company. No one of us has a monopoly of all the
trouble in the world.”
“No, I suppose not.” Brant said so much, and then got far enough
away from his own trouble to notice that the chief clerk was looking
haggard and seedy.
“You look as if you had been taking a turn at the windlass yourself,
Harry. Have you?”
“Yes, something of that sort,” replied Antrim, but he turned quickly to
the papers on his desk.
“Nothing that I can help you figure out, is it?”
“No,” said the chief clerk, so savagely that Brant smiled.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
ebooknice.com