ورود

View Full Version : سوال: چطوری می شه سورس کد برنامه رو در حین اجرا عوض کرد



Alireza Pro
پنج شنبه 09 شهریور 1391, 10:27 صبح
سلام:متفکر:

من یه سوال داشتم

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

سورس دکمه ی دیگه عوض بشه :اشتباه:

مثلا

این دکمه ی اول من:متفکر:


Private Sub Command1_Click()
Print "salam"
End Sub

ولی وقتی می خوام روی دکمه ی دوم کلیک کنم
وظیفه دکمه ی اول عوض شه به طوری که هیچ رابطه ی ای با وظیفه ی قبلیش نداشته باشه

مثلا:متفکر:

Private Sub Command1_Click()
MsgBox ("khubi?")
End Sub

این کد رو من نیاز دارم


Private Sub Command2_Click()
؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
End Sub



ممنون از کمکتون:تشویق:

m.4.r.m
پنج شنبه 09 شهریور 1391, 10:42 صبح
Private Sub Command1_Click()
MsgBox "salam"
Command1.Visible = False
Command2.Visible = True
End Sub

Private Sub Command2_Click()
MsgBox "Khobi"
End Sub

Private Sub Form_Load()
Command2.Visible = False
End Sub

Alireza Pro
پنج شنبه 09 شهریور 1391, 10:47 صبح
نه این طوری معلم ما اصولا به این کارا می گه
کلک رشتی
نه باید برنامه طوری دیگه سورس اون بنده خدا رو عوض کنه

arenaw
پنج شنبه 09 شهریور 1391, 10:56 صبح
شما میتونی یه متغیر از نوع Boolean تو قسمت جنرال تعریف کنی:

Dim b as boolean

بعد تو کدهای کامند یک بنویسی:

If b = True Then
Print "Salam"
Else
MsgBox "Salam"
End If

و توی کامند 2 هم بنویسی :

b = Not b

اگه متوجه نشدی توضیح بدم؟

Veteran
پنج شنبه 09 شهریور 1391, 10:57 صبح
Dim i As Integer
Private Sub Command1_Click()
Select Case i
Case 0
Print "salam"
Case 1
MsgBox ("khubi?")
End Select
End Sub
Private Sub Command2_Click()
i = 1
Command1_Click
End Sub

Alireza Pro
پنج شنبه 09 شهریور 1391, 10:58 صبح
خب درست این کار می کنه ولی مسئول پروژه قبولش نداره می گه نباید از این راها استفاده کنید

باید کلا سورس اون جا نوشته بشه !!

نمی دونم خودم یه چیزی مثله همین بهش نشون دادم ولی قبول نکرد می گه باید خود سورس عوض بشه

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

Private Sub Command1_Click()
MsgBox ("khubi?")
End Sub

SlowCode
پنج شنبه 09 شهریور 1391, 11:10 صبح
من فكر ميكنم كه مسئول پروژتون از برنامه نويسي هيچي حاليش نيست، چون كد رو بعد از كامپايل برنامه نميشه ويرايش كرد(مگر اينكه مثل برنامه هايي مثل ollydbg تبديل به اسمبلي بشه بعد ...:کف:)
شما همين چيزا رو بهش توضيح بده شايد بفهمه، تنها راه حل براي شما هم همونيه كه دوستان گفتن.

m.4.r.m
پنج شنبه 09 شهریور 1391, 11:13 صبح
Dim i As Integer
Private Sub Command1_Click()
Select Case i
Case 0
Print "salam"
Case 1
MsgBox ("khubi?")
End Select
End Sub
Private Sub Command2_Click()
i = 1
Command1_Click
End Sub



اینو معلمتون گفته ؟ خوب اگه معلمتون گفته معلومه هیچی بارش نیست تو همین کد رو اجرا کن ببین با کدی که تو زدی چه فرقی داره ؟
Private Sub Command1_Click()

Print "salam"

End Sub
Private Sub Command2_Click()
MsgBox ("khubi?")
End Sub

Alireza Pro
پنج شنبه 09 شهریور 1391, 11:14 صبح
ببینید این متنیه که الان برام ایمیل کرده

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

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

Alireza Pro
پنج شنبه 09 شهریور 1391, 11:19 صبح
اینو معلمتون گفته ؟ خوب اگه معلمتون گفته معلومه هیچی بارش نیست تو همین کد رو اجرا کن ببین با کدی که تو زدی چه فرقی داره ؟
Private Sub Command1_Click()

Print "salam"

End Sub
Private Sub Command2_Click()
MsgBox ("khubi?")
End Sub



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

که وقتی فرم لودینگ داره اجرا می شه سورس فرم اصلی نوشته بشه :اشتباه:

arenaw
پنج شنبه 09 شهریور 1391, 11:22 صبح
ببینید این متنیه که الان برام ایمیل کرده

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

بعدشم بهم گفت همین که داری روش فکر می کنی و جدی گرفتیش برام بسه دو سوم نمره رو بهت میدم بقیه نمره هم وقتی برنامه رو تونستی تکمیل کنی
ببین شما توی ویژوال بیسیک وقتی کدها رو مینویسی، موقع اجرا اون کدها تبدیل به یه سری بایت میشن که واسه ویندوز قابل فهمه و ما چیزی ازش نمیفهمیم.
اگه شما بخواید در حال اجرا کدها رو تغییر بدید با باید از کامپایلر ویبی سر در بیارید یا از Microsoft Scripting Runtime استفاده کنید که فکر نمیکنم معلمتون از شما انتظار داشته باشه...
شما باید مثل اون روشی که من گفتم یا دوستان گفتن، اون کدهای مختلفی که قراره اجرا بشن رو توی دکمه بزاری و فقط بهش بگی تو چه موقعی، کدوم یکی از اون کدها اجرا بشن

Alireza Pro
پنج شنبه 09 شهریور 1391, 11:33 صبح
اصل سوال اینه دوستان


برنامه ای بنویسید که :

1. دارای 2 فرم باشد ( فرم 1 و فرم 2 )

2. در فرم دو حق نوشتن چیزی ندارید ( فقط یه دکمه دارید )

3. در فرم یک تنها دارای یک تکست باکس و یک دکمه هستید

4. طوری برنامه نویسی کنید که این توانایی را داشته باشد :

سه دستور به شما داده می شود ( هر نوع دستوری ) و شما آن را در تکست باکس خود می نویسید و بعد از کلیک بر روی دکمه ی فرم 1 هنگامی که به فرم 2 می رویم و بر روی دکمه ی فرم 2 کلیک می کنیم دستوره فوق اجرا شود

تذکر : برنامه های خود را open سورس در اختیاره معلم قرار دهید تا از بعضی سود جویی ها جلو گیری شود

Alireza Pro
پنج شنبه 09 شهریور 1391, 11:39 صبح
Microsoft Scripting Runtime
این چی هست دقیقا با ویبی در ارتباطه یعنی اگه با اون کار کنم برنامه ی وی بی عوض می شه

Alireza Pro
پنج شنبه 09 شهریور 1391, 11:42 صبح
این اطلاعات دستم اومد





نرم افزار كامپايلر قدرتمند بيسيك VB Decompiler Pro v7.9 Portable
VB Decompiler Pro v7.9 نرم افزاری است قدرتمند که قادر به برگرداندن سورس برنامه های(Exe,Dll,Ocx) نوشته شده با ویژوال بیسیک 5.0 و 6.0 است و نیز برنامه های نوشته شده با دات نت(.NET). همانطور که می دانید ، برنامه ها در ویژوال بیسیک را می توان به P-code یا زبان ماشین کمپایل نمود. اسبلی دات نت همیشه تنها در مفسر ایل کد(IL code) کمپایل می شود.
مشخصات کلیدی VB Decompiler Pro v7.7 :
- بازگردانی برنامه های کاربردی فشرده شده با استانداردهای جهانی(پشتیبانی از UPX، NSPack و اغلب فشرده سازهای فایل EXE محبوب)
- بازگردانی فرم های کامپایل شده (frm وfrx) وفایل آبجکت های کنترل کاربر(ctl)
- بازگردانی کامل P-code (با تجزیه پی کدها به دستورالعمل های استاندارد ویژوال بیسیک با ابزار GUID بازگردانی)
- دو روش بازگردانی سورس P-codeها (با بازگردانی کتابخانه ای یا بدون بازگردانی کتابخانه ای)
- جداسازی قطعات روال زبان ماشین (با قدرت جداسازی Pentium Pro، پشتیبانی آموزشی از MMX وFPU)
- جداسازی کد روالهای زبان ماشین با منابع رشته ای و فراخوانی API ها
- بازگردانی جزئی سورس(با استفاده از موتور شبیه سازی)
- ترکیب و رنگ آمیزی کدهای بازگردانی شده
- لیست مرجع رشته ها و موتور جستجو
- سرعت بالای بازگردانی سورس
- دارای Obfuscator جهت برنامه های ویژوال بیسیک 5و6
- دارای Patcher برای برنامه های ویژوال بیسیک 5و6
- ذخیره اطلاعات بازیافتی در فایل DB مجزا
- بازیابی برنامه های دات نت
- ذخیره لیست پروسه ها در MAP فایل، فایل IDC جهت اسکریپت یا HIEW فایل برای نامها

SlowCode
پنج شنبه 09 شهریور 1391, 11:46 صبح
خوب عزيز من اينو از اول ميگفتي ديگه، الان مسئله خيلي عوض شد، بله اين كامپوننت قابليت اجراي دستورات رو داره ولي يكم محدوده. اين كنترل رو به فرمت اضافه كن بعد اينطوري بنويس:
ScriptControl1.ExecuteStatement (text1)
الان بازهم كد ما ثابته و با اون چيزي كه اول گفتي فرق داره. در ضمن ما نگفتيم از اين برنامه استفاده كن گفتيم اگه همچين چيزي ميخواي بايد يه برنامه شبيه اينو بسازي:گیج:

Alireza Pro
پنج شنبه 09 شهریور 1391, 11:55 صبح
خوب عزيز من اينو از اول ميگفتي ديگه، الان مسئله خيلي عوض شد، بله اين كامپوننت قابليت اجراي دستورات رو داره ولي يكم محدوده. اين كنترل رو به فرمت اضافه كن بعد اينطوري بنويس:
ScriptControl1.ExecuteStatement (text1)
الان بازهم كد ما ثابته و با اون چيزي كه اول گفتي فرق داره. در ضمن ما نگفتيم از اين برنامه استفاده كن گفتيم اگه همچين چيزي ميخواي بايد يه برنامه شبيه اينو بسازي:گیج:


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

من اون اطلاعات رو از یه سرچ ساده بدست آوردم می شه به طوره کامل برام از اول که چطوری کار کنم با این کد توضیح بدید

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

SlowCode
پنج شنبه 09 شهریور 1391, 12:14 عصر
Ctrl + T رو بزن بعد تيك Microsoft Script control 1.0 رو بزار و OK.
حالا تو ميخواي توي يه تكست باكس يه دستوري تايپ بشه و با كليك command1‌اون دستور اجرا بشه درسته؟ اينو توي command بنويس:
Private Sub Command1_Click()
ScriptControl1.ExecuteStatement (text1)
End Sub

SlowCode
پنج شنبه 09 شهریور 1391, 12:17 عصر
اينم كد كل برنامت:
كد فرم1:

Private Sub Command1_Click()
Form2.show 1
End Sub
كد فرم 2:
Private Sub Command1_Click()
ScriptControl1.ExecuteStatement (Form1.Text1.Text)
End Sub
كنترل ScriptControl رو فقط به فرم 2 اضافه كن.

Alireza Pro
پنج شنبه 09 شهریور 1391, 12:30 عصر
درست ولی من هر چی سرچ می کنم این Microsoft Scripting Runtimeرو برای دانلود پیدا نمی کنم ولی وقتی پیداش کردم برگمی گردم
دوستان کسی اگه لینک دانلودشو داشت لطفشو از من دریغ نکنه لینکو بزاره این جا

SlowCode
پنج شنبه 09 شهریور 1391, 12:47 عصر
ببخشيد اسم كامپوننت رو اشتباه نوشتم، اسمش Microsoft Script control 1.0 هست، اوني كه من نوشتم reference بود.

Alireza Pro
پنج شنبه 09 شهریور 1391, 12:54 عصر
نمی دونم چطوری ازتون تشکر کنم


ولی این کاره شما باعث شد من نمره ی کامل رو بگیرم
واقعا دمتون گرم ( همه ی دوستان )

فروم فوق العاده زیباییه و اعضایی هم که داره دیگه آدم چی می خواد دیگه

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

Veteran
پنج شنبه 09 شهریور 1391, 13:34 عصر
اینو معلمتون گفته ؟ خوب اگه معلمتون گفته معلومه هیچی بارش نیست تو همین کد رو اجرا کن ببین با کدی که تو زدی چه فرقی داره ؟
Private Sub Command1_Click()

Print "salam"

End Sub
Private Sub Command2_Click()
MsgBox ("khubi?")
End Sub

دوست عزیز شما همه رو مثل خودتون میبینید ؟ کی گفته من معلم دارم ؟؟؟
من 24 سالمه معلم کجا بود ؟/
شما اومدی 2 تا کد رو در 2 کامند باتن گذاشتین.
در صورتی که جناب علی رضا این رو نخواسته بودن.
میخواد بر روی کامند باتن 2 که کلیک شد کد کامند باتن 1 عوض بشه و کد جدید پردازش باشه.حالا شما به کد خودتون نگاه کنید ببینیند این کارو انجام میده ؟؟؟؟
توجه به سوال کنید


مثلا
این دکمه ی اول من:متفکر:
Private Sub Command1_Click()
Print "salam"
End Sub




ولی وقتی می خوام روی دکمه ی دوم کلیک کنم
وظیفه دکمه ی اول عوض شه به طوری که هیچ رابطه ی ای با وظیفه ی قبلیش نداشته باشه

مثلا:متفکر:

Private Sub Command1_Click()
MsgBox ("khubi?")
End Sub


Private Sub Command2_Click()
؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
End Sub


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

Alireza Pro
پنج شنبه 09 شهریور 1391, 14:46 عصر
درسته کد شما ولی مسئوله پروژه های من می گه این کار کلک رشتیه

درسته راه حل شما متین

ولی این راهی که بالا گفته شد فوق العاده هست

m.4.r.m
پنج شنبه 09 شهریور 1391, 15:15 عصر
دوست عزیز شما همه رو مثل خودتون میبینید ؟ کی گفته من معلم دارم ؟؟؟
من 24 سالمه معلم کجا بود ؟/
شما اومدی 2 تا کد رو در 2 کامند باتن گذاشتین.
در صورتی که جناب علی رضا این رو نخواسته بودن.
میخواد بر روی کامند باتن 2 که کلیک شد کد کامند باتن 1 عوض بشه و کد جدید پردازش باشه.حالا شما به کد خودتون نگاه کنید ببینیند این کارو انجام میده ؟؟؟؟
توجه به سوال کنید
Private Sub Command1_Click()
Print "salam"
End Sub



Private Sub Command1_Click()
MsgBox ("khubi?")
End Sub


Private Sub Command2_Click()
؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
End Sub


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

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

SlowCode
پنج شنبه 09 شهریور 1391, 15:35 عصر
ای بابا باز هم دعوا شد، آقای m.4.r.m شما توی پست 8 اشتباها پست Veteran رو نقل قول کردین و گفتین :"اینو معلمتون گفته ؟"، ایشون هم بهش برخورده. همش یه اشتباه کلیکی بوده آقای veteran به دل نگیر. m.4.r.m جان این اکانتت رو هم حذف میکننا! یکم آروم باش:گیج:

Alireza Pro
پنج شنبه 09 شهریور 1391, 15:42 عصر
ببخشید یه سوال توی یه فرومی مثل این جا می پرسم ولی مگه اینجا اکانت هم حذف می کنن

مگه تراوینه بخاطره هک سرور حذفت کنن :لبخند:

miniator
پنج شنبه 09 شهریور 1391, 17:07 عصر
اين قد دادو فرياد نكنيد ! فكر نكنم بشه متن برنامه نوشته شده رو تغيير داد ! يا اگرم بشه خيلي سطح پيشرفته اي داره كه مطمناً معلم شما همچين چيزي نميخواد از شما ! يه راه ساده براي اجراي چنيدن كدهاي استفاده از ريجستري هست ! زياد هم سخت نيست
فقط كافي 2 بار برنامكه مختلف رو بنويسيد و با بولين ساده دستورات رو تغيير بديد .

setroyd
پنج شنبه 09 شهریور 1391, 18:02 عصر
برای عوض کردن نمیشه فایل رو خوند چون کامپایل شده تانها راه شما خوندن حافظه و تغییر ان هست فکر نکنم حرفه ای تر از این بشه کاری کرد !!!!!!!!!!!!!!!!!!!!!!!! یا اینکه بیای فایل رو بینری باز کنی و یک قسمت رو بخونی و عوض کنی و بعد دوباره کامپایل کنیش دستی این 2 راه هست معلم شما امکان داره چیزی به این حرفه ای خواسته باشه پس همون کاری که دوستان گفتند بکنید .

Alireza Pro
پنج شنبه 09 شهریور 1391, 18:24 عصر
اين قد دادو فرياد نكنيد ! فكر نكنم بشه متن برنامه نوشته شده رو تغيير داد ! يا اگرم بشه خيلي سطح پيشرفته اي داره كه مطمناً معلم شما همچين چيزي نميخواد از شما ! يه راه ساده براي اجراي چنيدن كدهاي استفاده از ريجستري هست ! زياد هم سخت نيست
فقط كافي 2 بار برنامكه مختلف رو بنويسيد و با بولين ساده دستورات رو تغيير بديد .


نه من منظورمو بد فهموندم اصل سوال بالا تر حل شد:قلب:

setroyd
پنج شنبه 09 شهریور 1391, 18:45 عصر
Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function WriteString Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WriteValue Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As Long

Private Sub Command1_Click()
Dim str As String, MyString As String
MyString = "HELLO"
'in this case I read the memory of my own process
MsgBox "MyString= " & MyString

str = ReadMemory(Me.hWnd, StrPtr(MyString), LenB(MyString), "BYE!!")

MsgBox "Now, MyString=" & MyString & vbCr & "Old Value= " & str

End Sub
Private Function ReadMemory(hWnd As Long, Address As Long, Bytes As Long, Optional strReplaceWith As String) As String
'Runs For Not Unicode Strings (VB-Strings)
On Error Resume Next
Dim pId As Long ' Used to hold the Process Id
Dim pHandle As Long ' Holds the Process Handle
Dim bytValue As Long 'Stores the value of a byte in the memory
Dim i As Long
Dim Text As String

' Get the ProcId of the Window
GetWindowThreadProcessId hWnd, pId

' use the pId to get a handle
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pId)

If (pHandle = 0) Then
'MsgBox "Unable to open process!"
Exit Function
End If
If Address = 0 Then Exit Function

For i = 1 To Bytes Step 2
' Read Byte to Byte
ReadProcessMemory pHandle, Address + i - 1, bytValue, 1, 0&
'value now contains the long value of the byte located in [Address + i - 1] pos.
'ReadMemory is a string...

ReadMemory = ReadMemory & Chr$(bytValue)
Next
'to write numeric values you can ..(Must) use WriteValue API
If LenB(strReplaceWith) <> 0 Then
'No Unicode!!
WriteString pHandle, Address, StrPtr(strReplaceWith), LenB(strReplaceWith), 0&
End If
'Close the Handle
CloseHandle pHandle
End Function

اینم کد برای خوندن مموری و write کردن رو ان .