PDA

View Full Version : [Q] Key Logger



Nguyen Hung Vuong
18-09-2002, 17:13
Bà con ơi cho hỏi : Tôi có làm một chương trình dùng để theo dõi xem người dùng gõ cái gì (hì hì lol tôi chôm trong một cuốn sách về Delphi). Nay tôi muốn viết bằng Visual Basic nhưng chỉ còn một trở ngại : tôi muốn chương trình tự động chạy lúc khởi động máy, có cách nào khác ngoài cách tạo shortcut trong thư mục Startup không (tôi chạy msconfig của Windows, trong tab startup của nó có liệt kê các chương trình tự khởi động khi máy khởi động nhưng không thấy bóng dáng nó hay shortcut của nó trong thư mục Startup) ? Làm sao để viết chương trình có cách khởi động giống vậy ? Xin các cao thủ trong làng Visual Basic chỉ giáo ? Xin cám ơn lắm lắm !!!:D :D :D

Nguyen Hung Vuong
18-09-2002, 17:19
Quên ! Nhân tiện cho hỏi làm sao để lấy thư mục hiện hành của chương trình (không phải cách dùng App.Path). Ví dụ tôi tạo một project mang tên HV và biên dịch thành file HV.EXE, tôi không tạo trình cài đặt, chỉ khi cần là copy nó vào một thư mục để chạy và cần phải biết chương trình đã được copy vào thư mục nào lúc chạy. Xin chỉ giáo ! Cám ơn lắm lắm !

bpmtri
18-09-2002, 17:37
Các chương trình tự động chạy lúc khởi động mà không có shortcut trong folder Startup được đăng ký trong Registry, nếu bạn muốn chương trình của mình cũng giống như vậy thì hãy đăng ký vào.

Cách làm: Bạn chạy chương trình regedit, xem cái Key sau:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Run

Bạn sẽ thấy các chương trình khác đăng ký như thế nào, bây giờ bạn thử đăng ký chương trình của mình xem. OK chứ ?

(Bạn thêm một cái value tương tự như các chương trình khác vào trong Registry tại KEY:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Run)

Đây chỉ là ý tưởng để hiện thực, còn bạn thực hiện ra sao thì... bạn hãy tự làm nha, cũng dễ mà.(Xem các hàm API liên quan đến Registry)

Chúc thành công.

Nguyen Thanh Binh
24-09-2002, 16:49
Hay đấy ! bpmtri có thể chỉ cụ thể hơn được không ?

KEM_WALL
25-09-2002, 09:56
bạn tra cứu trong MSDN ca'c hàm sau đây để biết làm: (mình nhớ kô chính xác lắm nhưng mà tất cả đều khởi đầu bằng chữ Reg
RegOpenEx
RegClose
RegSetKeyValue
RegQuerryValue
....

VTHung
25-09-2002, 12:33
Bài viết được gửi bởi Nguyen Hung Vuong
Bà con ơi cho hỏi : Tôi có làm một chương trình dùng để theo dõi xem người dùng gõ cái gì (hì hì lol tôi chôm trong một cuốn sách về Delphi). Nay tôi muốn viết bằng Visual Basic nhưng chỉ còn một trở ngại : tôi muốn chương trình tự động chạy lúc khởi động máy, có cách nào khác ngoài cách tạo shortcut trong thư mục Startup không (tôi chạy msconfig của Windows, trong tab startup của nó có liệt kê các chương trình tự khởi động khi máy khởi động nhưng không thấy bóng dáng nó hay shortcut của nó trong thư mục Startup) ? Làm sao để viết chương trình có cách khởi động giống vậy ? Xin các cao thủ trong làng Visual Basic chỉ giáo ? Xin cám ơn lắm lắm !!!:D :D :D
Cái này thì bạn phải sài Hook rồi - chắc bạn muốn làm chương trình giống như VietKey,.. đúng không ???

Nicky
25-09-2002, 14:38
Hey bạn NguyenHungVuong, bạn cho mình xem thử chương trình của bạn được không? Mình sẽ chỉ cho bạn cách làm việc với Registry but not now. Mình cũng biết hook nhưng mà chi khi chương trình có Focus thôi còn muôn hoàn chỉnh thì phải viết 1 Dll bằng C++ hoặc Del nhưng mình không biết cách. Bạn cho mình xem thử nhé !
C U L8er !!!

hueduongit
25-09-2002, 15:38
Không biết các bạn làm sao để dấu chương trình khi chạy (giống như VietKey), chứ tớ đã Registry trong '...\Run' rôi (một chương trình exe bình thường), nhưng vẫn bị thấy trong Windows Task Manager

Ai có cách gì hay, xin chỉ giúp để mọi người cùng học hỏi!

hueduongit
25-09-2002, 16:19
À nói về Registry thì tớ có đoạn modul sau (thật ra là của API guide)

=============================================
Option Explicit

Public Const SW_HIDE = 0
Public Const SW_SHOWDEFAULT = 1
Public Const SW_MAXIMIZE = 3
Public Const SW_MINIMIZE = 4

Type Rect
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As Rect) As Long
Public Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd As Long, ByVal lpHelpFile As String, ByVal wCommand As Long, ByVal dwData As Long) As Long
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Const REG_SZ = 1 ' Unicode null terminated string
Const REG_BINARY = 3 ' Free form binary
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHIME = &H80000002
Const PATHKEY = "SoftWare\Vidu\"
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long

'----------------------------- LAY GIA TRI TU REGISTRY ------------------------------------------
Public Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String) As String
Dim lResult As Long
Dim lValueType As Long
Dim strBuf As String
Dim lDataBufSize As Long
'retrieve information about the key
lResult = RegQueryValueEx(hKey, strValueName, 0, lValueType, ByVal 0, lDataBufSize)
If lResult = 0 Then
If lValueType = REG_SZ Then
'Create a buffer
strBuf = String(lDataBufSize, Chr$(0))
'retrieve the key's content
lResult = RegQueryValueEx(hKey, strValueName, 0, 0, ByVal strBuf, lDataBufSize)
If lResult = 0 Then
'Remove the unnecessary chr$(0)'s
RegQueryStringValue = Left$(strBuf, InStr(1, strBuf, Chr$(0)) - 1)
End If
'MsgBox Chr$(0)
ElseIf lValueType = REG_BINARY Then
Dim strData As Integer
'retrieve the key's value
lResult = RegQueryValueEx(hKey, strValueName, 0, 0, strData, lDataBufSize)
If lResult = 0 Then
RegQueryStringValue = strData
End If
End If
End If
End Function

Public Function GetString(hKey As Long, strPath As String, strValueName As String)
Dim Ret
'Open the key
RegOpenKey hKey, strPath, Ret
'Get the key's content
GetString = RegQueryStringValue(Ret, strValueName)
'Close the key
RegCloseKey Ret
End Function

'Thu tuc sau day dung de luu chuoi ky tu ..........
Public Sub SaveString(hKey As Long, strPath As String, strValueName As String, strData As String)
Dim Ret
'Create a new key
RegCreateKey hKey, strPath, Ret
'Save a string to the key
RegSetValueEx Ret, strValueName, 0, REG_SZ, ByVal strData, Len(strData)
'close the key
RegCloseKey Ret
End Sub

'Thu tuc sau day dung de luu gia tri ....
Public Sub SaveStringLong(hKey As Long, strPath As String, strValueName As String, strData As String)
Dim Ret
'Create a new key
RegCreateKey hKey, strPath, Ret
'Set the key's value
RegSetValueEx Ret, strValueName, 0, REG_BINARY, CByte(strData), 4
'close the key
RegCloseKey Ret
End Sub

Public Sub DelSetting(hKey As Long, strPath As String, strValueName As String)
Dim Ret
'Create a new key
RegCreateKey hKey, strPath, Ret
'Delete the key's value
RegDeleteValue Ret, strValueName
'close the key
RegCloseKey Ret
End Sub

Public Sub SetRegistry(strValueName As String, ByVal strData As String)
'Save the string to the registry
SaveString HKEY_CURRENT_USER, PATHKEY & App.Title, strValueName, strData
End Sub

Public Sub GetRegistry(strValueName As String, strValue As String)
'Get ...
strValue = GetString(HKEY_CURRENT_USER, PATHKEY & App.Title, strValueName)
End Sub

Public Sub DeleteRegistry(strValueName As String)
'Del ...
DelSetting HKEY_CURRENT_USER, PATHKEY & App.Title, strValueName
End Sub

Nicky
02-10-2002, 16:25
Hey hueduongit !!!
Nếu bạn muốn giấu chương trình khỏi TaskList thì đến đây http://coolcode4you.fateback.com để xem cách.
Hoặc đơn giản nhất là dùng App.ShowinTask = False .
Chúc thành công !!!