PDA

View Full Version : چطور میشه فهمید که یه OCX‌خاص رو سیستم نصبه شده یا نه



محمد دادودنیا
دوشنبه 13 آذر 1385, 06:05 صبح
چطور میشه با کد در دلفی فهمید که یه OCX‌خاص رو سیستم نصبه شده یا نه ؟:اشتباه:

Hamid_PaK
دوشنبه 13 آذر 1385, 22:00 عصر
از کد GUID و رجیستری استفاده کنید ...

یا حق ...

مهدی کرامتی
دوشنبه 13 آذر 1385, 23:58 عصر
1- ActiveX مورد نظر را Import کنید.
2- سعی کنید یک نمونه از کلاس آن ActiveX را در یک بلوک Try ایجاد کنید.
3- اگر Exception داد یعنی ActiveX مورد رجیستر نشده است.

مثال:


var
ActX: TButtonX;
begin
Try
ActX := TButtonX.Create(nil);
Except
ShowMessage('ActiveX is not registered');
end;

محمد دادودنیا
سه شنبه 14 آذر 1385, 04:00 صبح
تشکر از هردوی شم
Hamid خان میشه بیشتر توضیح بدید
از کجای ریجستری ضمنا GUID اون OCX رو از کجا بیارم وقتی که Install*می شه اونو می سازه یا؟
میشه

Hamid_PaK
چهارشنبه 15 آذر 1385, 07:08 صبح
خیلی سادست وقتی یک ActiveX رو توی دلفی Import کردی دلفی یک یونیت برای کار با خصوصیات و متودهای اون ActiveX تهیه می کنه که در خطوط ابتدایی کد GUID را هم ذکر کرده و این کد در مسیر
رجیستری بعد از نصب قرار خواهد گرفت ...

کد ایجاد شده برای اکتیوایکس فلش :


unit ShockwaveFlashObjects_TLB;

// ************************************************** ********************** //
// WARNING
// -------
// The types declared in this file were generated from data read from a
// Type Library. If this type library is explicitly or indirectly (via
// another type library referring to this type library) re-imported, or the
// 'Refresh' command of the Type Library Editor activated while editing the
// Type Library, the contents of this file will be regenerated and all
// manual modifications will be lost.
// ************************************************** ********************** //

// PASTLWTR : 1.2
// File generated on 04.05.2004 22:07:49 from Type Library described below.

// ************************************************** ********************** //
// Type Lib: C:\WINDOWS\System32\macromed\flash\Flash.ocx (1)
// LIBID: {D27CDB6B-AE6D-11CF-96B8-444553540000}
// LCID: 0
// Helpfile:
// HelpString: Shockwave Flash
// DepndLst:
// (1) v2.0 stdole, (C:\WINDOWS\System32\stdole2.tlb)
// Errors:
// Hint: Parameter 'label' of IShockwaveFlash.TGotoLabel changed to 'label_'
// Hint: Parameter 'property' of IShockwaveFlash.TSetProperty changed to 'property_'
// Hint: Parameter 'property' of IShockwaveFlash.TGetProperty changed to 'property_'
// Hint: Parameter 'label' of IShockwaveFlash.TCallLabel changed to 'label_'
// Hint: Parameter 'property' of IShockwaveFlash.TSetPropertyNum changed to 'property_'
// Hint: Parameter 'property' of IShockwaveFlash.TGetPropertyNum changed to 'property_'
// Hint: Parameter 'property' of IShockwaveFlash.TGetPropertyAsNumber changed to 'property_'
// ************************************************** ********************** //
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interface

مثال برای اکتیوایکس فلش :


function getFlashPlayerVersion: String;
var
str_tmp,
str_tm2: String;
begin
Result := '';
RegGetString(HKEY_CLASSES_ROOT,
'CLSID\{D27CDB6B-AE6D-11cf-96B8-444553540000}\InprocServer32\', str_tmp);
if FileExists(str_tmp) then begin
str_tm2 := GetVersionItem(str_tmp, 'FileVersion');
if (str_tm2 <> 'No Version Info.') and
(StrToIntDef(Copy(str_tm2, 1, 1), 0) > 0) then begin
Result := str_tm2;
end;
end;
end;


به کد ضخیم شده دقت کنید هر دو یکی است ، این GUID اکتیوایکس فلش است ...

یا حق ...

محمد دادودنیا
پنج شنبه 16 آذر 1385, 02:53 صبح
تشکر از جواب شما
حالا چطور می شه فهمید که همون OCX است یا نه (مثلا Hacker اونو Hack نکرده باشه و ه جاش ...)

Hamid_PaK
پنج شنبه 16 آذر 1385, 08:22 صبح
یک چنین عملی شاید 1&#37; اتفاق بیافتد ولی به هر حال عملی بیهوده است ، چرا که این کد فقط برای شناسایی است شما ، توی دلفی هم می تونید یک چنین کدی رو بصورت تصادفی ایجاد کنید .
به هر حال کد مورد نظر ( GUID ) هیچ گاه بصورت عادی تکراری نخواهد شد !!!

یا حق ...

محمد دادودنیا
پنج شنبه 16 آذر 1385, 19:47 عصر
با عزض معذرت من که متوجه منظورتون نشدم :ناراحت:
اول اگر منظورتون از 1% Hack‌شدن که باید بگم رقم بالاتر از اینه مثلا 100%
دوم اینکه اگر GUID که اون OCX‌میسازه فقط منحصر به خودش یعنی اگر من OCX‌رو روی یه سیستم دیگه با RegSer32 در RegEdit‌نصب بکنم باید همون کد رو در اون سیستم بگذاره تا من با روش شما بفهمم که اون OCX‌هست یا نه تازه hacker می تونه به جای اون هر چیزی با همون GUID ریجستر کنه و من گول بخورم
سوم اینکه اگر این GUID توی هر سیستمی کاملا GUID‌یعنی منحصر به فرد ه پس روش شما جواب نخواهد داد و روش آقای DelphiAssistan جواب می ده ولی (با عرض معذرت) روش دلچشبی نیست چون ممکن اون OCX‌باشه ولی توی یکی از راه اندازی هاش ایراد داشته باشه
ممنون می شم بیشتر توضیح بدید:خجالت:

Hamid_PaK
پنج شنبه 16 آذر 1385, 19:57 عصر
دوست عزیز GUID کدی هست که بصورت ثابت (constant) در دلفی تعریف می شود و این کد چون بصورت تصادفی ایجاد می شود و فقط یک کد شناسه است ، کدی تکراری نیست و بدرد دیگران هم نمی خورد پس کسی از آن در اکتیوایکس نوشته شده توسط خودش استفاده نمی کند ...
نتیجه حتی اگر اکتیوایکسی کرک شده باشد کرکر با GUID کاری ندارد !!! (منظورم از 1% این هست که GUID را تغییر دهد که هرگز یک کرکر مغز ...).

یا حق ...