====== Własne moduły ======
===== Dokumentacja =====
https://www.remobjects.com/ps.aspx
===== Standardowe funkcje =====
uses
uPSC_std
uPSC_classes
uPSC_controls
uPSC_forms
uPSC_dateutils
uPSC_dll
===== Dodatkowe funkcje =====
==== Typy modułów ====
type TModuleType = mtFile, mtRegistry, mtOther
==== Klasy ====
const
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_PERFORMANCE_DATA
HKEY_CURRENT_CONFIG
HKEY_DYN_DATA
TRegistryEx = class
function KeyExists(const Key: string): Boolean;
function ValueExists(const Name: string): Boolean;
function ReadString(const AValue: string): string;
function ReadInteger(const Name: string): Integer;
function ReadBinaryDataAsString(const AValue: string): string;
procedure GetKeyNames(Strings: TStrings);
procedure GetValueNames(Strings: TStrings);
property CurrentPath: string;
property RootKey: DWord;
TFileRecordObj = class
property Name: string
property NameOnly: string
property Name32: DWord
property NameOnly32: DWord
property Path: string
property Full: string
property Ext: string
property Ext32: DWord
property Size: DWord
property Data: string
function CreateIniFile(const AFileName: string): TIniFile;
TIniFile = class
function SectionExists(const Section: string): Boolean;
function ValueExists(const Section, Ident: string): Boolean;
function ReadString(const Section, Ident, Default: string): string;
function ReadInteger(const Section, Ident: string; Default: Longint): Longint;
function ReadBool(const Section, Ident: string; Default: Boolean): Boolean;
function ReadDate(const Section, Ident: string; Default: TDateTime): TDateTime;
function ReadDateTime(const Section, Ident: string; Default: TDateTime): TDateTime;
function ReadFloat(const Section, Ident: string; Default: Double): Double;
function ReadTime(const Section, Ident: string; Default: TDateTime): TDateTime;
==== Funkcje ====
function CryptoHash(const AStr, AHash: string): string;
AHash=
// hash //
SHA0, SHA1, SHA224, SHA256, SHA384, SHA512, SHA512_224, SHA512_256
MD2, MD4, MD5, HAS160
RIPEMD, RIPEMD128, RIPEMD160, RIPEMD256, RIPEMD320
HAVAL128R3P1, HAVAL160R3P1, HAVAL192R3P1, HAVAL224R3P1, HAVAL256R3P1
HAVAL128R4P1, HAVAL160R4P1, HAVAL192R4P1, HAVAL224R4P1, HAVAL256R4P1
HAVAL128R5P1, HAVAL160R5P1, HAVAL192R5P1, HAVAL224R5P1, HAVAL256R5P1
HAVAL128R3P128, HAVAL160R3P128, HAVAL192R3P128, HAVAL224R3P128, HAVAL256R3P128
HAVAL128R4P128, HAVAL160R4P128, HAVAL192R4P128, HAVAL224R4P128, HAVAL256R4P128
HAVAL128R5P128, HAVAL160R5P128, HAVAL192R5P128, HAVAL224R5P128, HAVAL256R5P128
TIGER128R3, TIGER160R3, TIGER192R3
TIGER128R4, TIGER160R4, TIGER192R4
TIGER128R3SO, TIGER160R3SO, TIGER192R3SO
TIGER128R4SO, TIGER160R4SO, TIGER192R4SO
TIGER2
KECCAK224, KECCAK256, KECCAK384, KECCAK512
WHIRLPOOL, TMDPA, PANAMA, GOST, GOSTCRYPTOPRO
GRINDAHL256, GRINDAHL512
RADIOGATUN32, RADIOGATUN64
SNEFRU128R4, SNEFRU256R4
SNEFRU128R8, SNEFRU256R8
// crc //
ADLER32, MURMUR2, MURMUR3, MURMUR2_64, MURMUR3_128, SIPHASH
JENKINS3, JS, CRC32_IEEE_802_3, CRC32_KOOPMAN, CRC32_CASTAGNOLI
CRC32_Q, CRC64_ISO, CRC64_ECMA182, AP, BERNSTEIN, BERNSTEIN1
BKDR, DEK, DJB, ELF, FNV, FNV1A, ONEATTIME, PJW, ROTATING
RS, SDBM, SHIFTANDXOR, SUPERFAST, FNV1A64, FNV64, VXWORKS5
MOTOROLADOCSIS
// windows //
LM, NTLM
type TCipherMode = cmCTSx, cmCBCx, cmCFB8, cmCFBx, cmOFB8, cmOFBx, cmCFS8, cmCFSx, cmECBx;
function CryptoDecrypt(const data, key, iv: string; mode: TCipherMode; ACipher: string): string;
function CryptoEncrypt(const data, key, iv: string; mode: TCipherMode; ACipher: string): string;
ACipher=
BLOWFISH
BLOWFISHCOMPAT
1DES
1DESVNC
3DES
RC2
RC4
RIJNDAEL
IDEA
TWOFISH
function StringToHexString(const s: string): string;
function HexStringToString(const s: string): string;
function IsValidHex(const s: string): boolean;
function IsValidMAC(const s: string): boolean;
function IsValidNum(const s: string): boolean;
procedure RegistryScan(RootType: DWord; RootKey: string);
procedure AddItem(App, Item, User, Pass, FileName: string);
procedure ShowMessage(aMsg: string);
function ExtractFilePath(const FileName: string): string;
function ExtractFileDrive(const FileName: string): string;
function ExtractFileName(const FileName: string): string;
function ExtractFileExt(const FileName: string): string;
function ExtractFileDir(Const FileName: string): string;
function FileExists(const FileName: string): Boolean;
function DirectoryExists(const DirName: string): Boolean;
function ParamStr(l: LongInt):string;
function ParamCount: LongInt;
==== Parametry przekazywane z aplikacji ====
var
Registry = TRegistryEx
FileRecord = TFileRecordObj
===== Przykład =====
==== Obsługa plików ====
function ModuleType: TModuleType;
begin
Result := mtFile;
end;
function ModuleName: string;
begin
Result := 'Custom File Module';
end;
const
VNC_KEY = #23#82#107#6#35#78#88#7;
procedure OnExecute;
var
ini: TIniFile;
str: string;
begin
if FileRecord.Name <> 'ultravnc.ini' then
Exit;
ini := CreateIniFile(FileRecord.Full);
try
str := ini.ReadString('ultravnc', 'passwd', '');
if IsValidHex(str) and (Length(str) > 0) then
begin
AddItem('UltraVNC', 'Custom Module', '',
Trim(CryptoDecrypt(HexStringToString(str),
VNC_KEY, '', cmECBx, '1DESVNC')), '');
end;
finally
ini.Free;
end;
end;
begin
end.
==== Obsługa rejestru ====
function ModuleType: TModuleType;
begin
Result := mtRegistry;
end;
function ModuleName: string;
begin
Result := 'Custom Registry Module';
end;
procedure Scan(ROOT_KEY: DWord);
begin
RegistryScan(ROOT_KEY, '\SOFTWARE\TigerVNC\WinVNC4');
RegistryScan(ROOT_KEY, '\SOFTWARE\RealVNC\WinVNC4');
RegistryScan(ROOT_KEY, '\SOFTWARE\ORL\WinVNC3');
RegistryScan(ROOT_KEY, '\SOFTWARE\TightVNC');
end;
procedure ReadValue(Value: string);
var
s: string;
begin
if Registry.ValueExists(Value) then
begin
s := UpperCase(Registry.CurrentPath);
if Pos('\TIGHTVNC', s) > 0 then
s := 'TightVNC'
else
if Pos('\TIGERVNC', s) > 0 then
s := 'TigerVNC'
else
if Pos('\WINVNC', s) > 0 then
s := 'RealVNC 3.x'
else
if Pos('\REALVNC', s) > 0 then
s := 'RealVNC 3.x, 4.x'
else
s := ModuleName;
AddItem(s, 'Custom Module', '',
Trim(CryptoDecrypt(Registry.ReadString(Value),
#23#82#107#6#35#78#88#7, '', cmECBx, '1DESVNC')),'');
end;
end;
procedure OnExecute; // 1st level
begin
Scan(HKEY_LOCAL_MACHINE);
Scan(HKEY_CURRENT_USER);
end;
procedure OnCheck; // 2nd level
begin
ReadValue('Password');
ReadValue('PasswordViewOnly');
end;
begin
end.