小磊

包括IT热点、搜索优化、计算机方面的文章、以及快乐的东西!

公告:

数据合并完成.


谢谢大家的光临!我将更加努力!

Windows 2003中搭建视频服务器

随着Internet和Intranet应用日益丰富,视频点播也逐渐应用于宽带网和局域网。人们已不再满足于浏览文字和图片,越来越多的人更喜欢在网上看电影、听音乐。而视频点播和音频点播功能的实现,则必须依靠流媒体服务技术。就目前来看,最流行的流媒体点播服务器只有两种,即Windows Media服务和Real Server。下面我们在这里主要讨论在Windows 2003 Server环境下如何搭建视频点播服务器。我们大家知道,Windows Media服务采用流媒体的方式来传输数据。通常格式的文件必须完全下载到本地硬盘后,才能够正常打开和运行。而由于多媒体文件通常都比较大,所以完全下载到本地往往需要较长时间的等待。而流媒体格式文件只需先下载一部分在本地,然后可以一边下载一边播放。Windows Media服务支持ASF和WMV格式的视频文件,以及WMA和MP3格式的音频文件。

一、Windows Media服务的安装

Windows Media服务虽然是Windows Server 2003系统的组件之一,但是在默认情况下并不会自动安装,而是需要用户来手动添加。而在Windows Server 2003操作系统中,除了可以使用“Windows组件向导”安装Windows Media服务之外,还可以通过“配置您的服务器向导”来实现。

(1)在刚刚安装好Windows Server 2003操作系统并进入Windows时,系统会自动运行“管理您的服务器”窗口。单击其中的“添加或删除角色”超级链接,将显示“配置您的服务器向导”对话框。

(2)单击该对话框中的“下一步”按钮,计算机将开始自动检测所有的设备、操作系统,并检测所有的网络设置。在检测完成后将显示“配置选项”对话框,选择“自定义配置”选项,以自定义安装自己所需要的网络服务。

(3)单击“下一步”按钮,将显示“服务器角色”对话框,在“服务器角色”列表框中列出了所有可以安装的服务器。系统中大部分服务的安装和卸载都可以在该对话框中进行选择。

(4)选择列表框中的“流式媒体服务器”选项,然后单击“下一步”按钮,将显示“选择总结”对话框,用来查看并确认所选择的选项。

(5)单击“下一步”按钮,将显示“正在配置组件”对话框,并根据提示将Windows Server 2003安装光盘放入光驱。

(6)放入安装光盘后单击“确定”按钮,系统便开始从光盘中复制文件并安装Windows Media服务,并用进度条代表当前的安装进度。

(7)安装完成以后将显示对话框,这表示已经成功地将此服务器设置为流式媒体服务器。

(8)单击“完成”按钮关闭该向导,返回到“管理您的服务器”窗口,将显示流式媒体服务器已成功安装。

另外,Windows Media服务也可以在“控制面板”中,采用传统的“添加/删除程序”方式来添加安装。在“Windows组件向导”对话框中,选中Windows Media Services复选框,并根据系统提示插入Windows安装光盘即可成功安装。

Windows Media服务安装完成后,将返回到“管理您的服务器”窗口。单击其中的“流式媒体服务器”右侧的“管理此流式媒体服务器”超级链接,或依次单击“开始”->“控制面板”->“管理工具”->Windows Media Services选项,将显示Windows Media Services窗口。有关Windows Media服务的所有管理工作均可在该窗口中完成。

该窗口中介绍了关于流媒体的一些基础知识,以作为入门者对它的了解。在“入门”选项卡中,单击左侧基础知识中的某个选项,即可在右侧显示出关于该项的解释说明。

SQL安全设置会有很大的帮助(转)

日前SQL INJECTION的攻击测试愈演愈烈,很多大型的网站和论坛都相继被注入。这些网站一般使用的多为SQLSERVER数据库,正因为如此,很多人开始怀疑SQL SERVER的安全性。其实SQL SERVER2000已经通过了美国政府的C2级安全认证-这是该行业所能拥有的最高认证级别,所以使用SQLSERVER还是相当的安全的。当然和ORCAL、DB2等还是有差距,但是SQL
SERVER的易用性和广泛性还是能成为我们继续使用下去的理由。那怎么样才能使SQL SERVER的设置让人使用的放心呢?第一步肯定是打上SQLSERVER最新的安全补丁,现在补丁已经出到了SP3。下载地址:http://www.microsoft.com/sql/downloads/2000/sp3.asp。如果这一步都没有做好,那我们也没有继续下去的必要了。第二步是修改默认的1433端口,并且将SQL SERVER隐藏。这样能禁止对试图枚举网络上现有的 SQL Server客户端所发出的广播作出响应。另外,还需要在TCP/IP筛选中将1433端口屏蔽掉,尽可能的隐藏你的SQLSERVER数据库。这样子一但让攻击创建了SQLSERVER的账号,也不能马上使用查询分析器远程登陆来进行下一步的攻击。单从ASP,PHP等页面构造恶意语句的话,还有需要查看返回值的问题,总比不上直接查询分析器来得利落。所以我们首先要做到即使让别人注入了,也不能让攻击者下一步做得顺当。修改方法:企业管理器--> 你的数据库组 --> 属性 --> 常规 --> 网络配置 --> TCP/IP --> 属性,在这儿将你的默认端口进行修改,和SQL SERVER的隐藏。第三步是很重要的一步,SQL INJECTION往往在WEBCODE中产生。而做为系统管理员或者数据库管理员,总不能常常的去看每一段代码。即使常常看代码,也不能保证我们在上面的疏忽。那怎么办?我们就要从数据库角色着手,让数据库用户的权限划分到最低点。SQLSERVER的默认权限让人真的很头疼,权限大得非常的高,权限小的又什么都做不了,SYSADMIN和db_owner真是让人又爱又恨。攻击者一但确认了网站存在SQLINJECTION漏洞,肯定有一步操作步骤就是测试网站的SQL SERVER使用者具有多大的权限。一般都会借助selectIS_SRVROLEMEMBER(’sysadmin’),或者select IS_MEMBER(’db_owner’),再或者用user= 0(让字符和数字进行比较,SQLSERVER就会提示了错误信息,从该信息中即可知道一些敏感信息)等语句进行测试。方法还有,我也不敢多说了。其一怕错,其二怕联盟中的人扁。在当前,如果网站的数据库使用者用的是SA权限,再加上确认了WEB所处在的绝对路径,那么就宣告了你的网站的OVER。db_owner权限也一样,如果确认了绝对路径,那么有50%的机会能给你的机器中上WEB方式的木马,如海阳等。所以这儿我们确认了一点,我们必须要创建自已的权限,让攻击者找不着下嘴的地方。在这儿引用一个SQLSERVER联机帮助中的例子:创建 SQL Server 数据库角色的方法(企业管理器)
创建 SQL Server 数据库角色
1. 展开服务器组,然后展开服务器。
2. 展开"数据库"文件夹,然后展开要在其中创建角色的数据库。
3. 右击"角色",然后单击"新建数据库角色"命令。
4. 在"名称"框中输入新角色的名称。
5. 单击"添加"将成员添加到"标准角色"列表中,然后单击要添加的一个或多个用户。(可选)只有选定数据库中的用户才能被添加到角色中。对象权限处理数据或执行过程时需要称为对象权限的权限类别:
· select、insert、update 和 delete 语句权限,它们可以应用到整个表或视图中。
· select 和 update 语句权限,它们可以有选择性地应用到表或视图中的单个列上。
· select 权限,它们可以应用到用户定义函数。
· insert 和 delete 语句权限,它们会影响整行,因此只可以应用到表或视图中,而不能应用到单个列上。
· EXECUTE 语句权限,它们可以影响存储过程和函数。语句权限
创建数据库或数据库中的项(如表或存储过程)所涉及的活动要求另一类称为语句权限的权限。例如,如果用户必须能够在数据库中创建表,则应该向该用户授予create TABLE 语句权限。语句权限(如 create DATABASE)适用于语句自身,而不适用于数据库中定义的特定对象。
语句权限有:
· BACKUP DATABASE
· BACKUP LOG
· create DATABASE
· create DEFAULT
· create FUNCTION
· create PROCEDURE
· create RULE
· create TABLE
· create VIEW暗示性权限
暗示性权限控制那些只能由预定义系统角色的成员或数据库对象所有者执行的活动。例如,sysadmin 固定服务器角色成员自动继承在 SQLServer 安装中进行操作或查看的全部权限。
数据库对象所有者还有暗示性权限,可以对所拥有的对象执行一切活动。例如,拥有表的用户可以查看、添加或删除数据,更改表定义,或控制允许其他用户对表进行操作的权限。db_owner 在数据库中有全部权限。
db_accessadmin 可以添加或删除用户 ID。
db_securityadmin 可以管理全部权限、对象所有权、角色和角色成员资格。
db_ddladmin 可以发出 ALL DDL,但不能发出 GRANT、REVOKE 或 DENY 语句。
db_backupoperator 可以发出 DBCC、CHECKPOINT 和 BACKUP 语句。
db_datareader 可以选择数据库内任何用户表中的所有数据。
db_datawriter 可以更改数据库内任何用户表中的所有数据。
db_denydatareader 不能选择数据库内任何用户表中的任何数据。
db_denydatawriter 不能更改数据库内任何用户表中的任何数据。在这儿把新建的数据库角色的权限配置好,比如需要使用哪个表、视图、存储过程等。然后把Db_owner和db_securityadmin、db_backupoperator取消,不给攻击者BACKUPDATABASE和createTABLE的机会,一但攻击者具有这两个权限,那么你的网站就还处在十分危险的状态。还有注意一下,在创建数据库账号时,千万不能对服务器角色进行选择。
第四步是修改SQL SERVER内置存储过程。SQLSERVER估计是为了安装或者其它方面,它内置了一批危险的存储过程。能读到注册表信息,能写入注册表信息,能读磁盘共享信息等等……各位看到这儿,心里可能会在想,我的网站中有其它的代码,又不像查询分析器那样能查接将结果输出。给你这个权限,又不能怎么样,还是看不到信息。如果各位这样想就大错特错了。提示一下,如果攻击者有createTABLE的权限,那么创建一个临时表,然后将信息insert到表中,然select出来,接着跟数字进行比较,让SQLSERVER报错,那么结果就全出来了……所以我们要报着宁错杀,不放过的态度进行修补。先来列出危险的内置存储过程:
xp_cmdshell
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumkeys
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwriteActiveX自动脚本:sp_OAcreate
sp_OADestroy
sp_OAMethod
sp_OAGetProperty
sp_OASetProperty
sp_OAGetErrorInfo
sp_OAStop以上各项全在我们封杀之列,例如xp_cmdshell屏蔽的方法为:sp_dropextendedproc
’xp_cmdshell’,如果需要的话,再用sp_addextendedproc ’xp_cmdshell’,
’xpsql70.dll’进行恢复。如果你不知道xp_cmdshell使用的是哪个.dll文件的话,可以使用sp_helpextendedproc
xp_cmdshell来查看xp_cmdshell使用的是哪个动态联接库。另外,将xp_cmdshell屏蔽后,我们还需要做的步骤是将xpsql70.dll文件进行改名,以防止获得SA的攻击者将它进行恢复。我们做到这儿,你的SQLSERVER就基本上安全了。但是信息还是能一样的外泄。毕竟select我们是无法取消的,除非你的网站用的是HTML。SQLINJECTION的防范还需要我们这些程序员来注意,这才是治本之法。我们在高级设置篇再接着对SQLSERVER的安全做下一步的分析。该篇文章如果有什么错漏,请大家多多包涵。谢谢……另外推荐一下,SQL INJECTION的测试工具NBSI2,这是由联盟中小竹同志开发,对SQLINJECTION的注入有代表性的作用,另外一个就是小弟的NBWEBSHELL了。这些工具都可以到联盟网站进行下载NB联盟-jadesun(裤衩) QQ:280155
NB网站:54nb.com
SQL注入防御方法-程序员篇作者:NB联盟-小竹  SQL注入越来越多的被利用来入侵网站,部分WEB程序员也开始关注这方面的知识,但由于对入侵的方法一知半解,导致在过滤的时候漏掉某些字符,造成安全漏洞;或者是草木皆兵,把一些合法的用户请求都拒之门外,试想一下,当用户想输入个I’m a boy的时候,却给你臭骂一顿,他还会愿意再上你的网站吗?下面,我从程序方面介绍一下SQL注入的防御方法,首先看这三句最简单SQL语句
1.SQL="select * from Users where UserID=" & Request("ID")
2.SQL="select * from Users where UserID=’" & Request("ID") & "’"
3.SQL="select * from Users where UserName like ’%" & Request("Name")
& "%’"第一句,参数是数字型,这个很明显。第二句,如果字段UserID是int型,就有些人分不清楚了。其实,区分第数字弄和字符型参数,只要看SQL语句参数两边有没有单引号即可,很明显,第一句没单引号,是数字型;第二第三句有单引号,是字符型。
  对于数字型变量,传入的参数都会直接附加到SQL语句上执行,而因为参数是数字型,所以用isNumeric判断是很安全的,我曾经试过用之类试图断开参数,但结果都是失败。
  对于字符型变量,传入的参数都是做为常量,比如你传1 and 1=1进去,SQL语句就是UserID=? and
1=1’,在单引号界定范围里面的值永远都只是一个常量,要打破这个范围,唯一的字符就是界定的字符:单引号。所以,字符型变量只要过滤了’号就完全安全了,至于如何过滤,最好是把一个单引号替换成两个单引号,因为SQL语句里面规定,’常量’这样表示的常量里面,常量里面如果要有单引号,可以用两个单引号代替。这样,既可以保持用户输入的原貌,又可以保证程序的安全。
  下面是两个函数,大家可以Copy过去直接调用就行了。’---------------------------------------------------------------
’ NB联盟防注入函数 ReqNum / ReqStr
’---------------------------------------------------------------
Function ReqNum ( StrName )
ReqNum = Request ( StrName )
if Not isNumeric ( ReqNum ) then
Response.Write "参数必须为数字型!"
Response.End
End if
End FunctionFunction ReqStr ( StrName )
ReqStr = Replace ( Request(StrName), "’", "’’" )
End Function
以上面三句SQL语句,说明一下调用方法:
1.SQL="select * from Users where UserID=" & ReqNum("ID")
2.SQL="select * from Users where UserID=’" & ReqStr("ID") & "’"
3.SQL="select * from Users where UserName like ’%" & ReqStr("Name")
& "%’"  重申一点:上面的方法无论对SQLServer库还是Access或是其它数据库,都是绝对适用、绝对安全,但注意一点,SQLServer的存储过程是个例外,该情况下要把单引号替换成四个单引号,以保安全。

如果是利用.NET的语言的话,我觉得一个简单的办法就是在Sql语句中使用参数,利用SqlCommand的参数集合设置Sql语句的参数值。而且除非逻辑非常简单,否则最好封装到存储过程中。

高度危险 新漏洞涉及几乎所有浏览器

赛门铁克和其它几家安全公司日前就IE、Firefox和其它浏览器上存在的一个最新发现的漏洞发出了警告。
  据Newsfactor网站报道,这些安全公司指出,该漏洞和浏览器处理JavaScript的方式有关。它可能导致一个特别创建的网站窃取未有防备的用户的敏感信息。

据赛门铁克称,该漏洞影响到IE和Firefox的所有版本。

  赛门铁克警告称:“黑客可以利用JavaScript 的‘OnKeyDown’事件来捕捉和复制用户的击键信息。”

  赛门铁克指出,利用该漏洞需要有来自目标用户的击键操作,因此基于键盘的游戏、博客和其它诸如此类的网页都有可能被黑客用来诱惑用户用户输入文本信息以达到目的。

  不过安全分析家指出,该漏洞的危险性并不高。“看上去现在还只是一个概念性漏洞。”Frost & Sullivan分析师Rob Ayoub说。

  事实上,捕捉软件漏洞的丹麦安全公司Secunia将该漏洞评级为“不太严重”,仅高于最低等级。

  Ayoub指出,该漏洞的特别之处在于该漏洞影响到大部分的网络浏览器,从IE7 Beta 2到Firefox、Mozilla和SeaMonkey几乎全部受影响。

  “像JavaScript这样由第三方提供的应用软件和语言几乎可以影响到所有的平台。”Ayoub解释说。

  “可以在多个浏览器上运行的插件也会出现这种情况。”他说。“值得一提的是,JavaScript通常都被认为是比较安全的,而且它在大部分网页上应用相当普遍。”

2005年web标准发展回顾



2005年,在中国IT行业,“web标准”“网站重构”也算得上热门关键词了。
一方面由于商业炒作web2.0(web标准也被收进其支持技术体系)和RSS聚合的兴起,引起很多非设计 /技术人士的关注(呵呵,商业利益驱动永远是推动技术发展的最好动力);另一方面,也有很多有远见的设计师真正理解和体会到web标准的好处而参与到学习和推广web标准的队伍中来,使得web标准不再是个陌生的概念。

2005年,也是web标准被网页设计师逐步接受的一年
“用table好还是div好?”只要类似主题的帖子出现在论坛上,一定是热门贴,引来N页的回复和争论。从一开始的反对、疑惑、观望到现在更多的支持、理解和应用。设计师们已经开始逐步接受“结构和表现相分离”这种思想,也开始尝试xhtml+css(div+css)的技术手段。

一些注重技术和成本的商业网站率先全面使用web标准技术进行网站重构。例如:


网易(www.163.com)
阿里巴巴(www.alibaba.com.cn)
淘宝网(www.taobao.com)
265上网导航(www.265.com)
金山在线(www.kingsoft.com)
donews(www.donews.com/www.donews.org)
优友地带(www.uuzone.com)
等等。这些大商业站点的成功重构无疑为设计师学习web标准增强了信心。

2005年的《网页设计师》
由于工作关系,2005年下半年起几乎没有更新,向关心本站的朋友说声抱歉。下面是2005年的一些统计数据:


总页面量:130页;
Google PR(PageRank)值:从3增长到5;
alexa世界排名从50000位上升到16000位;
每日访问IP:900;
这个数据让我自己也很惊讶:一个没有大半年没有更新的网站可以爬得这么快!由此可以看出越来越多的网友开始关心和学习web标准,也让我更有动力和信心继续把《网页设计师》做好。

web标准推广之路依然漫长
2006年,听到的第一个消息就是IE7将依然不完全支持CSS2,但是修正了部分解析bug。这绝对是个坏消息,意味着我们将不得不针对IE6和IE7分别写不同的CSS,原先设计的标准网页需要重新优化以适应IE 7的显示。

这对本来就对浏览器版本兼容头痛的设计师无疑是雪上加霜,学习web标准将更加困难。我们无奈但又必须面对,毕竟在中国IE现在还是占有90%以上的浏览器市场,我们不可能追求技术上的完美而放弃用户。微软出于对自身利益的考虑,希望将用户锁定在IE上,也无可厚非。但是不管如何,我相信:开放和共享必定是大势所趋,结构层与表现层相分离必定带来长久的利益。让我们彼此共勉,继续为web标准的推广而努力。

防止ACCESS数据库被下载实例(转载)

原来改mdb为asp就能防下载是鬼话。

引子:昨天和animator试验了一下,把data.mdb文件改名为data.asp文件后放在wwwroot目录里。然后 在IE中输入data.asp路径后,发现IE显示一片空白,右键->察看源文件,跳出记事本,将内容另存为.mdb文件 ,用ACCESS打开,发现需要密码,也就是说至少文件头被破坏。
然后用Flashget试验下载data.asp文件,并另存为data.mdb文件,发现用ACCESS打开完好无损!!!看 来,好一些编程人员在开发的时候都认为,改了mdb后缀为asp就能防下载的概念,是错的!后台数据库被下载对于一个asp+a ccess的网站来说无疑是一场惨绝人寰的灾难。今天找了各方的文章,归纳一下有以下9种办法防止数据库被下载(欢迎补充):& nbsp;


1.发挥你的想象力 修改数据库文件名
不用说,这是最最偷懒的方法,但是若攻击者通过第三方途径获得了数据库的路径),就玩完了。比如说攻击者本来只能拿到list权 ,结果意外看到了数据库路径,就可以冠冕堂皇地把数据库下载回去研究了。另外,数据文件通常大小都比较大,起再隐蔽的文件名都瞒 不了人。故保密性为最低。


2.数据库名后缀改为ASA、ASP等

此法须配合一些要进行一些设置,否则就会出现本文开头的那种情况

(1)二进制字段添加(此招我还没有炼成-_-+)。

(2)在这个文件中加入,IIS就会按ASP语法来解析,然后就会报告500错误,自然不能下载了。可是 如果只是简单的在数据库的文本或者备注字段加入<%是没用的,因为ACCESS会对其中的内容进行处理,在数据库里他会以 < %的形式存在,无效!正确的方法是将<%存入OLE对象字段里,这样我们的目的就能达到了。&nbs p;
作方法:
首先,用notepad新建一个内容为 <% 的 文本文件,随便起个名字存档。
  接着,用Access打开您的数据库文件,新建一个表,随便起个名字,在表中添加一个OLE对象的字段,然后添加一个记录, 插入之前建立的文本文件,如果操作正确的话,应该可以看到一个新的名为"数据包"的记录。即可


3.数据库名前加"#"
  只需要把数据库文件前名加上#、然后修改数据库连接文件(如conn.asp)中的数据库地址。原理是下载的时候只能识别& nbsp;#号前名的部分,对于后面的自动去掉,比如你要下载:http://www.pcdigest.com/date/# 123.mdb(假设存在的话)。无论是IE还是FLASHGET等下到的都是http://www.test.com/dat e/index.htm(index.asp、default.jsp等你在IIS设置的首页文档)
  另外在数据库文件名中保留一些空格也起到类似作用,由于HTTP协议对地址解析的特殊性,空格会被编码为"%",如http ://www.test.com/date/123;456.mdb,下载的时http://www. test.com/date/123 %456.mdb。而我们的目录就根本没有123%456.mdb这个文件,所 以下载也是无效的这样的修改后,即使你暴露了数据库地址,一般情况下别人也是无法下载!


4.加密数据库
  首先在选取"工具->安全->加密/解密数据库,选取数据库(如:employer.mdb),然后接确定,接 着会出现"数据库加密后另存为"的窗口,存为:employer1.mdb。接着employer.mdb就会被编码,然后存为 employer1.mdb..要注意的是,以上的动作并不是对数据库设置密码,而只是对数据库文件加以编码,目的是为了防止他 人使用别的工具来查看数据库文件的内容。
接下来我们为数据库加密,首先以打开经过编码了的e mployer1.mdb,在打开时,选择"独占"方式。然后选取功能表的"工具->安全->设置数据库密码",& nbsp;接着输入密码即可。这样即使他人得到了employer1.mdb文件,没有密码他是无法看到 emplo yer1.mdb的。
  加密后要修改数据库连接页, 如:
conn.open "driver={microsoft access driver&nb sp;(*.mdb)};uid=admin;pwd=数据库密码;dbq=数据库路径"
  这样修改后,数据库即使被人下载了,别人也无法打开(前提是你的数据库连接页中的密码没有被泄露)
  但值得注意的是,由于Access数据库的加密机制比较简单,即使设置了密码,解密也很容易。该数据库系统通过将用户输入的 密码与某一固定密钥进行"异或"来形成一个加密串,并将其存储在*.mdb文件从地址"&H42"开始的区域内。所以一 个好的程序员可以轻松制作一个几十行的小程序就可以轻松地获得任何Access数据库的密码。因此,只要数据库被下载,其信息安 全依然是个未知数。


5.数据库放在WEB目录外或将数据库连接文件放到其他虚拟目录下
  如你的WEB目录是e:\webroot,可以把数据库放到e:\data这个文件夹里,在e:\webroot里的数据库 连接页中修改数据库连接地址为:"../data/数据库名" 的形式,这样数据库可以正常调用,但是无法下载的,因 为它不在WEB目录里!这个方法一般也不适合购买虚拟空间的用户。


6.使用ODBC数据源。
  在ASP等程序设计中,如果有条件,应尽量使用ODBC数据源,不要把数据库名写在程序中,否则,数据库名将随ASP源代码 的失密而一同失密,例如: DBPath = Server.MapPath("../123/ abc/asfadf.mdb ")
conn.open "driver={Microsoft Access Driver&nb sp;(*.mdb)};dbq="& DBPath
  可见,即使数据库名字起得再怪异,隐藏的目录再深,ASP源代码失密后,也很容易被下载下来。如果使用ODBC数据源,就不 会存在这样的问题了: conn.open "ODBC-DSN名" ,不过这样是比较烦的,目 录移动的话又要重新设置数据源了,更方便的方法请看第7,8法!


7.添加数据库名的如MDB的扩展映射
  这个方法就是通过修改IIS设置来实现,适合有IIS控制权的朋友,不适合购买虚拟主机用户(除非管理员已经设置了)。这个 方法我认为是目前最好的。只要修改一处,整个站点的数据库都可以防止被下载。无须修改代码即使暴露目标地址也可以防止下载。&n bsp;
  我们在IIS属性---主目录---配置---映射---应用程序扩展那里添加.mdb文件的应用解析。注意这里的选择的D LL(或EXE等)似乎也不是任意的,选择不当,这个MDB文件还是可以被下载的,注意最好不要选择选 择asp.dll等。你可以自己多测试下
  这样修改后下载数据库如:http://www.test.com/data/dvbbs6.mdb。就出现(404或50 0等错误)


8:使用.net的优越性
  动网的木鸟就写过一个防非法下载文件的"WBAL 防盗链工具"。具体可以登陆http://www.9seek .com/WBAL/;
  不过 那个只实现了防止非本地下载的 ,没有起到真正的防下载数据库的功能。不过这个方法已经跟5法差 不多可以通过修改.NET文件,实现本地也不能下载!

  这几个方法中,只有第7和8个是统一性改的,一次修改配置后,整个站点的数据库都可以防止下载,其他几个就要分别修改数据库 名和连接文件,比较麻烦,不过对于虚拟主机的朋友也只能这样了!

  其实第6个方法应该是第5个方法的扩展,可以实现特殊的功能,但对于不支持.net的主机或者怕设置麻烦的话,还是直接用第 5个方法了,而且默认情况下第6个方法,依然可以通过复制连接到同主机的论坛或留言本发表,然后就可以点击下载了(因为这样的引 用页是来自同主机的)

9.利用NTFS分区的文件权限设置(by percyboy)
我们已经知道,ASP.NET 中使用 ADO.NET访问数据库,通过 OleDb 的连接可以访问 Access 数据库— —我们非常常用的低端数据库之一。本文讨论了 ASP.NET 中可能看到的若干错误提示,从中看到&nb sp;Access 2000 和 Access XP 创建的数据库文件 ,在访问出现错误时会出现不太相同的错误提示。希望对大家有所帮助。另一个要点是,希望通过此文,使大家对 ASP. NET 中 Access 数据库文件的 NTFS 权限设置有所新的认识 。


(一)实验过程


为了叙述方便,举个具体例子做个实验:应用程序为 /test ,数据库存放在 D:\wwwr oot\test\data\db1.mdb,我们已经知道在 ASP.NET 中是以一个叫做;ASPNET 虚拟用户的身份访问数据库的,我们需要给这个账户以特定的 NTFS 权限才能 使 ASP.NET 程序正常运行。


为了得到最严格的 NTFS 权限设置,实验开始时我们给程序最低的 NTFS 权限 :

a) D:\wwwroot\test\data\ 文件夹的给用户ASPNET 以如下权限:
允许拒绝
完全控制 &n bsp; □ & nbsp;□
修改 &nbs p; &nbs p;□ □
读取及运行 & nbsp; √ □;
列出文件夹目录 ; √ □
读取 &nbs p; &nbs p;√ □
写入 &nbs p; &nbs p;□ □

b) D:\wwwroot\test\data\db1.mdb文件本身给用户ASPNET以如下权限:
√ 允许将来自父系的可继承权限传播给该 对象


1.1对于某个只包含有"SELECT"命令的aspx程序,上述权限设置运行时无障碍,即:上述权限 已经满足这类程序的运行了。


1.2对于包含有"UPDATE""INSERT""UPDATE"等命令的aspx程序,;

(a) 如果 db1.mdb 是 Access 2000 创 建的数据库,出现如下错误:

"/test"应用程序中的服务器错误。
---------------------------------------
Microsoft Jet 数据库引擎打不开文件'D:\wwwroot\test\data\'。&n bsp;它已经被别的用户以独占方式打开,或没有查看数据的权限。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误 以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.OleDb.OleDbException: Microsof t Jet 数据库引擎打不开文件'D:\wwwroot\test\data\'。 它已经被 别的用户以独占方式打开,或没有查看数据的权限。


(b) 如果 db1.mdb 是 Access XP 创建的 数据库,出现如下错误:

"/test"应用程序中的服务器错误。
----------------------------------------------
操作必须使用一个可更新的查询。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误 以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.OleDb.OleDbException: 操作必须使用一个 可更新的查询。


(c) 原因初步分析:因为包含有"UPDATE""INSERT""UPDATE"等命令,需要对数据库文件本身进 行写入操作,所以上述权限不能满足此需求,我们需要进一步放开权限。
我们放开一些权限,
a) D:\wwwroot\test\data\ 文件夹不变: & nbsp;

b) D:\wwwroot\test\data\db1.mdb文件本身给用户ASPNET以如下权限:
允许拒绝
完全控制 &n bsp; □ & nbsp;□
修改 &nbs p; &nbs p;□ □
读取及运行 & nbsp; √ □;
列出文件夹目录 ; √ □
读取 &nbs p; &nbs p;√ □
写入 &nbs p; &nbs p;√ □


1.3放开权限后继续实验,

(a) 如果 db1.mdb 是 Access 2000 创 建的数据库,出现如下错误:

"/test"应用程序中的服务器错误。
------------------------------------------
不能锁定文件。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误 以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.OleDb.OleDbException: 不能锁定文件。& nbsp;


(b) 如果 db1.mdb 是 Access XP 创建的 数据库,没有出现错误。


(c) 原因初步分析:我们发现在打开 Access 数据库时,同时会在所在目录生成一个同名 的 *.ldb 文件,这是一个 Access 的锁定标记。鉴于此,我们猜测,用户ASPNET 访问 Access 数据库时,也需要生成一个锁定标记,而该目录没 有允许其写入,因此出错。至于 Access XP 创建的数据库为什么没有这个错误,原因还不 得而知。

我们进一步放开权限,
a) D:\wwwroot\test\data\ 文件夹给用户ASPNET以 如下权限:
允许拒绝
完全控制 &n bsp; □ & nbsp;□
修改 &nbs p; &nbs p;□ □
读取及运行 & nbsp; √ □;
列出文件夹目录 ; √ □
读取 &nbs p; &nbs p;√ □
写入 &nbs p; &nbs p;√ □

b) D:\wwwroot\test\data\db1.mdb文件本身给用户ASPNET以如下权限:
√ 允许将来自父系的可继承权限传播给该 对象


1.4 继续实验,发现错误已解决,那么上面这个权限就是我们需要放开的"最低权限"。

(a) 如果 db1.mdb 是 Access 2000 创 建的数据库,我们会发现一个小问题:生成的 *.ldb 文件不会自己删除,访问后该文件依然存在,但这个 问题不会影响 ASP.NET 的正常运行。


(b) 如果 db1.mdb 是 Access XP 创建的 数据库,没有出现上面类似问题。


(c) 原因初步分析:我们仅仅是给了 ASPNET 以写入文件夹的权限,没有给它修改的权限 ,所以文件一旦写入,便无法修改其内容,*.ldb 也就删除不掉了。


如果非要解决这个问题,进一步放开权限为:
a) D:\wwwroot\test\data\ 文件夹给用户ASPNET以 如下权限:
允许拒绝
完全控制 &n bsp; □ & nbsp;□
修改 &nbs p; &nbs p;√ □
读取及运行 & nbsp; √ □;
列出文件夹目录 ; √ □
读取 &nbs p; &nbs p;√ □
写入 &nbs p; &nbs p;√ □

b) D:\wwwroot\test\data\db1.mdb文件本身给用户ASPNET以如下权限:
√ 允许将来自父系的可继承权限传播给该 对象


1.5附带着,实验另一种情形:我们把 db1.mdb 在 Acce ss 打开编辑,同时访问 ASP.NET。

(a) 如果 db1.mdb 是 Access 2000 创 建的数据库,我们发现并没有出现什么问题。


(b) 如果 db1.mdb 是 Access XP 创建的 数据库,出现如下错误:&nb 、


----------------------------------------
个人感觉 :很亲切, 推荐阅读。。

46个不可不知的生活常识

http://cache.baidu.com/c?word=%D0%A1%D1%FD%3B%C4%AD%3B%CF%AB&url=http%3A//bbs%2E52ok%2Ecn/simple/index%2Ephp%3Ft87900%2Ehtml&b=0&a=111&user=baidu

46个不可不知的生活常识

1.常吃宵夜.會得胃癌.因為胃得不到休息
2. 一個星期只能吃四顆蛋.吃太多.對身體不好
3. 雞屁股含有致癌物,不要吃較好
4. 飯後吃水果是錯誤的觀念.應是飯前吃水果
5. 女生月經來時.不要喝綠茶.反正茶類不要喝就對了.多吃可以補血的東西
6. 喝豆漿時不要加雞蛋及糖.也不要喝太多
7.空腹時不要吃蕃茄,最好飯後吃
8.早上醒來.先喝一杯水.預防結石
9.睡前三小時不要吃東西.會胖
10.少喝奶茶.因為高熱量.高油.沒有營養價值可言.長期飲用.易罹患高血壓.糖尿病.等疾病
11.剛出爐的麵包不宜馬上食用
12.遠離充電座.人體應遠離30公分以上.切忌放在床邊
13.天天喝水八大杯
14.每天十杯水.膀胱癌不會來
15.白天多喝水.晚上少喝水
16.一天不要喝兩杯以上的咖啡.喝太多易導致失眠,胃痛
17.多油脂的食物少吃.因為得花5~7小時去消化,並使腦中血液集中到腸胃.易昏昏欲睡
18.下午五點後.大餐少少吃,因為五點後身體不需那麼多能量
19.10種吃了會快樂的食物:深海魚,香蕉,葡萄柚,全麥麵包,菠菜,大蒜,南瓜,低脂牛奶,雞肉,櫻桃
20.睡眠不足會變笨,一天須八小時睡眠,有午睡習慣較不會老
21.最佳睡眠時間是在晚上10點~清晨6點
22.每天喝酒不要超過一杯,因為酒精會抑制製造抗體的B細胞,增加細菌感染的機會
23.服用膠囊應以冷水吞服(可以第一個吃),睡前30分先服葯.忌立即躺下
24.酸梅具防止老化作用,青春永駐;肝火有毛病者宜多食用
25.掉髮因素:熬夜,壓力,菸酒,香雞排.麻辣鍋.油膩食物.調味過重的料理
26.幫助頭髮生長:多食用包心菜,蛋.豆類;少吃甜食(尤其是果糖)
27.每天一杯檸檬汁,柳橙汁.不但可以美白還可以淡化黑斑
28.蘋果是機車族、癮君子、家庭主婦的常備良葯,一天一顆,才能讓自己有個乾乾淨淨的肺
29.抽煙又吃維他命(B胡蘿蔔素-A維他命的一種),會致癌,儘早戒煙.才是最健康的做法
30.女性不宜喝茶的五個時期:月經來時,孕婦,臨產前.生產完後,更年期
31.抽煙,關係最大的是肺癌,唇癌,舌癌,喉癌,食道癌,也與膀胱癌有關
32.飲酒導致肝硬化.引發肝癌
33.吃檳榔會導致口腔纖維化,口腔癌
34.食物過於精細,缺乏纖維;含大量脂肪,尤其是膽固醇會引發胃癌
35.食物過於粗糙,營養不足時導致食道癌,胃癌
36.食品中的黃麴毒素.亞硝酸類物皆具有致癌性
37.不抽煙.拒吸二手煙
38.適量飲酒,不拚久.不醉酒
39.減少食用鹽腌.煙薰,燒烤的食物
40.每天攝取新鮮的蔬菜與水果
41.每天攝取富含高纖維的五穀類及豆類
42.每天攝取均衡的飲食,不過量
43.維持理想體重.不過胖
44.保持規律的生活與運\動
45.保持輕鬆愉快的心情
46.正確飲食習慣:早上吃的像皇帝,中午吃的像平民,晚上吃的像乞丐

阅读全文...

46个不可不知的生活常识

http://cache.baidu.com/c?word=%D0%A1%D1%FD%3B%C4%AD%3B%CF%AB&url=http%3A//bbs%2E52ok%2Ecn/simple/index%2Ephp%3Ft87900%2Ehtml&b=0&a=111&user=baidu

46个不可不知的生活常识

1.常吃宵夜.會得胃癌.因為胃得不到休息
2. 一個星期只能吃四顆蛋.吃太多.對身體不好
3. 雞屁股含有致癌物,不要吃較好
4. 飯後吃水果是錯誤的觀念.應是飯前吃水果
5. 女生月經來時.不要喝綠茶.反正茶類不要喝就對了.多吃可以補血的東西
6. 喝豆漿時不要加雞蛋及糖.也不要喝太多
7.空腹時不要吃蕃茄,最好飯後吃
8.早上醒來.先喝一杯水.預防結石
9.睡前三小時不要吃東西.會胖
10.少喝奶茶.因為高熱量.高油.沒有營養價值可言.長期飲用.易罹患高血壓.糖尿病.等疾病
11.剛出爐的麵包不宜馬上食用
12.遠離充電座.人體應遠離30公分以上.切忌放在床邊
13.天天喝水八大杯
14.每天十杯水.膀胱癌不會來
15.白天多喝水.晚上少喝水
16.一天不要喝兩杯以上的咖啡.喝太多易導致失眠,胃痛
17.多油脂的食物少吃.因為得花5~7小時去消化,並使腦中血液集中到腸胃.易昏昏欲睡
18.下午五點後.大餐少少吃,因為五點後身體不需那麼多能量
19.10種吃了會快樂的食物:深海魚,香蕉,葡萄柚,全麥麵包,菠菜,大蒜,南瓜,低脂牛奶,雞肉,櫻桃
20.睡眠不足會變笨,一天須八小時睡眠,有午睡習慣較不會老
21.最佳睡眠時間是在晚上10點~清晨6點
22.每天喝酒不要超過一杯,因為酒精會抑制製造抗體的B細胞,增加細菌感染的機會
23.服用膠囊應以冷水吞服(可以第一個吃),睡前30分先服葯.忌立即躺下
24.酸梅具防止老化作用,青春永駐;肝火有毛病者宜多食用
25.掉髮因素:熬夜,壓力,菸酒,香雞排.麻辣鍋.油膩食物.調味過重的料理
26.幫助頭髮生長:多食用包心菜,蛋.豆類;少吃甜食(尤其是果糖)
27.每天一杯檸檬汁,柳橙汁.不但可以美白還可以淡化黑斑
28.蘋果是機車族、癮君子、家庭主婦的常備良葯,一天一顆,才能讓自己有個乾乾淨淨的肺
29.抽煙又吃維他命(B胡蘿蔔素-A維他命的一種),會致癌,儘早戒煙.才是最健康的做法
30.女性不宜喝茶的五個時期:月經來時,孕婦,臨產前.生產完後,更年期
31.抽煙,關係最大的是肺癌,唇癌,舌癌,喉癌,食道癌,也與膀胱癌有關
32.飲酒導致肝硬化.引發肝癌
33.吃檳榔會導致口腔纖維化,口腔癌
34.食物過於精細,缺乏纖維;含大量脂肪,尤其是膽固醇會引發胃癌
35.食物過於粗糙,營養不足時導致食道癌,胃癌
36.食品中的黃麴毒素.亞硝酸類物皆具有致癌性
37.不抽煙.拒吸二手煙
38.適量飲酒,不拚久.不醉酒
39.減少食用鹽腌.煙薰,燒烤的食物
40.每天攝取新鮮的蔬菜與水果
41.每天攝取富含高纖維的五穀類及豆類
42.每天攝取均衡的飲食,不過量
43.維持理想體重.不過胖
44.保持規律的生活與運\動
45.保持輕鬆愉快的心情
46.正確飲食習慣:早上吃的像皇帝,中午吃的像平民,晚上吃的像乞丐

阅读全文...

破解原理(献给刚接触破解的新手)

不可不说一下学习破解的三个阶段:
初级,修改程序,用ultraedit等工具修改exe文件,称暴力破解,简称爆破
中级,追出软件的注册码
高级,写出注册机
先说这爆破。所谓爆破,就是指通过修改可执行文件的源文件,来达到相应的目的。你不明白?呵呵,举个例子好了,比如说某共享软件,它比较用户输入的注册码,如果用户输入的,跟它通过用户名(或其它)算出来的注册码相等的话(也就是说用户输入的注册码正确了),那么它就会跳到注册成功的地方去,否则就跳到出错的地方去。
明白过来了吧,我们只要找到这个跳转指令,把它修改为我们需要的“造型”,这样,我们是不是就可以为所欲为了?(某软件双手放在胸口,你要干嘛?)
常见的修改方法有两种,我给你举例说明:
no.1
在某软件中,这样来进行注册:
00451239 CALL 00405E02 (关键CALL,用来判断用户输入的注册码是否正确)
0045123D JZ 004572E6 (!!!<--此为关键跳转,如果用户输入的注册码正确,就跳向成功处,即004572E6处)
0045XXXX YYYYYYYYYY
XXXXXXXX YYYYYYYYYY
XXXXXXXX YYYYYYYYYY
XXXXXXXX 执行到此处,就提示用户注册失败
...提示用户注册码不正确等相关信息
...
004572E6 ... <--(注册成功处!!!)
...提示用户注册成功等相关信息
呵呵,看明白了吗?没有的话,我来给你讲一下。在软件执行到00451239处的时候,CALL置0045E02处来进行注册码判断。接着回来后就来一个跳转语句,即如果用户输入的注册码正确就跳到004572E6处,跳到此处,就算是注册成功了。如果用户输入的注册码不正确的话,那么就不会在0045123D处进行跳转,而一直执行下去。在下面等它的,是注册失败部分。
想明白了吗?嘿嘿...没错,我们只要把那个关键跳转JZ给改为JNZ(如果用户输入的注册码错误,就注册成功,输入正确则注册失败)。当然你也可以将JNZ修改为Jmp,这样的话,你输入的注册码无论正确与否。都可以注册成功。
no.2
我们再来讲一下另外的一种情况:
00451239 CALL 00405E02 (关键CALL,用来判断用户输入的注册码是否正确)
0045123D JNZ 004572E6 (!!!<--此为关键跳转,如果用户输入的注册码不正确,就跳向失败处,即004572E6处)
0045XXXX YYYYYYYYYY
XXXXXXXX YYYYYYYYYY
XXXXXXXX YYYYYYYYYY
XXXXXXXX 执行到此处,就提示用户注册成功
...提示用户注册成功等相关信息
...
004572E6 ... <--(注册失败处!!!)
...提示用户注册码不正确等相关信息
这次我相信,并且深信不疑。你一定明白了。我还是不明白...倒...
你一定看出跟第一种情况不同的地方了吧。没错!它与第一种不同的,就是第一种情况是如果注册码正确,就跳到注册成功处,如果没有跳走,就会执行到失败处。而这一种情况则是如果注册码不正确,就跳到注册失败处,否则将执行到注册成功处。
这种情况的修改,除了把JNZ改为JZ外,还可以将其改为Nop,Nop这个指令没有任何意义,将该条指令修改为Nop后,便可随意输入注册码来进行注册了。
原理以经给你讲了,下面我们再来讲一下具体的修改办法吧。(我假设你以经明白了我所说的工具的使用方法)
先说一下虚拟地址和偏移量转换的问题,在SoftICE和W32Dasm下显示的地址值是所谓的内存地址(memory offset),或称之为虚拟地址(Virual Address,VA)。而十六进制工具里,如:Hiew、Hex Workshop等显示的地址就是文件地址,称之为偏移量(File offset) 或物理地址(RAW offset)。
所以当我们要通过那些十六进制工具来对可执行文件中的相应指令进行修改的话,先要找到它的File offset。我们没有必要去使用那些专门的转换工具,在W32Dasm中就有这个功能,比如说你W32Dasm中来到0045123D处,在W32Dasm界面下方的状态栏中就会出现该条指令的虚拟地址和偏移地址,即@:0045123D @offset 0005063Dh 后面的这个0005063Dh就是相应的偏移地址。我们得到该地址后,便可用UltraEdit等十六进制工具来对可执行文件进行修改了。比如使用UltraEdit,你先用UltraEdit打开该可执行文件,然后按Ctrl+G,接着输入你得到的偏移地址,就可以来到其相应的机器码处。
再给你讲一下机器码,所谓的机器码。就是你看到的那些个十六进制数据了。还记的它们与汇编指令是一一对应的吗?
以下这几个是爆破时要用到的,其它的如果感兴趣,可自行查看相关资料:
JZ=74;JNZ=75;JMP=EB;Nop=90
爆破的时候,只要对以上机器码进行相应的修改就行了,比如第一种情况的时候,可以将74修改为EB,即将JZ修改为JMP。而第二种情况,责需将75修改为90,即将JNZ修改为Nop。
由于本章只讲原理,具体一点的。如怎样找到关键跳转等,我们在下一章中再讲。(一个砖头飞了上来!嘿嘿,这次被俺接到了)
上边讲了爆破的原理,你需要明白的是。爆破只是你学习Crack的开始,是很简单的手段。刚入门的时候可以玩玩儿,但希望你不要就此不前!
(嘿嘿,再说了。人家的软件中不是都说了嘛,不准对其进行逆向修改。你动了人家的身子,怎么能不买帐呢? )
偶就不喜欢爆破,做不出注册机也要找出注册码。否则我就不会去注册这个软件,既然想不掏钱,就要靠你自己的本事。(等以后我有钱了,会考虑去注册那些优秀的共享软件的 )。所以,从某种意义上来说,我是一个正人君子
其实要找到注册码并不是一件多么难的事,我是指你所针对的软件不太那个的时候 不过你无需惧怕。
刚才我们说爆破的时候不提到过关键CALL吗?一般情况下,这个关键CALL就是对两个注册码(一个是软件自身通过你的注册名或机器什么的计算出来的正确的注册码,令一个就是你输入的错误的注册码)进行比较。我前边提到过,CALL之前一般会把所用到的数据先放到一个地方,CALL过去的时候再从这些地方把先前放入的数据取出来,进行相应的处理。这个关键CALL也是这样,在CALL之前,一般会把那两个注册码放到堆栈或某个寄存器中。嘿嘿,我们只要在调试器中,单步执行到该CALL,在未进去之前通过CALL之前的指令判断其将正确的和不正确的注册码放到哪里了。然后再用相应指令进行查看就成了,我说过不难的。
下面列出两个最常见的情况(可参考相关教程):
no.1
mov eax [ ] 这里可以是地址,也可以是其它寄存器
mov edx [ ] 同上,该条指令也可以是pop edx
call 00?????? 关键call
test eax eax
jz(jnz)或jne(je) 关键跳转
看明白了吧,在关键CALL之前,软件会把两个注册码分别放入eax和edx中,你只要在CALL处下d eax或d edx就能看到正确的注册码了。
no.2
mov eax [ ] 这里可以是地址,也可以是其它寄存器
mov edx [ ] 同上,该条指令也可以是pop edx
call 00?????? 关键call
jne(je) 关键跳转
以上两种情况最为常见,而那些个不太常见的情况,我们这里就不再提了。到下下一章的时候,我会给你讲相关方法的...
关于查找软件注册码的部分,就到这里。具体内容,下下一章咱们再说。(不是说了吗?我以经可以接到你的砖头了,干嘛还要丢呢? )
最后,再来说最后的所谓的高级阶段,如果你相信自己。并且热爱Crack,那么你一定会熬到这个阶段的,只是时间因人而异。
其实分析软件的算法,是有好多技巧在里面的。呵呵,最起码我刚开始的时候就摸不着头脑,那么多CALL,每个看起来,都很重要,都追一遍?结果连好多API都被追了进去。等你自己真正用心分析了一个软件的算法,并写出了注册机后。你就会明白其中的道理了

破解原理(献给刚接触破解的新手)

不可不说一下学习破解的三个阶段:
初级,修改程序,用ultraedit等工具修改exe文件,称暴力破解,简称爆破
中级,追出软件的注册码
高级,写出注册机
先说这爆破。所谓爆破,就是指通过修改可执行文件的源文件,来达到相应的目的。你不明白?呵呵,举个例子好了,比如说某共享软件,它比较用户输入的注册码,如果用户输入的,跟它通过用户名(或其它)算出来的注册码相等的话(也就是说用户输入的注册码正确了),那么它就会跳到注册成功的地方去,否则就跳到出错的地方去。
明白过来了吧,我们只要找到这个跳转指令,把它修改为我们需要的“造型”,这样,我们是不是就可以为所欲为了?(某软件双手放在胸口,你要干嘛?)
常见的修改方法有两种,我给你举例说明:
no.1
在某软件中,这样来进行注册:
00451239 CALL 00405E02 (关键CALL,用来判断用户输入的注册码是否正确)
0045123D JZ 004572E6 (!!!<--此为关键跳转,如果用户输入的注册码正确,就跳向成功处,即004572E6处)
0045XXXX YYYYYYYYYY
XXXXXXXX YYYYYYYYYY
XXXXXXXX YYYYYYYYYY
XXXXXXXX 执行到此处,就提示用户注册失败
...提示用户注册码不正确等相关信息
...
004572E6 ... <--(注册成功处!!!)
...提示用户注册成功等相关信息
呵呵,看明白了吗?没有的话,我来给你讲一下。在软件执行到00451239处的时候,CALL置0045E02处来进行注册码判断。接着回来后就来一个跳转语句,即如果用户输入的注册码正确就跳到004572E6处,跳到此处,就算是注册成功了。如果用户输入的注册码不正确的话,那么就不会在0045123D处进行跳转,而一直执行下去。在下面等它的,是注册失败部分。
想明白了吗?嘿嘿...没错,我们只要把那个关键跳转JZ给改为JNZ(如果用户输入的注册码错误,就注册成功,输入正确则注册失败)。当然你也可以将JNZ修改为Jmp,这样的话,你输入的注册码无论正确与否。都可以注册成功。
no.2
我们再来讲一下另外的一种情况:
00451239 CALL 00405E02 (关键CALL,用来判断用户输入的注册码是否正确)
0045123D JNZ 004572E6 (!!!<--此为关键跳转,如果用户输入的注册码不正确,就跳向失败处,即004572E6处)
0045XXXX YYYYYYYYYY
XXXXXXXX YYYYYYYYYY
XXXXXXXX YYYYYYYYYY
XXXXXXXX 执行到此处,就提示用户注册成功
...提示用户注册成功等相关信息
...
004572E6 ... <--(注册失败处!!!)
...提示用户注册码不正确等相关信息
这次我相信,并且深信不疑。你一定明白了。我还是不明白...倒...
你一定看出跟第一种情况不同的地方了吧。没错!它与第一种不同的,就是第一种情况是如果注册码正确,就跳到注册成功处,如果没有跳走,就会执行到失败处。而这一种情况则是如果注册码不正确,就跳到注册失败处,否则将执行到注册成功处。
这种情况的修改,除了把JNZ改为JZ外,还可以将其改为Nop,Nop这个指令没有任何意义,将该条指令修改为Nop后,便可随意输入注册码来进行注册了。
原理以经给你讲了,下面我们再来讲一下具体的修改办法吧。(我假设你以经明白了我所说的工具的使用方法)
先说一下虚拟地址和偏移量转换的问题,在SoftICE和W32Dasm下显示的地址值是所谓的内存地址(memory offset),或称之为虚拟地址(Virual Address,VA)。而十六进制工具里,如:Hiew、Hex Workshop等显示的地址就是文件地址,称之为偏移量(File offset) 或物理地址(RAW offset)。
所以当我们要通过那些十六进制工具来对可执行文件中的相应指令进行修改的话,先要找到它的File offset。我们没有必要去使用那些专门的转换工具,在W32Dasm中就有这个功能,比如说你W32Dasm中来到0045123D处,在W32Dasm界面下方的状态栏中就会出现该条指令的虚拟地址和偏移地址,即@:0045123D @offset 0005063Dh 后面的这个0005063Dh就是相应的偏移地址。我们得到该地址后,便可用UltraEdit等十六进制工具来对可执行文件进行修改了。比如使用UltraEdit,你先用UltraEdit打开该可执行文件,然后按Ctrl+G,接着输入你得到的偏移地址,就可以来到其相应的机器码处。
再给你讲一下机器码,所谓的机器码。就是你看到的那些个十六进制数据了。还记的它们与汇编指令是一一对应的吗?
以下这几个是爆破时要用到的,其它的如果感兴趣,可自行查看相关资料:
JZ=74;JNZ=75;JMP=EB;Nop=90
爆破的时候,只要对以上机器码进行相应的修改就行了,比如第一种情况的时候,可以将74修改为EB,即将JZ修改为JMP。而第二种情况,责需将75修改为90,即将JNZ修改为Nop。
由于本章只讲原理,具体一点的。如怎样找到关键跳转等,我们在下一章中再讲。(一个砖头飞了上来!嘿嘿,这次被俺接到了)
上边讲了爆破的原理,你需要明白的是。爆破只是你学习Crack的开始,是很简单的手段。刚入门的时候可以玩玩儿,但希望你不要就此不前!
(嘿嘿,再说了。人家的软件中不是都说了嘛,不准对其进行逆向修改。你动了人家的身子,怎么能不买帐呢? )
偶就不喜欢爆破,做不出注册机也要找出注册码。否则我就不会去注册这个软件,既然想不掏钱,就要靠你自己的本事。(等以后我有钱了,会考虑去注册那些优秀的共享软件的 )。所以,从某种意义上来说,我是一个正人君子
其实要找到注册码并不是一件多么难的事,我是指你所针对的软件不太那个的时候 不过你无需惧怕。
刚才我们说爆破的时候不提到过关键CALL吗?一般情况下,这个关键CALL就是对两个注册码(一个是软件自身通过你的注册名或机器什么的计算出来的正确的注册码,令一个就是你输入的错误的注册码)进行比较。我前边提到过,CALL之前一般会把所用到的数据先放到一个地方,CALL过去的时候再从这些地方把先前放入的数据取出来,进行相应的处理。这个关键CALL也是这样,在CALL之前,一般会把那两个注册码放到堆栈或某个寄存器中。嘿嘿,我们只要在调试器中,单步执行到该CALL,在未进去之前通过CALL之前的指令判断其将正确的和不正确的注册码放到哪里了。然后再用相应指令进行查看就成了,我说过不难的。
下面列出两个最常见的情况(可参考相关教程):
no.1
mov eax [ ] 这里可以是地址,也可以是其它寄存器
mov edx [ ] 同上,该条指令也可以是pop edx
call 00?????? 关键call
test eax eax
jz(jnz)或jne(je) 关键跳转
看明白了吧,在关键CALL之前,软件会把两个注册码分别放入eax和edx中,你只要在CALL处下d eax或d edx就能看到正确的注册码了。
no.2
mov eax [ ] 这里可以是地址,也可以是其它寄存器
mov edx [ ] 同上,该条指令也可以是pop edx
call 00?????? 关键call
jne(je) 关键跳转
以上两种情况最为常见,而那些个不太常见的情况,我们这里就不再提了。到下下一章的时候,我会给你讲相关方法的...
关于查找软件注册码的部分,就到这里。具体内容,下下一章咱们再说。(不是说了吗?我以经可以接到你的砖头了,干嘛还要丢呢? )
最后,再来说最后的所谓的高级阶段,如果你相信自己。并且热爱Crack,那么你一定会熬到这个阶段的,只是时间因人而异。
其实分析软件的算法,是有好多技巧在里面的。呵呵,最起码我刚开始的时候就摸不着头脑,那么多CALL,每个看起来,都很重要,都追一遍?结果连好多API都被追了进去。等你自己真正用心分析了一个软件的算法,并写出了注册机后。你就会明白其中的道理了
分页:«12»

Powered By Ccbxd  小石头博客

Copyright 小磊-2008 My Labs. Some Rights Reserved.