查看: 23474|回复: 8
大家现在都用什么收费系统?
签到天数: 129 天[LV.7]常住居民III
各位XDJM们,你们现在都用什么收费系统?收费的还是免费的还是PJ的?
签到天数: 129 天[LV.7]常住居民III
尽然没人回?
签到天数: 689 天[LV.9]以坛为家II
pubwin+万象
签到天数: 529 天[LV.9]以坛为家II
我们这正规网吧公安强制装pubwin.黑吧用万象2004破解版
签到天数: 1248 天[LV.10]以坛为家III
有的是被地方垄断的,嘟嘟牛
签到天数: 166 天[LV.7]常住居民III
一卡通+万象2004
签到天数: 141 天[LV.7]常住居民III
我们用龙管家,另加破解万象
签到天数: 129 天[LV.7]常住居民III
用PUBWIN的都是2007版本嘛?我指的黑吧的
签到天数: 697 天[LV.9]以坛为家II
tmd 被垄断了万象&&都是广告tnnd生气。。。
Powered by17岁少年破解网吧计费系统 只为能免费上网
网吧提供快捷、方便的上网服务,上网付费天经地义,而偏偏有人打着上网不缴钱的小算盘,近日,经营网吧的银某就遇到了这样的人。银先生在合川南津街经营一家网吧,9月3日晚上8点半,他发现网吧计费系统出了点问题,其中一台电脑已经没有费用,但却一直在线,走过去查看,一个年轻人坐在电脑跟前玩得正起劲,觉得有问题,他打电话报了警。民警赶到网吧进行了调查,发现是有人上网时利用黑客软件破解了网吧计费系统。原来,17岁的小陈下班后打算到网吧上网,碰巧同事小聂在网吧上完网正准备离开,小陈没有按规定到网管处缴费登记,而是直接就在小聂所用的13号机上起了网。小聂所缴的钱已经用完,如不续费,就不能继续上网。小陈说,他赶紧破解了网吧的计费系统,不一会软件生效,电脑没有关机,他依旧能继续上网,当他玩得正高兴时,民警来了。小陈的做法已构成非法改变计算机信息系统数据和应用程序的违法行为,由于他未满18岁,上网的时间也只有1个小时,最后警方依法给予他行政拘留3日不执行的处罚。
正文已结束,您可以按alt+4进行评论
相关搜索:
[责任编辑:greggteng]
热门搜索:
Copyright & 1998 - 2017 Tencent. All Rights Reserved免费发布咨询,坐等律师在线服务
需求发布后
10分钟内收到律师在线回复
平均有多个律师参与回复
得到了圆满解决
您的位置: &
开网吧一定要用公安和网监指定的收费系统吗?
因为安装公安指定的收费系统经常出现问题,闪退之类的情况。时不时就会自动关闭等问题,之后因为出现这些问题很烦恼我就决定安装一个万象收费系统做为备用。今天恰巧公安指定的收费系统出了问题,我就用万象收费系统收费,结果今天网监出来检查说我没用他们指定的收费系统要关我15,还抱走了我的游戏服务器。说等待通知罚款。&&&&我想请问下这个真的该罚款吗?&&我用什么收费系统和公安网监有什么关系吗?
公众采纳地区:四川-成都咨询电话:13518***帮助网友:39064 次点赞人数:<span class="s-c666" id="r_8 人 你可以行政复议乃至行政起诉。 21:58地区:四川-成都咨询电话:帮助网友:96668 次点赞人数:<span class="s-c666" id="r_9 人 可以行政复议乃至行政起诉 09:47[计算机软件及应用]网吧收费系统
当前位置:
& [计算机软件及应用]网吧收费系统
[计算机软件及应用]网吧收费系统
篇一 : 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统收费系统 网吧收费系统篇二 : 贪吃蛇游戏程序摘 要随着科技的发展,许多用户希望在工作之余有一定的娱乐,而贪吃蛇这款经典游戏正符合大众的心里。()因此,为了迎合众多用户的需求,我们开发出一套适合各阶层人士的具有很强的娱乐性和交互性的贪吃蛇小游戏。贪吃蛇,之所以取这样的名字,去用意还是很明显的.贪吃蛇其实并不贪,它是人不断向前追求的象征.就像现代的人只有不断努力向前才能得到自己想要的。而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功。虽然现在市面上存在着各种各样的游戏版本,可是贪吃蛇其市场还是相当大的。因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏速度不断加快,其刺激性也更强。可以说该游戏的优势在于它的简单易行,还在于它很快顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。关键词: 贪吃蛇,汇编语言,函数,游戏- 1 -贪吃蛇程序 贪吃蛇游戏程序目 录目 录 ......................................................................................................................................... - 2 - 前 言 ......................................................................................................................................... - 3 -第1章 系统分析 ....................................................................................................................... - 4 -1.1 需求概述 ..................................................................................................................... - 4 -1.2 需求环境 ..................................................................................................................... - 4 -1.3 功能描述 ..................................................................................................................... - 4 -第2章 系统总体设计................................................................................................................ - 5 -2.1 程序功能模块.............................................................................................................. - 5 -2.2 程序流程图.................................................................................................................. - 6 -第3章 详细设计 ....................................................................................................................... - 7 -3.1详细设计 ...................................................................................................................... - 7 -3.1.1 数据段.............................................................................................................. - 7 -3.1.2代码段............................................................................................................... - 7 -3.1.3 初始化新游戏的各种状态 .............................................................................. - 9 -3.1.4 蛇身移动.......................................................................................................... - 9 -3.1.5 窗口过程........................................................................................................ - 10 -3.1.6 入口函数........................................................................................................ - 14 -4.1可行性分析................................................................................................................. - 16 -4.2测试结果分析............................................................................................................. - 16 -第5章 软件使用说明书 ......................................................................................................... - 17 -5.1游戏运行截图............................................................................................................. - 17 - 参考文献 ................................................................................................................................... - 22 - 致 谢 ..................................................................................................................................... - 23 - 附 录 ..................................................................................................................................... - 24 -- 2 -贪吃蛇程序 贪吃蛇游戏程序前 言人类已经跨入了二十二世纪,正在进入信息时代。[)计算机技术和通讯技术的发展和应用及,促进了社会的高速发展,同时也改变着人们的工作、学习、生活和娱乐的方式以及思想观念。随着计算机的日益普及,工作的生活节奏的加快,休闲小游戏越来越受到人们的青睐,尤其贪食蛇类的经典游戏在人类的生活娱乐中占有一席之地,随着计算机技术的成熟,各种各样的贪食蛇游戏也流传在网路中,人们可以方便的体验别样风格的贪食蛇。- 3 -贪吃蛇程序 贪吃蛇游戏程序第1章 系统分析1.1 需求概述本设计所开发的是基于汇编语言的一个贪吃蛇游戏软件,程序关键在于表示蛇的图形及蛇的移动。[]用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。蛇撞在墙上则游戏结束。1.2 需求环境本课程设计需要的设备为硬件要求和软件配置要求具体要求如下: ①硬件要求:一台计算机。②软件配置:WINDOWS运行环境1.3 功能描述本课程设计是利用图形学的相关知识在Windows环境下利用窗口化界面实现经典贪吃蛇游戏,其基本的功能描述如下:此游戏程序应实现使一条蛇在密闭的围墙内游动,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上、下、左、右四个方向移动,蛇头撞到食物时,则表示食物被蛇吃掉,蛇的身体同时增长一节,并同时计分加10分,接着再出现食物,重复刚才的过程。如果蛇在移动过程中,撞到墙壁或身体交叉即蛇头撞到自己的身体,则游戏结束。- 4 -贪吃蛇程序 贪吃蛇游戏程序第2章 系统总体设计贪吃蛇是一个家喻户晓的益智类小游戏。[]本设计是采用汇编中的宏定义和调用,子程序的调用,BIOS,DOS中断等一些汇编知识编制而成的一个贪吃蛇小游戏,通过这个小游戏的制作,我们可以得到很多的益处:巩固微机原理与汇编语言的基础知识:进一步掌握计算机软,硬件设计方法;增强了软件开发过程中实际操作的能力;能够掌握如何使用汇编语言进行键盘控制,显示控制等功能。2.1 程序功能模块由需求分析知,本次课程设计是用方向键实现贪吃蛇游戏程序,故其功能模块分为:开始画面(描绘围墙、蛇体、食物等及其颜色),游戏过程(通过四个方向键控制蛇头带动身体移动),游戏结束(显示总分并判断是否重新游戏)模块三个模块。图2.1 功能模块图- 5 -贪吃蛇程序 贪吃蛇游戏程序2.2 程序流程图2.2 程序流程图- 6 -贪吃蛇程序 贪吃蛇游戏程序第3章 详细设计3.1详细设计主要功能模块的算法设计思路:3.1.1 数据段szCaptionMain db '贪食蛇',0szCaptionPause db '已暂停',0szCaptionDie db '游戏结束,请按N键开始新游戏',0szDown db '下',0szUp db '上',0szRight db '右',0szLeft db '左',0szScore db '得分:%d',03.1.2代码段包括随机数的生成,初始化所有蛇身节点把前三个置为有效,商是y坐标,玉树是X坐标,数组的首元素即为蛇尾,最后一个不为零的元素为蛇头,查看指定结点是否在(x, y) ,在绘制单个节点中先取标志状态,如果是无效,直接退出下一个食物,总是随机出现。()更好的方法应该是把所有结点串成两个链表,蛇身链表和非, 蛇身链表。每次随机地从非蛇身链表里取出结点插入蛇身链表中,这样就不会造成随机生成的位置在蛇身上从而重新生成了。.code; 随机数生成_NextInt proc uses edx ebx maxpush edxinvoke GetTickCountadd eax, seedadd seed, eaxxor edx, edxmov ebx, maxdiv ebxxor seed, eaxmov eax, edxinc eaxpop edxret_NextInt endp; 初始化所有蛇身结点把前三个置为有效- 7 -贪吃蛇程序 贪吃蛇游戏程序_InitNodes procpush edipush edxpush ebxpush ecxxor edi, edi@@: xor edx, edxmov eax, edimov ebx, 17h 商是 y 坐标,余数是 x 坐标xor ecx, ecxor ecx, edxinc ecxshl ecx,8or ecx, eaxinc ecxshl ecx,8or ecx, BODYshl ecx,8 ; ecx 为结点, ebx 为有效结点列表; nodeList 数组首元素即蛇尾,最后一个不为0的元素为蛇头xor ebx, ebx.if edi &4or ecx,1mov ebx, ecx.endifmov [offset nodes + edi *4], ecxmov [offset nodeList + edi *4], ebxinc edi .if edi &= 187hjmp @F.endifjmp @B@@: pop ecxpop ebxpop edxpop ediret_InitNodes endp- 8 -贪吃蛇程序 贪吃蛇游戏程序3.1.3 初始化新游戏的各种状态_NewGame procinvoke _InitNodesinvoke _NextFoodmov bTurnPending, FALSEmov isPaused,0mov isAlive,1mov score,0mov speed,8mov timerCounts,0mov eatCounts,0mov curX,4mov curY,1mov direction, RIGHTret_NewGame endp3.1.4 蛇身移动_Move procLocal @nextX: DWORDLocal @nextY: DWORDpush ebxpush curXpush curYpop @nextYpop @nextXmov bTurnPending, FALSE.if direction == RIGHTinc @nextX.elseif direction == DOWNinc @nextY.elseif direction == LEFTdec @nextX.elseif direction == UPdec @nextY.endif.if (@nextX ==0) || (@nextX &23) || (@nextY ==0) || (@nextY &17)- 9 -贪吃蛇程序 贪吃蛇游戏程序mov isAlive,0jmp @F.endifinvoke _QueryNodeStat, @nextX, @nextY.if eaxmov isAlive,0jmp @F.endifmov eax, foodXmov ebx, foodY.if (@nextX == eax) && (@nextY == ebx)invoke _PieFromSky. 头的处理,下一个位置即将激活invoke _Activate, @nextX, @nextY,1push @nextXpush @nextYpop curYpop curX; 把新头加入队列头,并指示移除队列尾invoke _GetNodeAt, curX, curYinvoke _AddBody, eax, TRUE@@: pop ebxRet_Move endp3.1.5 窗口过程_ProcWinMain proc hWnd, uMsg, wParam, lParamLocal @stPs:PAINTSTRUCTLocal @stRect:RECTLocal @hBmp: HBITMAPLocal @hOldBmp: HBITMAPLocal @memDC: HDCLocal @hDC: HDCmov eax, uMsg.if eax == WM_PAINTinvoke BeginPaint, hWnd, addr @stPsmov @hDC, eaxinvoke CreateCompatibleBitmap, @hDC, wndWidth, wndHeight- 10 -贪吃蛇程序 贪吃蛇游戏程序mov @hBmp, eaxinvoke CreateCompatibleDC, @hDCmov @memDC, eaxinvoke SelectObject, @memDC, @hBmpmov @hOldBmp, eaxinvoke _DrawBody, @memDCinvoke _DrawNode, @memDC, foodinvoke _DrawScore, @memDCinvoke BitBlt, @hDC, rClient.left, rClient.top, wndWidth, wndHeight, @memDC, rClient.left, rClient.top, SRCCOPYinvoke SelectObject, @memDC, @hOldBmpinvoke DeleteObject, @hBmpinvoke DeleteDC, @memDCinvoke EndPaint, hWnd, addr @stPs.elseif eax == WM_TIMER.if !isAliveinvoke SetWindowText, hWnd, offset szCaptionDiejmp @F.endif.if isPausedjmp @F.endifmov eax, timerCounts.if speed != eaxinc timerCountsjmp @F.endifmov timerCounts,0invoke _Moveinvoke InvalidateRect, hWnd, addr rClient, FALSE.elseif eax == WM_CLOSEinvoke KillTimer, hWnd, TIMERinvoke DestroyWindow, hWinMaininvoke PostQuitMessage, NULL.elseif eax == WM_CREATEinvoke SetTimer, hWnd, TIMER,100, NULLinvoke GetClientRect, hWnd, offset rClientmov bRanColor, TRUE- 11 -贪吃蛇程序 贪吃蛇游戏程序mov eax, rClient.rightsub eax, rClient.leftmov wndWidth, eaxmov eax, rClient.bottomsub eax, rClient.topmov wndHeight, eaxinvoke _NewGame.elseif eax == WM_KEYDOWNmov eax, wP 按P键暂停游戏.if eax =='P'.if isPausedand isPaused,0invoke SetWindowText, hWnd, offset szCaptionMain .elseor isPaused,1invoke SetWindowText, hWnd, offset szCaptionPause . 按了上键.elseif eax =='W' || eax == VK_UP.if isPaused || bTurnPendingjmp @F.endifmov eax, direction.if eax == RIGHT || eax == LEFTpush UPpop directioninvoke SetWindowText, hWnd, offset szUpmov bTurnPending, TRUE.endif; 按了下键.elseif eax =='S' || eax == VK_DOWN.if isPaused || bTurnPendingjmp @F.endifmov eax, direction.if eax == RIGHT || eax == LEFTpush DOWNpop directioninvoke SetWindowText, hWnd, offset szDown- 12 -贪吃蛇程序 贪吃蛇游戏程序mov bTurnPending, TRUE. 按了左键.elseif eax =='A' || eax == VK_LEFT.if isPaused || bTurnPendingjmp @F.endifmov eax, direction.if eax == UP || eax == DOWNpush LEFTpop directioninvoke SetWindowText, hWnd, offset szLeft mov bTurnPending, TRUE. 按了右键.elseif eax =='D' || eax == VK_RIGHT.if isPaused || bTurnPendingjmp @F.endifmov eax, direction.if eax == UP || eax == DOWNpush RIGHTpop directioninvoke SetWindowText, hWnd, offset szRight mov bTurnPending, TRUE.endif.elseif eax =='C'.if bRanColorand bRanColor,0.elseor bRanColor,1. Q或者ESC退出游戏.elseif eax =='Q' || eax == VK_ESCAPEinvoke PostQuitMessage,0 ; 开始新游戏.elseif eax =='N'invoke _NewGameinvoke SetWindowText, hWnd, offset szCaptionMain .endif.elseinvoke DefWindowProc, hWnd, uMsg, wParam, lParam- 13 -贪吃蛇程序 贪吃蛇游戏程序ret.endif@@: xor eax, eaxRet_ProcWinMain endp3.1.6 入口函数_Main procLocal @stWndClass:WNDCLASSEXLocal @stMsg:MSGmov food, FALSEinvoke RtlZeroMemory, addr @stWndClass, sizeof @stWndClass invoke GetModuleHandle, NULLmov @stWndClass.hInstance, eaxinvoke LoadCursor, NULL, IDC_ARROWmov @stWndClass.hCursor, eaxinvoke LoadIcon, NULL, IDI_INFORMATIONmov @stWndClass.hIcon, eaxmov @stWndClass.cbSize, sizeof WNDCLASSEXmov @stWndClass.style, CS_HREDRAW or CS_VREDRAWmov @stWndClass.lpfnWndProc, offset _ProcWinMainmov @stWndClass.hbrBackground, COLOR_WINDOWmov @stWndClass.lpszClassName, offset szClassNameinvoke RegisterClassEx, addr @stWndC 显示窗口invoke CreateWindowEx, WS_EX_CLIENTEDGE, offset szClassName, \ offset szCaptionMain,\WS_OVERLAPPEDWINDOW and not WS_MAXIMIZEBOX and not WS_THICKFRAME,\ 200,100,500,404, NULL, NULL, hInstance, NULLmov hWinMain, eaxinvoke ShowWindow, hWinMain, SW_SHOWNORMALinvoke UpdateWindow, hWinMain; 消息循环.while TRUEinvoke GetMessage, addr @stMsg, NULL,0,0.break .if eax ==0invoke TranslateMessage, addr @stMsginvoke DispatchMessage, addr @stMsg- 14 -贪吃蛇程序 贪吃蛇游戏程序.endwret_Main endpstart:call _Maininvoke ExitProcess, NULL end start- 15 -贪吃蛇程序 贪吃蛇游戏程序第4章 系统测试4.1可行性分析首先,8086指令系统中包括了较为齐全的Dos系统功能调用指令,利用这些指令我们可以实现Dos键盘功能调用和Dos显示功能调用,这就为该游戏的显示和操作提供了条件,使人机对话操作成为了可能;其次,该游戏本身的程序设计并非异常的复杂,无需使用高级语言程序也能够实现,这给汇编语言编写提供了可能,也使得程序量不至于过大而难以实现;此外,经过一个学期8086微机系统的学习我们基本掌握了8086的编程操作,具备了一定的编写程序的能力,并能够自行查找资料独立解决Dos系统功能调用问题(未授);最后也是最重要的一点:我们拥有“贪吃蛇”游戏的示例程序,这让编程能力有限的我能够有章可循不至于无从下手,通过对该示例的了解、分析优化、改进逐步实现设计的预设功能得到较为满意的设计结果。[)4.2测试结果分析贪吃蛇的各个功能都已经实现,可以很好的进行游戏。在游戏过程中发现的bug都已在修改中修复。但是还存在问题,就是如果蛇头的前方是墙壁或者蛇身的话,游戏一定失败。无论反应多快。这个是还待修改但为修改的地方。- 16 -贪吃蛇程序 贪吃蛇游戏程序第5章 软件使用说明书双击snack.exe开始游戏,在游戏中使用键盘方向键控制蛇头方向前进,游戏中蛇头为白色方块,食物为绿色方块,当蛇头触到墙或自身时游戏结束,此时按键盘N,再次开始游戏,游戏中按P,可暂停游戏,再次按P继续游戏。[)按C可变换蛇身颜色,当需要游戏结束时可关闭窗口、按ESC或按Q键均可关闭。5.1游戏运行截图1、游戏开始- 17 -贪吃蛇程序 贪吃蛇游戏程序2、游戏暂停3、游戏控制—上- 18 -贪吃蛇程序 贪吃蛇游戏程序4、游戏控制—下5、游戏控制—左- 19 -贪吃蛇程序 贪吃蛇游戏程序6、游戏控制—右7、游戏中变换蛇身颜色- 20 -贪吃蛇程序 贪吃蛇游戏程序设计总结紧张而有趣的课程设计结束了,虽然只有短短的一周时间,可我却获益匪浅,而从中体会到的乐趣更是难以用言语表达。()这次我们组做的题目是小游戏贪吃蛇,我负责的那部分是开始新游戏时的初始化,蛇身移动,窗口过程和入口函数。初看题目,真有点摸不找头脑的感觉,可经过我们小组成员的共同讨论,各抒己见,还有指导老师的讲解分析,我们每一个人都大体清楚了个人的模块和总体的框架,找到了入手点。通过这次课程设计我对汇编语言有了进一步的了解。知道编制图形程序是程序设计中非常有趣和有价值的工作之一,在图形绘制方面,汇编语言具有潜在的优点,因为显示屏幕上的每一个图象都是由成千上万的元素组成,处理这些象素需要大量的指令,就速度而言,汇编语言比高级语言要快的多。程序采用的是调色板来配置颜色的,虽然颜色的选择很方便,但是美中不足的是它供选择的颜色过于单调。在此次课程设计中我认识到,写一段代码,首先让它可以运行,然后让它可以正确的运行,最后再去提高效率。写好一段代码比调试一段代码的时间要少的多,而许多许多的问题也是在你写代码的时候所不能发现的。想想看一路过来学过的课程都是如此:算法数据结构教会我们在什么情况下应该选取怎样的方式去处理数据,操作系统教会我们系统如何处理数据,编译原理教会我们编译器如何处理数据。语言也是一种处理数据的工具,没有哪种工具是万能的,只有合适的场合采用合适的工具。同时,以后再学习一种新的“规则”时,也需要抓住这些重点:这个规则适用的场合,适用的数据,处理数据的方式。最后,感谢我组每一位同学在此次课程设计中作出的努力,和老师的帮助和指导。- 21 -贪吃蛇程序 贪吃蛇游戏程序参考文献[1] 王爽编著.《汇编语言—第二版》.清华大学出版社,2008.4[2] 沈美明,温冬婵.IBM-PC汇编语言程序设计(第二版).清华大学出版社, 2001。[][3] [美]Kip R.Irvine著,温玉洁,等译.Intel汇编语言程序设计(第五版).电子工业出版社, 2007。[4]钱晓捷.汇编语言程序设计(第二版). 电子工业出版社, 2003。[5] 罗云彬.Windows环境下32位汇编语言程序设计(第二版).电子工业出版社, 2006。[6] Windows API函数参考手册.人民邮电出版社, 2002。[7]参考网址:ishare..cn[8]参考网址:www.- 22 -贪吃蛇程序 贪吃蛇游戏程序致 谢通过这段时间的学习,我学会了很多东西。(]同时也非常感谢刘老师这段时间的教育与指导。使我从对程序一无所知到勉强能够看懂程序,同时也使我了解到了程序的博大精深,体会到编制程序的无穷乐趣。这段时间的学习我看到了老师无私的奉献,也看到了老师不辞辛苦的来回奔波,让我们非常的感动,同时也更加的激发起了我们学习的兴趣。- 23 -贪吃蛇程序 贪吃蛇游戏程序附 录;**************************************************************** .386.model flat, stdcalloption casemap:none;**************************************************************** ;Include;**************************************************************** include windows.incinclude gdi32.incincludelib gdi32.libinclude user32.incincludelib user32.libinclude kernel32.incincludelib kernel32.libincludelib Coredll.lib;****************************************************************; 这个结构并未使用,只是大致描述下一个结点的样子,一个节点是一个DWORD * ; 从高位到低位分别是: x坐标 y坐标 类型(食物或蛇身) 有效标志 * ; 每个字段点一个字节 *;**************************************************************** Node structx BYTE ?y BYTE ?ntype BYTE ?bValid BYTE ?Node endsTIMER equ 1FOOD equ 0BODY equ 1RIGHT equ 2LEFT equ 3UP equ 4DOWN equ 5;**************************************************************** ; 数据段;**************************************************************** .data?hInstance dd ?hWinMain dd ?hDc dd ?isPaused dd ?isAlive dd ?bRanColor dd ?bTurnPending dd ?direction dd ?food dd ?nodes dd 391 dup (?)nodeList dd 391 dup (?)- 24 -贪吃蛇程序 贪吃蛇游戏程序curX dd ?curY dd ?foodX dd ?foodY dd ?score dd ?rClient RECT &&wndWidth dd ?wndHeight dd ?szScoreBuffer db 32 dup (?)seed dd ?speed dd ?timerCounts dd ?eatCounts dd ?.constszClassName db '1',0szCaptionMain db '贪食蛇',0szCaptionPause db '已暂停',0szCaptionDie db '游戏结束,请按N键开始新游戏',0szDown db '下',0szUp db '上',0szRight db '右',0szLeft db '左',0szScore db '得分:%d',0;**************************************************************** ; 代码段;**************************************************************** .code;**************************************************************** ; 随机数生成;**************************************************************** _NextInt proc uses edx ebx maxpush edxinvoke GetTickCountadd eax, seedadd seed, eaxxor edx, edxmov ebx, maxdiv ebxxor seed, eaxmov eax, edxinc eaxpop edxret_NextInt endp;**************************************************************** ; 初始化所有蛇身结点把前三个置为有效;**************************************************************** _InitNodes procpush edipush edxpush ebx- 25 -贪吃蛇程序 贪吃蛇游戏程序push ecxxor edi, edi@@: xor edx, edxmov eax, edimov ebx, 17h 商是 y 坐标,余数是 x 坐标xor ecx, ecxor ecx, edxinc ecxshl ecx,8or ecx, eaxinc ecxshl ecx,8or ecx, BODYshl ecx,8 ; ecx 为结点, ebx 为有效结点列表; nodeList 数组首元素即蛇尾,最后一个不为0的元素为蛇头xor ebx, ebx.if edi &4or ecx,1mov ebx, ecx.endifmov [offset nodes + edi *4], ecxmov [offset nodeList + edi *4], ebxinc edi.if edi &= 187hjmp @F.endifjmp @B@@: pop ecxpop ebxpop edxpop ediret_InitNodes endp;**************************************************************** ; 节点构造函数,参数分别是X坐标,Y坐标,类型(食物还是身体),有效标志;**************************************************************** _CreateNode proc nx, ny, nntype, nInvalidxor eax, eaxor eax, nxshl eax,8or eax, nyshl eax,8or eax, nntypeshl eax,8or eax, nInvalidret_CreateNode endp;**************************************************************** ; 查看指定结点是否在(x, y);****************************************************************- 26 -贪吃蛇程序 贪吃蛇游戏程序_IsNodeAt proc node, x, ypush ebxpush ecxmov eax, nodemov ebx, eaxmov ecx, eaxshr ebx,24and ebx, 0ffhsub ebx, xshr ecx,16and ecx, 0ffhsub ecx, y.if ecx ==0 && ebx ==0xor eax, eax.endifpop ecxpop ebxret_IsNodeAt endp;**************************************************************** ; 绘制单个节点;**************************************************************** _DrawNode proc uses ebx ecx _hDC, hNodelocal @stColor: COLORREFlocal @hBrush: HBRUSHlocal @hOldBrush: HBRUSHlocal @stRect: RECTpush ecxpush ebxmov eax, hN 先取标志状态,如果是无效,直接退出and eax, 000000ffh.if !eaxjmp @F.endifinvoke _IsNodeAt, hNode, curX, curYmov ecx, eaxmov eax, hNodeand eax, 0000ff00hshr eax,8.if (eax == BODY) && (ecx ==0)mov @stColor, 00ffffffh.elseif eax == BODY.if bRanColorinvoke _NextInt,255mov ecx, eaxshl ecx,8invoke _NextInt,255or ecx, eaxshl ecx,8invoke _NextInt,255or ecx, eax- 27 -贪吃蛇程序 贪吃蛇游戏程序mov @stColor, ecx.elsemov @stColor, 000000ffh.endif.elsemov @stColor, 0000ff00h.endifinvoke CreateSolidBrush, @stColormov @hBrush, eaxinvoke SelectObject, _hDC, @hBrushmov @hOldBrush, 算出左右要画的地方mov ecx, hNodeand ecx, 0ff000000hshr ecx,24xor eax, eaxmov al, clmov bl,20mul blsub eax,4mov @stRect.left, eaxadd eax,18mov @stRect.right, 算出上下要画的地方mov ecx, hNodeand ecx, 00ff0000hshr ecx,16xor eax, eaxmov al, clmov bl,20mul blsub eax,4mov @stRect.top, eaxadd eax,18mov @stRect.bottom, eaxinvoke FillRect, _hDC, addr @stRect, NULLinvoke SelectObject, _hDC, @hOldB 狂他妈漏啊??invoke DeleteObject, @hBrush@@:pop ebxpop ecxret_DrawNode endp;****************************************************************; 画蛇身,其实就是遍历所有结点画,绘画函数会自己根据结点的状态来选择绘; 制方式。();**************************************************************** _DrawBody proc uses ecx edi _hDCpush edipush ecxpush eaxxor edi, edimov ecx, 187h- 28 -贪吃蛇程序 贪吃蛇游戏程序@@: mov eax, [offset nodeList + edi *4].if !eaxjmp @F.endifinvoke _DrawNode, _hDC, eaxinc ediloop @B@@:pop eaxpop ecxpop ediret_DrawBody endp;**************************************************************** ; 绘制分数;**************************************************************** _DrawScore proc _hDCLocal @oldColor: COLORREFLocal @oldBkMode: DWORDlocal @szBuffer[128]: BYTElocal @hFont: HFONTlocal @hOldFont: HFONTlocal @hPen: HPENlocal @hOldPen: HPENlocal @strLen: DWORDpush ebxinvoke wsprintf, offset szScoreBuffer, offset szScore, 求字符串长度 xor eax, eax@@:mov bl, BYTE ptr [offset szScoreBuffer + eax].if bl !=0inc eaxjmp @B.endifmov @strLen, eaxinvoke SetBkMode, _hDC, TRANSPARENTmov @oldBkMode, eaxinvoke SetTextColor, _hDC, 0000ffffhmov @oldColor, eaxinvoke CreateFont,14,7,0,0,8, FALSE, FALSE, FALSE, GB2312_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,5, DEFAULT_PITCH, NULLmov @hFont, eaxinvoke SelectObject, _hDC, eaxmov @hOldFont, eaxinvoke CreatePen, PS_SOLID,1, 00ffffffhmov @hPen, eaxinvoke SelectObject, _hDC, eaxmov @hOldPen, eaxinvoke TextOut, _hDC,410,15, offset szScoreBuffer, @strLeninvoke MoveToEx, _hDC,10,10,0invoke LineTo, _hDC,480,10- 29 -贪吃蛇程序 贪吃蛇游戏程序invoke LineTo, _hDC,480,360invoke LineTo, _hDC,10,360invoke LineTo, _hDC,10,10invoke SetBkMode, _hDC, @oldBkModeinvoke SetTextColor, _hDC, @oldColorinvoke SelectObject, _hDC, @hOldFontinvoke SelectObject, _hDC, @hOldPeninvoke DeleteObject, @hFontinvoke DeleteObject, @hPenpop ebxret_DrawScore endp;**************************************************************** ; 获得指定位置上的结点;**************************************************************** _GetNodeAt proc xLocation, yLocationpush ebxmov eax, yLocationdec eaxmov ebx, 17hmul ebxadd eax, xLocationdec eaxmov eax, [offset nodes + eax *4]pop ebxret_GetNodeAt endp;**************************************************************** ; 由传入的X Y 位置查询目标结点的状态(是否激活);**************************************************************** _QueryNodeStat proc xLocation, yLocationinvoke _GetNodeAt, xLocation, yLocationand eax, 000000ffhret_QueryNodeStat endp;****************************************************************; 激活或压制一个已处于激活状态的结点; 参数分别是 x 坐标, y坐标, 是否激活的布尔变量;**************************************************************** _Activate proc xLocation, yLocation, bActivatepush ebxpush edimov eax, yLocationdec eaxmov ebx, 17hmul ebxadd eax, xLocationdec eaxmov edi, eaxmov eax, [offset nodes + eax *4].if bActivate- 30 -贪吃蛇程序 贪吃蛇游戏程序or eax, 0000001h.elseand eax, 0ffffff00h.endifmov [offset nodes + edi *4], eaxpop edipop ebxret_Activate endp;**************************************************************** ; 下一个食物,总是随机出现。(]并且不会出现在蛇身上; 这种实现似乎比较2,更好的方法应该是把所有结点串成两个链表,蛇身链表和非 ; 蛇身链表。每次随机地从非蛇身链表里取出结点插入蛇身链表中,这样就不会造成 ; 随机生成的位置在蛇身上从而重新生成了。; 重新生巢呗陨在蛇身将要填充满整个区域时性能急剧下降。;**************************************************************** _NextFood proc uses ebxinvoke _NextInt,17mov foodY, eaxinvoke _NextInt,23mov foodX, eaxinvoke _QueryNodeStat, foodX, foodY.if eaxinvoke _NextFood.endifinvoke _CreateNode, foodX, foodY, FOOD,1mov food, eaxret_NextFood endp;**************************************************************** ; 往队列头加一个结点,刚吃了一顿或走了一步后都会调用此函数。; 第一个参数是要加入的结点,第二个是指示是否移除队列尾。正常移动时需要 ; 在队列头加结点的同时移除队列尾,以达到好像在移动的假象??;**************************************************************** _AddBody proc node, bRmvTailpush edipush ebx 如果是刚吃的,先把类型改成 BODYmov eax, nodeor eax, hxor edi, edi@@:mov ebx, [offset nodeList + edi *4].if ebx !=0inc edijmp @B.endifmov [offset nodeList + edi *4], eax; 如果要移除队列尾,则先把队列尾的激活状态压下去,然后集体左移一个索引位置 ; 此时edi里保存着队列应有的长度.if bRmvT 取第一个元素,这是队列头,先反激活它- 31 -贪吃蛇程序 贪吃蛇游戏程序mov eax, [nodeList]mov ebx, eaxand ebx, 0ff000000hshr ebx,24mov ecx, eaxand ecx, 00ff0000hshr ecx,16invoke _Activate, ebx, ecx, FALSE; 然后移动这个队列,把后面的都左移 mov ecx, edixor edi, edi@@: mov eax, [offset nodeList + edi *4 +4]mov [offset nodeList + edi *4], eaxinc ediloop @Bmov [offset nodeList + edi *4],0.endifpop ecxpop ebxpop ediret_AddBody endp;**************************************************************** ; 吃掉食物,吃掉时候分数增加,并且生成下一个食物;**************************************************************** _PieFromSky procmov eax, scoreadd eax,10mov score, eaxmov eax, eatCounts.if eax !=3inc eatCounts.elsemov eax, speed.if eax &1dec speed.endifmov eatCounts,0.endifinvoke _GetNodeAt, foodX, foodYinvoke _AddBody, eax, FALSEinvoke _NextFoodret_PieFromSky endp;**************************************************************** ; 新游戏,初始化各种状态;**************************************************************** _NewGame procinvoke _InitNodesinvoke _NextFoodmov bTurnPending, FALSEmov isPaused,0- 32 -贪吃蛇程序 贪吃蛇游戏程序mov isAlive,1mov score,0mov speed,8mov timerCounts,0mov eatCounts,0mov curX,4mov curY,1mov direction, RIGHTret_NewGame endp;**************************************************************** ; 蛇身移动;**************************************************************** _Move procLocal @nextX: DWORDLocal @nextY: DWORDpush ebxpush curXpush curYpop @nextYpop @nextXmov bTurnPending, FALSE.if direction == RIGHTinc @nextX.elseif direction == DOWNinc @nextY.elseif direction == LEFTdec @nextX.elseif direction == UPdec @nextY.endif.if (@nextX ==0) || (@nextX &23) || (@nextY ==0) || (@nextY &17) mov isAlive,0jmp @F.endifinvoke _QueryNodeStat, @nextX, @nextY.if eaxmov isAlive,0jmp @F.endifmov eax, foodXmov ebx, foodY.if (@nextX == eax) && (@nextY == ebx)invoke _PieFromSky. 头的处理,下一个位置即将激活invoke _Activate, @nextX, @nextY,1push @nextXpush @nextYpop curYpop curX; 把新头加入队列头,并指示移除队列尾invoke _GetNodeAt, curX, curY- 33 -贪吃蛇程序 贪吃蛇游戏程序invoke _AddBody, eax, TRUE@@: pop ebxRet_Move endp;****************************************************************; 窗口过程;****************************************************************_ProcWinMain proc hWnd, uMsg, wParam, lParamLocal @stPs:PAINTSTRUCTLocal @stRect:RECTLocal @hBmp: HBITMAPLocal @hOldBmp: HBITMAPLocal @memDC: HDCLocal @hDC: HDCmov eax, uMsg.if eax == WM_PAINTinvoke BeginPaint, hWnd, addr @stPsmov @hDC, eaxinvoke CreateCompatibleBitmap, @hDC, wndWidth, wndHeightmov @hBmp, eaxinvoke CreateCompatibleDC, @hDCmov @memDC, eaxinvoke SelectObject, @memDC, @hBmpmov @hOldBmp, eaxinvoke _DrawBody, @memDCinvoke _DrawNode, @memDC, foodinvoke _DrawScore, @memDCinvoke BitBlt, @hDC, rClient.left, rClient.top, wndWidth, wndHeight, @memDC, rClient.left, rClient.top, SRCCOPYinvoke SelectObject, @memDC, @hOldBmpinvoke DeleteObject, @hBmpinvoke DeleteDC, @memDCinvoke EndPaint, hWnd, addr @stPs.elseif eax == WM_TIMER.if !isAliveinvoke SetWindowText, hWnd, offset szCaptionDiejmp @F.endif.if isPausedjmp @F.endifmov eax, timerCounts.if speed != eaxinc timerCountsjmp @F.endifmov timerCounts,0invoke _Moveinvoke InvalidateRect, hWnd, addr rClient, FALSE.elseif eax == WM_CLOSE- 34 -贪吃蛇程序 贪吃蛇游戏程序invoke KillTimer, hWnd, TIMERinvoke DestroyWindow, hWinMaininvoke PostQuitMessage, NULL.elseif eax == WM_CREATEinvoke SetTimer, hWnd, TIMER,100, NULLinvoke GetClientRect, hWnd, offset rClient mov bRanColor, TRUEmov eax, rClient.rightsub eax, rClient.leftmov wndWidth, eaxmov eax, rClient.bottomsub eax, rClient.topmov wndHeight, eaxinvoke _NewGame.elseif eax == WM_KEYDOWNmov eax, wP 按P键暂停游戏.if eax =='P'.if isPausedand isPaused,0invoke SetWindowText, hWnd, offset szCaptionMain .elseor isPaused,1invoke SetWindowText, hWnd, offset szCaptionPause . 按了上键.elseif eax =='W' || eax == VK_UP.if isPaused || bTurnPendingjmp @F.endifmov eax, direction.if eax == RIGHT || eax == LEFTpush UPpop directioninvoke SetWindowText, hWnd, offset szUp mov bTurnPending, TRUE.endif; 按了下键.elseif eax =='S' || eax == VK_DOWN.if isPaused || bTurnPendingjmp @F.endifmov eax, direction.if eax == RIGHT || eax == LEFTpush DOWNpop directioninvoke SetWindowText, hWnd, offset szDown mov bTurnPending, TRUE. 按了左键.elseif eax =='A' || eax == VK_LEFT.if isPaused || bTurnPendingjmp @F.endif- 35 -贪吃蛇程序 贪吃蛇游戏程序mov eax, direction.if eax == UP || eax == DOWNpush LEFTpop directioninvoke SetWindowText, hWnd, offset szLeftmov bTurnPending, TRUE. 按了右键.elseif eax =='D' || eax == VK_RIGHT.if isPaused || bTurnPendingjmp @F.endifmov eax, direction.if eax == UP || eax == DOWNpush RIGHTpop directioninvoke SetWindowText, hWnd, offset szRightmov bTurnPending, TRUE.endif.elseif eax =='C'.if bRanColorand bRanColor,0.elseor bRanColor,1. Q或者ESC退出游戏.elseif eax =='Q' || eax == VK_ESCAPEinvoke PostQuitMessage,0 ; 开始新游戏.elseif eax =='N'invoke _NewGameinvoke SetWindowText, hWnd, offset szCaptionMain.endif.elseinvoke DefWindowProc, hWnd, uMsg, wParam, lParamret.endif@@: xor eax, eaxRet_ProcWinMain endp;**************************************************************** ; 入口函数;**************************************************************** _Main procLocal @stWndClass:WNDCLASSEXLocal @stMsg:MSGmov food, FALSEinvoke RtlZeroMemory, addr @stWndClass, sizeof @stWndClass invoke GetModuleHandle, NULLmov @stWndClass.hInstance, eaxinvoke LoadCursor, NULL, IDC_ARROWmov @stWndClass.hCursor, eaxinvoke LoadIcon, NULL, IDI_INFORMATIONmov @stWndClass.hIcon, eax- 36 -贪吃蛇程序 贪吃蛇游戏程序mov @stWndClass.cbSize, sizeof WNDCLASSEXmov @stWndClass.style, CS_HREDRAW or CS_VREDRAWmov @stWndClass.lpfnWndProc, offset _ProcWinMainmov @stWndClass.hbrBackground, COLOR_WINDOWmov @stWndClass.lpszClassName, offset szClassNameinvoke RegisterClassEx, addr @stWndC 显示窗口invoke CreateWindowEx, WS_EX_CLIENTEDGE, offset szClassName, \offset szCaptionMain,\WS_OVERLAPPEDWINDOW and not WS_MAXIMIZEBOX and not WS_THICKFRAME,\ 200,100,500,404, NULL, NULL, hInstance, NULLmov hWinMain, eaxinvoke ShowWindow, hWinMain, SW_SHOWNORMALinvoke UpdateWindow, hWinMain; 消息循环.while TRUEinvoke GetMessage, addr @stMsg, NULL,0,0.break .if eax ==0invoke TranslateMessage, addr @stMsginvoke DispatchMessage, addr @stMsg.endwret_Main endpstart:call _Maininvoke ExitProcess, NULLend start- 37 -篇三 : 键盘过滤驱动学习[寒江独钓] IRP HOOK 键盘过滤之替换原键盘分发函数MajorFunction.h#ifndef _MAJORFUNCTION_HEADERS_#define _MAJORFUNCTION_HEADERS_#include &ntddk.h&#define DELAY_ONE_MILLISECOND 1000000extern POBJECT_TYPE *IoDriverObjectTextern NTSTATUS ObReferenceObjectByName(IN PUNICODE_STRING ObjectPath,IN ULONG Attributes,IN PACCESS_STATE PassedAccessState OPTIONAL, IN ACCESS_MASK DesiredAccess OPTIONAL,IN POBJECT_TYPE ObjectType,IN KPROCESSOR_MODE AccessMode,IN OUT PVOID ParseContext OPTIONAL,OUT PVOID *ObjectPtr);PDRIVER_DISPATCH OldMajorFunction[IRP_MJ_MAXIMUM_FUNCTION+1];#endif#include "MajorFunction.h"// 原键盘驱动分发统一处理NTSTATUS OldKeyBoardDispath(PDEVICE_OBJECT DeviceObject, PIRP pIrp) {NTSTATUS Status = STATUS_UNSUCCESSFUL;PIO_STACK_LOCATION irpStack = NULL;irpStack = IoGetCurrentIrpStackLocation(pIrp);Status = OldMajorFunction[irpStack-&MajorFunction](DeviceObject, pIrp);DbgPrint("IRP_MJ_FUNCTIOIN complete successful!\n");return S}// HOOK 函数, 替换键盘原来的MajorFunctionNTSTATUS MajorFunctionHook(PDRIVER_OBJECT DriverObject){NTSTATUS Status = STATUS_UNSUCCESSFUL;PDRIVER_OBJECT KeyBoardDriverObject = NULL;键盘过滤驱动 键盘过滤驱动学习UNICODE_STRING KeyBoardDriverNPFILE_OBJECT pFileObject = NULL;int nIndex = 0;RtlInitUnicodeString(&KeyBoardDriverName, L"\\Driver\\Kbdclass");Status = ObReferenceObjectByName(&KeyBoardDriverName, OBJ_CASE_INSENSITIVE,\ NULL, 0, IoDriverObjectType, KernelMode, NULL, &KeyBoardDriverObject);if (!NT_SUCCESS(Status)){DbgPrint("in MajorFunctionHook Get ObReferenceObjectByName by KeyBoardDriverObject Error\n");goto Exit0;}//保存及设置新键盘的MajorFunctionfor(nIndex = 0; nIndex & IRP_MJ_MAXIMUM_FUNCTION; nIndex++){OldMajorFunction[nIndex] = KeyBoardDriverObject-&MajorFunction[nIndex]; InterlockedExchangePointer(&KeyBoardDriverObject-&MajorFunction[nIndex], DriverObject-&MajorFunction[nIndex]);}DbgPrint("IRP_MJ_FUNCTION Hook Successful!\n");// 解除引用ObDereferenceObject(KeyBoardDriverObject);Exit0:return S}// 卸载函数NTSTATUS UnLoadDriver(PDRIVER_OBJECT DriverObject){NTSTATUS Status = STATUS_UNSUCCESSFUL;int nIndex = 0;PDRIVER_OBJECT KeyBoardDriverObject = NULL;UNICODE_STRING KeyBoardNLARGE_INTEGER DRtlInitUnicodeString(&KeyBoardName, L"\\Driver\\Kbdclass");Status = ObReferenceObjectByName(&KeyBoardName, OBJ_CASE_INSENSITIVE, NULL, 0,键盘过滤驱动 键盘过滤驱动学习*IoDriverObjectType,\KernelMode, NULL, &KeyBoardDriverObject);if (!NT_SUCCESS(Status)){DbgPrint("UnloadDriver Get Keyboard Driver Object Error\n");goto Exit0;}// 交换原来的分发函数for (nI nIndex & IRP_MJ_MAXIMUM_FUNCTION; nIndex++){InterlockedExchangePointer(&KeyBoardDriverObject-&MajorFunction[nIndex], OldMajorFunction[nIndex]);}DbgPrint("Change MajorFunction Successful!\n");Delay = RtlConvertLongToLargeInteger(5* DELAY_ONE_MILLISECOND);// 延时等待完成KeDelayExecutionThread(KernelMode, FALSE, &Delay);ObReferenceObject(KeyBoardDriverObject);Exit0:return S}NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegisterPath) {NTSTATUS Status = STATUS_UNSUCCESSFUL;int nIndex = 0;// 设置新的键盘分发函数for (nI nIndex & IRP_MJ_MAXIMUM_FUNCTION; nIndex++){DriverObject-&MajorFunction[nIndex] = OldKeyBoardD}DriverObject-&DriverUnload = UnLoadD键盘过滤驱动 键盘过滤驱动学习Status = MajorFunctionHook(DriverObject);return S}t262阅读网请您转载分享: 篇四 : 自造DDOS硬件防火墙实例体验自造DDOS硬件防火墙(1)在木马和病毒日益泛滥的今天,DDOS攻击的频率也随之增加,攻击方式和攻击资源不断地成熟,网络安全产品技术也不断的在进行革新。()但是一款DDOS防御产品种类繁多,价格差异也很大,往往让企业不知道该如何选择。那作为企业网络安全管理员,有没有想过自己DIY一个DDOS硬件防火墙呢?近日,本人机房持续遭受DDOS攻击,也遭受了相同的困扰,在安装了各种软防均无法有效防御,硬防价格又过高无法承受,于是在网上搜索了一个 DIY硬件防火墙的网站(),抱着试试看的心态,下载了其提供的防火墙内核,按要求准备了相应硬件,安装配置好后,终于解决了一直困扰我的DDOS攻击,现在把DIYDDOS硬件防火墙安装和设置过程记录如下,希望帮助更多和我同样遭遇的朋友们的问题早日解决。第一步:准备防火墙硬件平台按照DIY DDOS硬件防火墙网站上的要求,我准备了如下硬件:1、 电脑一台,我选择的是压箱底的原来在淘宝淘到的IBM ThinkCentre S50准系统一台。这是我原来花760元淘到的。准系统自带了一片Intel的千兆网卡,正好用来接外网。2、 CPU一片,我使用的是用来搭配IBM ThinkCentre S50的P4 2.4G的CPU.400元。3、 内存一条。我使用的是威刚1G的内存条。4、 128M DOM电子盘一个。我使用的是PQI的电子盘,没有电子盘使用硬盘也行,容量&128M就可以了。注意:电子盘或硬盘要安装到连接到主板的IDE1的MASTER位置,请参照你使用主板的说明文档。5、 网卡一片。用来接内网,因S50上已经带了一个千兆网卡用来接外网,因手头上没有更好的网卡,就随便用了一片8139的网卡用来接内网。6、 刻录光盘一片。用来刻录网站上下载的内核安装文件。7、 刻录光驱一个。安装好后的防火墙硬件平台:两个网口分别用来一个接内网(左上那个8139),一个接外网(下面那个S50自带的Intel千兆网卡)。这样,防火墙硬件平台就完全安搭建好了。第二步:准备内核安装光盘防火墙硬件平台准备好后,我们就要着手准备防火墙安装光盘了。到ChinaDDOS网站上()下载最新版本的内核镜像文件,刻录成光盘即可。具体步骤如下:1、 打开ChinaDDOS DIY硬防的内核下载页面:/news/download.html,下载一个适合的版本,这里我下载的是V3.1BETA01的最新版本。chinaddos 自造DDOS硬件防火墙PS:本人一直比较喜欢最新的东西。[]2、 将下载的RAR文件解压缩,得到ISO光盘镜像文件。3、 将镜像文件刻录至光盘。第三步:安装防火墙内核将内核安装光盘准备好后,确认硬盘或电子盘连接到了IDE1的MASTER位置后,在防火墙平台上连接好光驱,接通防火墙平台电源,把上一步准备好的内核安装光盘放入光驱。启动防火墙平台。1、 屏幕显示如下图,等待内核安装光盘引导一会后(屏幕上快速闪过整屏的英文),将停留在下图的位置:2、 按回车键继续安装,出现三个选择项目:① 安装防火墙内核,② 开始一个命令行,③ 重新启动系统。3、 这里我们选择1并回车。选择一个内核安装源文件的位置。上面列表中红色字部分标记出了我的光驱安装位置hdc,于是我键入hdc后回车。4、 屏幕出现绿色done字样,表示安装光盘识别成功。又提示安装的目标驱动器。上面列表中紫色字部分标记出了系统自动识别的目标安装位置had,这里如果系统没有自动识别到硬盘或电子盘,请检查电子盘或硬盘是不是正确安装到了IDE1的MASTER位置。我键入had后回车。5、 键入had后,屏幕提示"正在将防火墙内核从hdc安装到had……",这里需要等待2分钟左右。安装工作正在进行。chinaddos 自造DDOS硬件防火墙6、直到屏幕上出现"Installcompleted!"字样,表示安装已结束。(]这时按回车键返回。7、重新回到选择菜单后,选择3重新启动防火墙平台,记得将光盘从光驱中取出。这样,防火墙的安装就完成了。第四步:启动并配置防火墙在防火墙安装完成之后,便可以启动防火墙并进行防火墙配置工作了。仔细阅读了在ChinaDDOS网站中下载的"操作手册",我按如下步骤进行了防火墙配置:1、启动防火墙。ChinaDDOS防火墙是应该是使用更专门改过的Linux系统作为防火墙操作系统的。启动防火墙时需等待一小会,直到听到喇叭发出清脆的音乐,表示防火墙已启动完毕。防火墙启动完毕后,防火墙显示器上显示"OK Login"字样,由于网站和手册中均未提供控制台登陆的密码,因此我们只能通过Web界面对防火墙进行管理了。至此,用于防火墙安装的光驱和显示器不再需要了。2、将防火墙连接至网络,在任意一台连通内网的电脑浏览器中输入防火墙的初始IP和管理端口:Http://192.168.1.27:81,输入初始用户名admin和密码123456即可打开防火墙的管理界面。3、启动防火墙内核模块。单击"安全分析中心",在出现的菜单中选择"运行信息"。在界面中点击"启动防火墙模块",内核模块运行状态将变为"启用",信息窗口中将出现不断刷新的防火墙内核运行信息。如果点击"启用防火墙模块",内核模块运行状态一直不变为"启用",可能是你的内存没有1G导致的,笔者在初次试用时被这个问题困扰了很久。4、单击"网络参数配置",查看防火墙注册状态。在配置界面的左下角,查看防火墙的注册状态,我现在的注册状态是"未注册用户".未注册用户无法启动防火墙的防御功能。chinaddos 自造DDOS硬件防火墙5、注册防火墙。(]将上面的认证字复制下来,打开ChinaDDOS的用户防火墙管理平台:/members.没有用户的需要先注册一个用户,这里我就不说明注册步骤了,相信大家都会,只是如果希望防火墙的攻击告警功能起作用,需要填写正确的手机号码。6、注册并登陆之后,点击"注册防火墙管理",在弹出的防火墙管理界面中添加一个新的防火墙。7、在"新增防火墙"窗口中,任意取一个名字,IP地址也可以任意填写,但认证字填写第5步中复制下来的认证字,完成后确定即可。注册类型不可更改,保存后便是注册用户了,不知道有什么其他作用没有。8、完成后,重启DDOS硬件防火墙并加载内核模块,即可看到防火墙的注册类型为"已注册防火墙".不过似乎这个验证只有在公网上才能成功进行,在内网无法验证成功,所以一定要放在网关的前面。系统配置完成后,就要进行详细的防御功能配置了,ChinaDDOS防火墙提供的防御功能太多,篇幅原因无法向各位一一说明,有兴趣请参考网站上提供的使用说明。篇五 : quotename的用法SQL2005关于quotename的用法(转)解释1:首先,sqlserver里的标识符有一定的规则,比如create table abc 123(...)那么中间含有空格,它不是符合规则的。[]你会写做 create table [abc 123](....)即以[]来定界标识符。quotename将 字串成为有效的标识符。它有什么用呢? 我举个例子:你有个表名字叫做 aa[]bb当某些应用动态语句查询时 你如何写呢exec('select * from aa[]bb') ? Xset @sql='select * from ' + quotename('aa[]bb') exec(@sql)当然你也可以直接写出转义的写法select * from [aa[]]bb]也就是说,quotename 使函数中的输入成为一个有效的标识符。 比如上例中 aa[]bb 不是一个有效的标识符。还有一点就是quotename函数有几种写法:quotename('aa') 生成的有效的标识符为 [aa]quotename('aa','') 生成的有效的标识符为 [aa]quotename('aa','''') 生成的有效的标识符为 'aa'解释2:简单来说吧比如你有一个表,名字叫 index你有一个动态查询,参数是表名declare @tbname varchar(256)set @tbname='index'---查这个表里的数据:print('select * from '+@tbname)exec('select * from '+@tbname)--这样print出来的数据是select * from index因为index是字键字,肯定出错,加上括号就可以了:select * from [index]这便有了QUOTENAME,即:print('select * from '+QUOTENAME(@tbname))quotename quotename的用法--结果:select * from [index]exec('select * from '+QUOTENAME(@tbname))分隔符的 Unicode 字符串,分隔符的加入可使输入的字符串成为有效的 Microsoft SQL Server 2005 分隔标识符。(]QUOTENAME ( 'character_string' [ , 'quote_character' ] ) 参数'character_string'Unicode 字符数据构成的字符串。character_string 是 sysname 值。'quote_character'用作分隔符的单字符字符串。可以是单引号 (')、左方括号或右方括号 ([ ]) 或者英文双引号 (")。如果未指定 quote_character,则使用方括号。返回类型nvarchar(258)示例以下示例接受字符串 abc[]def 并使用 [ 和 ] 字符来创建有效的 SQL Server 分隔标识符。SELECT QUOTENAME('abc[]def')下面是结果集:[abc[]]def](1 row(s) affected)请注意,字符串 abc[]def 中的右方括号有两个,用于指示转义符。为什么输出结果是:[abc[]]def]呢?[abc[]]def]分解成[]]中间的]是表示右边的]是原样输出也就是说]]就表示]就跟''中的'要用''来表示一样就是说和]]转义后得到--& ] 和两个单引号转义成一个单引号是一个道理quotename quotename的用法quotename函数看分隔符是什么因为默认是[ ] ,如果用的是}作分界符,那么 SELECT QUOTENAME('abc[]def')就不会发生转义了.select QUOTENAME('abc''def','''') --分隔符是两个单引号-- 'abc''def'select QUOTENAME('abc]def') --分隔符是]-- [abc]]def]select QUOTENAME('abc}def','{}') --分隔符是}-- {abc}}def}示例:create table tab([i[]]d] int);goselect name from sys.columns where object_id=object_id('tab');/* i[]d */也就是说:SELECT QUOTENAME('abc[]def') ,quotename函数默认分隔符是[ ] 所以在给quotename('abc[]def')需要对abc后的[]进行转义,如果quotename('abc[]def','{')也就是设置了分隔符为{就不会发生转义,该转义取决于分隔符.简单的说假设你要在分隔符在[ ]里面使用[]那么就必须对综括号里面的]进行转义:]] 所以结果为:[abc[]]def],同理要在{}里面使用{}那么必须对}进行转义:}}那么结果为:{abc{}}def}示例:select quotename('abc[]def') --默认是分隔符:[ ]--[abc[]]def]select quotename('abc{}def','}')--{abc{}}def}QUOTENAME()函数这个函数和SQL Server对象名组合使用,以将结果传递给表达式。()它只用于给输入的字符串加一对方括号,并返回新形成的字符串。如果参数包含保留的分隔符或者封装字符(比如引号或括号),这个函数将修改字符串,以便SQL Server能将结果字符串中的这类字符当成文本字符。如下面的例子所示,查询的结果如图SELECT QUOTENAME(COLUMN_NAME) AS ColumnName1. FROM INFORMATION_SCHEMA. COLUMNSquotename quotename的用法
欢迎转载:
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12