Learning to read the Metasploit Framework source code

by Security Dude

On Saturday I spent the day with the Ladies Learning Code’s “Intro to Ruby” workshop in Vancouver.  We learned the syntax of Ruby.  We built a small program that mimicked Twitter.  We would post a comment and our little program would determine if the Tweet was suitable to post. If it was within the 140 character limit, it printed out to our screen.  Simple. It taught us about variable assignment, lists, arrays, conditionals and loops.

I was amazed by all the ladies and the dedication in the room. Before we knew it, everyone was clicking away at their keyboards, and you could see the smiles on each of the participants faces as they realized how much fun programming was. I was having fun! You could feel the energy. I’m lucky to have witnessed the emergence of a bunch of new Rubyists. The experience was awesome!

Today, I thought it was important to spend some time reviewing the material and building on the yesterday’s lesson. I’m going to review classes in Ruby.  Here’s an example I made up that I feel builds on objects IRL.

class Newspaper
 attr_accessor :price, :size, :publisher, :political, :independant
GlobeAndMail = Newspaper.new
VancouverSun = Newspaper.new
TheProvince = Newspaper.new
TheGeorgiaStrait = Newspaper.new
The24 = Newspaper.new
Courier = Newspaper.new

GlobeAndMail.price = 1.00
VancouverSun.price = 0.75
TheProvince.price = 0.75
TheGeorgiaStrait.price = 0
The24.price = 0
Courier.price = 0

papers = [GlobeAndMail, VancouverSun, TheProvince, TheGeorgiaStrait, The24, Courier,]

And here is a mockup of a Ticket Machine class that takes the price of a ticket when initialized. The object has a few methods to add money to your balance and determine if you have enough money to pay for the ticket.  Here’s the code. In the last screenshot, I’m now having success reading Metasploit code.  Awesome day filled with aha moments!

class TicketMachine
 attr_accessor :balance, :price

 def initialize(priceOfTicket)
   @price = priceOfTicket
   @balance = 0

 def print
   if @balance >= @price
     puts "Here is your ticket"
     @balance = 0
     return @price
   elsif @balance < @price
     puts "put more money. balance =", @balance

 def add(value)
   @balance = @balance + value