ورود

View Full Version : سوال: به نظر شما ميشه با كول ديسك قفل سخت افزاري ساخت



majid_vb_2008
دوشنبه 12 اسفند 1387, 11:16 صبح
سلام دوستان

به نظر شما ميشه اين كارو كرد يا نه البته من يك سورس براي كار با كول ديسك دارم كه اطلاعاتي مثل حجم , شماره سريال , نوع فرمت و .... رو ميشه به دست آورد.

حالا بنظر شما ميشه با اين اطلاعات يك قفل سخت افزاري طراحي كرد.

قبلا از راهنمايي هايي كه مي كنيد متشكرم.:قلب:

دنیای دلفی
دوشنبه 12 اسفند 1387, 18:42 عصر
يعني شما سورس كدي داري كه شماره سريال فيزيكي يك Flash Memory را بدست مي آورد. جالبه اگر كد را بگذاري و درست باشد كمكت مي كنم تا قفلتو بسازي

خوب به رنگ قرمز توجه كن

majid_vb_2008
دوشنبه 12 اسفند 1387, 22:16 عصر
سلام اينم سورس من البته با vb6 نوشته شده ولي ميشه به دات نت تبديل كرد منم قفل رو براي دات نت ميخوام.

از وقتي كه براي من گزاشتي و ميگذاري ممنونم:خجالت:

Nima NT
سه شنبه 13 اسفند 1387, 03:13 صبح
این کار اصولی نیست , شما اگر بخوای 100 نسخه از محصول خودت رو ارائه کنی باید 100 بار سریال فیزیکی رو بخونی :متعجب:

majid_vb_2008
سه شنبه 13 اسفند 1387, 11:34 صبح
سلام نرم افزار من سفارشي است و قرار نيست 100 ازش كپي كنيم.

حالا اكه اينجوريه قفلهاي usb چجوري كار مي كنه.

از راهنمايي هاتون ممنونم.

Nima NT
سه شنبه 13 اسفند 1387, 13:54 عصر
این روش قفل گذاری هیچ امنیتی نداره , قفل سخت افزاری امن اونهایی هستن که مقداری از برنامه کاربر دورن حافظه اونها قرار میگیره.

majid_vb_2008
سه شنبه 13 اسفند 1387, 14:19 عصر
چرا امنيت نداره مگه ميشه شماره سريال كول ديسك رو عوض كرد:متفکر:

اگه راه داره بگين ما هم ياد بگيريم:لبخندساده:

Nima NT
سه شنبه 13 اسفند 1387, 14:30 عصر
نمیدونم بشه این کار رو کرد یا نه ولی میشه کاری کرد که وقتی تابع قراره سریال کول دیسک رو برگردونه , همون مقداری رو برگردونه که من میخوام :لبخند:

دنیای دلفی
چهارشنبه 14 اسفند 1387, 15:31 عصر
Function GetHDDSerial(Drive : String) : String; // 'C:\', etc
Var
VolumeSerialNumber : DWORD;
MaximumComponentLength : DWORD;
FileSystemFlags : DWORD;
SerialNumber : string;
begin
GetVolumeInformation(PChar(Drive), nil, 0, @VolumeSerialNumber,
MaximumComponentLength,FileSystemFlags, nil, 0);
SerialNumber := IntToStr(VolumeSerialNumber);
Result:=(SerialNumber);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage(GetHDDSerial('M:'));
end;




اين هم سورس دلفي

Hossein Moradi
پنج شنبه 15 اسفند 1387, 08:39 صبح
این کدها سریال درایو را برمیگردونه نه سریال سخت افزاری رو
سریال درایو با فرمت و ابزارهای مختلف قابل تغییر و کپی هست

حامد مصافی
پنج شنبه 15 اسفند 1387, 11:19 صبح
با قیمتی کمتر از 100000 ريال می توانید یک قفل سخت افزاری USB همراه با اطلاعات موبوط به نحوه استفاده به همراه ACctiveX و COM و Component و سورس مربوطه را از بازار تهیه فرمائید.

majid_vb_2008
پنج شنبه 15 اسفند 1387, 15:12 عصر
این کدها سریال درایو را برمیگردونه نه سریال سخت افزاری رو
سریال درایو با فرمت و ابزارهای مختلف قابل تغییر و کپی هست

ما كه قرار نيست قفلمون فرمت بشه كه نشه از اين روش استفاده كرد
بعدشم موقع فرمت كردن كه نميشه مشخص كرد كه شماره سريال فلش چي باشه
پس كسي نميتونه يك كول ديسك جديد با شماره سريال كول ديسك قبلي درست كنه



با قیمتی کمتر از 100000 ريال می توانید یک قفل سخت افزاری USB همراه با اطلاعات موبوط به نحوه استفاده به همراه ACctiveX و COM و Component و سورس مربوطه را از بازار تهیه فرمائید.


خودم هم خبر داشتم اين موضوع رو من مي خواستم يك قفل درست كنم كه امنيتش فقط خودم سردر بيارم وكي ندونه چجوري كار مي كنه

h_mohamadi
پنج شنبه 15 اسفند 1387, 16:47 عصر
آن سورس vb خيلي جالب بود چون با فرمت کردن هم عوض نمي شد اما اين سورس دلفي عوض مي شود

majid_vb_2008
پنج شنبه 15 اسفند 1387, 23:54 عصر
سلام دوستان

از اساتيد كسي نظر ديگه نداره

اگه كسي نمونه كدي داره بزاره البته اگر با vb.net باشه عاليه ممنون

Sh4DoVV
جمعه 16 اسفند 1387, 06:05 صبح
با سلام
دوست عزیز این نمونه سورس کد رو که با VB نوشته شده رو میتونی استفاده کنید ، در ماژول MemExecute تابعی به نام RunByte هستش که به طور مثال شما بایتهای یک فایل اجرایی رو توی یک متغیر از نوع Byte قرار دادین و توسط این تابه اونها رو به یک پروسس جدید تزریق میکنید و اونو اجرا میکنید . حالا شما اول باید با یک تابع مثل ByteXOR که کدشو در زیر واستون میزارم بایتهای برنامهی اصلیتونو با سریال کول دیسک کد کنید و در Runtime اونو دیکود کنید و توسط ماژولی که گذاشتم اونو اجرا کنید :چشمک:


Public Sub ByteXOR(Bytes() As Byte, Password As String)
Dim X As Long
Dim PwsArr() As Byte
Dim PwsSize As Long
Dim idx As Integer

PwsArr = StrConv(Password, vbFromUnicode)
PwsSize = UBound(PwsArr)
Rnd (-3)

For X = 0 To UBound(Bytes)
Bytes(X) = Bytes(X) Xor PwsArr(idx) Xor Int(255 * Rnd)
If (idx >= PwsSize) Then idx = -1
idx = (idx + 1)
Next X

Erase PwsArr
X = 0
PwsSize = 0
End Sub


چقدر حرف زدم :لبخند:- بازم اگر مشکلی بود در خدمتم
یا علی:لبخندساده:

دنیای دلفی
جمعه 16 اسفند 1387, 10:25 صبح
اون كد VB و دلفي كاملا مشابه هستند اصلا از يك API استفاده مي كنند. چطور ممكنه شماره سريالي كه ويبي بعد از فرمت برمي گردونه با شماره سريالي كه دلفي برمي گردونه فرق كنه . ؟

majid_vb_2008
شنبه 17 اسفند 1387, 15:45 عصر
سلام
جناب Sh4DoVV (http://barnamenevis.org/forum/member.php?u=73458) اگه ميشه در مورد ماژول هايي كه گذاشتي بيشتر توضيح بده ممنون.

h_mohamadi
دوشنبه 19 اسفند 1387, 08:16 صبح
من چون vb بلد نيستم به خاطر همين سورس دلفي آن را مي خواستم

Sh4DoVV
دوشنبه 19 اسفند 1387, 22:34 عصر
سلام
جناب Sh4DoVV (http://barnamenevis.org/forum/member.php?u=73458) اگه ميشه در مورد ماژول هايي كه گذاشتي بيشتر توضيح بده ممنون.
با سلام
شرمنده که دیر جواب دادم
در ماژول های بالا فقط تابع RunBytes مهم هستش که و به این صورت استفاده میشه که شما میاین و محتویات یک فایل اجرایی رو در یک Array از نوع Byte
Dim FileBytes() as Byte ذخیره میکنید و توسط تابع RunBytes اونو اجرا میکنید بدون اینکه بخوای یک فایل روی هاردتون ایجاد کنید

Call RunBytes ( FileBytes)
و تابع ByeXOR هم برای کد کردن محتویات فایل اجرایی هستش که دارای 2 پارامتر هستش که یکی همون محتویات فایل اجرایی هستش و دیگری کلید برای کد کردن اطلاعات ، اینو بخاطر این گذاشتم که شما اول میای محتویات فایل اجرایی برنامتو که میخوای محافظت کنی رو با سریال کول دیسک که میشه پارامتر دوم تابع ByteXOR کد کنی و در زمان اجرا توسط همون تابع و با همون سریال دیکو و در آخر توسط تابع RunBytes اجراش کنی
امیدوارم که خوب تونسته باشم توضیح بدم
یا علی:لبخندساده:

majid_vb_2008
سه شنبه 20 اسفند 1387, 06:31 صبح
ممنون ميشم كه يك نمونه كد هم بزاري

مرسي

farzadvahdat
چهارشنبه 21 اسفند 1387, 22:57 عصر
با سلام.منم خواستم تو اين بحث شيرين شركت كنم.
من خودم تو پاسكال 4 ساي پيش همون قفل مترجم پارس كه رو فلاپي بود رو طراحي كردم.
سريال ديسكت كه اون زمون با برنامه Copycon قابل كپي برداري بود.
البته به نظر من اگه اين قفل با قفل تلفني همراه بشه پارامترها بيشتر شده و نميگم نميشه بشكنه ولي يكم سخت تر ميشه تا قفلش بشكنه.
درمورد مطلب دوست خوبمون Nima NT كه ميفرمان میشه کاری کرد که وقتی تابع قراره سریال کول دیسک رو برگردونه , همون مقداری رو برگردونه که من میخوام اگه ممكنه سورس كدي به زبان وي بي بدين تا ماهم روش بررسي كنيم.

majid_vb_2008
پنج شنبه 22 اسفند 1387, 10:40 صبح
سلام
يعني قفل مترجم پارس هم با شماره سريال ديسكت كار مي كرد يا محتويات ديسكت
چون من خودم قفل اونو با نرم افزار ccaca كپي كردم
بنظر شما ميشه اين كارو براي كول ديسك هم انجام داد

mithridates
چهارشنبه 28 اسفند 1387, 17:21 عصر
احتیاج به دست کاری تابه هم نیست زیاد. کافیه رو GetVolumeInformation یه BP بزاری بعد راحت Edit کنی

Sh4DoVV
پنج شنبه 29 اسفند 1387, 22:54 عصر
با سلام
اینم سورس Cool Crypter که شما یک فایل EXE رو بهش میدین و سریال کول دیسک رو وارد میکنید سپس Protect رو میزنید . البته در سورس مربوط به Stub یک تابع به نام GetCoolDiskSerial وجود داره که باید کدهای مربوط به بدست آوردن سریال کول دیسک رو در اونجا قرار بدین ، سپس برنامه Stub رو کامپایل مکنید و در کنار Cool Crypter.exe قرار میدین و بعد فایل مورد نظرتون رو پروتکت میکنید .
بازم اگر مشکلی بود بگین ، تا بتونم راهنمایی میکنم
یا علی :لبخندساده:

grief_dusk
یک شنبه 31 مرداد 1389, 13:15 عصر
من این کارو کردم و جواب گرفتم , از قفل های سخت افزاری موجود بازار امن تر , ضمنا میتونی از فلش های سوخته هم استفاده کنی

Hossein Moradi
یک شنبه 31 مرداد 1389, 14:46 عصر
با ابزار Volumeid در سری ابزارهای Sysinternals Suite می شه مثل آب خوردن سریال درایو رو عوض کرد

tc1000
شنبه 20 شهریور 1389, 17:15 عصر
من نرم افزاری خریداری کردم که یک کول دیسک که میگن قفلی
نرم افزار تحت لینوکس هستش پس از کول دیسک هم میشه استفاده کرد

farzadvahdat
جمعه 07 بهمن 1390, 23:59 عصر
با سلام
اینم سورس Cool Crypter که شما یک فایل EXE رو بهش میدین و سریال کول دیسک رو وارد میکنید سپس Protect رو میزنید . البته در سورس مربوط به Stub یک تابع به نام GetCoolDiskSerial وجود داره که باید کدهای مربوط به بدست آوردن سریال کول دیسک رو در اونجا قرار بدین ، سپس برنامه Stub رو کامپایل مکنید و در کنار Cool Crypter.exe قرار میدین و بعد فایل مورد نظرتون رو پروتکت میکنید .
بازم اگر مشکلی بود بگین ، تا بتونم راهنمایی میکنم
یا علی :لبخندساده:

درستع کع خیلی از تاریخ پست میگذره ولی من این سورس رو گرفتم ولی نتونستم ازش استفاده کنم.
اگه کسی ازش استفاده کرده لطفا راهنمایی کنه.

Securebit
دوشنبه 10 بهمن 1390, 16:00 عصر
با این نرم افزار میتونید فلش دیسک ها رو به دانگل محافظت از نرم افزار تبدیل کنید.

http://www.alkonost.com/antiduplicate

r00tkit
دوشنبه 10 بهمن 1390, 16:58 عصر
کلی مطلب نوشت بودم اما پرید

در کل نمی شه از فلش مموری استفاده کرد چون اولا داشتن سریال اجباری نیست و دوما می شه تغییر داد
( حیف ان همه مطلب نوشته رفت :(

rana-writes
دوشنبه 22 اسفند 1390, 14:06 عصر
با این نرم افزار میتونید فلش دیسک ها رو به دانگل محافظت از نرم افزار تبدیل کنید.

http://www.alkonost.com/antiduplicate

سلام
اين لينكي كه گذاشتين، نسخه ي دموي نرم افزار نيست؟
طبيعتا بعد از يه مدت كه نميشه باهاش كار كرد
تكليف نرم افزاري كه به اين شكل دست مشتري ميديم چي ميشه؟

ممنون ميشم راهنمايي كنين

Securebit
دوشنبه 22 اسفند 1390, 14:33 عصر
سلام
اين لينكي كه گذاشتين، نسخه ي دموي نرم افزار نيست؟
طبيعتا بعد از يه مدت كه نميشه باهاش كار كرد
تكليف نرم افزاري كه به اين شكل دست مشتري ميديم چي ميشه؟

ممنون ميشم راهنمايي كنين

بله نسخه دموی این نرم افزار قابل دانلود هست و در صورتی که پاسخگوی نیاز شما بود میتونید نسخه کامل رو خریداری کنید.

atige007
یک شنبه 01 مرداد 1391, 23:31 عصر
اگه کمی به الکترونیک وارد باشید میتونید یک دیوایس یو اس با سریال دلخواه درست کنید

ahmadi.sa
چهارشنبه 08 خرداد 1392, 12:11 عصر
با سلام خدمت تمامی دوستان
روشی که من تو نرم افزار هام استفاده کردم و جواب هم داده خیلی ساده تر و کاربردی تره ، پیشنهاد میکنم شما هم ازش استفاده کنید. شما یه key Maker برای خودتون بسازید با فرمول ریاضی پیچیده ، برنامه شما هم وقتی اجرا میشه باید بصورت تصادفی یه کد تولید کنه که کاربر با اسمس اون رو به شما ارسال کنه و شما هم با استفاده از برنامه key Maker خودتون کد فعالسازی رو بفرستین تا کاربر اون رو به برنامه بده و فعال بشه. ( اگه کد رو با مشخصات سی پی یو یا مادر برد هم مخلوط کنید چیز جالبی در می آد و کنترل سیستمها رو میتونید داشته باشید). شما می تونید کد اولیه و کدی که به کاربر میفرستید رو در پایگاه داده برنامه یا در یک فایل ذخیره کنید که قابل دسترس نباشه. روش کار کنید جواب میده

Service Manual
چهارشنبه 08 خرداد 1392, 16:33 عصر
سلام

به نظر من استفاده از حافظه فلش براي ايجاد قفل سخت افزاري يک کار کاملا اشتباه هست ، براي اينکه راحت ميشه از آي سي ناند اينطور حافظه ها کپي گرفت و اطلاعات کپي شده رو روي نمونه مشابه ريخت و عملا قفل رو کپي کرد ، به تصوير زير دقت کنيد اين يک نمونه حافظه سو اس بي فلش هست :

اين قسمت راه انداز هست که به اون کاري ندارم :


104810

اون سمت فلش آي سي ناند هست که با جدا کردن آي سي از روي مدار راحت ميشه اطلاعات داخلش رو بدون يک بايت کم و زياد خوند و روي آي سي مشابه ريخت :


104809

براي اينکار هم احتياج به يک مبدل TSOP48 و يک پروگرامر داريد :


104811

که داخل تمام تعميرگاه هاي صوتي و تصويري پيدا ميشه .........

البته بايد هر دو فلش از يک برند و يک مدل باشند تا اينکار عملي شود .

اينو هم اضافه کنم که يک سري نرم افزار هستند که از روي تمام اطلاعات يک حافظه فلش ( بوت و اطلاعات داخلي ) کپي گرفته و در يک فايل ذخيره مي کنند و امکان ريختن اين فايل ايميج روي فلش مشابه وجود دارد اما اطلاعي ندارم که به درد قفل سخت افزاري ميخورند يا نه ؟

يا حق

mtfa65
دوشنبه 07 بهمن 1392, 17:43 عصر
سلام دوستان عزیز
بحث بسیار جالبی است.
در بالا جناب آقای دنیای دلفی که مدیر هستند یک تابعی رو گذاشتند به زبان دلفی که سریال رو نشون می ده اما این سریال سریال فیزیکی نیست.چرا که من سریال فلش مموری رو می خوام و بار اول که زدم یک عددی رو به من نشون داد(تازمانی که فرمت نکرده بودم هر بار که میزدم همون سریال بود) اما وقتی فلش مموری رو فرمت کردم سریال عوض شد و این کار درست نیست.

این هم عکس اولی قبل از فرمت:116012


این هم عکس دومی بعد از فرمت: 116013
همانطور که مشاهده می کنید سریالها متفاوت هستند.
اما من یک تابعی دارم در دلفی که سریال فیزیکی رو نشون میده مثلا همون فلشی که دارم و سریالش رو در بالا می بینید دو تا است خودم سریال فیزیکی رو بدست آوردم که بدین صورت است:
116015
و حتی با فلش مموری های سوخته هم ( یعنی کار نمی کنه) امتحان کردم سریال رو نشون می ده و لی با تابعی که شما گفتید سریالی که عملا کار نمیکنه و ایراد داره رو سریالش رو نشون نمیده وبا فرمت کردن هم عوض میشه.
و ضمنا من از این روش برای قفل گذاری نرم افزارم استفاده کردم. و اینکه 100 بار تعریف کردن هم کار سختی نیست. یکی یکی فلش مموری ها رو میذاری توی پورت و ریالش رو بدست می آری بعد همون سریال رو در برنامه قرار می دی. به همین سادگی. انقدر سخت گرفتید.
و فکر کنم این روش مطمئن ترین روش قفل گذاری است.مگر اینکه کسی بخواد سورس برنامه رو بدست بیاره اون موقع دیگه کاری نمیشه کرد. یعنی من بلد نیستم دیگه
بسیار ممنون

MiRHaDi
چهارشنبه 06 فروردین 1393, 15:54 عصر
سلام
دوست عزیز در صورتی که شما کد بهتر و کاراتری دارید
ممنون میشویم آن را در اختیار دیگر دوستان هم قرار دهید
با تشکر

MiRHaDi
چهارشنبه 06 فروردین 1393, 16:06 عصر
سلام
دوستان عزیز یک توضیحات مختصری هم بنده عرض کنم

قفل را میسازیم که افراد معمولی با سواد کامپیوتری در حد ICDL یا مقداری بالاتر برنامه ما را کپی نکنند.
نمیتوانیم ادعا کنیم که قفلی ساخته ایم که هیچ بنی بشری نمیتواند آن را کپی کرده و یا آن را دور بزند. فقط کارش را سخت میکنیم که حوصله این کار را نداشته باشد

یکی از دوستان راهی را گفتند که فایل اجرایی را به صورت بایت در آورده و در حالت اجرا آن را پس از دیکد از طریق رم اجرا کنیم.این راه خوبی است. ولی حتی این راه را هم از طریق Dump رم در هنگام اجرا و ذخیره فایل اجرایی اصلی دیکد شده میشود دور زد.

دوست دیگری استفاده از کد فلش را مطرح کردند ، چه فرمت شود عوض بشود و یا نشود. توسط نرم افزارهایی امکان ایمیج گرفتن از کل مموری و clone کردن آن روی مموری دیگری میسر میباشد.

دوست عزیز دیگری استفاده از سیستمهایی با پارامترهای بیشتر از جمله سخت افزارهای دیگر مثل سیپیو و رم و هارد را ذکر کردند که در صورت نصب روی vmware و کپی ماشین مجازی کپی میشود

عزیز دیگری استفاده از الگوریتم با محاسبات ریاضی در KeyGen را مطرح کردند. که با استفاده از یک Debuger و HexEdit میشود شرط مساوی را به نامساوی تبدیل و از برنامه استفاده کرد

قرار دادن تیکه ای از کد در حافظه جانبی هم راه خوبی است.

خلاصه همه اینها قابل شکستن و یا دور زدن میباشند. راههای ترکیبی معمولا سخت تر شکسته میشوند ولی کاربری و استفاده از برنامه را هم سخت میکند و مشتری شما ناراضی میشود.

امنیت یک واژه نسبی است و مطلق نیست. سعی بکنیم که برنامه خوبی بنویسیم و قفل نسبتا خوبی هم روی آن میشود گذاشت ولی این حق را هم به دیگر افراد بدهید که این قفل را برای مصرف شخصی خود بردارند ولی ازشون خواهش کنید که برای مصرف عموم مردم منتشر نکنند :-)

موفق باشید

mtfa65
پنج شنبه 07 فروردین 1393, 23:57 عصر
سلام دوستان
بسیار ممنون از همه شما.
بله دوست عزیز آقای MiRHaDi همه چیزهایی که گفتید کاملا صحیح می باشد اما بجز یک مورد(البته اطلاعات بنده تا این حد است که این مورد را اشتباه میگیریم شاید گفته شما درست باشد)
من در مورد قفل سخت افزاری فلش مموری توسط دلف رو بحث میکنم.
همه ما میددونیم هر سخت افزاری که از طریق پورتهای یو. اس بی به سیستم متصل می شوند اکثرشان دارای سریال می باشند.
و تابعی توسط دلفی نوشته شده تنها و تنها سریال فیزیکی سخت افزاری که به سیستم متصل شده رو نشون مده.
حال اگر سخت افزاری بتوانید بسازید که خودتان به آن سخت افزار سریال فیزیکی تعریف کنید، در این صورت بله میشود از سخت افزار کپی کرد. اما اگر به فرموده شما بشود از یو اس بی ایمیج گرفت(این هم درست است و بنده هم تست کردم) سریال معمولی رو نشون می ده اما سریال فیزیکی رو نمیشه ازش ایمیج گرفت.(یا شاید هم من بلد نیستم)
سریال فیزیکی توسط شرکت سازنده فلش مموری ها تعریف و کد گذاری می شوند و غیر قابل تغییر می باشند(بدلیل اینکه یو اس بی مورد نظر قابل شناسایی باشد که کدام شرکت این یو اس بی رو ارائه داده - جعلی نباشد) به همین خاطر سریال فیزیکی غیر قابل کپی می باشد.حتی در مواردی فلش مموری سوخته و سریال معمولی وجود ندارد-اما سریال فیزیکی همچنان پابرجاست.
حال ما برای قفل از فلش مموری استفاده میکنم، این قفل می تواند هر سخت افزار دیگری که به پورت یو اس بی سیستم متصل میشود را نشان می دهد-مثلا هاردهای اکسترنال-که اگر به حالت یو اسبی به یه سیستم متصل شده باشد دارای یک سریال سخت افزاری میباشد-که توسط شرکت سازنده تعریف شده.
و اینکه اگر از خود نرم افزار بخواهند قفل رو بردارند در این صورت باید سورس برنامه رو بدست بیارن که این کار هم البته در زبال دلفی تا جایی که اطلاع دارم کار بسیار مشکلی است. و باد ابتدا به زبان اسمبلی تبدیل شود سپس زبان اسمبلی رو ترجمه کرده و به زبان دلفی تبدیل کند.
اگر کسی هم تابع یافتن سریال فیزییکی هر سخت افزاری که به سیستم متصل میشه رو می خواد 200000 تومان هزینش میشه.(فقط برای دلفی)
با تشکر