Here is the key fob for my 2000 Toyota Camry (possibly the best car ever made):

In this post, we’ll be decoding (not decrypting) how the fob interacts with the car.

Step Zero: Recon

Let’s kick things off by popping open the case and taking a look at the circuit board:

I have a Native Instruments Maschine Mikro (pictured below):

The box itself and the software that come with it are great but I’ve always felt like I could use it for more than just music. In this post, I will be describing how I reverse engineered the Native Instruments interprocess communication (IPC) protocol in order to liberate the Mikro (MK2). Let’s get to it!


As with most reverse engineering, it’s unclear where to start. For this project, I determined that a good place to start would be with the drivers. Since the MK2 is a hardware device, it makes sense…

This post is the third part of my series about tracking skips in the Spotify client. This post is a direct continuation of my work on the MacOS client first detailed here:

Hardcoding Addresses

In the previous article, I hooked the target functions using HookCase to track when the skip subprocedure was called. However, there was one big problem with this approach that I didn’t realize at the time.

One day, I decided to see how many skipped songs I have logged. It seemed low. I then decided to skip a few songs and again print out the number of songs…

This is a sequel to my previous post about tracking skips in the Spotify MacOS desktop client: In this post, I will do the same for the Spotify iOS application using some new techniques. Let’s get to it.

Step Zero: Jailbreak

Basically any iOS reverse engineering requires a jailbreak. This is because iOS requires each executable as well as virtual memory page to be codesigned by Apple or an Apple developer. If we want to run anything like an SSH server on our iPhone, we need a jailbreak to patch the iOS kernel to bypass codesigning enforcement. I have an iPhone 5…

I have one of those personal projects that I just can’t finish. I think most software developers can relate to this. You have some awesome idea but due to work and other responsibilities, it ends up being forgotten about or buried under other tasks.

Now this isn’t a success story of one of said projects being completed, but it is the story of a long-forgotten project being revived and given some new life. In fact, I’m hoping writing this forces me to eventually finish the project. But enough with introductions, let’s get into it.

The Project

The goal of the project is…

I’ve recently been playing around with an Arduino Uno and I thought I’d share some of what I’ve learned.

The Arduino Uno board. Great for first-time makers.


I’ve been interested for a while in getting into hardware but I never really got around to it. A few weeks ago, I just said screw it and bought a small Arduino starter kit with the Uno, a small breadboard, some jumper wires, LEDs, resistors, and various sensors:

For a while, my dad has been asking me (somewhat jokingly) to make him a voice-controlled remote for the TV. It sounded interesting but I think that ASR is a little above…

EDIT: It seems like people are continuing to stumble across this. I just want to say that this article and the accompanying code (which I don’t maintain) have lots of mistakes and you should not consider this a super reliable resource. Keep reading if you want to pick up an implementation detail or two.

There’s a lot of content about SIFT online. There are a lot of good tutorials, but each seemed to be lacking something, whether that be details about the algorithm or the implementation. So when I decided I wanted to implement SIFT for myself, I found myself…

Sam Lerner

Computer science enthusiast

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store