Category Archives: Reverse Engineering

GCHQ VM

So, Britain’s GCHQ (the UK’s equivalent of the NSA) has put up a programming contest to attract coders. (The punchline is that the gig only pays $39,000, so good luck with that, chaps.) There are several parts, and the only … Continue reading

Posted in Reverse Engineering | Comments Off

Licenses

Last week, a reader wrote in with this question: [Y]ou’ve got all this great code, but you haven’t declared a license. Is it public domain, or BSD? This is, as they say, a fair question. I address it today.

Posted in iPhone, Planet Microsoft, Projects, Python, Reverse Engineering, UNIX, Web stuff | Comments Off

Usage of Redundant 8086 Opcodes

This is a follow-up to last week’s post, which discussed the fact that fully 30% of the 8086 processor’s 1-byte opcode space is given over to redundant opcodes (i.e. short forms of longer, more general opcodes). Today, I want to … Continue reading

Posted in Reverse Engineering | Comments Off

Python Puzzle

Pedram Amini has got a pretty neat post up on reverse engineering the protocol for a USB device. If you haven’t seen it yet (it was linked from Slashdot) it’s worth reading. However, he includes some Python code which features … Continue reading

Posted in Python, Reverse Engineering | Comments Off

8086 Opcode Redundancies

Looking over the opcode map for the 8086 processor, I was struck by the seemingly large number of redundant opcodes. I decided to determine exactly how many were redundant, and I was surprised to find that just over 30% of … Continue reading

Posted in Reverse Engineering | Comments Off

Disassembler (Odds and Ends)

This week, I post some remarks following up on the just-concluded disassembler tutorial; there are always a few loose ends to tie up, and I wanted to clarify or expand on: The opcode map Addressing Demo code Hardening

Posted in Planet Microsoft, Projects, Python, Reverse Engineering | Comments Off

Disassembler (Part 3)

Editorial Note: Over the last two weeks, we’ve done the groundwork for building a disassembler: We’ve seen how to find documentation for a machine’s instruction format, how to read machine code by hand, and how to build up a machine-readable … Continue reading

Posted in Projects, Python, Reverse Engineering | Comments Off

Disassembler (Part 2)

Editorial Note: This article is the second in a three part series on writing an 8086 disassembler. Today we’ll cover the practical issues involved in finding an opcode map; we saw last week that such a map is central to … Continue reading

Posted in Projects, Reverse Engineering | Comments Off

Disassembler (Part 1)

Editorial Note: This article is the first in a three part series on writing a disassembler. Today we’ll cover the high-level concepts involved in disassembly and see how to read machine code “by hand”. Next week, we’ll look at the … Continue reading

Posted in Planet Microsoft, Projects, Python, Reverse Engineering | Comments Off

Boxing Day

Since it’s a holiday week, I’m just going to do a quick followup to a loose end from last week. In that post, I hypothesized that the function located at CS:3A30 in my run-time copy of the Neuromancer executable existed … Continue reading

Posted in Reverse Engineering, Uncategorized | Comments Off