PDA

View Full Version : فهمیدن اجرای دلفی



omidsm
چهارشنبه 14 آبان 1382, 19:05 عصر
با سلام به همه دوستان :)

این برنامه های Trial چگونه می فهمند که دلفی در حال اجرا است یا نه؟ :?:

Mashatan
چهارشنبه 14 آبان 1382, 19:26 عصر
با استفاده از Findwindow !

ارادتمند
مشاطان

Kambiz
چهارشنبه 14 آبان 1382, 22:48 عصر
http://community.borland.com/article/0,1410,26659,00.html

omidsm
جمعه 16 آبان 1382, 01:02 صبح
DelphiArea عزیز حالا نمی شه آن را شبیه سازی کرد؟
یعنی به برنامه بفهمونه که از دلفی اجرا میشه

Kambiz
جمعه 16 آبان 1382, 01:56 صبح
DelphiArea عزیز حالا نمی شه آن را شبیه سازی کرد؟
یعنی به برنامه بفهمونه که از دلفی اجرا میشه
برای شبیه سازی باید برنامه رو داخل یک دیباگر اجرا کرد که این هم برای کسیکه می خواد واقعا از برنامه استفاده کنه آزار دهنده هست و نامعقول.

Mashatan
جمعه 16 آبان 1382, 09:54 صبح
if (FindWindow('TApplication', nil) = 0) or
(FindWindow('TAlignPalette', nil) = 0) or
(FindWindow('TPropertyInspector', nil) = 0) or
(FindWindow('TAppBuilder', nil) = 0) then
begin
ShowMessage('Delphi is not running!');
end

Mashatan
سه شنبه 27 آبان 1382, 11:04 صبح
پیداش کردم توی Kernel32 بود :)
اینم یک برنامه نمونه !


var
hDll:THandle;
IsDebuggerPresent : Function:Boolean StdCall ;


procedure TForm1.FormCreate(Sender: TObject);
begin
hDll:=LoadLibrary('Kernel32.dll');
if hDll<> 0 then
IsDebuggerPresent:=GetProcAddress(hDLL,'IsDebugger Present');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeLibrary(hDll);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if IsDebuggerPresent then
Application.MessageBox('Debug ;)','')
else
Application.MessageBox('No debug','')
end;

omidsm
سه شنبه 27 آبان 1382, 12:10 عصر
با تشکر از همه دوستان که جواب دادند :oops:

ولی مشکل من اینها نیست :cry:

Mashatan
سه شنبه 27 آبان 1382, 14:10 عصر
با تشکر از همه دوستان که جواب دادند :oops:

ولی مشکل من اینها نیست :cry:

خوب مشکل شما چیه ؟ :lol:
اگر برنامه Trial منظورتونه همنی که بهتون عرض کردم (FindWindow)
یعنی موقع که Delphi بالاست Nag Screen نشون نمیدن و وقتی که Delphi نباشه نشون میدن !

ولی اگر میخواید بفهمید که برنامه داره از Mode Debug میاد بالا (که شامل دلفی هم میشه ) باید از IsDebuggerPresent استفاده کنید :)

ارادتمند
مشاطان

مهدی کرامتی
سه شنبه 27 آبان 1382, 14:28 عصر
ایشان در حقیقت میخواهند یک برنامه Trial‌ را گول بزنند و به آن بفهمانند که دلفی در حال اجراست.

شما باید چند پنجره بهمان نامهایی که در کد نوشته شده توسط آقای مشاطان دیده میشود ایجاد کنید.

omidsm
سه شنبه 27 آبان 1382, 15:26 عصر
ایشان در حقیقت میخواهند یک برنامه Trial‌ را گول بزنند و به آن بفهمانند که دلفی در حال اجراست.

شما باید چند پنجره بهمان نامهایی که در کد نوشته شده توسط آقای مشاطان دیده میشود ایجاد کنید.
حق با آقای کرامتی است ولی با روش پنجره حل نمی شه :cry:

باز هم ممنونم :roll:

مهدی کرامتی
سه شنبه 27 آبان 1382, 16:01 عصر
حق با آقای کرامتی است ولی با روش پنجره حل نمی شه
بستگی داره. تو بعضی کامپوننتها علاوه بر چک پنجره‌های دلفی Process ID هم چک میشود.

Mashatan
سه شنبه 27 آبان 1382, 19:29 عصر
ایشان در حقیقت میخواهند یک برنامه Trial‌ را گول بزنند و به آن بفهمانند که دلفی در حال اجراست.

شما باید چند پنجره بهمان نامهایی که در کد نوشته شده توسط آقای مشاطان دیده میشود ایجاد کنید.
حق با آقای کرامتی است ولی با روش پنجره حل نمی شه :cry:
باز هم ممنونم :roll:

معمولا با تغییر یک یا دو بایت Crack میشه و احتیاج نیست این کارا رو انجام بدید :wink:
باید از داخل DCU و BLP محلی که شرط انجام میشه پیدا کنید رو Ptach کنید .

ارادتمند
مشاطان

سه شنبه 27 آبان 1382, 22:17 عصر
سلام
ببین این برنامه به دردت میخوره؟
ضمنن اقای مشاطان
میشه در مورد
var IsDebuggerPresent : Function:Boolean;
یه توضیحی بدین؟
اگه میشه در مورد روش کرک کردن و درست کردن patch یه توضیح پدر مادر دار بدین ثواب داره :oops:
مرسی
بای

Mashatan
چهارشنبه 28 آبان 1382, 02:54 صبح
میشه در مورد
var IsDebuggerPresent : Function:Boolean;
یه توضیحی بدین؟

شما در Windows به طور کلی میتونید یک Application رو علاوه بر حالت عادی در حالت Debug mode هم بالا بیارید ! مثل خود Delphi در حقیقت اول EXE میسازه و بعد این EXE رو با کمک API های خود Windows به حالت Debug Mode میاره بالا که در این حالت امکان Trace و Break point وجود داره .
حالا اگر Application حالت عادی بیاد بالا این IsDebuggerPresent خروجی False داره
و اگر برنامه در حالت Debug mode باشه خروجی True هست.
و این در اونجا به درد میخوره که میتونید بفهمید که برنامه داره کرک میشه چون یک فایل EXE فقط زمانیDebug میشه که بخواد Crack بشه ! (البته بجزء زبانهای برنامه نویسی )

البته این در مقابل Debugger های مثل SoftICE که یکی از قدرتمند ترین Debugger ها جهان هست کاری از پیش نمیبره ! SoftICE در حقیقت از Ring 0 بالا میاد و در اصلا کل Windows رو Debug mode میاره بالا یعنی شما هر قسمت Windows رو بخواید میتونید Break Point بزارید :) چه برسه به برنامه شما و برنامه شما اصلا تشخیص نمیده ! البته روشهای وجود داره برای فهمیدن وجود SoftICE که دیگه بحث ما خارج میشه !



اگه میشه در مورد روش کرک کردن و درست کردن patch یه توضیح پدر مادر دار بدین ثواب داره :بای

راستش چی بگم من خودمو کرکر نمیدونم ! و زیاد خوشم نمیاد از این کار ؛ هر چند اگر حرفه ای ادامه میدادم شاید .... بگذریم.
کرک کلا خلاقیت میخواد خیلی هم خلاقیت میخواد اصلا قانون خاصی نداره خوبی که Crack کامپونتت نسبت به Application داره اینکه به هیچ وجه کد Encrypt نمیشه ! و شما مجبور نیستید که Dump کنید از Memory که یکی از سخت ترین و پر زحمت ترین کارهای کرک هست !

در مورد کرک Compoent اول با Compoentیک Application میسازم و بعد Disassemble میکنم (معمولا با W32DASM کار میکنم) و نقطه Patch رو پیدا میکنم.
پیدا کردنش بستگی به برنامه نویسش داره مثلا یکی هست KDTELE رو مینویسه که از پیچیده ترین Lock های بوده که در عمرم دیدم که من مجبور شدم کارهای عجیب و غریبی کنم تا هر 3 مرحله اش رو رد کنم ! و یکی هم هست Tinydb رو مینویسه که فقط یک Jump هست ! :wink:

اغلب کسانی که Component مینویسن مثل Tinydb با یک Messagebox و یک Jump سر و ته قضیه رو هم میارن :) :twisted:
شما وقتی برنامه رو با W32DASM باز میکنید علاوه بر سورس اسمبلی به شما String Data Refrences هم نمایش میده کافیه داخل اون String ها جمله که در Messagebox به کار رفته پیدا کنید و روش کلیک کنید به شما مکانی که اون کلمه بکار رفته شده رو نمایش میده و میبینید یک Call پایینش خورده که call به Messagebox هست و یکم بالاش رو نگاه کنید احتمالا یک jump میبینید که اون باید Patch بشه ! وبا یک HEX Editor ترتیبش رو بدید !.

البته همیشه اینجوری نیست و این فقط یک مثال خیلی خیلی ساده هست ! بعضی هاشون هستند که از Form برای نمایش استفاده میکنن که کارتون خیلی سخت میشه چون از DeDe هم باید استفاده کنید . اینقدر حالتهای مختلفی داره که درباره هر کدومش میشه کلی نوشت .

راستی ساعت نوشتن این پست رو نگاه کنید :!: :wink:

ارادتمند
مشاطان

چهارشنبه 28 آبان 1382, 20:45 عصر
سلام اقای مشاطان از توضیحاتتون واقعا ممنون
دیگه نصفه شبی تو زحمت افتادین
مرسی
الهی شامپو تو چشم اقای مشاطان نره :wink:

Mashatan
پنج شنبه 29 آبان 1382, 01:49 صبح
پیداش کردم توی Kernel32 بود :)
اینم یک برنامه نمونه !


var
hDll:THandle;
IsDebuggerPresent : Function:Boolean StdCall ;


procedure TForm1.FormCreate(Sender: TObject);
begin
hDll:=LoadLibrary('Kernel32.dll');
if hDll<> 0 then
IsDebuggerPresent:=GetProcAddress(hDLL,'IsDebugger Present');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeLibrary(hDll);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if IsDebuggerPresent then
Application.MessageBox('Debug ;)','')
else
Application.MessageBox('No debug','')
end;

از این روش هم میتونید این Function رو از Kernel32 صدا بزنید:

function IsDebuggerPresent: BOOL; stdcall; external Kernel32 name 'IsDebuggerPresent';
ممنونم از کامبیز (Delphiarea) که بهم این نکته رو گوشزد کرد .

پ.ن : من عادت کردم همیشه برای نمایش ندادن Function در Import Table همیشه با استفاده از LoadLibrary صدا کنم .ولی روشی که کامبیز گفته ساده تر و راحتره :wink:

ارادتمند
مشاطان

omidsm
پنج شنبه 29 آبان 1382, 11:19 صبح
McMilad خیلی از متشکرم با این روش تعدادی کرک شدند :P

آقای Mashatan عزیز میشه آدرس نرم افزار هایی که گفته ای رو بدی :oops:

با تشکر از همه دوستان 8)