PDA

View Full Version : شناسایی تغییرات در ساعت ویندوز



ali190
شنبه 03 مهر 1389, 17:25 عصر
با سلام و عرض خسته نباشید
دوستان من یه برنامه ای نوشتم که میخوام این برنامه دقیقاً سر یک تاریخ و ساعت مشخصی از کار بیفته
برای اینکه متوجه بشم کاربر تاریخ ویندوز رو تغییر داده و یا داره از نرم افزارهایی که تاریخ ویندوز رو fix میکنه استفاده کنه از روش زیر استفاده میکنم
روشم هم اینه که توسط یک تایمر هر 1 ثانیه یکبار تاریخ و ساعت جاری سیستمم رو یک جایی ذخیره میکنم
سپس هر بار که برنامه ام باز میشه تاریخ و ساعت جاری سیستم رو با مقدار ذخیره شده قبلی مقایسه میکنم
اگر کمتر بود برنامه از کار میفته(کمتر یا مساوی)
حالا مشکلم اینجاست که این مقدار (مقداری که توسط تایمر ارسال میشود) رو در کجا ذخیره کنم که لو نره
راستشو بخواین یکی از دوستان لطف کردند و این مقدار رو در هرجا که ذخیره کردم رو کشف کردند و جاش رو بهم گفتن (فکر کنم از نرم افزار هایی monitoring استفاده کنه ، بهر حال به من نگفت)
در هرجا که ذخیره کردم متاسفانه لو رفت و برنامه دوباره به کار افتاد
رجیستری ، دیتابیس، فایل متنی و........
تو سایت در این مورد سرچ کردم ولی بیشتر در مورد روش تریالینگ بحث شده تا امنیت ذخیره سازی اطلاعات تریال
ممنون میشم راهنماییم کنید
یاعلی

Dr.Bronx
شنبه 03 مهر 1389, 18:14 عصر
در هرجا که ذخیره کردم متاسفانه لو رفت و برنامه دوباره به کار افتاد
خوب در همونجایی که میگید ذخیره کردید حتما بدون Encryption ذخیره کردید که اینطوری شده دیگه .
اگر بتونید خیلی خوب از اونها حفاظت کنید یعنی رمز گزاری بشه خیلی سخت میشه که اون رو تغییر داد .

موفق باشید ./

ali190
شنبه 03 مهر 1389, 18:30 عصر
سلام
ممنون از پاسختون
میشه لطف کنید یک مقدار بیشتر توضیح بدید
یا یک نمونه قرار بدید
ممنون
یاعلی

Saman_12
شنبه 03 مهر 1389, 18:51 عصر
خوب در همونجایی که میگید ذخیره کردید حتما بدون Encryption ذخیره کردید که اینطوری شده دیگه .
دوست عزیز این حرف شما کاملا صحیح اما مشکل اینجاست که هرجا باشه میشه پاکش کرد.

میشه لطف کنید یک مقدار بیشتر توضیح بدید.

Encryption یعنی به رمز در آوردن اطلاعات که هر نوع اطلاعاتی میشه باشه اما کاربردش بیشتر توی متن هست.
Decryption هم بر عکس قبلی هست یعنی از رمز خارج کردن.

برای درک ساده تر میتونید عمل کرد Xor رو در نظر بگیرید.

توی .NET شما یک نمونه متغییر خاص تعریف میکنی(به صورت ران تایم هم میشه تعریف کرد اما ذخیره نمیشه پس بهتره قبل از دیباگ برنامه این متغییر به صورت دستی ایجاد بشه.) بعد هم این متغییر یک جور خاص صدا میکنی این متغییر توی فایل Exe به صورت باینری ذخیره میشه و میشه توش همه چی ذخیره کرد و خوند.(نمی دونم شاید توی 6 هم این جور چیزی باشه اما بعیده.)

ali190
شنبه 03 مهر 1389, 18:56 عصر
ممنو ن سامان عزیز
یه جورایی منظورم همین هم بود که احتمال داره بشه پاکش کرد
گو اینکه میشه براش شرظ گذاشت که اگر مقدار ذخیره شده پاک بشه هم رفتاری مشابه از برنامه سر بزنه (از کار افتادن برنامه )
مشکلم بیشتر اینجاست که این مقدار رو به هرجا که ارسال میکنم ، جاش سریع لو میره و میشه یه جورایی برنامه دور زد
میخوام بدونم کلیات روشم درسته؟
شاید بکل روشم غلطه یا لگوریتم ساده ای داره.
ممنون
یاعلی

Saman_12
شنبه 03 مهر 1389, 19:10 عصر
گو اینکه میشه براش شرظ گذاشت که اگر مقدار ذخیره شده پاک بشه هم رفتاری مشابه از برنامه سر بزنه (از کار افتادن برنامه )
خوب برای این هم باید یک جایی یک مقدار ذخیره بشه که فهمید این فایل هست یعد هم بشه خوندش و چک کرد که اگه مثلا True بو آیا اون فایل هست یا نه.(زیاد جدی نگیر خودم نفهمیدم چی گفتم.)

میخوام بدونم کلیات روشم درسته؟
در مورد درستی یا نا درستیش من نظری ندارم اما بعید میدونم راه دیگه ای برای این کار باشه.(یعنی بدون ذخیره کردن یک مقدار!)؟

اگه برنامه ات دات نت هست که میتونی از همون روش استفاده کنی چون اگه اون دوستتون هکر هم که باشه به راحتی نمی میشه اون اطلاعات رو استخراج کرد چون به صورت بایت هست و کل برنامه هم به صورت بایته پس پیدا کردن چند بایت وسط این همه بایت سخته.(این نظر منه شاید درست هم نگفته باشم اما . . .)

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

vbhamed
شنبه 03 مهر 1389, 19:13 عصر
سلام

آخر فايل Exe خود برنامه هم جاي خوبي براي ذخيره كردنه چون اگر پاك بشه يعني طرف با دست خودش ديگه نذاشته برنامه اجرا بشه
بايد فايل رو به صورت باينري باز كنيد، شايد هم مجبور باشيد از يك نرم افزار واسطه براي اينكار استفاده كنيد، ضمنا اطلاعات رو كد شده بنويسيد
اين صورت كلي كار بود

اما اگر تاريخ براي نرم افزار يا استفاده كننده مهم نباشه به فرض اينكه برنامه شما بايد تا 20/7/89 كار كنه، طرف تاريخش رو ميزاره رو سال 80 و 9 سال استفاده مي كنه

به نظر من بهتره يك نسخه دمو درست كنيد كه كلا محدوديتهايي داشته باشه

ali190
شنبه 03 مهر 1389, 19:30 عصر
آخر فايل Exe خود برنامه هم جاي خوبي براي ذخيره كردنه چون اگر پاك بشه يعني طرف با دست خودش ديگه نذاشته برنامه اجرا بشه
آخر فايل Exe خود برنامه؟!
میشه یه مقدار بیشتر توضیح بدید
ممنون
یاعلی

Saman_12
جمعه 09 مهر 1389, 22:21 عصر
آخر فايل Exe خود برنامه هم جاي خوبي براي ذخيره كردنه چون اگر پاك بشه يعني طرف با دست خودش ديگه نذاشته برنامه اجرا بشه
بله من موافقم جای خوبیه اما طبق معمول افتاد مشکل ها!!
وقتی برنامه ران هست نمیشه تو اون نوشت حد اقل توی دات نت که اینجوریه و اگر نه همه کلاه هشون توی هوا بود..(خوند باید بشه اما نوشتن رو بعید میدونم.)


اما اگر تاريخ براي نرم افزار يا استفاده كننده مهم نباشه به فرض اينكه برنامه شما بايد تا 20/7/89 كار كنه، طرف تاريخش رو ميزاره رو سال 80 و 9 سال استفاده مي كنه

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

vbhamed
شنبه 10 مهر 1389, 13:57 عصر
آخر فايل Exe خود برنامه؟!
میشه یه مقدار بیشتر توضیح بدید
ممنون
یاعلی

سلام
بايد فايل رو به صورت باينري باز كنيد

نوشتن :
Dim x as byte
x = 10
Open "File.exe" for binary as #1
Seek #1, lof(1)
Put #1,,x
Close #1

خواندن :
Dim x as byte
Open "File.exe" for binary as #1
Seek #1, lof(1)-1
Get #1,,x
Close #1

Seek به موقعيت دلخواه در فايل مي ره كه فقط اولين بار در حالت نوشتن به آخر فايل (Seek #1,,Lof(1))مي ريم ولي دفعات بعدي بايد همون Seek #1,,Lof(1)-1 رو بنويسيد چون دفعه اول هنوز ته فايل چيزي نوشته نشده، البته براي راحتي مي تونيد خودتون آخر فايل Exe يك بايت بنويسيد بعد بدين مشتري

Get مي خونه و Put مي نويسه
Lof(1)-1 يعني 1 بايت از آخر كمتر

نوشتن و خواندن به صورت بايت به بايت انجام شده بنابراين متغير X از نوع بايت هست

براي نوشتن چندين بايت بايد يا چند متغير بايت يا يك آرايه بايت تعريف كنيد و ارقام تايمر رو تو تك تك عناصر آرايه قرار بدين

براي خوندن بايد از آخر فايل به اندازه طول آرايه عقب بريد و كل آرايه رو مي تونيد تو يك مرحله بنويسيد يا بخونيد


Dim X(10) as byte

x(0)=mid$(timer,1,1)
x(1)=mid$(timer,2,1)
x(2)=mid$(timer,3,1)
.
.
.
'دفعه اول كه برنامه اجرا ميشه اين دستور به شكل روبرو است Seek #1,Lof(1)
Seek #1,Lof(1) - ubound(x)
Put #1,,x
.
.
.
Seek #1,Lof(1) - ubound(x)
Get #1,,x


فقط در حال اجراي برنامه نمي تونيد، بايد از يك برنامه ديگر كه مي نويسيد اين كار رو كنيد و اون برنامه رو هنگام بستن برنامه اصلي فراخواني كنيد

vbhamed
شنبه 10 مهر 1389, 14:51 عصر
سلام
اينم يك نمونه طبق توضيحات بالا


Private Sub WriteTimeToExe(FileName As String, ProgramId As String)

On Error Resume Next

Dim x(100) As Byte, xtemp(100) As Byte, i&, s$, sTemp$

Open FileName For Binary As #1

Seek #1, LOF(1) - UBound(x)
Get #1, , xtemp

For i = 1 To UBound(xtemp)
If xtemp(i) <> 0 Then sTemp = sTemp & Chr$(xtemp(i))
Next

If Left$(sTemp, Len(ProgramId)) = ProgramId Then
Seek #1, LOF(1) - UBound(x)
Else
Seek #1, LOF(1)
End If

s = ProgramId
s = s & CStr(Now)

For i = 1 To Len(s)
x(i) = Asc(Mid$(s, i, 1))
Next

Put #1, , x
Close #1

End Sub


Private Function ReadTimeFromExe(FileName As String, ProgramId As String) As String

On Error Resume Next

Dim x(100) As Byte, xtemp(100) As Byte, i&, s$, sTemp$

Open FileName For Binary As #1

Seek #1, LOF(1) - UBound(x)
Get #1, , xtemp

For i = 1 To UBound(xtemp)
If xtemp(i) <> 0 Then sTemp = sTemp & Chr$(xtemp(i))
Next

If Left$(sTemp, Len(ProgramId)) = ProgramId Then
ReadTimeFromExe = Mid$(sTemp, Len(ProgramId) + 1)
End If

End Function


Private Sub Form_Load()

Dim d As Date, s$

'نوشتن تاريخ و ساعت در فايل
WriteTimeToExe "c:\project1.exe", "My Program Id"

'خواندن تاريخ و ساعت از فايل
s = ReadTimeFromExe("c:\project1.exe", "My Program Id")

If IsDate(s) Then
d = DateValue(s) & " " & TimeValue(s)
MsgBox d
Else
MsgBox "Time not saved in exe"
End If

End Sub


100 بايت آخر فايل Exe نوشته ميشه كه البته مي تونه بيشتر و كمتر بشه

My Program Id يك رشته شناسايي دلخواهه كه برنامه از اون براي فهميدن اينكه قبلا ساعت در فايل نوشته شده يا نه استفاده مي كنه، شما مي تونيد هر چيزه ديگه‌اي جاي اون بزاريد فقط طول اون به اضافه ساعت و تاريخ از 100 بايت بيشتر نشه

خروجي هم در نهايت به صورت يك متغير از نوع Date هست تا با توابع تاريخ بتونيد راحت به اجزاء ساعت و تاريخ ثبت شده دست يابيد

ali190
شنبه 10 مهر 1389, 19:17 عصر
سلام
اگر میشه راجع به "c:\project1.exe" توضیح دهید
چرا در این آدرس؟

vbhamed
دوشنبه 12 مهر 1389, 00:21 صبح
سلام

همينطوري ! شما به جاي اون آدرس فايل exe خودت رو بزار، البته در حال اجرا نباشه

ali190
دوشنبه 12 مهر 1389, 10:35 صبح
سلام

همينطوري ! شما به جاي اون آدرس فايل exe خودت رو بزار، البته در حال اجرا نباشه
سلام
من منظورتون رو دقیقاً متوجه نشدم!؟
منظور شما از آدرس بالا جاییست که اطلاعات درش ذخیره میشه؟
من الان آدرس c:\project1رو دادم
در حالیکه تو درایو c من هیچ project1 ای وجود ندارد
میشه دقیقاً بفرمائید که این آدرس برای چیه؟
ممنون
یاعلی

ali.rezaei7
دوشنبه 12 مهر 1389, 14:42 عصر
به نظر من نوشتن داده در فایل اجرایی برنامه راه درستی نیست.شاید به فایل آسیب برسونه یا شاید هم آنتی ویروس به دلیل دستکاری در فایل exe به عملکرد برنامه مشکوک بشه.
اگه از رجیستری یا فایل متنی استفاده کنیم بهتره. بعد تاریخو رمزنگاری می کنیم و داخل رجیستری یا فایل موردنظر یا هرجای دیگه ذخیره می کنیم.
اگر داده های ذخیره شده دستکاری شود به طور حتم به دلیل بهم ریختن قالب فایل "سازگار نبودن محتویات با الگوریتم رمزنگاری" برنامه غیر فعال می شود.
درصورتی هم که فایل یا هر چیز دیگه که داده ها داخل اون ذخیره شده، پاک شود برنامه غیرفعال می شود.

Zero Defect
دوشنبه 12 مهر 1389, 19:20 عصر
سلام vbhamed عزیز

مبحث برام یه مقدار جالب بود گفتم مطلبی بنویسم .

در این قطعه کد جای چند خط الزاما باید عوض بشه و گرنه کد عمل کنترلی خاصی رو انجام نمیده

Private Sub Form_Load()

Dim d As Date, s$

'نوشتن تاريخ و ساعت در فايل
WriteTimeToExe "c:\project1.exe", "My Program Id"

'خواندن تاريخ و ساعت از فايل
s = ReadTimeFromExe("c:\project1.exe", "My Program Id")

If IsDate(s) Then
d = DateValue(s) & " " & TimeValue(s)
MsgBox d
Else
MsgBox "Time not saved in exe"
End If

End Sub

دستور WriteTimeToExe باید بعد از ReadTimeFromExe باشه و به همون نسبت باید مابقی کد هم تغییر پیدا کنه

...............

روش مورد استفاده و پیشنهادی شما چیزی شبیه به همون Steganography هستش الزاما نیازی نیست فایل دوم یک فایل اجرایی باشه میتونه هر نوع فایل دیگه ای هم باشه


آخر فايل Exe خود برنامه هم جاي خوبي براي ذخيره كردنه چون اگر پاك بشه يعني طرف با دست خودش ديگه نذاشته برنامه اجرا بشه

اگر کاربر فایل اجرایی رو پاک و مجددا فایل اول رو نصب کنه این روش هم مغلوب میشه چون دیگه فایل جدید فاقد این اطلاعاته و سیستم کنترلی به عنوان فایلی که برای اولین بار داره اجرا میشه به اون نگاه میکنه

استفاده ترکیبی و ذخیره سازی در چند محل متفاوت راه حلی هست که کارآمدتره

ردیابی عملیات انجام شده بر روی فایلها توسط نرم افزارهای موجود کار سختی نیست


به نظر من بهتره يك نسخه دمو درست كنيد كه كلا محدوديتهايي داشته باشه

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




به نظر من نوشتن داده در فایل اجرایی برنامه راه درستی نیست.شاید به فایل آسیب برسونه یا شاید هم آنتی ویروس به دلیل دستکاری در فایل exe به عملکرد برنامه مشکوک بشه.

در این خصوص مشکلی پیش نمیاد


منظور شما از آدرس بالا جاییست که اطلاعات درش ذخیره میشه؟
من الان آدرس c:\project1رو دادم ....
( با اجازه vbhamed عزیز )
همون محل ذخیره سازی اطلاعاته
برای اینکه بهتر متوجه بشید داره چه اتفاقی میفته در داخل درایو C یک فایل متنی با Notepad ایجاد کنید . اسم اون رو Sample.txt قرار بدید
در قسمت مسیر هم C:\Sample.txt رو تعیین کنید
کدها رو اجرا کنید , حالا فایل تکست رو باز کنید و محتویاتش رو ببنید

......................................

به عقیده من , در مجموع روشی هستش که به تنهایی یه مقدار مشکل سازه

موفق باشید

vbhamed
سه شنبه 13 مهر 1389, 12:41 عصر
سلام vbhamed عزیز

مبحث برام یه مقدار جالب بود گفتم مطلبی بنویسم .

در این قطعه کد جای چند خط الزاما باید عوض بشه و گرنه کد عمل کنترلی خاصی رو انجام نمیده

Private Sub Form_Load()

Dim d As Date, s$

'نوشتن تاريخ و ساعت در فايل
WriteTimeToExe "c:\project1.exe", "My Program Id"

'خواندن تاريخ و ساعت از فايل
s = ReadTimeFromExe("c:\project1.exe", "My Program Id")

If IsDate(s) Then
d = DateValue(s) & " " & TimeValue(s)
MsgBox d
Else
MsgBox "Time not saved in exe"
End If

End Sub

دستور WriteTimeToExe باید بعد از ReadTimeFromExe باشه و به همون نسبت باید مابقی کد هم تغییر پیدا کنه

...............

روش مورد استفاده و پیشنهادی شما چیزی شبیه به همون Steganography هستش الزاما نیازی نیست فایل دوم یک فایل اجرایی باشه میتونه هر نوع فایل دیگه ای هم باشه

اگر کاربر فایل اجرایی رو پاک و مجددا فایل اول رو نصب کنه این روش هم مغلوب میشه چون دیگه فایل جدید فاقد این اطلاعاته و سیستم کنترلی به عنوان فایلی که برای اولین بار داره اجرا میشه به اون نگاه میکنه

ردیابی عملیات انجام شده بر روی فایلها توسط نرم افزارهای موجود کار سختی نیست



سلام

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

ضمنا ما نگفيتم حتما بايد فايل اجرايي باشه، هدف روش ذخيره سازي در فايل exe بود

مسلما تمهيداتي هم براي حالت نصب مجدد بايد در نظر گرفته بشه، مثلا فايل در محلي مثل پوشه ويندوز كپي بشه و موقع نصب عدم وجود اون و مقدار نوشته شده آخر فايل در نظر گرفته بشه، اما اينها كارهايي هست كه كاربر بايد خودش در نظر بگيره چون بازم هدف از اين پست آموزش روش ذخيره سازي در فايل exe بود

ممكنه رديابي كار سختي نباشه، اما مسلما سخت تر از يك فايل Ini يا رجيستري يا ديتابيس هست، مخصوصا اگر اطلاعات كد شده باشه و اجراي دفعات بعد نرم افزار رو مشروط به صحت اطلاعات دفعه قبل كرده باشين (مثلا چك كردن با Checksum)

Zero Defect
سه شنبه 13 مهر 1389, 17:47 عصر
سلام vbhamed عزیز


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

تاکید دارم که باید ترتیب این فراخوانی عوض باشه و دلیلی وجود داره که غیر قابل رد کردنه
این انتظار وجود داشت که وقتی به کدی ایرادی وارد میشه , اندکی با دقت بیشتر کد مجددا مورد بررسی قرار بگیره که آیا واقعا نقصی وجود نداره
هنوز هم مایل هستم که در خصوص این مشکل واضح ذهن شما و دیگر دوستان رو به چالش وادار کنم , اینطوری بهتره وگرنه معما چون حل شود آسان شود
البته یک توضیح هم بدم و اون اینکه عنوان موضوع باعث شده که این نقیصه به کد شما وارد بشه وگرنه اگر شما تنها منظورتون این بوده که :


كد بالا براي نمونه جهت آموزش استفاده اومده
ضمنا ما نگفيتم حتما بايد فايل اجرايي باشه، هدف روش ذخيره سازي در فايل exe بود

کد مشکلی نداره ولی در محدوده سئوال اصلی و موضوع مورد بحث فایده ای هم نداره !!!

تصور میکنم دوستان این روش رو برای چک کردن تاریخ مد نظرشون هست ( باز هم دقت کنید , این مورد به شما کمک میکنه که صد درصد چرا باید اول خوند و بعد نوشت )

البته در این خصوص یک فلوچارت گردش عملیات آماده کرده بودم که اون میتونست به طور کامل و واضح نقیصه رو توضیح بده ولی شاید فعلا به ارائه اون نیازی نباشه و مشکل توسط خود شما واکاوی بشه , چرا که مطمئن هستم با تسلطی که شما به موضوع دارید به قطع از زیر دست خارج شده


ممكنه رديابي كار سختي نباشه، اما مسلما سخت تر از يك فايل Ini يا رجيستري يا ديتابيس هست، مخصوصا اگر اطلاعات كد شده باشه و اجراي دفعات بعد نرم افزار رو مشروط به صحت اطلاعات دفعه قبل كرده باشين (مثلا چك كردن با Checksum)


هیچ تفاوتی نمیکنه , اصلا نوع فایل در اینجا مطرح نیست , چه ذخیره سازی در یک فایل اجرایی , چه در یک عکس و چه در هر آبجکتی دیگه ( البته منظورم عدم استفاده از این روش نیست )

ضمن اینکه :


اما مسلما سخت تر از يك فايل .... يا ديتابيس هست

این یکی که اگه قرار باشه از دیتا بیس استفاده هم بشه که دیگه امکان پذیر نیست ! لطفا این یک مورد رو دیگه قبل از اینکه حرف بنده رو رد کنید , بیشتر بررسی کنید , علت هم که مشخصه و در داخل کد هم واضحه

و در آخر , vbhamed عزیز

هدفم از این گفتگو تنها این بود که بشه به کمک شما اندکی به دوستان کمک کنیم ( من هم مثل شما تنها قصدم کمک کردن هستش و نه بحث و جدل ) چرا که گفتگو کردن با دوستی که تسلط زیادی داره بسیار مقبول تره تا دوستانی که بخوان فقط سئوال بپرسن , در این بین مابقی هم ذینفع خواهند شد و در این میان بنده هم مطلبی رو یاد خواهم گرفت و یا داشته های خودم رو بازنگری میکنم

در مجموع اگر احساس کنم ذره ای از این گفتگو ( که ممکنه گهگاهی به دخالت تعبیر بشه ) ناراحت شدید , الزامی در ادامه گفتگو نمیبینم

موفق باشید

vbhamed
سه شنبه 13 مهر 1389, 18:39 عصر
سلام
نه دوست عزيز، اصلا جاي ناراحتي نيست

فكر كنم شما كد رو خيلي پيچيده تعبير كردي

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

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

Zero Defect
سه شنبه 13 مهر 1389, 18:53 عصر
سلام


مسلما تو برنامه اصلي، ما اول برنامه فايل رو مي خونيم تا چك كنيم ببينيم بايد برنامه اجرا بشه يا نه

خوب منظور من هم همین بود

پس باید جای اون دو دستور عوض بشه چرا که در غیر اونصورت عملا الگوریتم قادر به شناسایی BackDate نیست ( همون هدفی که عنوان اصلی این تاپیک هم به دنبال اون بوده )

موفق باشید

ali682344
سه شنبه 13 مهر 1389, 19:39 عصر
سلام به همه دوستان
من قبلا یک تاپیک تقریبا در این مورد درست کردم .به نظر من قفل نرم افزاری فایده ای نداره
من پیشنهاد می کنم از قفل سخت افزاری استفاده بکنید

تا برنامه بدون اون اجرا نشه و برنامه هنگام شروع ،سخت افزار رو چک کنه و خیلی چیزای دیگه..
موفق باشید.

vbhamed
چهارشنبه 14 مهر 1389, 00:32 صبح
سلام

خوب منظور من هم همین بود

پس باید جای اون دو دستور عوض بشه چرا که در غیر اونصورت عملا الگوریتم قادر به شناسایی BackDate نیست ( همون هدفی که عنوان اصلی این تاپیک هم به دنبال اون بوده )

موفق باشید

سلام

نمي دونم شما چرا با اينكه 3 بار من گفتم باز هم به هدف آموزشي بودن كد توجه نكردين
ما تو فايل نوشتيم و بعد خونديم تا كاربر همون دفعه اول اجراي برنامه خروجي رو ببينه و برنامه بهش نگه ساعت و تاريخ در فايل ثبت نشده و مجبور نشه يكبار برنامه رو اجرا كنه تا ثبت بشه و دفعه بعد اجرا كنه تا ببينه

من كه نگفتم اين كد رو بزاريد اول برنامتون و تموم !

Zero Defect
چهارشنبه 14 مهر 1389, 06:33 صبح
سلام vbhamed

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

چند تا سئوال پرسیدم یکیش هم جواب داده نشد :


اما مسلما سخت تر از يك فايل .... يا ديتابيس هست

اطلاعات نباید در داخل یک فایل دیتابیس ذخیره بشه , چرا که در صورتی که در فایل دیتابیس قرار باشه اطلاعاتی ذخیره بشه ( که قاعدتا دیتابیس رو برای همین قرار میدن ) , اطلاعات نوشته شده در انتهای فایل پاک میشه


(مثلا چك كردن با Checksum)

دوست من , وقتی شما قرار باشه اطلاعات آخرین زمان اجرا رو مرتبا ذخیره کنید که , خود CRC هم که مرتبا تغییر پیدا میکنه , شما با CheckSUM چی رو میخواید چک کنید

در خصوص اینکه اول باید نوشته بشه و بعد باید خونده بشه , جالبه اول نمی پذیرید , بهد که کمی توضیح داده میشه میگید

مسلما تو برنامه اصلي، ما اول برنامه فايل رو مي خونيم تا چك كنيم ببينيم بايد برنامه اجرا بشه يا نه

بعد که من میگم کل داستان از اول هم همین بود شما دوباره میگید که موضوع آموزشی بوده و ....

من هم توی پست 18 گفته بودم که :


البته یک توضیح هم بدم و اون اینکه عنوان موضوع باعث شده که این نقیصه به کد شما وارد بشه وگرنه اگر شما تنها منظورتون این بوده که :
نقل قول:كد بالا براي نمونه جهت آموزش استفاده اومده
ضمنا ما نگفيتم حتما بايد فايل اجرايي باشه، هدف روش ذخيره سازي در فايل exe بود

کد مشکلی نداره ولی در محدوده سئوال اصلی و موضوع مورد بحث فایده ای هم نداره !!!

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

مجددا میگم همون کد آموزشیتون هم باید تغییر پیدا کنه , دستور نوشتن رو بیارید بین دستور If درج شده و بعد از پیغام Time not saved in exe

و در آخر , vbhamed عزیز
بخشی که دوستان سئوال پرسیدن یه مقدار با مابقی مباحث متفاوته , ممکنه با معیشت طرف در ارتباط باشه
اگه راه حلی لااقل در این بخشها ارائه میشه حداقل یه مقدار جنبه انتقاد پذیریمون رو بیشتر کنیم تا شاید توی این مسیر هم خودمون چیزی یاد بگیریم و هم به خلق ا.... که یه مقدار اطلاعاتشون توی بعضی بخشاه کمتره اطلاعاتی ناقص و بدون ریزه کاری ندیم که فردا روز دچار مشکل بشه

بنده توی چند تا پست قبلیم تمامی موارد رو نوشتم , پس قبل از اینکه بخواید ایرادی بگیرید تمامی اونها رو مطالعه بفرمایید تا احیانا مجبور نشم شما رو به مطلبی که قبلا نوشتم ارجاع بدم

لطفا اگر احیانا این بار خواستید جوابیه ارسال کنید , جواب سئوالاتی که مطرح شده رو هم درج بفرمایید تا لااقل کاربرها متوجه بشن که نقائص وارد هست و یا نه ( توی همین تاپیک هم دو سئوال مجددا تکرار شد ) اینجوری شامل حال سکوت نشانه رضایته خواهد شد ( البته پاسخ برای بنده مشخصه , برای دیگران عرض میکنم )

و در آخر vbhamed عزیز :

چرچیل : بزرگترین درس زندگی این است که گاهی احمق ها نیز درست می گویند

در مجموع موفق باشید

vbhamed
چهارشنبه 14 مهر 1389, 09:32 صبح
چند تا سئوال پرسیدم یکیش هم جواب داده نشد :

اطلاعات نباید در داخل یک فایل دیتابیس ذخیره بشه , چرا که در صورتی که در فایل دیتابیس قرار باشه اطلاعاتی ذخیره بشه ( که قاعدتا دیتابیس رو برای همین قرار میدن ) , اطلاعات نوشته شده در انتهای فایل پاک میشه
متوجه نشدم منظورتون دقيقا چيه، ديتابيس چه ربطي به انتهاي فايل ما داره، ما اگر قرار باشه تو ديتابيس چيزي بنويسيم به روش معمول مي نويسيم نه انتهاي اون


دوست من , وقتی شما قرار باشه اطلاعات آخرین زمان اجرا رو مرتبا ذخیره کنید که , خود CRC هم که مرتبا تغییر پیدا میکنه , شما با CheckSUM چی رو میخواید چک کنید
شما ماشا ا... چقدر زود قضاوت مي كنيد خب كمي هم فكر كنيد ببينيد اين ايرادي كه گرفتين به نظر خود شخص پاسخ دهنده نمي رسيد ؟
مثلا قراره ما 100 بايت آخر فايل بنويسيم، بر اساس اين 100 بايت هر دفعه يك Checksum چهار بايتي توليد مي كنيم و اون رو قبل يا بعد از اين 100 بايت مي نويسيم
موقع خوندن هم وقتي 104 بايت خونده شد اول Checksum رو چك مي كنيم كه مربوط به همين
100 بايت باشه، اينطوري مي فهميم كسي از بيرون 104 بايت ما رو تغيير نداده


در خصوص اینکه اول باید نوشته بشه و بعد باید خونده بشه , جالبه اول نمی پذیرید , بعد که کمی توضیح داده میشه میگید
بعد که من میگم کل داستان از اول هم همین بود شما دوباره میگید که موضوع آموزشی بوده و منظور من از دفعه اول اين بود كه كدي كه نوشته شده بدون تغيير هم كار مي كنه چون شما گفته بوديد اين كد اگر تغيير مورد نظر شما بهش داده نشه هيچ عكس العملي نداره

اما دفعه دوم هدف از ارسال اين كد گفته شد كه آموزش نوشتن در فايل Exe بوده نه راهي براي محدود شدن اجراي برنامه (موضوع تاپيك)

اما جالبه كه شما اصلا نمي خواين به اين موضوع خيلي خيلي مهم توجه كنيد
باز هم مي گم، من به سؤال كننده محترم نگفتم اين كد رو بزارين اول برنامه و تموم ديگه برنامتون درست شده كه بنده خدا بخواد زندگيش تباه بشه و از معيشت بيفته !!! ضمنا معيشت دست خداست


من هم توی پست 18 گفته بودم که :
پس دو حالت بیشتر نیست یا کد صرفا آموزشی هست و نه کاملا در راستای خواسته ( که با وضعیت کنونی ظاهرا همین حالت مد نظر شما بوده ) یا نه در راستای خود سئواله
اگر در راستای سئوال هستش , کد اشتباهه
به جواب قبلي مراجعه شود
ضمنا كاربر سؤال كننده مورد نظر مطمئنا مي دونه كه از كد كجا و چطور استفاده كنه و متوجه آموزشي بودن اون هم شده


مجددا میگم همون کد آموزشیتون هم باید تغییر پیدا کنه , دستور نوشتن رو بیارید بین دستور If درج شده و بعد از پیغام Time not saved in exe
من ديگه نمي دونم چطوري توضيح بدم !!!


و در آخر vbhamed عزیز :
چرچیل : بزرگترین درس زندگی این است که گاهی احمق ها نیز درست می گویند
ببينيد، شخصي سؤالي كرده و من هم پاسخي به اون دادم، بهتر بود شما هم راه حل بهتر خودتون كه مشكلات پاسخ دهندگان قبلي رو نداشته باشه ميزاشتين تا از اينهمه بحث بي فايده هم جلوگيري بشه و ما هم استفاده كنيم

ضمنا ممكنه چرچيل در كل درست بگه اما بزرگترين درس زندگي مطمئنا اين نمي تونه باشه
ولي منظور شما رو از آوردن اين جمله و ربطش به بحث چيه ؟

حضرت علي (ع) : كسي كه به آبروي خود علاقمند است بايد بحثهاي لجاجت آميز با مردم را ترك كند