unit Main; {.$DEBUGINFO ON} {$WARNINGS OFF} interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExploitHandler, Activex, UrlMon, StdCtrls, OleCtrls, ExtCtrls, Menus, ComCtrls, ToolWin, SHDocVw_EWB, EwbCore, EmbeddedWB, ActnList, XPMan, ActiveObjects, Gauges, ShockwaveFlashObjects_TLB, StdActns, ExtActns, ImgList, Buttons, PngImageList, IniFiles, ShockwaveEx, InetThrd, TrayUtil, SecurityManager, ShlObj, XMLFiles, ShellApi; const WM_VERSIONDONE = WM_USER + $100; type TExploitBrowserForm = class(TForm) StatusBar1: TStatusBar; LoaderTimer: TTimer; MainActionList: TActionList; EmbeddedWB1: TEmbeddedWB; XPManifest1: TXPManifest; Gauge1: TGauge; Panel1: TPanel; Bevel1: TBevel; Panel2: TPanel; Panel3: TPanel; ToolBar1: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; ToolButton4: TToolButton; ToolButton5: TToolButton; PopupMenu1: TPopupMenu; SpeechText1: TMenuItem; BackAction: TAction; ForwardAction: TAction; StopAction: TAction; RefreshAction: TAction; GoHomeAction: TAction; SearchText1: TMenuItem; Memo1: TMemo; Back1: TMenuItem; Forward1: TMenuItem; N1: TMenuItem; N2: TMenuItem; Print1: TMenuItem; PngImageList1: TPngImageList; Stop1: TMenuItem; Refresh1: TMenuItem; GoHome1: TMenuItem; ProgressBar1: TProgressBar; TrayPopupMenu: TPopupMenu; ShowAction: TAction; ExitAction: TAction; ShowAction1: TMenuItem; N3: TMenuItem; ExitAction1: TMenuItem; AboutAction: TAction; N4: TMenuItem; AboutAction1: TMenuItem; PngImageCollection1: TPngImageCollection; Image1: TImage; SecurityManager1: TSecurityManager; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure LoaderTimerTimer(Sender: TObject); procedure EmbeddedWB1StatusTextChange(ASender: TObject; const Text: WideString); procedure EmbeddedWB1TitleChange(ASender: TObject; const Text: WideString); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure EmbeddedWB1ProgressChange(ASender: TObject; Progress, ProgressMax: Integer); procedure EmbeddedWB1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant); procedure EmbeddedWB1BeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool); function EmbeddedWB1ShowContextMenu(const dwID: Cardinal; const ppt: PPoint; const pcmdtReserved: IInterface; const pdispReserved: IDispatch): HRESULT; function EmbeddedWB1UpdateUI: HRESULT; procedure EmbeddedWB1CommandStateChange(ASender: TObject; Command: Integer; Enable: WordBool); procedure EmbeddedWB1DownloadBegin(Sender: TObject); procedure EmbeddedWB1PropertyChange(ASender: TObject; const szProperty: WideString); procedure BackActionExecute(Sender: TObject); procedure ForwardActionExecute(Sender: TObject); procedure StopActionExecute(Sender: TObject); procedure RefreshActionExecute(Sender: TObject); procedure GoHomeActionExecute(Sender: TObject); procedure ShowActionExecute(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure ExitActionExecute(Sender: TObject); procedure AboutActionExecute(Sender: TObject); procedure Image1Click(Sender: TObject); function EmbeddedWB1QueryService(const rsid, iid: TGUID; var Obj: IInterface): HRESULT; protected procedure WMVersionDone(var Message: TMessage); message WM_VERSIONDONE; private { Private declarations } FlashInstalled: Boolean; ShockwaveFlashEx: TShockwaveFlashEx; public { Public declarations } FExternal: IDispatch; FVersionThread: TInetThread; FTrayIcon: TTrayIcon; FShowTrayIcon: Boolean; FCloseAction: Integer; FIgnoreSave: Boolean; FNotifyVersion: Boolean; SaveVirtualHost: string; procedure GoHome; procedure UpdateStopButton; procedure FireVersionThread; procedure CheckNewVersion; { Unutma! } procedure UpdateVersionValues; function GetExploitFilePath: string; function GetShowTrayIcon: Boolean; procedure SetShowTrayIcon(const Value: Integer); function GetCloseAction: Integer; procedure SetCloseAction(const Value: Integer); function GetIgnoreSave: Boolean; procedure SetIgnoreSave(const Value: Integer); function GetNotifyVersion: Boolean; procedure SetNotifyVersion(const Value: Integer); function GetTheme: WideString; procedure SetTheme(const Value: WideString); procedure ShowNewVersionDialog; end; var ExploitBrowserForm: TExploitBrowserForm; IniFile: TMemIniFile; AppDirectory: string; implementation {$R *.DFM} var Factory: IClassFactory; InternetSession: IInternetSession; { GetTempFolderPath } function GetTempFolderPath: string; begin SetLength(Result, MAX_PATH); GetTempPath(MAX_PATH, PChar(Result)); Result := PChar(Result); end; { GetWindowsPath } function GetWindowsPath: string; begin SetLength(Result, MAX_PATH); GetWindowsDirectory(PChar(Result), MAX_PATH); Result := PChar(Result); end; { GetSystemPath } function GetSystemPath: string; begin SetLength(Result, MAX_PATH); GetSystemDirectory(PChar(Result), MAX_PATH); Result := PChar(Result); end; { GetSpecialFolderPath } function GetSpecialFolderPath(nFolder: Integer): WideString; begin SetLength(Result, MAX_PATH); if SHGetSpecialFolderPathW(HWND_DESKTOP, PWideChar(Result), nFolder, False) then Result := PWideChar(Result) else Result := ''; end; procedure TExploitBrowserForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Self.Hide; end; procedure TExploitBrowserForm.FormCreate(Sender: TObject); var DatabaseFile, OptionsFile: string; Stream: TResourceStream; DefLeft, DefTop, DefWidth, DefHeight: Integer; begin Image1.Picture.Assign(PngImageCollection1.Items[0].PngImage); if not DirectoryExists(AppDirectory) then ForceDirectories(AppDirectory); DefWidth := 890; DefHeight := 600; DefLeft := (Screen.WorkAreaWidth - DefWidth) div 2; DefTop := (Screen.WorkAreaHeight - DefHeight) div 2; { Saved Options } Self.Left := IniFile.ReadInteger('General', 'Left', DefLeft); Self.Top := IniFile.ReadInteger('General', 'Top', DefTop); Self.Width := IniFile.ReadInteger('General', 'Width',DefWidth); Self.Height := IniFile.ReadInteger('General', 'Height', DefHeight); Self.WindowState := TWindowState(IniFile.ReadInteger('General', 'WindowState', 0)); FTrayIcon := TTrayIcon.Create(Self); FTrayIcon.Hint := 'Self Sözlük'; FTrayIcon.Icon := Application.Icon; FTrayIcon.PopupMenu := TrayPopupMenu; FTrayIcon.OnDblClick := ShowActionExecute;//RefreshActionExecute; FShowTrayIcon := Self.GetShowTrayIcon; FTrayIcon.Visible := FShowTrayIcon; FIgnoreSave := Self.GetIgnoreSave; FNotifyVersion := Self.GetNotifyVersion; FCloseAction := GetCloseAction; DatabaseFile := AppDirectory + '\SelfSozluk.mdb'; if not FileExists(DatabaseFile) then begin Stream := TResourceStream.Create(MainInstance, 'DATABASE', RT_RCDATA); try Stream.SaveToFile(DatabaseFile); finally Stream.Free; end; end; OptionsFile := AppDirectory + '\selfsozluk.xml'; if not FileExists(OptionsFile) then begin Stream := TResourceStream.Create(MainInstance, 'OPTIONS', RT_RCDATA); try Stream.SaveToFile(OptionsFile); finally Stream.Free; end; end; VirtualHost := IniFile.ReadString('Server', 'VirtualHost', 'www.selfsozluk.com'); if VirtualHost = '' then VirtualHost := 'www.selfsozluk.com'; DefaultDocument := IniFile.ReadString('Server', 'DefaultDocument', 'default.asp'); if DefaultDocument = '' then DefaultDocument := 'default.asp'; ScriptExtension := IniFile.ReadString('Server', 'ScriptExtension', '.asp'); if ScriptExtension = '' then ScriptExtension := '.asp'; DocumentRoot := IniFile.ReadString('Server', 'DocumentRoot', ''); if DocumentRoot = '' then DocumentRoot := ''; SaveVirtualHost := VirtualHost; //VirtualDrive := TArchiveDrive.Create('.\w3c\w3c.zip', ''); VirtualDrive := TResourceArchiveDrive.Create(MainInstance, 'W3C', RT_RCDATA, ''); //VirtualDrive := TPhysicalDrive.Create('./w3c'); Memo1.Clear; try ShockwaveFlashEx := TShockwaveFlashEx.Create(Self); Stream := TResourceStream.Create(MainInstance, 'THROBBER', RT_RCDATA); try Stream.Position := 0; ShockwaveFlashEx.LoadMovieFromStream(Stream); FlashInstalled := True; finally Stream.Free; end; except FlashInstalled := False; end; if FlashInstalled then begin ShockwaveFlashEx.Parent := Panel2; ShockwaveFlashEx.Align := alClient; end; ProgressBar1.Width := StatusBar1.Panels[1].Width - 4; ProgressBar1.Left := StatusBar1.Panels[0].Width + 3; ProgressBar1.Height := 15; ProgressBar1.Top := 3; ProgressBar1.Parent := StatusBar1; InitGlobalScriptObjects; CoGetClassObject(IID_ExploitVirtualServer, CLSCTX_SERVER, nil, IClassFactory, Factory); CoInternetGetSession(0, InternetSession, 0); InternetSession.RegisterNameSpace(Factory, IID_ExploitVirtualServer, 'http', 0, nil, 0); LoaderTimer.Enabled := True; end; procedure TExploitBrowserForm.FormDestroy(Sender: TObject); begin if Self.WindowState = wsNormal then begin IniFile.WriteInteger('General', 'Left', Self.Left); IniFile.WriteInteger('General', 'Top', Self.Top); IniFile.WriteInteger('General', 'Width', Self.Width); IniFile.WriteInteger('General', 'Height', Self.Height); end; IniFile.WriteInteger('General', 'WindowState', Ord(Self.WindowState)); IniFile.WriteInteger('General', 'CloseAction', FCloseAction); IniFile.WriteBool('General', 'ShowTray', Boolean(FShowTrayIcon)); IniFile.WriteString('Server', 'VirtualHost', SaveVirtualHost); IniFile.WriteString('Server', 'DefaultDocument', DefaultDocument); IniFile.WriteString('Server', 'ScriptExtension', ScriptExtension); IniFile.WriteString('Server', 'DocumentRoot', DocumentRoot); Self.Hide; InternetSession.UnregisterNameSpace(Factory, 'http'); DoneGlobalScriptObjects; VirtualDrive.Free; FTrayIcon.Free; end; procedure TExploitBrowserForm.LoaderTimerTimer(Sender: TObject); begin LoaderTimer.Enabled := False; LoaderTimer.OnTimer := nil; CheckNewVersion; { Unutma! } GoHome; EmbeddedWB1.SetFocus; end; procedure TExploitBrowserForm.EmbeddedWB1StatusTextChange(ASender: TObject; const Text: WideString); var Url: string; I: Integer; begin Url := Text; I := Pos(VirtualHost, Url); if I > 0 then Url := System.Copy(Url, I + Length(VirtualHost), MaxInt); StatusBar1.Panels[0].Text := Url; end; procedure TExploitBrowserForm.EmbeddedWB1TitleChange(ASender: TObject; const Text: WideString); begin Self.Caption := Text; end; procedure TExploitBrowserForm.GoHome; var URL: Widestring; begin URL := 'http://' + VirtualHost + '/'; EmbeddedWB1.navigate(URL, EmptyParam, EmptyParam, EmptyParam, EmptyParam); end; procedure TExploitBrowserForm.EmbeddedWB1ProgressChange(ASender: TObject; Progress, ProgressMax: Integer); begin UpdateStopButton; ProgressBar1.Max := ProgressMax; ProgressBar1.Position := Progress; end; procedure TExploitBrowserForm.EmbeddedWB1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin UpdateStopButton; ProgressBar1.Hide; if FlashInstalled then ShockwaveFlashEx.Hide; end; procedure TExploitBrowserForm.EmbeddedWB1BeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool); begin UpdateStopButton; if not ProgressBar1.Visible then ProgressBar1.Show; if FlashInstalled then ShockwaveFlashEx.Show; end; function TExploitBrowserForm.EmbeddedWB1ShowContextMenu( const dwID: Cardinal; const ppt: PPoint; const pcmdtReserved: IInterface; const pdispReserved: IDispatch): HRESULT; begin if dwID > 0 then; { PopupMenu1.Popup(ppt^.X, ppt^.Y); Result := S_OK; } Result := S_FALSE; end; function TExploitBrowserForm.EmbeddedWB1UpdateUI: HRESULT; begin Result := S_OK; end; procedure TExploitBrowserForm.EmbeddedWB1CommandStateChange( ASender: TObject; Command: Integer; Enable: WordBool); begin case Command of CSC_NAVIGATEBACK: begin BackAction.Enabled := Enable; end; CSC_NAVIGATEFORWARD: begin ForwardAction.Enabled := Enable; end; end; end; procedure TExploitBrowserForm.UpdateStopButton; begin StopAction.Enabled := EmbeddedWB1.Busy; end; procedure TExploitBrowserForm.EmbeddedWB1DownloadBegin(Sender: TObject); begin UpdateStopButton; end; procedure TExploitBrowserForm.EmbeddedWB1PropertyChange(ASender: TObject; const szProperty: WideString); begin UpdateStopButton; end; procedure TExploitBrowserForm.BackActionExecute(Sender: TObject); begin EmbeddedWB1.GoBack; end; procedure TExploitBrowserForm.ForwardActionExecute(Sender: TObject); begin EmbeddedWB1.GoForward; end; procedure TExploitBrowserForm.StopActionExecute(Sender: TObject); begin EmbeddedWB1.Stop; end; procedure TExploitBrowserForm.RefreshActionExecute(Sender: TObject); begin EmbeddedWB1.Refresh; end; procedure TExploitBrowserForm.GoHomeActionExecute(Sender: TObject); begin Self.GoHome; end; procedure TExploitBrowserForm.FireVersionThread; begin if Assigned(FVersionThread) then Exit; FVersionThread := TInetThread.Create(Self.Handle, WM_VERSIONDONE); with FVersionThread.Request do begin Host := 'www.shenturk.com'; URL := '/exploit.xml?v=' + ExploitVersion; Connection := 'Keep-Alive'; end; FVersionThread.Resume; end; procedure TExploitBrowserForm.WMVersionDone(var Message: TMessage); begin if not Assigned(FVersionThread) then Exit; if Message.LParam = 0 then begin FVersionThread.Response.ContentStream.SaveToFile(GetExploitFilePath()); UpdateVersionValues; end; if Assigned(FVersionThread) then FreeAndNil(FVersionThread); if NewVersionEnabled then ShowNewVersionDialog; end; procedure TExploitBrowserForm.UpdateVersionValues; var F: TXMLFile; begin F := TXMLFile.Create(GetExploitFilePath()); try if F.Loaded then begin { VersionText, NewVersionEnabled are global variants } VersionText := F.ReadString('/exploit/version', ExploitVersion); NewVersionEnabled := CompareText(VersionText, ExploitVersion) > 0; GoogleEnabled := F.ReadBool('/exploit/google', False); SaveVirtualHost := F.ReadString('/exploit/virtualhost', ''); if SaveVirtualHost = '' then SaveVirtualHost := 'www.selfsozluk.com'; end; finally F.Free; end; end; function TExploitBrowserForm.GetExploitFilePath: string; begin Result := GetTempFolderPath() + 'exploit.xml'; end; procedure TExploitBrowserForm.CheckNewVersion; begin FireVersionThread; end; procedure TExploitBrowserForm.ShowActionExecute(Sender: TObject); begin Self.Show; SetForeGroundWindow(Self.Handle); SetActiveWindow(Self.Handle); end; procedure TExploitBrowserForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if FCloseAction = CA_HIDETRAY then begin if FShowTrayIcon then begin CanClose := False; Self.Hide; end; end; end; procedure TExploitBrowserForm.ExitActionExecute(Sender: TObject); begin Application.Terminate; end; procedure TExploitBrowserForm.AboutActionExecute(Sender: TObject); begin // end; function TExploitBrowserForm.GetShowTrayIcon: Boolean; begin Result := IniFile.ReadBool('General', 'ShowTray', True); end; procedure TExploitBrowserForm.SetShowTrayIcon(const Value: Integer); begin if Boolean(Value) <> FShowTrayIcon then begin FShowTrayIcon := Boolean(Value); IniFile.WriteBool('General', 'ShowTray', FShowTrayIcon); FTrayIcon.Visible := FShowTrayIcon; end; end; function TExploitBrowserForm.GetCloseAction: Integer; begin Result := IniFile.ReadInteger('General', 'CloseAction', 1); end; procedure TExploitBrowserForm.SetCloseAction(const Value: Integer); begin if Value <> FCloseAction then begin IniFile.WriteInteger('General', 'CloseAction', Value); FCloseAction := Value; { DoAction } end; end; function TExploitBrowserForm.GetIgnoreSave: Boolean; begin Result := IniFile.ReadBool('General', 'IgnoreSave', False); end; procedure TExploitBrowserForm.SetIgnoreSave(const Value: Integer); begin if Boolean(Value) <> FIgnoreSave then begin FIgnoreSave := Boolean(Value); IniFile.WriteBool('General', 'IgnoreSave', FIgnoreSave); end; end; procedure TExploitBrowserForm.Image1Click(Sender: TObject); begin EmbeddedWB1.navigate('http://www.shenturk.com'); end; function TExploitBrowserForm.EmbeddedWB1QueryService(const rsid, iid: TGUID; var Obj: IInterface): HRESULT; begin if IsEqualGuid(rsid, IID_IInternetSecurityManager) then begin Obj := SecurityManager1 as IInternetSecurityManager; Result := S_OK end else Result := E_NOINTERFACE; end; procedure TExploitBrowserForm.ShowNewVersionDialog; var MsgText: string; begin Application.BringToFront; if not FNotifyVersion then Exit; MsgText := Format(strNewVersionAvailable, [VersionText]); if Windows.MessageBox(Self.Handle, PChar(MsgText), 'Yeni Sürüm', MB_ICONINFORMATION or MB_YESNO) = IDYES then ShellExecute(Self.Handle, 'open', 'http://go.shenturk.com/?linkid=1804', nil, nil, SW_SHOW); end; function TExploitBrowserForm.GetNotifyVersion: Boolean; begin Result := IniFile.ReadBool('General', 'NotifyVersion', True); end; procedure TExploitBrowserForm.SetNotifyVersion(const Value: Integer); begin if Boolean(Value) <> FNotifyVersion then begin FNotifyVersion := Boolean(Value); IniFile.WriteBool('General', 'NotifyVersion', FNotifyVersion); end; end; function TExploitBrowserForm.GetTheme: WideString; begin Result := IniFile.ReadString('General', 'Theme', 'default'); if Result = '' then Result := 'default'; end; procedure TExploitBrowserForm.SetTheme(const Value: WideString); begin if Value <> '' then IniFile.WriteString('General', 'Theme', Value); end; initialization AppDirectory := GetSpecialFolderPath(CSIDL_APPDATA) + '\Shenturk\Self Sozluk'; IniFile := TMemIniFile.Create(AppDirectory + '\SelfSozluk.ini'); finalization IniFile.UpdateFile; IniFile.Free; end.