Logo

רד-בורד: ארכיון

ראשי > תיכנות > סיסמא בתוכנית מוסתרת

22/07/2007 09:53:49 HTK
זה יותר קשור לתיכנות אבל מי כבר נכנס לשם..
טוב, אז רציתי להכין תוכנה שתצפצף(Beep()) ותיהיה מוסתרת ככה שלא יוכלו לצאת ממנה בקלות, הבעיה היא שרציתי שהיא תופסק ע"י סיסמא.
עכשיו הבעיה שלי היא שהתוכנית לא יכולה גם לצפצף וגם לקלוט סיסמא,
אז השתמשתי בcreatethread() והכנתי זרם חדש שיקלוט סיסמא.
ואם הסיסמא נכונה זה יפעיל עוד beep קצר מה שיפסיק את פעולת הbeep הארוך מאוד.
הבעיה היא שלא משנה מה הסיסמא זה בעוצר בכל מקרה =[
זה בגלל התוכנית המוסתרת?
או בעיה בקוד?
קוד:
#include <stdio.h>
#include <conio.h>
#include <windows.h>

DWORD WINAPI HTK( LPVOID lParam )
{
for(;;)
Beep(3900,400000006);
}

int main()
{
HWND stealth;
AllocConsole();
stealth=FindWindowA("ConsoleWindowClass",NULL);
ShowWindow(stealth,0);

int y;
HANDLE hThread;
hThread = CreateThread(NULL, 0, HTK, NULL, 0, NULL );
for(;;)
{
scanf("%d", &y);
if (y==122)
Beep(1,1);
else if(y!=122)
hThread = CreateThread(NULL, 0, HTK, NULL, 0, NULL );
}
return 0;
}

תודה![ההודעה נערכה על-ידי HTK ב-22/07/2007 09:56:13]
23/07/2007 00:57:46 Hypathia
שתי שאלות:
1. איך המערכת מייעדת את ההקלדות שלך אל האפליקציה שלך אם החלון שלה מוסתר?

2. למה בכל מקרה של ססמא שגויה אתה יוצר ת’ראד חדש?
24/07/2007 21:52:51 HTK
1. ההסתרה לא מונעת את פעולת התוכנית,
למשל קילוגרס פועלים ככה.

2.כי זה הכי נח, זה גם בהנחה שהסיסמא הראשונה תהיה נכונה.

והסתדרתי עם זה, זה פועל.
24/07/2007 23:07:57 Hypathia
1. קילוגס לא פועלים ככה.
בסביבת חלונות כל ההקלדות שנעשות מיועדות לאפליקציה שהחלון שלה הוא האקטיבי באותה עת.
יש דרכים אחרות לעקוב אחר ההקלדות, לא משנה אם יש לך חלון או לא.

2. זאת צורה מאוד ערבית לעבוד עם ת’ראדים.
ההת’רד שלך לא ימות אם הוא בלולאה וכל עוד התוכנית רצה.
25/07/2007 01:12:55 HTK
1. סתם מעניין אותי, איך פועלים קילוגס?

2. אני לא צריך שהוא ימות.
הBeep החדש גם ככה מבטל את הקודם.
25/07/2007 13:12:36 SkOd
ציטוט:1. סתם מעניין אותי, איך פועלים קילוגס?

API

GetAsyncKeyState
GetKeyState
ועוד מלא...[ההודעה נערכה על-ידי SkOd ב-25/07/2007 13:20:06]
25/07/2007 23:24:55 Hypathia
לא, סקוד, עושים הוק. הרבה יותר מדויק ופחות מסורבל.

HTK
כאילו מה, לעזור לך למצא פונקציה שהורגת ת’ראד? מה הענין? למה לכתוב כמו ערבי? ולמה הELSE IF?
19/08/2007 01:01:11 T4uSBaZ
** אני מצטער על התגובה המאוחרת **

HTK - אתה יוצר thread חדש כל פעם, וזה לא ממש נכון לעשות את זה. עדיף לך להתחיל את הthread ואז לעשות לולאה שתפעל כל עוד לא נלחצו צירופי המקשים שרצית. לאחר מכן, תוכל להשתמש בפונקציה TerminateThread כדי לסיים את הthread (ואז כמובן CloseHandle שלא ביצעת בתוכנית) או שפשוט תוכל לעשות מין משתנה גלובאלי בוליאני (1 או 0) והthread יפעל בצורה כזאתי:
קוד:
DWORD WINAPI HTK( LPVOID lParam )
{
while(work)
Beep(3900,400000006);
}


ואז, כדי לכבות את הפונקציה פשוט מציבים work=0.

Hypatiah - אכן hooks הרבה יותר מדוייקים, מה שכן - ניסיתי ללמוד אותם בקצרה, ואני חושב שלא לכל אחד שרוצה לעשות תוכנית קטנה כזאתי, יש זמן לבוא ולהתחיל לתכנת כל מני dll’ים.
אפשר לבנות איזה פונקציה שמקבלת אכן את GetAsyncKeyState ו GetKeyState ומחזירה פשוט את התו.
אך .. היא באמת לא הכי מדוייקת, אז זה כבר פתוח לוויכוח, אבל בוא לא נתווכח על זה - אכן הוקים הרבה יותר שימושיים, אבל מתקדמים ואלו שיודעים win32api טוב, יכולים להשתמש בו.

אגב אם תרצה לחקור על הוקים - חפש על הפונקציה SetWindowsHookEx (ואם תמצא משהו נורמלי לC, שהוא לא MSDN - כי אני שונא MSDN - תודיע לי =] )
01/09/2007 20:31:31 HLL
תאכלס גם אני שנאתי בהתחלה MSDN... תתקין את 2005 (3CD’s) (קשה להשתמש ב WEB בהתחלה , מסורבל), אפשר לעבוד איתו

כמה הערות קטנות
תאמץ את ההערות של T4uSBaZ
אפשר כמובן כמו שאמרה יוליה וגם אם API שבודק את מצב המקשים

כך או כך, עוד משו קטן שעלול להפיל אותך, תדאג ש work יהיה volatile.
עמודים: 1