Category: Computing theory

The five phases of recovering digital evidence

8 May, 2007 (16:02) | Computing theory, Digital forensics, Forensic tools, Fundamentals | 1 comment

This is the second post in a series about the five phases of recovering data structures from a stream of bytes (a form of digital evidence recovery). In the last post we discussed what data structures were, how they related to digital forensics, and a high level overview of the five phases of recovery. In [...]

How forensic tools recover digital evidence (data structures)

5 May, 2007 (02:42) | Computing theory, Digital forensics, Forensic tools, Fundamentals | 3 comments

In a previous post I covered “The basics of how digital forensics tools work.” In that post, I mentioned that one of the steps an analysis tool has to do is to translate a stream of bytes into usable structures. This is the first in a series of three posts that examines this step [...]

How digital forensics relates to computing

25 January, 2007 (21:01) | Computing theory, Digital forensics, Fundamentals | 4 comments

A lot of people are aware that there is some inherent connection between digital forensics and computing. I’m going to attempt to explain my understanding of how the two relate. However before we dive into digital forensics, we should clear up some misconceptions about what computing is (and perhaps what it is not).
Ask [...]

The basics of how programs are compiled and executed

11 January, 2007 (23:40) | Code forensics, Computing theory, Digital forensics, Fundamentals | 1 comment

Well, the post “The basics of how digital forensics tools work” seemed to be fairly popular, even getting a place on Digg. This post is focused on the basics of how a program gets compiled and loaded into memory when the program is executed. It’s useful for code analysis (reverse engineering), and is [...]

Information Context (a.k.a Code/Data Duality)

27 September, 2006 (22:51) | Computing theory, Digital forensics, Fundamentals | 1 comment

One concept that pervades digital forensics, reverse engineering, exploit analysis, even computing theory is that in order to fully understand information, you need to know the context the information is used in.
For example, categorize the following four pieces of information as either code or data:
1) push 0×6F6C6C65
2) “hello” (without the quotes)
3) 448378203247
4) 110100001100101011011000110110001101111
Some common answers [...]

Self replicating software - Part 3 - Other methods

18 July, 2006 (12:32) | Computing theory, Digital forensics, Self replicating code | No comments

Up until now, this thread of posts has been rather theoretical, talking about Turing machines, etc. the only time there was some source code was for showing a program that can print out a description of itself (its source code).
Well, one problem with the self-replication method for getting a copy of a program’s description is [...]

Self replicating software - Part 2 - Recursion theorem proof

9 July, 2006 (02:08) | Computing theory, Digital forensics, Self replicating code | No comments

In this post I’ll cover the proof of the Recusion theorem (see Self Replicating Software - Part 1 - The Recursion Theorem).
The proof for the Recursion theorem is a constructive proof, meaning that a Turing Machine (TM) that can reference its own description is constructed. This proof was taken from Michael Sipser’s “An Introduction to [...]

Self replicating software - Part 1 - The Recursion Theorem

5 July, 2006 (17:13) | Computing theory, Digital forensics, Self replicating code | 1 comment

This is the first in a multi part post about computing theory and self replicating software. This post assumes you have knowledge and understanding of a Turing Machine (abbreviated TM). If you aren’t familiar with Turing Machines (TMs) then you may want to take a look at the Wikipedia entry on the topic at http://en.wikipedia.org/wiki/Turing_machine [...]

Base+Offset notation (or why we start counting with zero)

26 June, 2006 (22:33) | Computing theory | No comments

Every now and again, I get the question about why we starting counting things such as arrays, offsets, etc. with zero (0) and not one (1). The answer is simple, when specifying a data structure, we normally specify the byte (or whatever unit) offset for the start of a field for a specific data structure. [...]