decoding passwords sent over http
This commit is contained in:
		
							
								
								
									
										41
									
								
								mifi/reverse-adpassword.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								mifi/reverse-adpassword.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
#/usr/bin/ruby
 | 
			
		||||
## reverse-adpassword.rb - Virgin Mobile Mifi login passwords are encoded, not encrypted
 | 
			
		||||
 | 
			
		||||
require 'digest/sha1'
 | 
			
		||||
 | 
			
		||||
PWTOKEN='tcqowykwoejwlgvj' # magic number from index.html inline js
 | 
			
		||||
 | 
			
		||||
## mirroring js method names
 | 
			
		||||
def rstr2hex(input)
 | 
			
		||||
  # iterate over each character
 | 
			
		||||
  # get it's character code (a = 97, o = 111).. so ASCII value
 | 
			
		||||
  # append this value shifted 4 times & 15 + the character again & 15
 | 
			
		||||
  ## in js: a = c.charCodeAt(i); b+=f.charAt((a>>>4)&15)+f.charAt(a&15), where f = '0123456789abcdef'
 | 
			
		||||
  # so .. isn't this just hexing?
 | 
			
		||||
  input.each_byte.map { |b| b.to_s(16) }.join
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def rstr_sha1(input)
 | 
			
		||||
  # technically we can do all of the encoding with .hexdigest here, but hey, completeness
 | 
			
		||||
  Digest::SHA1.digest(input)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
# TODO actually implement this, for now assuming input is ASCII anyway
 | 
			
		||||
def str2rstr_utf8(input)
 | 
			
		||||
  input
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
## main()
 | 
			
		||||
password = ARGV.first
 | 
			
		||||
if password.nil?
 | 
			
		||||
  p sprintf('USAGE: %s <password>', File.basename(__FILE__))
 | 
			
		||||
  exit 1
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
# TODO first we mimic the encoding, then we can decode
 | 
			
		||||
encoded = rstr2hex(rstr_sha1(str2rstr_utf8(password)))
 | 
			
		||||
 | 
			
		||||
puts sprintf('%s %s', decoded, "\n")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user