본문 바로가기

[+] 유틸리티

BozoCrack

보안뉴스(http://www.boannews.com/media/view.asp?idx=28850&kind=1)를 보고 알게 된 툴인데 원리는 참 간단하면서도 위력을 상당합니다.

코드를 보시면 아시겠지만, MD5 해쉬값을 구글에서 검색하여 일치하는 평문을 찾는 방식 입니다.

해킹대회 문제 풀때나 워게임 하실때 많이 사용하는 것을 프로그램으로 만든 것이라고 보면 되겠는데요.

물론 100% 크랙 성공을 보장하는 것은 아니지만, 적은 노력으로 엄청난 성과물을 얻는 건 맞다고 보네요.

아래는 해당 프로그램 소스입니다. ruby 언어로 작성 되었네요.


require 'digest/md5'
require 'net/http'

class BozoCrack

  def initialize(filename)
    @hashes = Array.new
    @cache = Hash.new

    File.new(filename).each_line do |line|
      if m = line.chomp.match(/\b([a-fA-F0-9]{32})\b/)
        @hashes << m[1]
      end
    end
    @hashes.uniq!
    puts "Loaded #{@hashes.count} unique hashes"

    load_cache
  end

  def crack
    @hashes.each do |hash|
      if plaintext = @cache[hash]
        puts "#{hash}:#{plaintext}"
        next
      end
      if plaintext = crack_single_hash(hash)
        puts "#{hash}:#{plaintext}"
        append_to_cache(hash, plaintext)
      end
      sleep 1
    end
  end

  private

  def crack_single_hash(hash)
    response = Net::HTTP.get URI("http://www.google.com/search?q=#{hash}")
    wordlist = response.split(/\s+/)
    if plaintext = dictionary_attack(hash, wordlist)
      return plaintext
    end
    nil
  end

  def dictionary_attack(hash, wordlist)
    wordlist.each do |word|
      if Digest::MD5.hexdigest(word) == hash.downcase
        return word
      end
    end
    nil
  end

  def load_cache(filename = "cache")
    if File.file? filename
      File.new(filename).each_line do |line|
        if m = line.chomp.match(/^([a-fA-F0-9]{32}):(.*)$/)
          @cache[m[1]] = m[2]
        end
      end
    end
  end

  def append_to_cache(hash, plaintext, filename = "cache")
    File.open(filename, "a") do |file|
      file.write "#{hash}:#{plaintext}\n"
    end
  end

end

if ARGV.size == 1
  BozoCrack.new(ARGV[0]).crack
else
  puts "Usage example: ruby bozocrack.rb file_with_md5_hashes.txt"
end

'[+] 유틸리티' 카테고리의 다른 글

ROT-13 Script  (0) 2011.12.15
Hash Script  (0) 2011.12.14
Technote 7 취약점 점검 툴  (2) 2011.01.03
vmware 이미지 다운받는 곳.  (3) 2009.12.07