#!/usr/bin/env perl
# $Id: osx-get-legacy-vnc-passwd,v 1.1 2012/05/16 00:12:16 friedman Exp $

use strict;
use Symbol;

$^W = 1;

my $default_pwfile = "/Library/Preferences/com.apple.VNCSettings.txt";

sub enscramble
{
  my @c = unpack ("C*", shift);
  my @e = map { (shift @c || 0) ^ (23 + ($_ * 29)) & 255 } (0 .. 15);
  uc (unpack ("H*", pack ("C*", @e)));
}

sub unscramble
{
  my @e = unpack ("C*", pack ("H*", shift));
  my @c = map { (shift @e || 0) ^ (23 + ($_ * 29)) & 255 } (0 .. 15);
  local $_ = pack ("C*", @c);
  s/\0+$//;
  return $_;
}

sub main
{
  my $file = shift || $default_pwfile;
  my $fh = gensym;
  open ($fh, $file) || die "open: $file: $!\n";
  local $_ = join ("", <$fh>);

  my $un = unscramble ($_);
  print $un, "\n";
}

main (@ARGV);

# eof
