כוונתי — סקירת אבטחה ו‑IT
עדכון אחרון: 5 באוקטובר 2026 · מתאר את גרסה 1.11.0
1. מה זה כוונתי
תוכנת שירות קטנה ל‑Windows 10/11 ול‑macOS 12 ומעלה (Intel ו‑Apple Silicon) שמתקנת מילים שהוקלדו בפריסת מקלדת שגויה, עברית ↔ אנגלית. היא רצה לכל משתמש בנפרד, ברקע (באזור ההודעות או בשורת התפריטים), לא דורשת חשבון ועושה את כל העבודה על המחשב. אין עיבוד בענן.
2. מה הגישה למקלדת רואה
כדי לזהות הקלדה בשפה הלא נכונה בזמן אמת, כוונתי מאזין להקשות בכל המערכת: אותה גישה שכל בודק איות או מחליף פריסות צריך.
- Windows: הוק מקלדת ברמה נמוכה (
SetWindowsHookEx,WH_KEYBOARD_LL), הוק עכבר ברמה נמוכה שמשמש רק לזיהוי לחיצות (לחיצה מאפסת את המאגר), ואירועי שינוי פוקוס. בכל הקשה הוא משתמש בקוד המקש, בפריסת המקלדת הפעילה ובשם התהליך שבחזית. - macOS: event tap של Quartz להקשות, לשינויי מקשי Shift/Ctrl וללחיצות עכבר. macOS מחייבת שהמשתמש יאשר הרשאות נגישות וניטור קלט.
- נשמר בזיכרון בלבד: המילה שמוקלדת כרגע, עד שש מילים קודמות מאותו רצף הקלדה (כדי שתיקון שורה שלמה יגיע אליהן) והתיקון האחרון (כדי שאפשר יהיה לבטל אותו). כל אלה מתאפסים בלחיצה על Enter, בלחיצת עכבר, במעבר בין אפליקציות, במקשי ניווט ובקיצורי מקשים, ואחרי שתי דקות בלי הקלדה.
- הקשר של השדה: כדי להבין באיזו שפה כתוב השדה, כוונתי יכול לקרוא את הטקסט הנוכחי של השדה שבפוקוס דרך ממשק הנגישות של מערכת ההפעלה (UI Automation ב‑Windows, Accessibility API ב‑macOS). הטקסט נבדק בזיכרון ולעולם לא נשמר או נשלח.
- ביצוע תיקון: הוא שולח מחיקות ואת התווים המתוקנים כהקשות סינתטיות (
SendInput/CGEventPost) ומחליף את פריסת המקלדת. תיקון שורה שלמה ידני מעתיק את השורה דרך הלוח (clipboard), ממיר, מדביק בחזרה ואז מחזיר ללוח את התוכן הקודם. כלים ששומרים היסטוריית לוח (כמו היסטוריית הלוח של Windows) עשויים לשמור את השורה.
3. שדות סיסמה
שדות שמערכת ההפעלה מסמנת כשדות סיסמה מדולגים לגמרי: כוונתי לא שומר במאגר ולא מתקן הקשות שם, מסרב לתיקון הידני,
ולא קורא את הטקסט של השדה. הוא נשען על הסימון של המערכת עצמה (IsPassword ב‑UI Automation של Windows;
שדות טקסט מאובטחים ב‑macOS).
אף אפליקציה לא יכולה לזהות בקשת סוד שהמערכת לא מסמנת כשדה סיסמה, למשל בקשת sudo או
ssh בטרמינל. הקלדה שם מטופלת כמו כל הקלדה אחרת: מעובדת בזיכרון ולעולם לא נשלחת. עם זאת, מילים
שמורכבות מאותיות בלבד ומוקלדות שם עלולות להיספר במילון האישי המקומי (סעיף 4), שהמשתמש יכול לנקות בכל רגע.
4. מה נשמר במחשב
| פריט | מיקום | תוכן |
|---|---|---|
| הגדרות | %APPDATA%\LangGuard\settings.json~/.config/LangGuard/settings.json |
מתגי הפעלה; כללים לפי אפליקציה (שמות תהליכים); מילים שהמשתמש הגן עליהן בביטול תיקון; המילון האישי: עד 500 מילים בכל שפה שהמשתמש הקליד ושאינן ברשימות המילים המובנות, כל אחת עם מונה; במסלולים בתשלום, מפתח הרישיון והאסימון החתום שלו; מונה התיקונים האוטומטיים היומי; מדיניות התוכנית החתומה. |
| יומן | %APPDATA%\LangGuard\langguard.log~/langguard.log |
אירועי אפליקציה בלבד: הפעלה, שגיאות, החלפות פריסה, איזו אפליקציה הייתה בפוקוס כשרץ תיקון, ומונים. בלי טקסט שהוקלד. מתרוקן בכל הפעלה של האפליקציה ומוגבל לכ‑512KB. |
| עלייה עם המחשב | Windows: HKCU\Software\Microsoft\Windows\CurrentVersion\Run, ערך
KavanatimacOS: ~/Library/LaunchAgents/com.melogix.langguard.plist |
הנתיב של האפליקציה, כדי שתעלה עם הכניסה למחשב. אפשר לכבות בתפריט האפליקציה. |
| קיצור דרך בתפריט התחל (Windows) | %APPDATA%\Microsoft\Windows\Start Menu\Programs\Kavanati.lnk |
קיצור דרך לאפליקציה, שנוצר פעם אחת. |
הכל נשמר כטקסט רגיל בפרופיל של המשתמש, ומוגן על ידי מערכת ההפעלה כמו שאר הפרופיל. "Clear learned words" בתפריט
ההגדרות של האפליקציה מרוקן את המילון האישי; מחיקת התיקייה LangGuard (השם הפנימי המקורי של האפליקציה)
מוחקת הכל. קיים מצב אבחון למפתחים שמוסיף ליומן טקסט מוקלד, לצורכי פיתוח בלבד: הוא כבוי, אלא אם משתנה הסביבה
KAVANATI_DEBUG_CONTENT מוגדר ל‑1 עבור המשתמש.
5. כל בקשות הרשת
כל הבקשות נשלחות ל‑kavanati.com ב‑HTTPS (פורט TCP 443). באפליקציה אין רכיבי אנליטיקס, פרסום או דיווח קריסות.
| בקשה | מתי | מה היא נושאת |
|---|---|---|
בדיקת עדכוניםGET /version.json | בהפעלה, ואז כל 6 שעות | מגרסה 1.11, שלושה ערכים אנונימיים: p (פלטפורמה), v (גרסת האפליקציה) ו‑first
(מסמן את הבדיקה הראשונה אחרי התקנה חדשה), וחותמת זמן למניעת מטמון. בלי מזהה ובלי שום דבר שהוקלד. אנחנו סופרים
את הבקשות האלה רק במצטבר. |
הורדת עדכוןGET /Kavanati-windows.exe או /Kavanati-mac.zip |
רק כשיש גרסה חדשה יותר | שום דבר. הקובץ שירד נבדק מול חתימת ה‑SHA-256 שב‑version.json לפני שהוא מותקן. |
רישיון (Pro ולעסקים בלבד)POST /api/license/activate, /refresh,
/release |
כשמזינים מפתח; אחר כך בהפעלה, ולכל היותר פעם ב‑12 שעות בזמן ריצה. אף פעם במסלול החינמי, ואף פעם ברישיון שהופעל אופליין. | הפעלה: מפתח הרישיון, טביעת מכשיר, פלטפורמה וגרסת האפליקציה. רענון ושחרור: מפתח הרישיון וטביעת המכשיר. הטביעה היא 16 תווים הקסדצימליים מתוך hash מסוג SHA-256 של מזהה החומרה של המחשב (MachineGuid ב‑Windows, IOPlatformUUID ב‑Mac); המזהה עצמו לא יוצא מהמחשב. |
| משוב, רעיונות ודירוג (פותח את kavanati.com/feedback בדפדפן) |
רק כשהמשתמש בוחר בדיווח על בעיה, בשיתוף משוב, או עונה לבקשת הדירוג | שום דבר, עד שהמשתמש לוחץ שליחה בעמוד. הדוגמה שמצורפת לדיווח עוברת בחלק ה‑# של הכתובת, שדפדפנים
לעולם לא שולחים לשרת. בעמוד המשוב אין אנליטיקס ואין סקריפטים של צד שלישי. |
יומן אבחוןPOST /api/log |
רק אם המשתמש מסכים, בחלון הדיווח על בעיה | היומן המקומי שמתואר בסעיף 4 (אירועי אפליקציה ושמות אפליקציות, בלי טקסט שהוקלד) עם כותרת קצרה של הגדרות האפליקציה והמונים. |
חסימת kavanati.com לא מונעת מכוונתי לתקן הקלדה: פשוט לא יגיעו עדכונים, ורישיון בתשלום ממשיך לעבוד 30 יום בין בדיקות מוצלחות.
6. עדכונים וחתימה דיגיטלית
- כל גרסה מפרסמת ב‑
version.jsonאת חתימות ה‑SHA-256 של שתי הגרסאות. האפליקציה מורידה עדכון ברקע, בודקת אותו מול החתימה ומוחקת אותו אם יש אי‑התאמה; העדכון מותקן כשהמשתמש מפעיל את האפליקציה מחדש.version.jsonמוגש ב‑HTTPS; מלבד מדיניות התוכנית שבתוכו, שחתומה, הוא עוד לא חתום בנפרד. - macOS: חתום ב‑Apple Developer ID (צוות
LJ373NJ3QV), עם hardened runtime, מאושר (notarized) על ידי Apple ועם ticket מוטמע. לבדיקה:spctl -a -vv /Applications/Kavanati.app. - Windows: הקובץ עוד לא חתום דיגיטלית, ולכן SmartScreen מבקש אישור בהפעלה הראשונה, ו‑Smart App Control או
מדיניות ארגונית עלולים לחסום אותו. הפצה דרך Microsoft Store, שחותמת את האפליקציה, בתכנון. עד אז, הורידו רק
מ‑kavanati.com והשוו את ה‑hash של הקובץ ל‑
version.json:Get-FileHash .\Kavanati-windows.exe.
7. רשימות היתרים באנטי־וירוס וב‑EDR
מכיוון שכוונתי מתקין הוק מקלדת ושולח הקשות סינתטיות, כלי EDR שמבוססים על התנהגות עלולים לסמן אותו כדומה לקילוגר (הטכניקה ש‑MITRE ATT&CK מכנה T1056.001). אם אתם מאשרים אותו, אלה המזהים:
| Windows | macOS | |
|---|---|---|
| אפליקציה | Kavanati-windows.exe (שם המוצר Kavanati), קובץ .NET יחיד ועצמאי. רץ מהמקום שבו
המשתמש שמר אותו, בדרך כלל תיקיית ההורדות. |
Kavanati.app, מזהה חבילה com.melogix.langguard, קובץ הרצה
Contents/MacOS/Kavanati.Mac, אוניברסלי (Intel ו‑Apple Silicon). |
| זהות | עוד לא חתום: אשרו לפי hash מסוג SHA-256 (משתנה בכל גרסה) או לפי נתיב. | צוות Developer ID LJ373NJ3QV, מאושר (notarized). |
| הרשאות | משתמש רגיל. בלי הרשאות מנהל, בלי דרייבר ובלי שירות. | נגישות וניטור קלט. לא בארגז חול (sandbox); סביבת .NET דורשת את ההרשאות allow-jit, allow-unsigned-executable-memory ו‑disable-library-validation. |
| עדכון עצמי | מוריד את Kavanati-windows.exe.new ליד האפליקציה, משנה את שם הקובץ הרץ
ל‑.old, מחליף ומפעיל מחדש. |
מוריד אל $TMPDIR/kavanati-update.zip ומריץ סקריפט קצר
($TMPDIR/kavanati-update.sh) שמחליף את חבילת האפליקציה. |
| שונות | תיקיית הגדרות %APPDATA%\LangGuard\; mutex למופע יחיד
LangGuard.SingleInstance. |
מריץ את /usr/sbin/ioreg פעם אחת בהפעלה כדי לקרוא את מזהה החומרה לטביעת הרישיון. |
| רשת | kavanati.com, ב‑HTTPS בלבד (סעיף 5). | |
פורסים לצוות? ראו כוונתי לעסקים. התקנת MSI ופריסה מרוכזת ב‑Intune או ב‑Group Policy בתכנון.
8. דיווח על חולשת אבטחה
כתבו ל‑support@kavanati.com עם הפרטים ואיך לשחזר את הבעיה. אנחנו קוראים כל דיווח ועונים מהר ככל האפשר. קובץ security.txt שלנו מפנה לאותה כתובת. אותה כתובת עונה גם על שאלוני אבטחה של ארגונים.
ראו גם: מדיניות הפרטיות · מדריך השימוש.