当前位置:文档之家› 软件构架

软件构架

软件构架
软件构架

内核级系统防护软件KsBinSword构架简介

KsBinSword是一斩断黑手的利刃,它适用于Windows 2000/XP/2003操作系统,用于查探系统中的幕后黑手(木马后门)并作出处理,当然使用它需要用户有一些操作系统的知识。

KsBinSword内部功能是十分强大的。它有着自己的独创核心态进程管理方案、简洁而不失效率的网络防火墙、强大而稳定的文件过滤驱动、深入磁盘底层甚至穿透还原软件的磁盘微端口驱动。可能您也用过很多类似功能的软件,比如一些进程工具、端口工具,但是现在的系统级后门功能越来越强,一般都可轻而易举地隐藏进程、端口、注册表、文件信息,一般的工具根本无法发现这些“幕后黑手”。KsBinSword使用大量新颖的内核技术,使得这些后门躲无所躲。

本程序分为应用态与核心态两部分。

应用层

采用VS2005编写,负责与核心态交互通信,将核心态的信息处理后反馈至用户。

主界面上,又划分为九个子界面。分别为:

一.进程管理:

内核级进程、线程检测,顺利查找各种病毒隐藏的进程、线程。

2.细致的内核级模块检测,深刻扫描系统潜在危险模块。

3.强大的内核级进程、线程结束,尚无病毒能够抵挡。

二.系统监控:

1.使用当前杀毒软件最新HIPS技术(主动防御),防范病毒于未然。

2.U盘扫描、脚本木马查杀,确保用户中毒后第一时间清理系统。

三.LSP管理:

1.列举系统socket所依赖的动态链接库,揭发病毒隐藏之处。

四.SSDT检测部分:

1.完全彻底扫描系统所有SSDT(系统服务派发表),病毒无遁形之处。

2.从系统原生文件还原SSDT,确保系统未修改,阻断病毒自我防护。

五.文件管理:

1.强大的文件过滤驱动技术,彻底检测所有隐藏文件,安全可靠。

2.独创的强制删除文件功能,绕过FSD(文件系统驱动),底层删除文件。

六.磁盘编辑:

1.方便的十六进制编辑器,完美模拟WinHex功能。

2.强大的底层磁盘编辑,甚至穿透还原卡,读取写入任何被保护扇区。

七.防火墙部分:

1.自定义安全规则,拦截一切未知数据包,更灵活的保护系统。

2.实时反馈系统网络数据流,提供网络详细信息。

八.PE信息查看:

1.详细列举PE文件信息,如导入表,区块等,方便了解未知文件结构。

九.系统模块列举:

1.列举系统所有模块,查杀潜在内核级病毒威胁。

核心态

共四个NT驱动程序,分别为:

1.KsBinSword.sys负责处理进线程相关检测、查杀。

2.SIoctl.sys 负责处理硬盘编程。

DrvFltIp.sys 负责处理防火墙相关部分。

4.Explore.sys负责处理文件编辑相关部分

下面介绍整个工程的框架

应用层:

使用标准的MFC框架,分为:

CAboutDlg: About对话框所在类

CEditEx: 重载了的编辑框类

CHexEdit: 重载了的十六进制编辑框类CKsBinSwordApp: 程序主应用框架类CKsBinSwordDlg: 程序主界面类

CMyList: 重载了的列表框类CMySystem: 静态系统函数类

CPage1: 进程管理页的类

CPage2: 监控管理页的类

CPage3: 驱动模块枚举页的类

CPage4: 列举LSP页的类

CPage5: SSDT页的类

CPage6: 文件管理页的类

CPage7: 磁盘编辑器页的类

CPage8: 防火墙页的类

CPage9: PE文件查看页的类

: 防火墙规则对话框类

CTrayIcon: 系统托盘类

等类。

其中CMysystem类比较重要,它封装了对驱动操作、各个系统函数调用等操作,各个类都要用到。

程序的主界面如图:

主界面由CKsBinSwordDlg类负责。界面中使用了“属性页”控件,负责加载各个分页。每个分页由CPage1、CPage2等类负责。

下面结合代码详细介绍各个功能及其实现。

.进程管理:

1.普通列举进程

本功能封装在消息响应函数CPage1::OnBnClickedListProcess()中。采用系统PSAPI.LIB库导出的函数CreateToolhelp32Snapshot()、Process32First()、Process32Next()等函数工作。属于应用态列举进程。取得进程PID后,将使用我们独创的My_OpenProcess()

打开进程句柄。My_OpenProcess()的功能类似于普通的OpenProcess()作用,但功能更为强大。我们知道一些病毒等软件为了防止自己被杀毒软件结束,会采用一定的防御手段。为了关闭进程,进程句柄是必不可少的。所以很多病毒会在OpenProcess()上采用API HOOK技术保护自己不被结束。而我们的CMySystem::My_OpenProcess()将完美绕过,并且采用了一定的新颖的微软未公开技术。

My_OpenProcess()实现原理简介:windows在子系统进程CSRSS.EXE里维护了一张整个应用层句柄表。通过系统未文档函数ZwQuerySystemInformation()将得到这张表。然后遍历所有句柄,如果是进程句柄则通过ZwDuplicateObject()将句柄复制到本进程,并调用ZwQueryInformationProcess()查询是否为我们需要打开的进程句柄。如果是则返回,否则继续遍历。

通过以上手段,应用层很少病毒能躲过KsBinSword的扫描。但不排除一些内核级的ROOTKIT(既一些底层核心态病毒)使用篡改系统内核技术逃过杀毒软件的检测。这时我们可以采用驱动列举进程功能。

2.驱动列举进程

本功能封装在函数CMySystem::ListProcessByDrive()中。

实现原理简介:在windows下,所有资源都是以对象方式进行管理。我们要访问一个对象时,系统就会创建一个对象句柄。句柄和对象之间是通过句柄表来完成的。准确来说,一个句柄是它所对应的对象在句柄表中的索引。PspCidTable是windows系统上一个特殊的句柄表。它不链接在系统句柄表上,也不属于任何进程。通过它可以访问系统任何对象。

在windows XP中,为了节省系统空间,采用了动态扩展的表结构。当句柄表数目少的时候仅采用下层表。数目增大后才采用更多的层。最多有三层句柄表。当我们获得三层句柄表后,我们就可以通过句柄来访问对象了。

利用PspCidTable来检测隐藏进程的基本原理正是如此,系统内所有进程对象的对象类型是一样的,先取得任一进程对象的对象类型,然后访问所有句柄值,是进程对象则记录下来。下面是实现代码:

VOID IsValidProcess()

{//判断是否是进程对象,是则记录,不是则放弃

ULONG PspCidTable;

ULONG TableCode;

ULONG table1,table2;

ULONG object,objectheader;

ULONG NextFreeTableEntry;

ULONG processtype,type;

ULONG flags;

ULONG i;

PspCidTable=GetCidAddr();

processtype=GetProcessType();

if(PspCidTable==0)

{

return ;

}

else

{

//TableCode的最后两位在XP中决定了句柄表的层数

TableCode=*(PULONG)(*(PULONG)PspCidTable);

if((TableCode&0x3)==0x0)

{

table1=TableCode;

table2=0x0;

}

if((TableCode&0x3)==0x1)

{

TableCode=TableCode&0xfffffffc;

table1=*(PULONG)TableCode;

table2=*(PULONG)(TableCode+0x4);

}

//对cid从0x0到0x4e1c进行遍历

for(i=0x0;i<0x4e1c;i++)

{

if(i<=0x800)

{

if(MmIsAddressValid((PULONG)(table1+i*2)))

{

object=*(PULONG)(table1+i*2);

if(MmIsAddressValid((PULONG)(table1+i*2+NEXTFREETABLEENTRY)))

{

NextFreeTableEntry=*(PULONG)(table1+i*2+NEXTFREETABLEENTRY);

if(NextFreeTableEntry==0x0)//正常的_HANDLE_TABLE_ENTRY中NextFreeTableEntry为0x0

{

object=((object | 0x80000000)& 0xfffffff8);//转换为对象(体)指针

objectheader=(ULONG)OBJECT_TO_OBJECT_HEADER(object);//获取对象

if(MmIsAddressValid((PULONG)(objectheader+TYPE)))

{

type=*(PULONG)(objectheader+TYPE);

if(type==processtype)

{

flags=*(PULONG)((ULONG)object+FLAGS);

if((flags&0xc)!=0xc)

RecordInfo(object);//flags显示进程没有退出

}

}

}

}

}

}

else

{

if(table2!=0)

{

if(MmIsAddressValid((PULONG)(table2+(i-0x800)*2)))

{

object=*(PULONG)(table2+(i-0x800)*2);

if(MmIsAddressValid((PULONG)((table2+(i-0x800)*2)+NEXTFREETABLEENTRY)))

{

NextFreeTableEntry=*(PULONG)((table2+(i-0x800)*2)+NEXTFREETABLEENTRY);

if(NextFreeTableEntry==0x0)

{

object=((object | 0x80000000)& 0xfffffff8);

objectheader=(ULONG)OBJECT_TO_OBJECT_HEADER(object);

if(MmIsAddressValid((PULONG)(objectheader+TYPE)))

{

type=*(PULONG)(objectheader+TYPE);

if(type==processtype)

{

flags=*(PULONG)((ULONG)object+FLAGS);

if((flags&0xc)!=0xc)

RecordInfo(object);

}

}

}

}

}

}

}

}

}

}

上面解决了检测进程功能。但PspCidTable是未被windows导出的,属于未文档结构。下面的代码负责查找PspCidTable:

//通过搜索PsLookupProcessByProcessId函数,获取PspCidTable的地址

ULONG GetCidAddr()

{

PUCHAR addr;

PUCHAR p;

UNICODE_STRING pslookup;

ULONG cid;

RtlInitUnicodeString (&pslookup,

L"PsLookupProcessByProcessId");

addr = (PUCHAR) MmGetSystemRoutineAddress(&pslookup);//MmGetSystemRoutineAddress可以通过函数名获得函数地址

for (p=addr;p

{

if((*(PUSHORT)p==0x35ff)&&(*(p+6)==0xe8))

{

cid=*(PULONG)(p+2);

return cid;

break;

}

}

return 0;

}

具体细节的补充说明:

1.本程序所使用的结构都是在windows xp sp2下实现的,所以移植性比较差。

2.这种检测方式是针对系统句柄,所以可以从结果看出不存在系统句柄的System IDIE Process 进程无法列举。

3.因为进程的退出也是基于句柄的,所以存在进程已经退出而进程对象仍然存在的情况。这种情况可以通过EPROCESS结构中的ProcessExiting等标志位来判断是否退出。

3.结束进程

结束进程我们提供了三种方式:

(1) 普通TerminateProcess()法结束进程,封装在

CPage1::OnMenuKillProcessByTer()

强制清零法结束进程封装在CMySystem::KillProcess()

(3) 驱动调用PspTerminateProcess()结束进程,封装在CMySystem::ForceKillProcess()中

这里介绍一下清零法:程序调用ZwProtectVirtualMemory() ZwWriteVirtualMemory()等函数,强制将目标进程的ring3层的地址空间清除为零。由于连异常处理等Windows特定结构都被清除,故目标进程甚至连异常对话框都不会出现便自动被windows内存进程管理器消除进程执行体等进程标志。为目前ring3层最强的结束进程法。

驱动层结束进程将在下面的驱动部分再行介绍。

4.模块列举

本功能封装在CPage1::ListProDllByQueryVirMem()中。

实现方法简介:通过ZwQueryVirtualMemory()函数暴力搜索目标进程应用层任何一处位置,并得到响应的地址信息,如果是模块的话列举出来。目前绝大多数工具查找模块也是通过Toolhlp32、psapi,前者会调用RtlDebug***函数向目标注入远线程,后者会用调试api读取目标进程内存,本质上都是对PEB的枚举,通过修改PEB就轻易让这些工具找不到北了。而KsBinSword的核心态方案原原本本地将模块展示,病毒无所逃匿。

5.线程列举

本功能封装在CMySystem::ListThread(void)中。

线程列举完全使用了内核态方案,在驱动中遍历线程结构体ETHREAD,通过ETHREAD中的双向链表完成线程列举。完全杜绝了病毒的一些常规拦截操作。

6.线程结束

线程结束我们提供了两种方案:

1.基于应用层的TerminateThread()的结束进程。封装在CMySystem::KillProcess()中。

原理:创建远程线程,注入目标进程中,再调用TerminateThread()的结束进

2.基于核心态的PspTerminateThread()结束进程。

原理:内核态搜索未导出函数PspTerminateThread()结束进程。

二.监控配置:

1.进程监控

本功能封装在CPage2::OnBnClickedOk()中。应用层传递消息控制字给内核层,内核层SSDT挂钩了内核函数ZwCreateProcess(),对每个新创建进程进行用户询问。

注册表监控

本功能封装在CPage2::OnBnClickedCancel()中。应用层传递消息控制字给内核层,内核层SSDT挂钩了内核函数ZwSetValueKey(),对每个注册表访问进行用户询问。

3.模块监控

本功能封装在CPage2::OnBnClickedButton1 ()中。应用层传递消息控制字给内核层,内核层SSDT挂钩了内核函数ZwLoadDriver(),对每个内核模块加载进行用户询问。

4.U盘辅助插件

本功能对U盘可疑文件(如AUTORUNS.INF)进行彻底查杀,在源头上封堵了U盘病毒的来源

5.脚本木马查杀

本功能采用特征码杀毒方式,能全盘扫描脚本木马,速度快,稳定性高,可靠性好。

三.驱动模块检测:

本功能采用两种不同的方式列举系统驱动:ZwQuerySystemInformation()和ZwQueryDirectoryObject()方式。前者属于常规法,容易遭到病毒拦截,而后者列举了系统的对象目录,极少数病毒会注意到这个地方,所以采用这种方式查找病毒安全又可靠。本来我们打算移进内核态。但由于这两个函数能在应用态调用,为了增强稳定性,就在应用层实现了。

四.LSP枚举:

LSP枚举我们采用了API:WSCEnumProtocols()、WSCGetProviderPath()遍历每个socket协议链得到相应模块路径。病毒有可能更改这个协议链表,所以这里列举出来给用户自行判断。

五.SSDT操作:

1.SSDT枚举

本部分操作比较多。分别封装两个函数:CPage5::ShowSSDT(void), OnReShowSSDT()中。CPage5::ShowSSDT(void)调用

BOOL CMySystem::EnumSSDT( IN HANDLE hDriver )枚举SSDT。

其中原理大致为:从系统内核读取出SSDT表,然后使用PE文件操作,从系统内核文件ntoskrnl.exe中分别读取PE头部->数据目录->导出表->导出目录表->函数名数组指针。再通过内核中得到ntoskrnl.exe在内存中的基址,根据上述各数据得到相应的SSDT函数在内存中的正确地址,通过与前述得到的数据相对比,判断是否SSDT被更改。

关键函数代码:

//枚举SSDT

BOOL CMySystem::EnumSSDT( IN HANDLE hDriver )

{

HINSTANCE hNtDllInst = NULL;

ULONG ulNtDllOffset;

ULONG ulFuncNameCount = 0;

PIMAGE_EXPORT_DIRECTORY pImgExpDir = NULL;

PULONG pFuncNameArray = NULL;

ULONG i;

BOOL bOK = TRUE;

do

{

RealCount = 0; //个数清

if( pList ) //还有存没有释放

{

DestroyModList( pList ); //释放它

pList = NULL;

}

pList = CreateModList( &NTBase ); //创建模块信息链表,顺便得到NT基址

if( pList == NULL ) //创建失败

{

bOK = FALSE;

break;

}

if( !( hNtDllInst = LoadLibrary( L"ntdll" ) ) )

{

bOK = FALSE;

break;

}

/////////////////////////////////////////////////////////

//分配SSDT保存缓冲表

//得到SSDT个数

SSDT ssdt;

if( !GetSSDT( hDriver, &ssdt ) )

{

bOK = FALSE;

break;

}

if( TotalSSDTCount == -1 ) //得到SSDT个数失败

{

bOK = FALSE;

break;

}

if( pSSDTST ) //pSSDTST已有值,先释放它

{

free( pSSDTST );

pSSDTST = NULL;

}

pSSDTST = (pSSDTSaveTable)malloc( TotalSSDTCount * sizeof( SSDTSaveTable ) );

if( pSSDTST == NULL )

{

bOK = FALSE;

break;

}

for( i = 0; i < TotalSSDTCount; i ++ ) //初始化它

{

((pSSDTSaveTable)((ULONG)pSSDTST + i * sizeof(SSDTSaveTable)))->ulServiceNumber = -1;

((pSSDTSaveTable)((ULONG)pSSDTST + i *

sizeof(SSDTSaveTable)))->ulCurrentFunctionAddress = 0L;

((pSSDTSaveTable)((ULONG)pSSDTST + i *

sizeof(SSDTSaveTable)))->ulOriginalFunctionAddress = 0L;

memset( ((pSSDTSaveTable)((ULONG)pSSDTST + i *

sizeof(SSDTSaveTable)))->ServiceFunctionName, \

0, \

sizeof(((pSSDTSaveTable)((ULONG)pSSDTST + i *

sizeof(SSDTSaveTable)))->ServiceFunctionName));

memset( ((pSSDTSaveTable)((ULONG)pSSDTST + i *

sizeof(SSDTSaveTable)))->ModuleName, \

0, \

sizeof(((pSSDTSaveTable)((ULONG)pSSDTST + i *

sizeof(SSDTSaveTable)))->ModuleName));

}

/////////////////////////////////////////////////////////

//枚举

ulNtDllOffset = (ULONG)hNtDllInst;

//PE头部

ulNtDllOffset += ((PIMAGE_DOS_HEADER)hNtDllInst)->e_lfanew + sizeof( DWORD );

//数据目录

ulNtDllOffset += sizeof( IMAGE_FILE_HEADER ) + sizeof( IMAGE_OPTIONAL_HEADER ) - IMAGE_NUMBEROF_DIRECTORY_ENTRIES * sizeof( IMAGE_DATA_DIRECTORY );

//导出表

ulNtDllOffset = (DWORD)hNtDllInst +

((PIMAGE_DATA_DIRECTORY)ulNtDllOffset)->VirtualAddress;

//导出目录表

pImgExpDir = (PIMAGE_EXPORT_DIRECTORY)ulNtDllOffset;

//得到函数个数

ulFuncNameCount = pImgExpDir->NumberOfNames;

//函数名数组指针

pFuncNameArray = (PULONG)( (ULONG)hNtDllInst + pImgExpDir->AddressOfNames );

/////////////////////

//循环找函数名

for( i = 0; i < ulFuncNameCount; i ++ )

{

//函数名

PCSTR pszName = (PCSTR)( pFuncNameArray[i] + (ULONG)hNtDllInst );

if( pszName[0] == 'N' && pszName[1] == 't' ) //Nt 开头的函数

{

//查找表

LPWORD pOrdNameArray = (LPWORD)( (ULONG)hNtDllInst +

pImgExpDir->AddressOfNameOrdinals );

//函数地址

LPDWORD pFuncArray = (LPDWORD)( (ULONG)hNtDllInst +

pImgExpDir->AddressOfFunctions );

//函数代码

LPCVOID pFuncCode = (LPCVOID)( (ULONG)hNtDllInst +

pFuncArray[pOrdNameArray[i]] );

//获取服务号

SSDTEntry EntryCode;

memcpy( &EntryCode, pFuncCode, sizeof( SSDTEntry ) );

if( EntryCode.byMov == 0xB8 ) // MOV EAX, XXXX

{

ULONG ulAddr = 0;

if( !GetHook( hDriver, EntryCode.ulIndex, &ulAddr ) )

{

bOK = FALSE;

break;

}

////////////////////////

//通过地址得到模块名

char ModNameBuf[MAX_PATH+1];

memset( ModNameBuf, 0, sizeof( ModNameBuf ) );

if( GetModuleNameByAddr( ulAddr, pList, ModNameBuf,

sizeof( ModNameBuf )-1 ) )

{

memcpy( \

((pSSDTSaveTable)((ULONG)pSSDTST + RealCount * sizeof(SSDTSaveTable)))->ModuleName, \

ModNameBuf, \

sizeof( ModNameBuf ) \

);

}

////////////////////////////////////////////////////

//保存SSDT信息到缓冲表中

((pSSDTSaveTable)((ULONG)pSSDTST + RealCount *

sizeof(SSDTSaveTable)))->ulServiceNumber = \

EntryCode.ulIndex; //服务号

((pSSDTSaveTable)((ULONG)pSSDTST + RealCount *

sizeof(SSDTSaveTable)))->ulCurrentFunctionAddress = \

ulAddr; //当前函数地址

memcpy( \

((pSSDTSaveTable)((ULONG)pSSDTST + RealCount *

sizeof(SSDTSaveTable)))->ServiceFunctionName, \

pszName, \

sizeof( ((pSSDTSaveTable)((ULONG)pSSDTST + RealCount *

(SSDTSaveTable)))->ServiceFunctionName )

);

RealCount ++;

}

}

}

} while( FALSE );

::FreeLibrary( hNtDllInst );

if( bOK ) //成功

{

//获取剩下的服务号

for( i = RealCount; i < TotalSSDTCount; i ++ )

{

if( !GetHook( hDriver, i, &((pSSDTSaveTable)((ULONG)pSSDTST + i * sizeof(SSDTSaveTable)))->ulCurrentFunctionAddress ) )

{

bOK = FALSE;

break;

}

////////////////////////

//通过地址得到模块名

char ModNameBuf[MAX_PATH+1];

memset( ModNameBuf, 0, sizeof( ModNameBuf ) );

if( GetModuleNameByAddr( \

((pSSDTSaveTable)((ULONG)pSSDTST + i *

sizeof(SSDTSaveTable)))->ulCurrentFunctionAddress, \

pList, ModNameBuf, sizeof( ModNameBuf )-1 ) )

{

memcpy( \

((pSSDTSaveTable)((ULONG)pSSDTST + i *

sizeof(SSDTSaveTable)))->ModuleName, \

ModNameBuf, \

sizeof( ModNameBuf ) \

);

}

}

//按服务号进行排序

SSDTSTOrderByServiceNum( pSSDTST );

//获取原始函数地址

GetOldSSDTAddress();

}

if( pList )

{

DestroyModList( pList ); //释放模块链表

pList = NULL;

}

return bOK;

}

2.SSDT恢复:

该功能封装在CMySystem::SetSSDT()中。这个函数只是一个用户层通信函数,真正恢复函数在内核态中。内核态将用户层传来的SSDT函数正确地址,写入到内存中。其中为了防止被中断打乱,关闭了一次中断,操作完成后恢复中断。

六.文件管理器

本文件管理采用了独创的文件过滤驱动技术,未使用windows API,能查探、删除目前已知的绝大多数病毒、Rootkit等。

文件管理应用层负责与核心态通信。下面分析应用层框架:

1.列目录、文件

CPage6::OnItemexpanding(NMHDR *pNMHDR, LRESULT *pResult)函数负责响应文件管理器中树型控件的节点展开消息。然后将点击的路径传送至内核,由文件过滤驱动构造IRP包发送至相应卷驱动。根据卷驱动返回的数据包传递给应用层。应用层通过CPage6::IsMediaValid()、CPage6::IsPathValid()、

CPage6::AddDirectoryNodes()判断路径下是否有文件,是何种文件,并将信息添加至树型控件节点。相应的消息控制字为:IOCTL_MT_GETDIRINF、

IOCTL_MT_GETDIRNUMINF。其中最重要的函数代码如下:

UINT CPage6::AddDirectoryNodes(HTREEITEM hItem, CString &strPathName)

{

WCHAR wBuf[60];

DWORD bytesReturned=0;

ULONG num=0;

PDIRECTORY_INFO temp={0};

DIRECTORY_INFO_EX DIRECTORY_INFO_b;

CString str,str1,strFileSpec = strPathName;

if (strFileSpec.Right (1) != "\\")

strFileSpec += "\\";

char a[MAX_PATH];

str1=strFileSpec;

CMySystem::WCHARToChar(a,strFileSpec.GetBuffer(strFileSpec.GetLength()));

strFileSpec += "*.*";

DeviceIoControl(hDevice,(DWORD)IOCTL_MT_GETDIRNUMINF,a,sizeof(a),&num,sizeof(ULONG),&by tesReturned,NULL);

if(num==0)

{

AfxMessageBox(L"驱动未加载,列举出错!");

return 0;

}

temp=(PDIRECTORY_INFO)calloc(num,sizeof(DIRECTORY_INFO));

if(temp==NULL)

{

return 0;

}

DeviceIoControl(hDevice,(DWORD)IOCTL_MT_GETDIRINF,a,sizeof(a),temp,num*sizeof(DIRECTORY _INFO),&bytesReturned,NULL);

CWaitCursor wait;

WCHAR wTemp[MAX_PATH]={'\0'};

m_FileList.DeleteAllItems();

index=0;

SetPath(str1,hDevice);

for(ULONG i=0;i

{

TRACE("AddDirectoryNode:%d\n",i);

CMySystem::CharToWCHAR(wTemp,temp[i].FileName);

str.Format(L"%s",wTemp);

str=str1+str;

CString strFileName = (LPCTSTR) &temp[i].FileName;

if(PathIsDirectory(str))

{

if(strcmp(temp[i].FileName,"."))

{

if(strcmp(temp[i].FileName,".."))

{

CMySystem::CharToWCHAR(wTemp,temp[i].FileName);

HTREEITEM hChild =

m_FileTree.InsertItem ((LPCTSTR) wTemp,//&fd.cFileName,

ILI_CLSDFLD , ILI_OPENFLD , hItem , TVI_SORT);

CString strNewPathName = strPathName;

if (strNewPathName.Right (1) != "\\")

{strNewPathName += "\\";}

CMySystem::CharToWCHAR(wBuf,temp[i].FileName);

strNewPathName += wBuf;//fd.cFileName;

SetButtonState (hChild, strNewPathName);

}

}

}

else

{

DIRECTORY_INFO_b.DirectoryInfo=temp[i];

DIRECTORY_INFO_b.path=str1;

AddToListView(&DIRECTORY_INFO_b);

}

}

delete temp;

return num;

}

2.文件删除

文件删除分为普通删除与驱动删除。

(1)普通删除:调用Win32 API DeleteFile()删除文件。对

付普通病毒这种方式有效。但某些病毒会采用文件占用

式保护本体不被删除,甚至采用驱动形式保护,此时普

通删除无效。

(2) 驱动删除:传递控制字IOCTL_MT_KILLFILE至驱动

Explorer.sys,驱动删除病毒,此方式有一定危险性,但对病毒

有奇效。极少数病毒能逃离此法删除。

七.磁盘编辑器

1.十六进制编辑器界面处理

我们的磁盘编辑器界面采用了重载后的CEdit类。新类CHexEdit 响应了

WM_KILLFOCUS

WM_PAINT

WM_SETFOCUS

WM_SIZE

WM_VSCROLL

WM_HSCROLL

WM_GETDLGCODE

WM_ERASEBKGND

WM_LBUTTONDOWN

WM_LBUTTONDBLCLK

WM_MOUSEMOVE

WM_LBUTTONUP

WM_KEYDOWN

等消息。

并在WM_CHAR的响应函数CHexEdit::OnPaint()中绘制了三大部分:地址栏、十六进制栏、字符显示栏。其中的细节比较多,这里就不全部描述了。

3.硬盘编辑功能

硬盘编辑有两种选择,一种是普通的通过应用层API CreateFile()打开物理对象\\.\PhysicalDrive0,实现函数为CMySystem::ReadSector(__int64 Sect,BYTE* OutBuf).另一种在核心态自己构造IRP发送至磁盘驱动ATAPI.SYS(这是windows处理磁盘请求的最后一站,再往下就是硬盘IO指令了),直接绕过文件系统FSD.在我们的测试中,意外的发现这种极为底层的技术甚至连知名的影子系统,RVS,冰点……等还原软件被穿透。

八.网络防火墙

网络防火墙有两种用途,一种是建立规则,阻止或通过指定网络包。防火墙的驱动实现将在后面讲解。

1.建立防火墙规则

通CPage8:: OnButtonAdd()打开规则对话框,对规则进行相关配置后,调用CPage8::OnButtoninStall再调用CPage8::AddFilterToFw发送规则至驱动。

2.监视网络数据包

在驱动中我们自己实现了一个类似DbgPrint的函数。应用层中申请了一个定时器,反复读取内核传来的网络数据包。并分析数据包中的源IP、目标IP和数据包协议类型。相关函数为CPage8::OnBnClickedMonitor()

九.PE文件分析

文件分析部分没有什么内核技术,纯粹是个辅助性功能。

相应部分看函数便可知。

CPage9::LoadFile();

CPage9::IsPEFile()

CPage9::PrintFileHeader();

CPage9::PrintOptionAlHeader();

CPage9::PrintSectionInfo();

CPage9::printET();

CPage9::printIAT();

CPage9::UnLoadFile()

至此,应用层分析完毕。下面是驱动层。

驱动总框架:

驱动共有四个,分别为

KsBinSword.sys.

DrvFltIp.sys.

SIoctl.sys.

软件体系结构总结

第一章:1、软件体系结构的定义 国内普遍看法: 体系结构=构件+连接件+约束 2、软件体系结构涉及哪几种结构: 1、模块结构(Module) 系统如何被构造为一组代码或数据单元的决策 2、构件和连接件结构(Component-And-Connector,C&C) 系统如何被设计为一组具有运行时行为(构件)和交互(连接件)的元素 3、分配结构(Allocation) 展示如何将来自于模块结构或C&C结构的单元映射到非软件结构(硬件、开发组和文件系统) 3、视图视点模型 视点(View point) ISO/IEC 42010:2007 (IEEE-Std-1471-2000)中规定:视点是一个有关单个视图的规格说明。 视图是基于某一视点对整个系统的一种表达。一个视图可由一个或多个架构模型组成 架构模型 架构意义上的图及其文字描述(如软件架构结构图) 视图模型 一个视图是关于整个系统某一方面的表达,一个视图模型则是指一组用来构建 4、软件体系结构核心原模型 1、构件是具有某种功能的可复用的软件结构单元,表示了系统中主要的计算元素和数据存储。 2.连接件(Connector):表示构件之间的交互并实现构件

之间的连接 特性:1)方向性2)角色3)激发性4)响应特征 第二章 1、软件功能需求、质量属性需求、约束分别对软件架构产生的影响 功能性需求:系统必须实现的功能,以及系统在运行时接收外部激励时所做出的行为或响应。 质量属性需求:这些需求对功能或整个产品的质量描述。 约束:一种零度自由的设计决策,如使用特定的编程语言。 质量原意是指好的程度,与目标吻合的程度,在软件工程领域,目标自然就是需求。 对任何系统而言,能按照功能需求正确执行应是对其最基本的要求。 正确性是指软件按照需求正确执行任务的能力,这无疑是第一重要的软件质量属性。质量属性的优劣程度反映了设计是否成功以及软件系统的整体质量。 系统或软件架构的相关视图的集合,这样一组从不同视角表达系统的视图组合在一起构成对系统比较完整的表达

软件结构设计规范模板

软件结构设计规范

精选编制: 审核: 批准:

目录 1.简介 (6) 1.1.系统简介 (6) 1.2.文档目的 (6) 1.3.范围 (6) 1.4.与其它开发任务/文档的关系 (6) 1.5.术语和缩写词 (6) 2.参考文档 (8) 3.系统概述 (9) 3.1.功能概述 (9) 3.2.运行环境 (9) 4.总体设计 (10) 4.1.设计原则/策略 (10) 4.2.结构设计 (10) 4.3.处理流程 (10) 4.4.功能分配与软件模块识别 (11) 5.COTS及既有软件的使用 (12) 5.1.COTS软件的识别 (12) 5.2.COTS软件的功能 (12)

5.3.COTS软件的安全性 (12) 5.4.既有软件的识别 (12) 5.5.既有软件的功能 (13) 5.6.既有软件的安全性 (13) 6.可追溯性分析 (14) 7.接口设计 (15) 7.1.外部接口 (15) 7.2.内部接口 (15) 8.软件设计技术 (16) 8.1.软件模块 (16) 8.2.数据结构 (16) 8.3.数据结构与模块的关系 (16) 9.软件故障自检 (17)

1.简介 1.1.系统简介 提示:对系统进行简要介绍,包括系统的安全目标等。 1.2.文档目的 提示: 软件结构设计的目的是在软件需求基础上,设计出软件的总体结构框架,实现软件模块划分、各模块之间的接口设计、用户界面设计、数据库设计等等,为软件的详细设计提供基础。 软件结构设计文件应能回答下列问题: 软件框架如何实现软件需求; 软件框架如何实现软件安全完整度需求; 软件框架如何实现系统结构设计; 软件框架如何处理与系统安全相关的对软/硬件交互。 1.3.范围 1.4.与其它开发任务/文档的关系 提示:如软件需求和界面设计文档的关系 1.5.术语和缩写词 提示:列出项目文档的专用术语和缩写词。以便阅读时,使读者明确,从

【精品实验报告】软件体系结构设计模式实验报告

【精品实验报告】软件体系结构设计模式实验报告软件体系结构 设计模式实验报告 学生姓名: 所在学院: 学生学号: 学生班级: 指导老师: 完成日期: 一、实验目的 熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括组合模式、外观模式、代理模式、观察者模式和策略模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。 二、实验内容 使用PowerDesigner和任意一种面向对象编程语言实现组合模式、外观模式、代理模式、观察者模式和策略模式,包括根据实例绘制模式结构图、编写模式实例实现代码,运行并测试模式实例代码。 (1) 组合模式 使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。绘制类图并编程模拟实现。 (2) 组合模式 某教育机构组织结构如下图所示: 北京总部 教务办公室湖南分校行政办公室 教务办公室长沙教学点湘潭教学点行政办公室

教务办公室行政办公室教务办公室行政办公室 在该教育机构的OA系统中可以给各级办公室下发公文,现采用 组合模式设计该机构的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。(注:可以定义一个办公室类为抽象叶子构件类,再将教务办公室和行政办公室作为其子类;可以定义一个教学机构类为抽象容器构件类,将总部、分校和教学点作为其子类。) (3) 外观模式 某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件、加密、保存加密之后的文件。读取文件和保存文件使用流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观类完成文件的读取、加密和保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块,要求编程模拟实现。参考类图如下: reader = new FileReader();EncryptFacadecipher = new CipherMachine();writer = new FileWriter();-reader: FileReader-cipher: CipherMachine-writer: FileWriter +EncryptFacade () +fileEncrypt (String fileNameSrc,: voidString plainStr=reader.read(fileNameSrc); String fileNameDes)String

软件构架、架构和框架的区别

软件构架、架构和框架的区别 nizhigang2000的文章 软件框架(Software Framework)介绍 面向某领域(包括业务领域,如ERP,和计算领域,如GUI)的、可复用的“半成品”软件,它实现了该领域的共性部分,并提供一系列定义良好的可变点以保证灵活性和可扩展性。可以说,软件框架是领域分析结果的软件化,是领域内最终应用系统的模板。 随着软件规模的扩大、应用的广泛和软件复用技术的发展,以子程序或类(Class)为单位的软件复用有许多不足:(1)子程序库日趋其庞大以致于使用人员难以掌握,(2)大多数类粒度很小,且其自身往往不能完成有用的功能。这一问题迫使人们在复用中将一组类(或模块)及其交互作为一个整体来考虑,由此出现了软件框架。 软件框架至少包含以下组成部分: (1)一系列完成计算的模块,在此称为构件。 (2)构件之间的关系与交互机制。 (3)一系列可变点(也称热点,Hot-spots,或调整点)。 (4)可变点的行为调整机制。 开发人员通过软件框架的行为调整机制,将领域中具体应用所特有的软件模块绑定到该软件框架的可变点,从而得到最终应用系统,这一过程称为软件框架的例化(instantiation)。通过软件框架的使用,开发人员可将主要精力放在应用所特有的模块的开发上,从而大大提高了软件生产率和质量。 软件框架的行为调整机制是指如何针对具体的应用调整该框架的可变部分、如何在可变点加入特定应用模块所采用的方法和规则。行为调整机制可分为四种: (1)模板参数化。软件框架提供代码自动生成工具,该工具根据用户设置的参数自动生成所需的代码。 (2)继承和多态。通过面向对象中的子类继承和重载,在子类中加入新的功能或改变父类的行为。 (3)动态绑定。在运行时刻动态绑定所需的对象服务,可通过软件模式技术实现。 (4)构件替换。通过替换框架中可插拔的构件来加入业务特定的功能, 不同于一般的可复用软件制品,软件框架的一个显著特点是逆向控制(Inversion of Control),在复用过程中,前者需被显式调用,控制是在应用特定的模块中,软件框架则不然,应用开发人员只要将应用特定的模块绑定到框架内,框架则根据自己的交互机制自动调用该模块,控制由框架负责。 软件框架有很多种。按其应用的范围可分为: (1)系统基础设施框架。用于简化系统级软件的开发,如操作系统、用户界面、语言处理等,典型例子为MacApp, Microsoft’s MFC等。 (2)中间件集成框架。用于组装分布式应用和构件,典型例子为Microsoft’s DCOM, JavaSoft’s RMI, OMG’s CORBA等 (3)企业应用框架。用于各类应用领域,如电信、制造业、金融等。 按其表现形态可分为: (1)白盒框架。支持白盒复用,大型的类库或子程序库通常均提供白盒框架来协助复用。(2)黑盒框架。支持黑盒复用。中间件集成框架一般为黑盒框架。 构架和架构也就是通常所说的软件体系结构(software architecture).体系结构一般包括三个部分:构件,用于描述计算;连接器,用于描述构件的连接部分;配置,将构件和连接器组成一个有

软件体系结构设计说明书

软件体系结构设计说明书 编者说明: 随着OO方法论地日臻成熟,其思想也从编程(OOP)到了设计(OOD)和分析(OOA),而软件体系结构则是从设计的最高层进行设计与规划的技术,本文档模板就是用来帮助你从用例视图、逻辑视图、进程视图、部署视图等方面对系统进行总体描述。 1.文档简介 [本节主要是描述软件体系结构设计说明书的目的、范围、相关术语、参考资料和本文档的摘要性介绍。软件体系结构设计属于高层设计文档,是符合现代软件工程要求的概要设计。] 1.1 目的 [软件体系结构设计说明书,将从设计的角度对系统进行综合的描述,使用不同的视图来描述其不同方面。在本小节中,将对该文档的结构进行简要的说明,明确该文档针对的读者群,指导他们正确的地使用该文档。] 1.2 范围 [说明该文档所涉及的内容范围,以及将影响的内容。] 1.3 定义、首字母缩写词和缩略语 [与其它文档一样,该文档也需要将本文档中所涉及的所有术语、缩略语进行详细的定义。还有一种可简明的做法,就是维护在一个项目词汇表中,这样就可以避免在每个文档中都重复很多内容。] 1.4参考资料 [在这一小节中,应完整地列出该文档引用的所有文档。对于每个引用的文档都应该给出标题、标识号、日期以及来源,为阅读者查找这些文档提供足够详细的信息。] 1.5 概述 [在本小节中,主要是说明软件体系结构设计说明书各个部分所包含的主要内容,就像一个文章摘要一样。同时也应该对文档的组织方式进行解释。]

2. 体系结构表示方式 [本节说明软件体系结构在当前系统中的作用及其表示方式。它将列举其所必需的用例视图、逻辑视图、进程视图、部署视图或实施视图,并分别说明这些视图包含哪些类型的模型元素。] 3. 软件体系结构的目标和约束 [本节说明对软件体系结构具有某种重要影响的软件需求和用户目标,例如,系统安全性、保密性、第三方组件的使用、可移植性、发布和重新使用。它还要记录可能适用的特殊约束:设计与实施策略、开发工具、团队结构、时间表、遗留系统等。]

常用结构分析设计软件之比较

常用结构软件比较 目前的结构计算程序主要有:PKPM系列(TAT、SATWE)、TBSA系列(TBSA、TBWE、TBSAP)、BSCW、GSCAD、 SAP系列。其他一些结构计算程序如ETABS等,虽然功能强大,且在国外也相当流行,但国内实际上使用的不多,故不做详细讨论。 一、结构计算程序的分析与比较 1、结构主体计算程序的模型与优缺点 从主体计算程序所采用的模型单元来说 TAT和TBSA属于结构空间分析的第一代程序,其构件均采用空间杆系单元,其中梁、柱均采用简化的空间杆单元,剪力墙则采用空间薄壁杆单元。在形成单刚后再加入刚性楼板的位移协调矩阵,引入了楼板无限刚性假设,大大减少了结构自由度。 SATWE、TBWE和TBSAP 在此基础上加入了墙元,SATWE和TBSAP还加入了楼板分块刚性假设与弹性楼板假设,更能适应复杂的结构。SATWE提供了梁元、等截面圆弧形曲梁单元、柱元、杆元、墙元、弹性楼板单元(包括三角形和矩形薄壳单元、四节点等参薄壳单元)和厚板单元(包括三角形厚板单元和四节点等参厚板单元)。另外,通过与JCCAD的联合,还能实现基础-上部结构的整体协同计算。TBSAP提供的单元除了常用的杆单元、梁柱单元外,还提供了用以计算板的四边形或三角形壳元、墙元、用以计算厚板转换层的八节点四十八自由度三维元、广义单元(包括罚单元与集中单元),以及进行基础计算用的弹性地基梁单元、弹性地基柱单元(桩元)、三角形或四边形弹性地基板单元和地基土元。TBSAP可以对结构进行基础-上部结构-楼板的整体联算。 从计算准确性的角度来说 SAP84是最为精确的,其单元类型非常丰富,而且能够对结构进行静力、动力等多种计算。最为关键的是,使用SAP84时能根据结构的实际情况进行单元划分,其计算模型是最为接近实际结构。 BSCW和GSCAD的情况比较特殊,严格说来这两个程序均是前后处理工具,其开发者并没有进行结构计算程序的开发。但BSCW与其计算程序一起出售,因此有必要提一下。BSCW一直是使用广东省建筑设计研究院的一个框剪结构计算软件,这个程序应属于空间协同分析程序,即结构计算的第二代程序(第一代为平面分析,第二代为空间协同,第三代为空间分析)。GSCAD则可以选择生成SS、TBSA、TAT或是SSW的计算数据。SS和SSW均是广东省建筑设计研究院开发的,其中SS采用空间杆系模型,与TBSA、TAT属于同一类软件;而SSW根据其软件说明来看也具有墙元,但不清楚其墙元的类型,而且此程序目前尚未通过鉴定。 薄壁杆件模型的缺点是: 1、没有考虑剪力墙的剪切变形。 2、变形不协调。

软件体系结构

课程名称:软件体系结构 课程编号:C304 课程学分:2 适用学科:计算机应用技术 软件体系结构 Software Architecture 教学大纲 一、课程性质 本课程是为计算机应用专业研究生开设选修课。软件体系结构是软件开发设计的高级课程,对培养计算机应用专业研究生今后从事大型软件开发工作有重大意义。 二、课程教学目的 学生通过本课程的学习后,在概念上建立从体系结构看待软件系统的观念,理解体系结构设计的优劣对软件系统质量的影响;掌握软件体系结构的建模、评价与检测的方法,能够应用上述方法评价软件体系结构的质量。 三、课程教学基本内容及基本要求 第一章绪论(2学时) 1、软件体系结构概述 2、研究内容与方法 第二章软件体系结构建模理论(2学时) 1、软件体系结构描述语言ADL简介 2、时序逻辑描述语言LOTOS简介 3、实例研究:流媒体信道调度模型及描述

第三章软件体系结构一致性检测(2学时) 1、软件体系结构一致性 2、软件体系结构一致性测试算法 3、实例研究1-三层C/S结构一致性检测 第四章软件体系结构评价(4学时) 1、软件体系结构评价模型 2、软件体系结构性能评价 3、软件体系结构可靠性评价 4、实例研究基于C/S结构的视频点播系统性能研究 第五章软件体系结构案例分析(16学时) 1、COBAR体系结构简介 2、P2P体系结构简介 3、网格体系结构简介 四、本课程与其它课程的联系与分工 本课程的先修课程为《面向对象程序》及《分布式数据库》,通过上述课程的学习,使学生能够体会大型软件开发的基本过程,体会到软件开发中体系结构的重要性。 五、实践环节教学内容的安排与要求 结合本研究室的研究课题,评价软件体系结构的性能。 六、本课程课外练习的要求 结合自己的研究课题,建立软件体系结构的性能模型和可靠性模型,以实际系统为被背景评价软件体系的性能。

软件设计与体系结构期末复习整理解读

1面向对象编程中是如何体现封装性的? 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。 2重载和重写的含义 重载是发生在一个类中,方法名相同,参数不同 重写(覆盖)是子类继承父类,子类可以通过重写的方法隐藏继承的方法 3 什么是接口回调,过程细节是什么? 概念:把可以实现某一接口的类创建的对象的引用赋给该接口声明接口变量,那么该接口变量可以调用被类实现(重写)的接口方法。 4试举例说明什么是组合关系和依赖关系 组合(关联)关系:A类中成员变量是用B类声明的对象。公司--职员 依赖关系:A类中某个方法的参数是用B类声明的对象,或某个方法返回的数据类型是B类的对象 5抽象类和接口,区别是什么?如何应用 抽象类:抽象类中有抽象方法;抽象类中不能用new运算符创建对象;抽象类的对象做商转型对象 接口:(1)接口中只可以有public权限的抽象方法,不能有非抽象方法; (2)接口由类去实现,即一个类如果实现一个接口,那么他必须重写接口中的抽象方法 (3)接口回调 区别:接口中只有常量,不能有变量;抽象类中既可以有常量也可以有变量; 抽象类中也可以有非抽象方法,接口不可以。 应用:定义抽象方法:public abstract void 方法名(); 在子类实现抽象方法:public void 方法名(){} 接口:public interface 接口名{}接口只负责定义规则,不负责任何实现;实现交给实现接口的类 (6)面向对象的六条基本原则包括: 开闭原则,里式代换原则,单一职责,依赖倒转、迪米特法则(接口隔离)。 (7)什么是设计模式? 设计模式是从许多优秀的软件系统中总结出的成功的可复用的设计方案。是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性 (8)什么是框架?框架与模式的区别有哪些? 框架是针对某个领域,提供用于开发应用系统的类的集合。 区别:层次不同、范围不同、相互关系

软件体系结构设计说明书(模板)

软件体系结构设计说明书 1.文档简介 [本节主要是描述软件体系结构设计说明书的目的、范围、相关术语、参考资料和本文档的摘要性介绍。软件体系结构设计属于高层设计文档,是符合现代软件工程要求的概要设计。] 1.1 目的 [软件体系结构设计说明书,将从设计的角度对系统进行综合的描述,使用不同的视图来描述其不同方面。在本小节中,将对该文档的结构进行简要的说明,明确该文档针对的读者群,指导他们正确的地使用该文档。] 1.2 范围 [说明该文档所涉及的内容范围,以及将影响的内容。] 1.3 定义、首字母缩写词和缩略语 [与其它文档一样,该文档也需要将本文档中所涉及的所有术语、缩略语进行详细的定义。还有一种可简明的做法,就是维护在一个项目词汇表中,这样就可以避免在每个文档中都重复很多内容。] 1.4参考资料 [在这一小节中,应完整地列出该文档引用的所有文档。对于每个引用的文档都应该给出标题、标识号、日期以及来源,为阅读者查找这些文档提供足够详细的信息。] 1.5 概述 [在本小节中,主要是说明软件体系结构设计说明书各个部分所包含的主要内容,就像一个文章摘要一样。同时也应该对文档的组织方式进行解释。] 2. 体系结构表示方式 [本节说明软件体系结构在当前系统中的作用及其表示方式。它将列举其所必需的用例视图、逻辑视图、进程视图、部署视图或实施视图,并分别说明这些视图包含哪些类型的模型元素。]

3. 软件体系结构的目标和约束 [本节说明对软件体系结构具有某种重要影响的软件需求和用户目标,例如,系统安全性、保密性、第三方组件的使用、可移植性、发布和重新使用。它还要记录可能适用的特殊约束:设计与实施策略、开发工具、团队结构、时间表、遗留系统等。] 4.用例视图 [本节使用用例分析技术所生成的系统用例模型,描述其中的一些用例或场景。在该模型中纳入用例或场景,应该是系统中最重要、最核心的功能部分。] [另外,在本节中还应该选择一个主要的用例,对其进行描述与解释,以帮助读者了解软件的实际工作方式,解释不同的设计模型元素如何帮助系统实现。] 5. 逻辑视图 [逻辑视图主要是反映系统本质的问题领域类模型,在逻辑视图中将列出组成系统的子系统、包。而对每个子系统、包分解成为一个个类,并说明这些关键的实体类的职责、关系、操作、属性。这也是OO思想的体现,以类、类与类之间的协作、包、包与包之间的协作模型来表达系统的逻辑组织结构。] 5.1概述 [在本小节中,列出逻辑视图的顶层图,该图将反映系统由哪些包组成,每个包之间的关系与协作,以及包的层次结构。使得读者对整个软件体系结构有一个整体的了解。] 5.2影响软件体系结构的重要设计包 [在本小节中,将从逻辑视图中选择有重要意义的设计包,每个设计包有一个小节来描述,说明这些包的名称、简要的说明、该包中的主要类和相关的类图。对于包中的重要的类,还应该说明其名称、简要说明、主要职责、操作、属性等。] 6. 进程视图 [本节主要描述该软件体系结构下,系统运行态的情况。描述系统在执行时,包括哪些进程(包括线程、进程、进程组),以及它们之间是如何进行通信的、如何进行消息传递、接口如何。并且来说明如何进行组织。]

设计院常用结构计算软件比较

常用结构软件比较 摘要:本人在设计院工作,有机会接触多个结构计算软件,加上自己也喜欢研究软件,故对各种软件的优缺点有一定的了解。现在根据自己的使用体会,从设计人员的角度对各个软件作一个评价,请各位同行指正。本文仅限于混凝土结构计算程序。 关键词:结构软件结构设计 目前的结构计算程序主要有:PKPM系列(TAT、SATWE)、TBSA系列(TBSA、TBWE、TBSAP)、BSCW、GSCAD、SAP系列。其他一些结构计算程序如ETABS等,虽然功能强大,且在国外也相当流行,但国内实际上使用的不多,故不做详细讨论。 一、结构计算程序的分析与比较 1、结构主体计算程序的模型与优缺点 从主体计算程序所采用的模型单元来说 TAT和TBSA属于结构空间分析的第一代程序,其构件均采用空间杆系单元,其中梁、柱均采用简化的空间杆单元,剪力墙则采用空间薄壁杆单元。在形成单刚后再加入刚性楼板的位移协调矩阵,引入了楼板无限刚性假设,大大减少了结构自由度。SATWE、TBWE 和TBSAP在此基础上加入了墙元,SATWE和TBSAP还加入了楼板分块刚性假设与弹性楼板假设,更能适应复杂的结构。SATWE提供了梁元、等截面圆弧形曲梁单元、柱元、杆元、墙元、弹性楼板单元(包括三角形和矩形薄壳单元、四节点等参薄壳单元)和厚板单元(包括三角形厚板单元和四节点等参厚板单元)。另外,通过与JCCAD的联合,还能实现基础-上部结构的整体协同计算。TBSAP提供的单元除了常用的杆单元、梁柱单元外,还提供了用以计算板的四边形或三角形壳元、墙元、用以计算厚板转换层的八节点四十八自由度三维元、广义单元(包括罚单元与集中单元),以及进行基础计算用的弹性地基梁单元、弹性地基柱单元(桩元)、三角形或四边形弹性地基板单元和地基土元。TBSAP可以对结构进行基础-上部结构-楼板的整体联算。 从计算准确性的角度来说 SAP84是最为精确的,其单元类型非常丰富,而且能够对结构进行静力、动力等多种计算。最为关键的是,使用SAP84时能根据结构的实际情况进行单元划分,其计算模型是最为接近实际结构。BSCW和GSCAD的情况比较特殊,严格说来这两个程序均是前后处

软件体系结构

软件体系结构课程报告 一、简答题: (每题10分,共40分) 1.简述软件体系结构建模中“4+1”视图模型,并举一示例模型。 答:4+1视图模型从5个不同视角(逻辑视图,进程视图,物理视图,开发视图和场景视图)来描述软件体系结构.每一个视图只关心系统的侧面,5个视图结合在一起才能反映系统的软件体系结构的全部内容. 最终用户:功能需求编程人员:软件管理 系统集成人员:性能可扩充性,吞吐量等. 系统工程人员:系统拓扑,安装通信等. 举例:开发视图. 开发视图也称为模块视图,主要侧重于软件模块的组织和管理.软件可通过程序库或子系统进行组织,这样,对于一个软件系统,就可以由不同的人进行开发.开发视图要考虑软件内部的需求,如软件开发的容易性,软件的重用和软件的通用性,要充分考虑由于具体开发工具的不同而带来的局限性.开发视图通过系统输入输出关系的模型图和子系统图来描述.层次结构风格.

2. 简述层次体系结构风格及其特点,并举一示例。 答:层次系统组织成一个层次结构,每一层为上层服务,并作为下层客户.连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束. 这种风格支持基于可增加抽象层的设计.这样,允许将一个复杂问题分解成 一个增量步骤序列的实现.由于每一层最多只影响两层,同时只要给相邻层 提供相同接口,允许每一层用不同的方法实现,同样为软件重用提供了强大 的支持.分层同用协议. (1).支持基于抽象程度递增的系统设计,使设计师可以把一个复杂系统按递增的 步骤进行分解. (2).支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多 影响相邻的上下层. (3)支持重用,只要提供的服务接口定义不变,同一层的不同实现可以交换使用. 不足之处: (1).并不是每个系统都可以很容易的划分为分层的模式,甚至即使一个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把一些低级或高级的功能综合起来. (2)很难找到一个合适的,正确的层次抽象方法.

软件体系结构期末复习题概述

《软件体系结构》期末复习题 简答题: 1、软件体系结构建模的种类有: 结构模型、框架模型、动态模型、过程模型、功能模型。 2、“4+1”视图模型从5个不同的视角包括: 逻辑视图、进程视图、物理视图、开发视图和场景视图来描述软件体系结构。 3、构件:是具有某种功能的可重用的软件模板单元,表示了系统中主要的计算元素和数据存储。 连接件:表示构件之间的交互。 配置:表示构件和连接件的拓扑逻辑和约束。 端口:表示构件和外部环境的交互点。 角色:定义了该连接交互的参与者。 4、画出“4+1”视图模型图,分析各部分的原理和功能。 5、软件体系结构风格: 是描述某一特定应用领域中系统组织方式的惯用模式。 6、软件体系结构 (Software Architecture) 软件体系结构以组件和组件交互的方式定义系统,说明需求与成品系统之间的对应关系,描述系统级别的可伸缩性、能力、吞吐量、一致性和兼容性等属性。软件体系结构由组件、连接件和属性组成。 7、分层系统的优点有: 1)支持基于抽象程度递增的系统设计,使设计者可以把一个复杂系统按递增的步骤进行分解; 2)支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻的上下层; 3)支持重用。只要提供的服务接口定义不变,同一层的不同实现可以交换使用。这样,就可

以定义一组标准的接口,而允许各种不同的实现方法。 8、分层系统的缺点有: 1)并不是每个系统都可以很容易地划分为分层的模式,甚至即使一个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把一些低级或高级的功能综合起来; 2)很难找到一个合适的、正确的层次抽象方法。 9、 B/S体系结构的优点有什么? 答:1)基于B/S体系结构的软件,系统安装、修改和维护全在服务器端解决。用户在使用系统时,仅仅需要一个浏览器就可运行全部的模块,真正达到了“零客户端”的功能,很容易在运行时自动升级。 2)B/S体系结构还提供了异种机、异种网、异种应用服务的联机、联网、统一服务的最现实的开放性基础。 10、B/S体系结构的缺点有什么? 答:1)B/S体系结构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。 2)B/S体系结构的系统扩展能力差,安全性难以控制。 3)采用B/S体系结构的应用系统,在数据查询等响应速度上,要远远地低于C/S体系结构。 4)B/S体系结构的数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理(OLTP)应用。 11、DSSA 答案:DSSA就是在一个特定应用领域中为一组应用提供组织结构参考的标准软件体系结构 11、软件体系结构的动态性主要分为: 交互式动态性、结构化动态性、体系结构动态性等三类。 12、请画出基于构件的动态系统结构模型画。 13、软件产品线 产品线是一个产品集合,这些产品共享一个公共的、可管理的特征集,这个特征集能满足选定的市场或任务领域的特定需求。这些系统遵循一个预描述的方式,在公共的核心资源(core assets)基础上开发的 14、SOA 即service-oriented architecture,面向服务架构。它是一个组件模型,它 将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接 口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于 实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的 系统中的服务可以以一种统一和通用的方式进行交互。 14、RIA

软件功能结构设计

软件功能结构设计 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。 作为计算机应用的一部分,使用计算机对网上新闻发布进行管理,具有着手于管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高网上新闻发布的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。Active Server Pages即ASP,是一套微软开发的服务器脚本环境,使用它可以创建和运行动态、交互的Web服务器应用程序。ASP内含于IIS3.0和IIS4.0之中,通过ASP我们可以结合HTML网页、ASP指令和ActiveX元件建立动态、交互且高效的Web服务器应用程序。 目前,ASP技术已风靡全球,在Internet上几乎处处都能看到它的身影,ASP技术的出现和发展给曾经以静态内容为主的Web带来了全新的动态效果,使其具有更加灵活和方便的交互特性,在Internet中实现信息的传递和检索越来越容易。正因为如此,ASP迅速被广大网络设计和开发人员所接受,成为首选的网站开发和编程技术。 一、基本功能结构 (一)数据库管理系统结构 数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。 数据库技术是由传统的文件系统发展而来的,从层次模型、网状模型发展到关系模型。数据库技术是数据管理的最新技术,是计算机科学的一个重要分支,它能指导我们正确地设计数据库系统,它的出现极大地促进了计算机应用的发展。采用数据库技术的原理和方法可以有效地设计实用的数据库系统。一个完整的数据库系统包括数据库管理系统(DBMS),数据库管理员(DBA)、数据库(DB)、应用程序和相应的硬件设施。 目前许多数据库管理系统都基于关系模型,关系模型的主要特点是用表格结构表达实体,用键表示实体与实体之间的联系。与层次模型和网状模型相比,关系模型比较简单,容易为初学者接受。关系模型是由若干个关系模式组成的集合,关系模式相当于记录类型,它的实例称为关系。每个关系是一张表格。表格简单,用户易懂,用户只需用简单的查询语句就可以对数据库进行数据操作,并不涉及到存储结构,访问技术等细节。关系模型是数学化的模型,要用到集合论,离散数学等知识。SQL语言是关系数据库的代表性语言,已经得到广泛

软件体系结构课后作业及答案

1、就项目管理方面而言,软件重用项目与非重用项目有哪些不同之处。 答:使用软件重用技术可减少重复工作,提高软件生产率, 缩短开发周期。同时,由于软构建大多经过严格的质量认证,因此有助于改善软件质量,大量使用构建,软件的灵活性和标准化程度可得到提高。 2、实际参与/组织一个软件重用项目的开发,然后总结你是如何组织该项目的开发的 答:参加了一个网页管理系统的开发,该项目重复使用已有的软件产品用于开发新的软件系统,以达到提高软件系统的开发质量与效率,降低开发成本的目的。在过程中使用了代码的复用、设计结果的复用、分析结果的复用、测试信息的复用等。 3、为什么要研究软件体系结构? 答:1.软件体系结构是系统开发中不同参与者进行交流和信息传播的媒介。 2.软件体系结构代表了早期的设计决策成果。 3.软件体系结构可以作为一种可变换的模型。 4、根据软件体系结构的定义,你认为软件体系结构的模型应该由哪些部分组成? 答:构件(component)可以是一组代码,如程序的模块;也可以是一个独立的程序(如数据库的SQL服务器); 连接件(connector)是关系的抽象,用以表示构件之间的相互作用。如过程调用、管道、远程过程调用等; 限制(constrain):用于对构件和连接件的语义说明。 5、在软件体系结构的研究和应用中,你认为还有哪些不足之处? 答:(1)缺乏同意的软件体系结构的概念,导致体系结构的研究范畴模糊。 (2)ADL繁多,缺乏同意的ADL的支持。 (3)软件体系结构研究缺乏统一的理论模型支持。 (4)在体系结构描述方便,尽管出现了多种标准规范或建议标准,但仍很难操作。 (5)有关软件体系结构性质的研究尚不充分,不能明确给出一个良体系结构的属性或判定标准,没有给出良体系结构的设计指导原则,因而对于软件开发实践缺乏有力的促进作用。 (6)缺乏有效的支持环境软件体系结构理论研究与环境支持不同步,缺乏有效的体系结构分析、设计、方针和验证工具支持,导致体系结构应用上的困难。 (7)缺乏有效的体系结构复用方案。 (8)体系结构发现方法研究相对欠缺。 1、选择一个规模合适的系统,为其建立“4+1”模型。 逻辑视图(Logical View),设计的对象模型(使用面向对象的设计方法时)。 过程视图(Process View),捕捉设计的并发和同步特征。 物理视图(Physical View),描述了软件到硬件的映射,反映了分布式特性。 开发视图(Development View),描述了在开发环境中软件的静态组织结构。 架构的描述,即所做的各种决定,可以围绕着这四个视图来组织,然后由一些用例(use cases)或场景(scenarios)来说明,从而形成了第五个视图。

常用建筑结构设计软件比较

常用结构软件比较 本人在设计院工作,有机会接触多个结构计算软件,加上自己也喜欢研究软件,故对各种软件的优缺点有一定的了解。现在根据自己的使用体会,从设计人员的角度对各个软件作一个评价,请各位同行指正。本文仅限于混凝土结构计算程序。 目前的结构计算程序主要有:PKPM系列(TAT、SATWE)、TBSA系列(TBSA、TBWE、TBSAP)、BSCW、GSCAD、 SAP系列。其他一些结构计算程序如ETABS等,虽然功能强大,且在国外也相当流行,但国内实际上使用的不多,故不做详细讨论。 一、结构计算程序的分析与比较 1、结构主体计算程序的模型与优缺点 从主体计算程序所采用的模型单元来说 TAT和TBSA属于结构空间分析的第一代程序,其构件均采用空间杆系单元,其中梁、柱均采用简化的空间杆单元,剪力墙则采用空间薄壁杆单元。在形成单刚后再加入刚性楼板的位移协调矩阵,引入了楼板无限刚性假设,大大减少了结构自由度。 SATWE、TBWE和TBSAP在此基础上加入了墙元,SATWE和TBSAP还加入了楼板分块刚性假设与弹性楼板假设,更能适应复杂的结构。SATWE提供了梁元、等截面圆弧形曲梁单元、柱元、杆元、墙元、弹性楼板单元(包括三角形和矩形薄壳单元、四节点等参薄壳单元)和厚板单元(包括三角形厚板单元和四节点等参厚板单元)。另外,通过与JCCAD的联合,还能实现基础-上部结构的整体协同计算。TBSAP提供的单元除了常用的杆单元、梁柱单元外,还提供了用以计算板的四边形或三角形壳元、墙元、用以计算厚板转换层的八节点四十八自由度三维元、广义单元(包括罚单元与集中单元),以及进行基础计算用的弹性地基梁单元、弹性地基柱单元(桩元)、三角形或四边形弹性地基板单元和地基土元。TBSAP可以对结构进行基础-上部结构-楼板的整体联算。 从计算准确性的角度来说 SAP84是最为精确的,其单元类型非常丰富,而且能够对结构进行静力、动力等多种计算。最为关键的是,使用SAP84时能根据结构的实际情况进行单元划分,其计算模型是最为接近实际结构。 BSCW和GSCAD的情况比较特殊,严格说来这两个程序均是前后处理工具,其开发者并没有进行结构计算程序的开发。但BSCW与其计算程序一起出售,因此有必要提一下。BSCW一直是使用广东省建筑设计研究院的一个框剪结构计算软件,这个程序应属于空间协同分析程序,即结构计算的第二代程序(第一代为平面分析,第二代为空间协同,第三代为空间分析)。GSCAD则可以选择生成SS、TBSA、TAT或是SSW的计算数据。SS和SSW均是广东省建筑设计研究院开发的,其中SS采用空间杆系模型,与TBSA、TAT属于同一类软件;而SSW根据其软件说明来看也具有墙元,但不清楚其墙元的类型,而且此程序目前尚未通过鉴定。 薄壁杆件模型的缺点是: 1、没有考虑剪力墙的剪切变形。 2、变形不协调。 当结构模型中出现拐角刚域时,截面的翘曲自由度(对应的杆端力为双力矩)不连续,造成误差。另外由于此模型假定薄壁杆件的断面保持平截面,实际上忽略了各墙肢的次要变形,增大了结构刚度。同一薄壁杆墙肢数越多,刚度增加越大;薄壁杆越多,刚度增加越大。但另一方面,对于剪力墙上的洞口,空间杆系程序只能作为梁进行分析,将实际结构中连梁对墙肢的一段连续约束简化为点约束,削弱了结构刚度。连梁越高,则削弱越大;连梁越多,则削弱越大。所以计算时对实际结构的刚度是增大还是削弱要看墙肢与连梁的比例。 杆单元点接触传力与变形的特点使TBSA、TAT等计算结构转换层时误差较大。因为从实

软件体系结构试题试题+答案

1、设计模式一般用来解决什么样的问题( a) A.同一问题的不同表相B不同问题的同一表相 C.不同问题的不同表相 D.以上都不是 2、下列属于面向对象基本原则的是( c ) A.继承 B.封装 C.里氏代换D都不是 3、Open-Close原则的含义是一个软件实体( a ) A.应当对扩展开放,对修改关闭. B.应当对修改开放,对扩展关闭 C.应当对继承开放,对修改关闭 D.以上都不对 4、当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用(a )模式。 A.创建型 B.结构型C行为型D.以上都可以 5、要依赖于抽象,不要依赖于具体。即针对接口编程,不要针对实现编程,是( d ) 的表述 A.开-闭原则 B.接口隔离原则 C.里氏代换原则 D.依赖倒转原则 6、依据设计模式思想,程序开发中应优先使用的是( a )关系实现复用。 A, 委派 B.继承C创建 D.以上都不对 复用方式:继承和组合聚合(组合委派) 7、设计模式的两大主题是( d ) A.系统的维护与开发 B 对象组合与类的继承 C.系统架构与系统开发 D.系统复用与系统扩展 8、单子模式中,两个基本要点( a b )和单子类自己提供单例 A .构造函数私有 B.唯一实例 C.静态工厂方法 D.以上都不对 9、下列模式中,属于行为模式的是( b ) A.工厂模式B观察者C适配器以上都是 10、“不要和陌生人说话”是( d )原则的通俗表述 A.接口隔离 B.里氏代换 C.依赖倒转 D.迪米特:一个对象应对其他对 象尽可能少的了解 11、构造者的的退化模式是通过合并(c )角色完成退化的。 A.抽象产品B产品C创建者D使用者 12、单子(单例,单态)模式类图结构如下: 下列论述中,关于”0..1”表述的不正确的是( d ) A.1表示,一个单例类中,最多可以有一个实例. B.”0..1”表示单例类中有不多于一个的实例 C.0表示单例类中可以没有任何实例 D.0表示单例类可以提供其他非自身的实例 13、对象适配器模式是(a )原则的典型应用。 A.合成聚合复用原则 B.里式代换原则 C.依赖倒转原则 D.迪米特法则

软件体系结构期末复习题

软件体系结构期末 复习题

《软件体系结构》期末复习题 简答题: 1、软件体系结构建模的种类有: 结构模型、框架模型、动态模型、过程模型、功能模型。 2、“4+1”视图模型从5个不同的视角包括: 逻辑视图、进程视图、物理视图、开发视图和场景视图来描述软件体系结构。 3、构件:是具有某种功能的可重用的软件模板单元,表示了系统中主要的计算元素和数据存储。 连接件:表示构件之间的交互。 配置:表示构件和连接件的拓扑逻辑和约束。 端口:表示构件和外部环境的交互点。 角色:定义了该连接交互的参与者。 4、画出“4+1”视图模型图,分析各部分的原理和功能。 5、软件体系结构风格: 是描述某一特定应用领域中系统组织方式的惯用模式。

6、软件体系结构 (Software Architecture) 软件体系结构以组件和组件交互的方式定义系统,说明需求与成品系统之间的对应关系,描述系统级别的可伸缩性、能力、吞吐量、一致性和兼容性等属性。软件体系结构由组件、连接件和属性组成。 7、分层系统的优点有: 1)支持基于抽象程度递增的系统设计,使设计者能够把一个复杂系统按递增的步骤进行分解; 2)支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻的上下层; 3)支持重用。只要提供的服务接口定义不变,同一层的不同实现能够交换使用。这样,就能够定义一组标准的接口,而允许各种不同的实现方法。 8、分层系统的缺点有: 1)并不是每个系统都能够很容易地划分为分层的模式,甚至即使一个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把一些低级或高级的功能综合起来; 2)很难找到一个合适的、正确的层次抽象方法。 9、 B/S体系结构的优点有什么? 答:1)基于B/S体系结构的软件,系统安装、修改和维护全在服务器端解决。用户在使用系统时,仅仅需要一个浏览器就可运行全部的模块,真正达到了“零客户端”的功能,很容易在运行时自动升级。

软件设计模式与体系结构

软件设计模式与体系结构

————————————————————————————————作者:————————————————————————————————日期: ?

计算机科学与技术学院 《软件设计模式与体系结构》 课程作业(一) (2016/2017学年第二学期) 学生姓名:雷君 学生专业:软件工程 学生班级:142601 学生学号: 2 指导教师:王飞

目录 实验一.............................................. 1工厂方法模式——汽车保险 (1) 抽象工厂方法模式——房屋信息 (3) 实验二6? 组合模式——空军指挥系统 (6) 适配器模式——客户信息验证................................................ 错误!未定义书签。实验三. (11) 桥接模式——几何立体体积?错误!未定义书签。 访问者模式——计算机部件销售软件................................................................ 14 实验四. (17) 策略模式——整数排序1?7 状态模式——交通信号灯?19 实验五............................................. 21 M VC软件体系结构.. (21)

实验一 工厂方法模式——汽车保险 【实验内容】 在例2.3的汽车保险管理应用程序实例上添加一个名为LuxuryCarInsurance的类,并且,该类要与其他的类一样能执行相应的功能。 【添加代码】 1、添加LuxuryCarInsurance类: public classLuxuryCarInsurance implements AutoInsurance { private String description; public String getInsuranceDescription() { ?description =" LuxuryCarInsurance:\n\nLuxuryCarInsurance coverage pays for medical bills" + " lost wages, rehabilitation,treatmentand/or" + ?" funeral costs for anyone injured or killed" +?" byyour car. Such coverage will alsopay for" + " pain and suffering damages when a third "+ "partysuccessfully sues. "; return description; } } 2、添加LuxuryCarPolicyProducer类: public class LuxuryCarPolicyProducer implements PolicyProducer { public AutoInsurance getPolicyObj()//Fruitfactory() { return new LuxuryCarInsurance(); } } 3、添加GUI: (1)public static final String LUXURYCAR ="LuxuryCar Insur ance"; (2)cmbInsuranceType.addItem(LUXURYCAR);

相关主题
文本预览
相关文档 最新文档