电脑终于修好了!爆了的24个电容全部都换了。把机器装起来一试,不错,用到发Blog现在都非常稳定。

回头想一想,如果碰上不懂电脑硬件的朋友,不是又要出好几百元钱去买块新主板么?现在的电脑硬件啊~真是看运气了!

 

图片附件:
img_0085_resize.jpg
图片附件:
img_0086_resize.jpg

昨天才把Blog发了,机器就又死机了。重启后硬盘都找不到,郁闷啊!只有拆下来送修了。仔细数了一下,整块主板,居然爆了24个电容!夸张啊!等于就是整块主板的大电容都爆光了…… 汗…

今天拿去送修,顺便问了一下收二手的。看看如果把CPU和主板处理给二手的大概需要多少钱。结果收二手的说这块主板电容会爆,只收50元,CPU倒是收150元。晕啊!看来这块硕泰克的KT400是有质量问题。我才想起来,我一个朋友的一模一样的那块主板也是因为电容全爆而挂了的。唉……本来还很相信硕泰克的……

拿到朋友那里,朋友一看,说那么多电容, 要明天才可以搞定。结果就是:晚上没电脑用了。唉,算了吧。不就一天么,忍忍就过了。:D

PS: 今天小弹簧换发型了!Mark一下!越来越Pretty,造型换得越来越像“小弹簧”了!嘿嘿。想要看看小弹簧新发型的可以密我,hoho

-DOPOD 575

今天郁闷啊,回到家电脑怎么也点不亮。拆开看仔细研究了一下,发现是主板电容爆浆了!郁闷!怪不得系统这几天不十分稳定,时不时的会死机。Soltek 75FRV,还是一块不错的KT400的主板了。唉,只有想办法换块主板或者是更换主板电容了。郁闷!不过还好在我弄了几下以后,还可以上网来写写Blog…… 呵呵

图中电容上面黄的就是电容爆出来的浆…… 

图片附件:
dscf0004_resize.jpg
图片附件:
dscf0005_resize.jpg

  MD5是在Web应用程序中最常用的密码加密算法。由于MD5是不可逆的,因而经过MD5计算得到后的密文,不能通过逆向算法得到原文。

  回顾在Web应用程序中使用MD5加密文本密码的初衷,就是为了防止数据库中保存的密码不幸泄露后被直接获得。但攻击者不但拥有数据量巨大的密码字典,而且建立了很多MD5原文/密文对照数据库,能快速地找到常用密码的MD5密文,是破译MD5密文的高效途径。然而,MD5密文数据库所使用的是最常规的MD5加密算法:原文–>MD5–>密文。因此,我们可以使用变换的MD5算法,使现成的MD5密文数据库无所作为。

  下面演示一些变换算法的例子

  当然,在其它的Web开发语言中,也大同小异,完全能得到相同的结果。

  变换一:循环MD5

  最容易理解的变换就是对一个密码进行多次的MD5运算。自定义一个函数,它接受$data和$times两个形参,第一个是要加密的密码,第二个是重复加密的次数。实现这种变换有两种算法——

以下是引用片段:

<?php
//迭代算法
function md5_1_1($data, $times = 32)
{
//循环使用MD5
for ($i = 0; $i < $times; $i++) {
$data = md5($data);
}
return $data;
}

//递归算法
function md5_1_2($data, $times = 32)
{
if ($times > 0) {
$data = md5($data);
$times–;
return md5_1_2($data, $times); //实现递归
} else {
return $data;
}
}
?>

  变换二:密文分割MD5

  尽管用户的密码是不确定的字符串,但是只要经过一次MD5运算后,就会得到一个由32个字符组成的字符串,这时可以再针对这个定长字符串变换。有点BT的算法是,把这段密文分割成若干段,对每段都进行一次MD5运算,然后把这堆密文连成一个超长的字符串,最后再进行一次MD5运算,得到仍然是长度为32位的密文。

以下是引用片段:

<?php
//把密文分割成两段,每段16个字符
function md5_2_1($data)
{
//先把密码加密成长度为32字符的密文
$data = md5($data);
//把密码分割成两段
$left = substr($data, 0, 16);
$right = substr($data, 16, 16);
//分别加密后再合并
$data = md5($left).md5($right);
//最后把长字串再加密一次,成为32字符密文
return md5($data);
}

//把密文分割成32段,每段1个字符
function md5_2_2($data)
{
$data = md5($data);
//循环地截取密文中的每个字符并进行加密、连接
for ($i = 0; $i < 32; $i++) {
$data .= md5($data{$i});
}
//这时$data长度为1024个字符,再进行一次MD5运算
return md5($data);
}
?>

  当然,这种密文分割的具体算法是数之不尽的,比如可以把原密文分割成16段每段两字符、8段每段4字符,或者每一段的字符数不相等……

  变换三:附加字符串干涉

  在加密过程的一个步骤中,附加一个内容确定的字符串(比如说用户名),干涉被加密的数据。不可以用随机字串,因为这样会使原算法无法重现。这种算法在某些情况下是很具有优势的,比如说用于大量的用户密码加密,可以把用户名作为附加干涉字串,这样攻击者就算知道你的算法,也很难从他们手中的字典中一下子生成海量的对照表,然后大量地破译用户密码,只能有针对性的穷举为数不多的用户。

以下是引用片段:

<?php
//附加字符串在原数据的尾部
function md5_3_1($data, $append)
{
return md5($data.$append);
}

//附加字符串在原数据的头部
function md5_3_2($data, $append)
{
return md5($append.$data);
}

//附加字符串在原数据的头尾
function md5_3_3($data, $append)
{
return md5($append.$data.$append);
}
?>

  变换四:大小写变换干涉

  由于PHP所提供的md5()函数返回的密文中的英文字母全部都是小写的,因此我们可以把它们全部转为大写,然后再进行一次MD5运算。

以下是引用片段:

<?php
function md5_4($data)
{
//先得到密码的密文
$data = md5($data);
//再把密文中的英文母全部转为大写
$data = strtotime($data);
//最后再进行一次MD5运算并返回
return md5($data);
}
?>

  变换五:字符串次序干涉

  把MD5运算后的密文字符串的顺序调转后,再进行一次MD5运算。

以下是引用片段:

<?php
function md5_5($data)
{
//得到数据的密文
$data = md5($data);
//再把密文字符串的字符顺序调转
$data = strrev($data);
//最后再进行一次MD5运算并返回
return md5($data);
}
?>

  变换六、变换七、变换八……

  MD5变换算法是数之不尽的,甚至无须自己再去创造,就用上面的五个互相组合就可以搞出很BT的算法。比如说先循环加密后再分割,并在每一段上附加一个字符串再分别加密,然后变换大小写并颠倒字符串顺序后连成一个长字符串再进行MD5运算……

  如果真的很不幸,由于某些漏洞,比如说SQL Injection或者文件系统中的数据库被下载而异致用户密码数据暴露,那么MD5变换算法就能大大地增加破译出密码原文的难度,首先就是使网上很多的MD5原文/密文对照数据库(要知道,这是破译MD5最高效的方法)没有用了,然后就是使攻击者用常规算法去穷举一串由变换算法得到的密文而搞得焦头烂额。当然,MD5变换算法特别适合用于非开源的Web程序使用,虽说用在开源的程序中优势会被削弱(大家都知道算法),但是也能抑制MD5原文/密文对照数据库的作用。要进行这些复杂的变换运算,当然就要花费的更多的系统开销了,然而对于安全性要求很严格的系统来说,多付出一些来换取高一点的安全性,是完全值得的。

问题一:如保加载JDBC驱动程序

正常我们加载驱动程序有三个途径:

1)Class.forName(String)这想当于classLoader一个String指定的类,在装载时把该驱动程序的静态内容都初始化,其实这时驱动程序类调用了DriverManager.registerDriver(driver);方法
2)使用系统属性:System.getProperty().load(new FileInputStream("属性文件"));
在属性文件中指定jdbc.driver=drivername 这样的好处是可以同时加载多个JDBC,换数据库时不用访问JAVA源代码,只是修改属性文件
3)直接registerDriver(driver)这种方法最可靠,可以在任何环境下使用。

1)方法简单,但MS的JVM不能正确初始化。比如使用IE时在APPLET中就不能使用,应该用3)的方法。但3)方法在灵活性方面不如2),可以根据环境综合考虑。

问题二:大对象存储

一般来说,大对象存储是把文件存到数据库中,当然也可以内存中的超大字符串。对于象图片这样的文件当然是用二进制存储,这里有很多误区,网络上的教程99%都是行不通的,连SUN自己的文档都一直错误,虽然错误很小。按说二进制文件应该存为BLOB类型,但JBDC2并不能直接对BLOB存入二进制文件,如果你这样做,会得到一个IO而不是SQL异常,为此花了我近两个小时才弄清楚。

如果要把一个二制文件存入ORACLE,用标准的JDBC你就要用LONG ROW类型:
create table tb_file(name varchar(20),detail long row);
然后
File file = new File("aaa.gif");
int fileLength =(int) file.length();
InputStream fin = new FileInputStream(file);
PreparedStatement pstmt = con.prepareStatement("insert into tb_file values(´aaa.gif´,?)");
pstmt.setBinaryStream (1, fin, fileLength);
pstmt.executeUpdate();

如果你一定要用BLOB存储,你就必须用ORACLE自己的方法:
create table tb_file(name varchar(20),detail BLOB);
con.setAutoCommit(false);
stmt.executeUpdate("insert into tb_file values(´aaa.gif´,empty_blob())");
下面必须SELECT得到BLOB的对象再向里写:
rs = stmt.executeQuery("select detail from tb_file where name=´aaa.gif´ for upfdate" );
if(rs.next())
{
Blob blob = rs.getBlob(1);
BinaryOutputStream out = ((oracle.sql.BLOB)blob).getBinaryOutputStream();
byte[] b = new byte[((oracle.sql.BLOB)blob).getBufferSize];
InputStream fin = new FileInputStream(file);
int len = 0;
while( (len = fin.read(b)) != -1)
out.write(b,0,len);
fin.close();
out.close();
con.commit();
}

同样读取数据你并不能象LONG ROW那样
InputStream in = rs.getBinaryInputStream("detail");
而要
Blob blob = rs.getBlob("detail");
in = blob.getBinaryStream();

问题三:可滚动结果集

ORACLE 明确说明不支持结果集滚动,那么我们用JDBC2得到一个可滚动的结果集就是同JDBC自己支持的,就是说结果集要在内在中高度缓存,很多很多的开发者都错误地认为是数据库支持的。只是他们没有真正查询大量行,如果真的查询大量行的话肯定是死定了!对于超大量行的数据,情愿返回到它的笨方法也不要使用可滚动结果集.

今天是亲爱的小弹簧的生日,呵呵。大家都来恭祝她生日快乐!

时间过得真是快啊,不知不觉就又过了一年。小弹簧终于完成了她的学业。不容易啊!整整19个春夏秋冬啊!终于修成正果了!开始跨入社会了!

跨入社会的第一步是最艰难的,希望小弹簧你能克服一切困难!实现你自己的梦想!

我亲爱的小PP,祝你生日快乐!

工作了可不要因为忙就不写Blog啊!呵呵

http://littlesprings.blogcn.com/

今天在Taobao上看中了一个Sigma的18-200的镜头。都已经拍下了,正在付款的时候被店主叫住了。说Canon口的Sigma 18-200的口没货了,而且他看了好几个地方都没货。也是牛!不过还好,还没付款。就把这笔交易取消了。

我还是比较看好这个镜头的,350D原配的套头是18-55的,变焦距离太短了。算下来的话,大概就只有3x左右的变焦。所以到野外拍景的话,很难把远处的景物拉近。所以买个10x左右的变焦镜头还是有点必要的。要不到了美丽的景色面前而拍不下来的话才是悔恨。

规 格:

焦 距:18-200mm
最 小 光 圈:F22
镜 头 结 构:15片 13组
视 角:69.3-7.1度
光圈 叶 片数:7片
最近对焦距离:45cm
放 大 倍 绿:1 : 4.4
滤 镜 尺 寸:62mm
遮 光 罩:花瓣型
体 积:直径70mm x 长度 78.1mm
重 量:405克

图片附件:
050818_4.jpg

这年头是不是特别流行Go abroad?身边的好多朋友都在打算或者是已经Go Abroad了。今天在Skype上碰到zllzmcdcr,看了下他的Blog。真是矛盾的心情,不知道是羡慕他的经历呢,还是…… 外面的一却都是新鲜的,不同的风俗,不同的习惯,不同的语言,真想亲历这种感觉。但是外面的世界有现在的世界这么舒服么?Wandering… 所谓有利必有弊吧,得到肯定是要付出的,哪有坐等天上掉馅饼的。

年青,还是需要这一份冲劲的!

http://blog.sina.com.cn/u/1080684171

 

提供完全版本 Microsoft .NET Framework 下载。

Microsoft .NET Framework 1.1 Service Pack 1 (SP1)

主要的特点是改善了安全性。此外,此 Service Pack 还包括了针对自发布 Microsoft .NET Framework 1.1 以来报告的所有客户问题的累积修补程序。特别值得一提的是,SP1 对使用 WSDL 文档、防止数据执行和防范安全性问题(例如缓冲区溢出)提供了更好的支持。SP1 还提供了对 Windows XP Service Pack 2 的支持,可以为使用 Windows XP 的用户提供更为安全、更为可靠的体验。SP1 有 22 种语言可供选用。

下载地址:http://download.microsoft.com/download/8/b/4/8b4addd8-e957-4dea-bdb8-c4e00af5b94b/NDP1.1sp1-KB867460-X86.exe

Microsoft .NET Framework 1.1 Service Pack 1 for Windows 2003 简体版

Microsoft .NET Framework 1.1 Service Pack 1 (SP1) 主要的特点是改善了安全性。此外,此 Service Pack 还包括了针对自发布 Microsoft .NET Framework 1.1 以来报告的所有客户问题的累积修补程序。特别值得一提的是,SP1 对使用 WSDL 文档、防止数据执行和防范安全性问题(例如缓冲区溢出)提供了更好的支持。适用于 Windows Server 2003 的 SP1 有 18 种语言可供选用。支持的操作系统: Windows Server 2003, Datacenter Edition (32-bit x86); Windows Server 2003, Enterprise Edition (32-bit x86); Windows Server 2003, Standard Edition (32-bit x86); Windows Server 2003, Web Edition

下载地址:http://download.microsoft.com/download/0/7/4/0741d480-44d2-485f-86fc-82a022cd78c4/WindowsServer2003-KB867460-x86-CHS.EXE

Microsoft .NET Framework 2.0 (x86)

Microsoft .NET Framework 2.0 版可再发行组件包将安装运行针对 .NET Framework 2.0 版开发的应用程序时所需的 .NET Framework 运行库及相关文件。.NET Framework 2.0 版改进了缓存,从而提高了应用程序的可扩展性和性能;使用 ClickOnce 改进了应用程序部署和更新;通过 ASP.NET 2.0 控件和服务对各种浏览器和设备提供更强大的支持。有关 .NET Framework 2.0 的详细信息,请单击此处。重要事项:不能在同一台计算机上安装两种不同语言版本的 .NET Framework。试图安装第二种语言版本的 .NET Framework 时,将会导致出现以下错误:“安装程序无法安装 Microsoft .NET Framework,因为已经安装了该产品的其他版本。”如果您要使用非英语的平台或要以另一种语言查看 .NET Framework 资源,则必须下载相应语言版本的 .NET Framework 语言包。
支持的操作系统: Windows 2000 Service Pack 3; Windows 98; Windows 98 Second Edition; Windows ME; Windows Server 2003; Windows XP Service Pack 2

下载地址:http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe

Microsoft .NET Framework 2.0 (x64)

Microsoft .NET Framework 2.0 版 (x64)可再发行组件包将安装 .NET Framework 运行库,以及运行面向 .NET Framework 2.0 版开发的 64 位应用程序所需的相关文件。.NET Framework 2.0 版 (x64) 改进了缓存,从而提高了可扩展性和性能;使用 ClickOnce 改进了应用程序部署和更新;通过 ASP.NET 2.0 控件和服务对各种浏览器和设备提供更强大的支持,并且支持 64 位系统。有关 .NET Framework 2.0 的详细信息,请单击此处。重要事项:不能在同一台计算机上安装两种不同语言版本的 .NET Framework。试图安装第二种语言版本的 .NET Framework 时,将会导致出现以下错误:“安装程序无法安装 Microsoft .NET Framework,因为已经安装了该产品的其他版本。”如果您要使用非英语的平台或要以另一种语言查看 .NET Framework 资源,则必须下载相应语言版本的 .NET Framework 语言包。
支持的操作系统: Windows Server 2003, Datacenter x64 Edition; Windows Server 2003, Enterprise x64 Edition; Windows Server 2003, Standard x64 Edition; Windows XP 64-bit

下载地址:http://download.microsoft.com/download/a/3/f/a3f1bf98-18f3-4036-9b68-8e6de530ce0a/NetFx64.exe

  随着MS的操作系统从Win98过渡到Winnt系统(包括 2k/xp),MS的任务管理器也一下子脱胎换骨,变得火眼金睛起来(在WINNT下传统木马再也无法隐藏自己的进程),这使得以前在win98下靠将进程注册为系统服务就能够从任务管理器中隐形的木马面临前所未有的危机,所以木马的开发者及时调整了开发思路,所以才会有今天这篇讨论如何清除动态嵌入式 DLL木马的文章。

  首先,我们来了解一下什么是动态嵌入式木马,为了在NT系统下能够继续隐藏进程,木马的开发者们开始利用 DLL(Dynamic Link Library动态链接库)文件,起初他们只是将自己的木马写成DLL形式来替换系统中负责Win Socket1.x的函数调用wsock32.dll(Win Socket2中则由WS2_32.DLL负责),这样通过对约定函数的操作和对未知函数的转发(DLL木马替换wsock32.dll时会将之更名,以便实现日后的函数转发)来实现远程控制的功能。但是随着MS数字签名技术和文件恢复功能的出台,这种DLL马的生命力也日渐衰弱了,于是在开发者的努力下出现了时下的主流木马–动态嵌入式DLL木马,将DLL木马嵌入到正在运行的系统进程中.explorer.exe、svchost.exe、 smss.exe等无法结束的系统关键进程是DLL马的最爱,这样这样在任务管理器里就不会出现我们的DLL文件,而是我们DLL的载体EXE文件.当然通过进一步的加工DLL木马还可以实现另外的一些如端口劫持/复用(也就是所谓的无端口)、注册为系统服务、开多线程保护、等功能。简而言之,就是DLL 木马达到了前所未有的隐蔽程度。

  那么我们如何来发现并清除DLL木马呢?

  一,从DLL木马的DLL文件入手,我们知道system32是个捉迷藏的好地方,许多木马都削尖了脑袋往那里钻,DLL马也不例外,针对这一点我们可以在安装好系统和必要的应用程序后,对该目录下的EXE和DLL文件作一个记录:运行CMD–转换目录到system32–dir *.exe>exeback.txt& dir *.dll>dllback.txt,这样所有的EXE和DLL文件的名称都被分别记录到exeback.txt和dllback.txt中,日后如发现异常但用传统的方法查不出问题时,则要考虑是不是系统中已经潜入DLL木马了.这是我们用同样的命令将system32下的EXE和DLL文件记录到另外的exeback1.txt和dllback1.txt中,然后运行CMD–fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.(用FC命令比较前后两次的DLL和EXE文件,并将结果输入到diff.txt中),这样我们就能发现一些多出来的DLL和EXE文件,然后通过查看创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好,如果有的话也不要直接DLL掉,我们可以先把它移到回收站里,若系统没有异常反应再将之彻底删除或者提交给杀毒软件公司。

  二、上文也曾提到一些系统关键进程是这类木马的最爱,所以一旦我们怀疑系统已经进驻了DLL木马,我们当然要对这些关键进程重点照顾了,怎么照顾?这里推荐一个强大的脱壳工具工具Procedump.exe他可以帮您看出进程到底调用了那些DLL文件(如图1)但是由于有的进程调用的DLL文件非常多,使得靠我们自己去一个核对变的不太现实,所以我们会用到一个shotgun写的NT进程/内存模块查看器ps.exe,用命令ps.exe /a /m >nowdlls.txt将系统目前调用地所有DLL文件地名称保存到nowdlls.txt,然后我们再用fc将之于事先备份 dllback.txt比较一下,这样也能够缩小排查范围。

  三、还记得木马的特征之一端口么?所有的木马只要进行连接,只要它接受/发送数据则必然会打开端口,DLL木马也不例外,这也为我们发现他们提供了一条线索,我们可以使用foundstone的进程端口查看工具Fport.exe来查看与端口对应的进程,这样可以将范围缩小到具体的进程,然后结合Procedump来查找DLL木马就比较容易了.当然有如上文提到的有些木马会通过端口劫持或者端口重用的方法来进行通信,139、80、1443、等常见端口则是木马的最爱。因为即使即使用户使用端口扫描软件检查自己的端口,发现的也是类似TCP UserIP:1026 ControllerIP:80ESTABLISHED 的情况,稍微疏忽一点,您就会以为是自己在浏览网页(防火墙也会这么认为的)。所以光看端口还不够,我们要对端口通信进行监控,这就是第四点要说的。

  四、我们可以利用嗅探器来了解打开的端口到底在传输些什么数据。通过将网卡设为混杂模式就可以接受所有的IP报文,嗅探程序可以从中选择值得关注的部分进行分析,剩下的无非是按照RFC文档对协议进行解码。这样就可以确定木马使用的端口,结合Fport和Procedump我们就能够查找到该DLL木马了。至于嗅探器个人推荐使用IRIS,图形界面比较容易上手。

  五、通常说道查杀木马我们会习惯性地到注册表碰碰运气,以前可能还蛮有效的,但如果碰到注册为系统服务的木马(原理:在NT/2K/XP这些系统中,系统启动时会加载指定的服务程序)这时候检查:启动组/注册表 /autoexec.bat/win.ini/sysytem.ini/wininit.ini/*.inf(例如autorun.inf) /config.sys等文件就发现不了丝毫的异样,这时候我们就应该查看一下系统服务了:右击我的电脑–管理–服务和应用程序–服务,这时您会看到100多个服务,(MS也真是的,其中75%对个人用户无用,可以禁止。),慢慢找吧,看谁不顺眼就把它拎出来:),当然如果您以前曾经用导出列表功能对服务备份过,则用文件比较的方法会很容易发现哪些是外来客,这时您可以记录下服务加载的是那个文件,然后用Resource Kits里提供的srvinstw.exe来移除该服务并清除被加载的文件。

  通过以上五步,基本能发现并清除狡猾的动态嵌入式DLL木马了,也许您也发现如果适当地做一些备份,会对我们的查找木马的过程有很大的帮助,当然也会减轻不少工作的压力哦。