Thursday, August 4, 2011

ცოტა რამ VB6-ის შესახებ

გამარჯობა ! ეს არის VB სტატია. მე ლუკა იგივე ameba წარმოგიდგენთ რამოდენიმე VB ს გაკვეთილს რომ გაეცნოთ ამ პროგრამირების ენას. მე არ ვაპირებ სხვა პროგრამისტების, ჰაკერების , კრეკერების, და ბებიაჩემის მსგავსად აღვწერო VB თეორიულად ისე რომ ახალმა შემოსულმა ვერაფერი ვერ გაიგოს და გაბრუებული გავიდეს აქედან "რა მაგარი და ძნელი რამეა" -ს ძახილით. Private აღვწერ რაც შეიძლება მარტივად და ბავშვისთვის გასაგებ ენაზე.

პირველ რიგში რა არის პროგრამირების ენა ?
პასუხი : ეს არის საშუალება კომპიუტერმა გაიგოს მომხმარებლის ანუ თქვენი ბძანებები, შეასრულოს და გაუგზავნოს ფზიკურ მოწყობილებებს მაგალითად cd_s ან მონიტორს.
სულ თეორია ძნელია ამიტომ ასეთ პატარა მაგალითებს მოვიყვან ხოლმე . მოკლედ პროგრამირების ენა ანუ კომპიუტერთან კავშირის საშუალება. ასეთი ენაა VB.
VB პროგრამირების ენაში ბრძანებების ჩაწერით , კომპიუტერი დაიგებს რას მოვითხოვთ მისგან. მაგალითად ალბათ გაგიგიათ 01010110100 ასეთი რამე. ეს ყველაზე დაბალი დონეა კომპიუტერთან ურთიერთობისთვის იმიტომ რომ ამ ენაზე ხდება კომპიუტერის მუშაობისთვის წყვეტების გადაცემა. VB შედარებით მაღალი დონეა ანუ დაშორებულიაკომპიუტერულ ენას და გამარტივებულად 0101_ს მაგივრად ჩვენ უკვე ვწერთ ინგლისური სიტყვებით ბრძანებეს, VB ს გადაყავს ეს ბრძანებები კომპიუტერულ ენაზე და ა.შ.
ალბათ ძირითადი გაიგეთ. ეხლა შევუდგეთ VB შესწავლას უარტივესიდან. VB ს გაშვებისას ვქმნით ახალ project standart EXE ს და ფორმაზე ორჯერ დაწკაპუნებით ვხედავთ ფორმის კოდს. :


პროგრამული კოდი
Private Sub Form_load()


End Sub



ეს რას ნიშნავს. form_load ინგლისურად იგივეა "ფორმა ლოადი" "ფორმა ჩატვირთვა" ანუ exe ფაილს გაშვებისას ის ბრძანებები რომლებიც sub form_load() _სა და end sub შორის ჩაწერილი კოდი იმ წამსვე შესრულდება. მაგალითად ბრძანება msgbox ნიშნავს რომ გამოაგდოს ფანჯარა OK ღილაკით . თუ ჩვენ ამ ბრძანებას მათ შორის ჩავწერთ , exe ფაილის გაშვებისთანავე გამოვარდება შემდეგი ფანჯარა :


პროგრამული კოდი
Private Sub Form_load()
msgbox "hello"
End Sub



ტექსტი hello ალბათ მიხვდით რომ msgbox_ს შემდეგ ეწერა და ამიტომ გამოვიდა ეკრანზე. მაგრამ არსებობს (ალბათ გაგიგიათ variable) ცვლადი. თუ არ გაგიგიათ მათემატიკიდან მაინც გეცოდინებათ ცვლადი არის ინფორმაციის შემცველი "რაღაც " და ცვლადი იმიტომ ქვია რომ მისი მნიშვნელოდა შეიძლება შეიცვალოს. VB ში ცვლადი რომ შემოვიტსანოთ გვჭირდება ბრძანება DIM. მაგალითად კოდი :


პროგრამული კოდი
Private Sub form_load()
dim Var
var = "hello"
msgbox var
end sub



იმედია მიხვდით ეს ტექსტი რას შვება. პირველი ხაზი ანუ DIM შემოაქვს ცვლადი სახელით VAR . ანუ რო იცოდეს კომპმა VAR არსებობს . მეორე ხაზი ამ ცვლადს უტოლებს hello_ს .. ანუ VAR იგივე ხდება რაც hello. შემდეგ ტექსტში კი უნდა გამოვიდეს ეკრანზე var, მაგრამ ვარ ბრყალებში არ არის ჩასმული , ე.ი. ეს არის ცვლადი და ეკრანზე სიტყვა "var"_ის მაგივრად უნდა გამოვიდეს var_ში რაც წერია ის ტექსტი. ასე გებულობს ცვლადს ეს კოდი. რატომ შეიძლება დაგვჭირდეს ეს ცვლადი? რატომ და წარმოიდგინეთ რომ პროგრამამ სამჯერ უნდა გამოიტანოს ეკრანზე ერთი და იგივე ტექსტი , ოღონდ "hello"_ს მაგივრად ძალიან გრძელი ტექსტი. მაშინ მოგვიწევს სამივეჯერ თავიდან დაწერა ამ ტექსტის :(Private Sub form_load() _ს აღარ დავუწერ ხოლმე და თქვენ იგულისხმეთ რომ ყველა კოდს უწერია wink.gif )



პროგრამული კოდი
msgbox "grdzeli teqsti var chemi..."
msgbox "grZeli teqsti var chemi..."
msgbox "grdZeli teqsti var chemi..."



ამ წვალების მაგივრად შეგვიძლია მარტივად ასე ჩავწეროთ:(VAR ის მაგივრად შეგიძლიად შემოიტანოთ ცვლადი სხვა სახელითაც მაგალითად far, guja,gamarjoba და ა.შ.)

პროგრამული კოდი
dim Var
var = "grdzeli teqsti var chemi..."
msgbox var
msgbox var
msgbox var



ცვლადი ასევე ხელსაყრელია თუ მისი შეცვლა გვინდა მაგალითად როცა იგი არის რიცხვი მასზე შეიძლება არითმეტიკული მოქმედებებიც. მაგალითად ასე :


პროგრამული კოდი
dim ku
ku = 5
ku = ku +1
msgbox ku



ეს კოდი გამოგვიგდებს 6_ს რადგან ჯერ 5 მივანიჭეთ ცვლად ku_ს და შემდეგ ku_ს მივანიჭეთ ku + 1 ანუ 5 + 1 ანუ 6. შედეგად გამოვიდა ეკრანზეც 6. ამ კოდის იდენტური (იგივე) კოდებია:


პროგრამული კოდი
dim ku, var
ku = 5
var = ku +1
msgbox var




ბოლო კოდში ყველაფერი გასაგებია თქვენთვის თან პირველად ნახეთ კოდშI 2 ცვლადის შემოტანის გზა. გაითვალისწინეთ რომ ცვლადებს შეგვიძლია მივანიჭოთ faili ან ფოლდერი შედეგ კი წავშალოთ შევქმნათ დავაკოპიროთ და ა.შ. ანუ ყველაზე საჭირო და ელემენტარულ (თქვენთვის საინტერესო ) მეთოდზე "ფაილებთან მუშაობა"

ანუ პრაქტიკულად როგორ გამოვიყენოთ VB ფაილებისთვის. ცვლადს შეიძძლება მივანიჭოთ ფაილიც და ტექსტიც რიცხვიც . დავიწყოთ პირველი მაგალითი იქნება შემდეგი. მივანიჭოთ ცვლადს კალკულატორი "c:\windows\calc.exe" და დავაკოპიროთ ან წავშალოთ . აქ შემოდის ერთი ობჯეცტი და ნუ დაგაბნევთ შეგიძლიათ უბრალოდ დაიზეპიროთ რომ ფაილებთან მუშაობისთვის აუცილებელია FSO ანუ (File System Object) ამ ობჯეცტით VB ხვდება რომ თქვენ ცვლადს მიანიჭეთ არა ტექსტი "c:\windows\system32\calc.exe" , არამედ თვითონ ეგ ფაილი calc.exe მიხვდით ხომ ?
მაგალითი :



პროგრამული კოდი
Private Sub Form_load()
Dim calc, fso
Set fso = CreateObject("Scripting.FileSystemObject")
calc = fso.getfile("C:\WINDOWS\system32\calc.exe")
calc.Copy ("c:\Folder\cuculatori.exe")
End
End Sub



არ არის ხო ძნელი ? ეხლა აგიხსნით
.

Dim calc, fso
ეს ხაზი VB ს ეუბნება რომ 2 ცვლადი შემოვიტანეთ.

Set fso = CreateObject("Scripting.FileSystemObject") ეს ხაზი fso ს აღწერს როგორც ობიექტად. ობიექტები კი არიან კკონკრეტულ რამესთან სამუშაო "რაღაცეები" . ანუ fso იყო ჩვეულებრივი ცვლადი და ეხლა გახდა ამ კონკრეტულ მაგალითში ფაილებთან ამუშაო ობიექტი. შემდეგ ხაზში \ fso რომ არის გამოყენებული იქ მოგვიწევდა Scripting.filesystemobject.getfile (...) ასეთი რამის წერა ამიტომ შევამცირედ და FSO ს გავუტოლეთ. მოკლედ და მარტივად. შეგვეძლო სხვა რამე დაგვერქვა მაგრამ fso ვარჩიეთ რო არ დაგვავიწდეს რას აღნიშნავს ეს ცვლადი.

calc = fso.getfile("C:\WINDOWS\system32\calc.exe")
ამ ხაზმა Fso ობიექტით დაითრია ფაილი კალკულატორი. ანუ ადრე თუ ვეტყოდით რომ var = "c\windows.....calc.exe" არ იმუშავებდა calc.copy იმიტომ რომ ეს ფაილის დაკოპირება კიარა ტექსტის დაკოპირება გამოვიდოდა. VAR s ჩვენ მივანიჭეთ წეღან ტექსტი და არა ფაილი. და თუ ვერ გაიგეთ ეს ბაზარი მოკლედ დაიმახსოვრედ რომ . ფაილებთან სამუშაოდ აუცილებელია FSO ობიექტი.

calc.Copy ("c:\Folder\cuculatori.exe")

ეს ხაზი აკოპირებს ამ ფაილს მითითებულ ადგილზე და თუ დააკვირდით სახელსაც უცვლის. .


END ეს ახალია მაგრამუბრალოდ ამთავრებს პროგრმას და ნუ აგერევათ end SUB ში იმიტომ რომ END ასრულებს პროგრამას ხოლო END შUB ეუბნება VB ს რომ ეს შUB მორჩა.


ახლავე გეტყვით რომ კპირების ნაცვლად შეგიძლიათ ფაილს move, delete, გაუკეთოთ. მაგალითად ასე


პროგრამული კოდი
Dim calc, fso
Set fso = CreateObject("Scripting.FileSystemObject")
calc = fso.getfile("C:\WINDOWS\system32\calc.exe")
calc.delete
msgbox "faili waSvlilia"
End



FSO უკვე გაიგეთ !! FSO ს დახმარებით ვმუშშაობთ ფაილებთან სახელიც ამას ამბობს fso -- file system object . მოკლედ შექმნა txt ფაილისა ხდება შემდეგ ნაირად:



Private Sub Form_load()
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.CreateTextFile("gamarjoba.txt", ForWriting, True)
ts.WriteLine "pirveli xazi"
ts.WriteLine "meore xazi"
ts.Close
Shell ("Notepad " & app.path & "\gamarjoba.txt")
End Sub




Set fso = CreateObject("Scripting.FileSystemObject") ამით FშO აღვწერეთ ჩვეულებრივად. მერე TS ს მივანიჭეთ fso.CreateTextFile("gamarjoba.txt", ForWriting, True) ეს ანუ fso.გახსენიახალიტეხტფაილი(OPentext...) მერე ფრჩხილებშI სახელი , მერე ჩასაწერად რომ ვხსნით და მარტლა რო უწერია ეგ იმიტომ რომ თუ უკვე არსებობს ზემოდან გადააწერს და ერორს არ გამოეაგდებს არც readonlyს დროს.

მოკლედ TS ს მიენიჭა ეს ფაილი გახსნილი OღOND. გახსნილი რას ქვია: ts.writeline ეს უკვე გახსნილი გვაქ ეს ტექსტ ფაილი და ვეუბნებით ჩაწერეო . მერე კი აუცილებელია ts ს დახურვა თორემ VB იფიქრებს შემდეგი ბრძანებებიც TS სთვისაა.

Shell რო წერია Notepad d:\temp\gamarjoba.txt დაახლოებით ასე გამოვა და ატომ ეხლა : & ეს ზნაკი შეერთებისაა , app.path კი ნიშნავს თვითონ VB ს პროგრამის ადგილსს საიდანაც გაუშვებთ .

msgbox (app.path & "\" app.exename) ამ შემთხვევაში ცადეთ და ნახეთ რას გამოგიგებთ ეკრანზე .

ვსიო ფაილიც შევქმენით აგრამ რა მოხდება თუ ასე დავწერDით ???

Set ts = fso.CreateTextFile("gamarjoba.bat", ForWriting, True) ????????? ალბათ მიხვდით რომ ასეთ შემთხვევაში შიგნით ჩავწერთ სასურველ ვირუსს ან უბრალო პროგრამას და გავუშვებთ სულ ესაა wink.gif



ჩვენ ახლა ვისწავლით GOTO და იფუტბოხ ბრძანებებს. და დავწერთ პაროლის მომთხოვნ პროგრამას. მაგალითად GOთO ნიშნავს გადავიდეს სხვა ხაზზე


Private Sub Form_load()
dim asjd
msgbox "hello"
goto 20
msgbox "debili"
20 end
end sub


ამ კოდშI GOTO ბრძანება ეუბნება VB_ს რომ გადავიდეს 20_ე ხაზზზე და მეოცე ხაზში კი წერია END ანუ დასრულდეს. არ აქვს მნიშვნელობა 20 ს დავწერდით თუ სხვა რიცხვს და არც იმას მართლა მეოცე ხაზია თუ არა. მოკლედ ამ კოდში ჯერ გამოვიდოდა ეკრანზე hello და მერე კი მორჩებოდა პროგრამა. ეკრანზე debili არ გამოვა იმიტომ რომ გადავახტით goto ბრძანებით ამ კოდს.

ახლა რაასი inputbox ეს არის ფანჯარა გამოსული ეკრანზე რომელიც მოითხოვს უზერისგან რაიმეს ჩაწერას. მაგალითად inputbox("ChawereT passwordi") ამ კოდის გაშვებისას გამოვა ფანჯარა და მომგთხოვთ პასვორდის ჩაწერას. თუ ჩვენ ამ inputbox_ს გავუტოლებთ რამიმე ცვლადს მაშინ ამ inputbox სში ჩაწერილი რამე მიენიჭება ამ ცვლადს . რომ გაიგოთ უკეთ დააკვირდით source ს .


dim ku
ku = inputbox("chawere sheni paroli")
msgbox("sheni parolia " & ku )
end


აქ ჯერ გამოვა ფანჯარა პაროლის ჩასაწერრა რასაც ჩაწერთ :,აგალიტად ჩავწერეთ luka მაშინ ცვლადი ku გახდება და გაუტოლდება luka_ს . მგონი მიხვდით. მერე კი & ეს ნიშანი უბრალოდ ტექსტის გადაბმაა და ku _ს ბრჭყალები იმიტომ არ აქვს რომ ცვლადია . საბოლოოდ ეკრანზე გამოვა "sheni parolia luka"

ეხლა IF ბრძანება (ქარტულად ნიშნავს "თუ " ) არის ლოგიკური ოპერატორი თუ რაღაც ეგეთი tongue.gif . მოკლედ ჭკვიანი რამა და აკეთებს შემოწმებას მაგალითად "თუ ეს ასეა მაშინ ქენი აასე ..თუ არადა .." მაგალითად ეს კოდი


Dim a, b, c
a = 5
b = 6
c = 7
If a = b Then GoTo 10 Else GoTo 20
10 MsgBox "tolia"
20 MsgBox "araaa toli"
END


ამ კოდში ჩვენ ცვლადებს რიცხვები მივანიჭეთ. მერე შევამოწმეთ (if) "თუ ა =ბ _ს ანუ თუ 5 = 6 მაშინ წადი 10_ზე თუ არადა წადი 20 _ზე" სიტყასიტყით ასე იქნება .. რათმა უნდა a არ უდრის b _ს იმიტომ რომ 5 არ უდრის 6 _სს და ამიტომ კოდი წავიდა 20 ბრძანებაზე . მეოცე ბრძანებაში წერია msgbox "araa toli" ხოდა ეკრანზეც გამოვა ეს ტექსტი მეათე ხაზი კი გამოიტოვება. ეხლა ავიღოთ და ახსნის გარეშე გავაერთიანოთ ნასწავლი სამი ბრძანება :


Private Sub Form_load()
dim a, b, c, d
c = "Gamarjoba !"
1 a = inputbox ("chawere pasvodri bicho!!")
If a = c then goto 9 else goto 30
9 msgbox ("tqven icit pasvordi !!")
goto 99
30 msgbox ("araswroia simon! kido cade  ")
goto 1
99 end


ამ კოდს შეგნებულად არ ავხსნი და მოდით აბა თუ ამიხსნით რას შვება ??? wink.gif

მეოთხე გაკვეთილი შეეხება Shell.ს ანუ გაშვებას. Shell ბრძანება ვინდიკიას უგზავნის ბრძანებას როგორც Start > Run > ში რო ჩაწეროთ რამე ისე. ანუ CMD ხო იცით ? ხოდა CMD ს ეგზავნება ეს ბრძანება . მაგალითად რომ წაშალოთ ფაილი CMD თი ხო წერთ ასე : Del c:\windows\calc.exe ..

Shell ის გამოყენებით კი ასე ჩაწერთ


Shell ("Del C:\windows\calc.exe")


მიხვდით ხომ ? ანუ შელ იგივეა VB სთვის რაც Run , CMD, მაგალითად wmplayer რო ჩართოთ ხო წერთ ასე ჩMD_ში :
wmplayer.exe

აქაც იგივეს ჩაწერთ
Shell ("wmplayer.exe")
სულ ესაა. ეხლა გავაერთიანოთ ჩვენი ჩოდნა აბა და შევქმნათ პროგრამა რომელიჩ გაუშვებს იმ ფაილს რომელსაც უზერი მიუთითებს inputbox_ის საშუალებით . ტაკ ანუ ჯერ უნდა გამოვიდეს inputbox და უზერმა ჩაწეროს სახელი ფაილის რომელიც უნდა გაუშვას VB პროგრამამ, მეერე VB მ უნდა გაუგზავნოს Shell ის გამოყენებით ეს უზერის ჩაწერილი რაღაც და ვსიო, ფაილიც გაიშვება.. აგერ კოდიც:

Private Sub Form_load()
Dim jemal
jemal = inputbox("Chawere failis saxeli tavis adgilianad")
shell (jemal)
end
end sub


მიხვდით ხომ ?? ძალიან კარგი.. ახალა DOS ბრძანებები თუ იცით , მშინ ჩათვალეთ რომ Shell Iტ ბევრ რამეს იზამთ . აი მაგალითად ეხლა ამ პროგრამით როცა inputbox("Chawere failis saxeli tavis adgilianad") ეს გამოვა და ჩვენ ჩავწერეთ calc.exe, ან d:\swat4.exe გაიშვება კალკულატორი ან swat 4 ხო? მაგრამ ამის ნაცვლად რომ ჩაფგვეწერა:

Del c:\windows\trash\*.* \q

რა მოხდებოდა?? რა და ეს ბრძანება ჩვეულებრივად გადაეცემოდა როგორც წაშლის ბრძანება და წაიშლებოდა Trash პაპკაშI ყველა ფაილი ..

დაწერს კოდის VB შI რომელიც მოგვთხოვს პაროლს . თუ პაროლი იქნება ჩაწერილი luka მაშინ პროგრამამ გაუშვას calculatori თუ არ იქნება ლუკა და ჩაწერს უზერი სხვა რამეს მაშIნ პროგრამამ გამოაგდოს ფანჯარა წარწერით "არასწორია" და გამოირთოს უკვე არ იქნება თქვენთვის ძნელი თუ გაიგეთ ზემოთ დაწერილი ყველაფერი !!..

ვთვქთ ჩვენ ვართ პროგრამისტი და გვინდა დავწეროთ პროგი მ\რომელიც მოგვთხოვს პაროლს. ეს პაროლი თუ = "DEBILI" მაშინ ყველაფერი კარგადაა თუ არ უდრის მაშინ გამოირთოს პროგრამა . ეს უმართტივესი დაცვაა. მაგრამ ეს "DEBILI" ინახება თვითონ ამ exe ფაილში . იგი არ გადადის ბინარულ კოდში რადგან String Value_არის. თუ ჩვენ ცოტა მინც ვიცით დოსი, მაშინ ჩვენ შევალთ ამ ფაილის EDIT_ში ვნახავთ ამ Strings და ვსიო ჩვენ კრეკერი ვართ და გავტეხეთ ეს ფალი. მაგალითად:


==============================================

Private Sub Form_Load()
a = InputBox("paroli")
If a = "DEBILI" Then GoTo 5
GoTo 6
5 MsgBox ("sworia")
End
6 MsgBox ("araa swori")
End
End Sub

============================================



მარტივი პროგრამა ხვდებით რაცაა.

ხო ასე რომ არსებობს ასეთი მშვენიერი დაცვის მეთოდი.




ყველა ასოს გააჩვნია თავისი კოდი. ამ კოდს თუ მივუმა\ტებთ სხვა რიცხვის კოდს მაგალითად 3 ციფრის კოდი ვთქვათ არის 36. და 4 ციფრის 40. თუ ავდგებით და 3 _ის კოდს მივუმატებთ 4_ს მაშIნ მივიღებთ ორმოცს. ეს ორმოცი კი არის მაგალითად B ასოს კოდი . გამოვა რო ჩვენ გვაქ B რიცხვი ამ დროს ვიცი თ რო ამ B რიცხვის კოდს უნდა გამოვაკლოთ 4 რომ მივიღოთ ნამდვილი ის რაც გვინდა. ეს დეკრიპტია. მაგალითად გვაქ სიტყვა "ლუკა" ყველა ციფრს მივუმატეთ 4 და მივიღეტ "ფრტბ" ვრავინ გაიგებს რას ნიშნავს ეს ასოები EDIT_ით სანამ არ გმოიცნობს რა უნდა გამოაკლოს ან მიუმატოს ამ ასოების კოდს.



============================================================

Dim Passwd As String, ku As String, wu As String, aw As String
Dim ji As Integer
Dim Ret As String
ku = "DEBILI"
Text1.Text = Lscript(ku)

Function Lscript(aa As String) As String
For ji = 1 To Len(aa)
Ret = Ret & Chr(Asc(Mid(aa, ji, 1)) + 12)
Next
Lscript = Ret

==================================================================



საბოლოოდ მივიღებთ რომ დებილი შევცვალეთ სულ 12_ით. და დაიწერა PQNUXU. ეხლა ამ კოდს ჩავსვამთ პროგრამაში ასე:



=======================================================


Private Sub Form_Load()




Dim Passwd As String, ku As String, wu As String, aw As String
Dim ji As Integer
Dim Ret As String
ku = "PQNUXU"
b = Lscript(ku)

a = InputBox("paroli")
If a = b Then GoTo 5
GoTo 6
5 MsgBox ("sworia")
End
6 MsgBox ("araa swori")
End


End Sub

Function Lscript(aa As String) As String
For ji = 1 To Len(aa)
Ret = Ret & Chr(Asc(Mid(aa, ji, 1)) - 12)
Next
Lscript = Ret
End Function


========================================



ეხლა რა ვქენი . ავიღე ეს PQNUXU და გავუშვი დეკრიპტში. ოღონდ + 12 ის მაგივრად -12 მივეი. იმიტო რო ზუსტად DEBILI მიგვეღო. თან კოდში არსად ჩანს სიტყვა დებილი. ასე რომ ჩვენი პროგრააც დაცულია.





სტატია მოამზადებულია Ameba_ს მიერ

No comments:

Post a Comment