博客恢复运行了。 这也是开站以来,第一次网站大搬家。无奈,为了能恢复博客,不得不换个空间。 新空间速度也不错,价格方面,也比以前省银子,而且是个全能空间,包括支持ASP.NET :-) 容量也比以前的大,还是值得高兴。
给大家推荐一下 联动中国 http://www.winhost.cn
君看一叶舟,出没风波里
博客恢复运行了。 这也是开站以来,第一次网站大搬家。无奈,为了能恢复博客,不得不换个空间。 新空间速度也不错,价格方面,也比以前省银子,而且是个全能空间,包括支持ASP.NET :-) 容量也比以前的大,还是值得高兴。
给大家推荐一下 联动中国 http://www.winhost.cn
买回家的榴莲,放了两天,终于熟了,回家后马上开工…… 今晚可过足了瘾……
放熟的榴莲,不用费力气,自己会裂开的。打开坚硬的外科,露出黄黄的果肉来
使劲掰开来,果肉完全呈现
大卸八块,将果肉全部取出
———————-我是华丽的分隔线———————- 附上榴莲选购食用技巧:
榴莲以外形多丘?状的为上选,因为每个丘状面会一颗核;有果核必有果肉,丘状较多的就可保证有较多的果肉。 首先看看尾部的刺,越密越细越好;接著用鼻子贴近闻,有浓厚香气者为佳;最后以手用力摇动,听到咚咚响声表示已经成熟了。 榴莲的壳变黄,刺有一点软,最好是稍微有点裂开的(是自然裂开,不是因外力而裂的),外壳散发出榴莲香的那一种最好。
果内有“干包”、“湿包”之分。购买榴莲时,一定要看表面刺的疏密,刺密肉少,刺疏肉才厚。还需看颜色深浅,太深,则过熟;太浅,则未成熟;不深不浅为宜。要选干包的,干包爽口,甜而不腻,湿包粘口且腻。如果买了湿包的,吃时,先用水把手浸湿,以免粘手。
轻摇榴莲有声音时,代表它已可以吃了 。 挑外表像狼牙棒的,有一股股小山邱鼎起来的.小山越多肉越多.壳有点开了的是熟了的,比较甜比较好吃,但壳开的时间不能太长,熟过头了就是腐烂了。 挑选好吃的金枕头榴连, 首先留意果形,外表一定要长形的,尾部的外型是长尖形,如此则皮薄肉丰满,籽也会比较小。 色泽最好是淡黄绿色或金黄色, 至于熟度,可闻闻尾巴处,如果有浓浓的果肉香,当天就可吃,若闻起来味道较淡,则多放几天再吃。 另外提供一个简易吃法:取螺丝起子在榴连尾端插入后上下左右摇摆,果实产生裂缝时,即可剥开享用
今天在网上找了一个Vista的皮肤,赶紧给我的BLOG换上,漂亮了许多,呵呵。 最近BLOG上,广告多得吓人,特别是在文章的评论和留言本里面,真是无孔不入的广告。由于偶比较痛恨这些广告,手动删除也不是办法,整页整页的广告评论和留言,多则上百条。而且手动在管理界面删除,也只是一个治标不治本的办法。 据寡人分析[biggrin],可能是评论和留言的post环节不够强悍,导致垃圾广告有孔而入。不过这个BLOG的评论和留言都是有验证码的,评论的POST对应于blogcomm.asp文件,评论的页面,通过指向GetCode.asp,获取验证码图片,并在Session中保存该验证码,用以和用户输入的验证码比对。 那么如果要达到用程序,自动提交垃圾广告,可以想到的方法有两种: 1.用程序识别图片验证码,获取其内容,然后模拟POST。不过这个比较高难,要程序识别图片中的数字,需要图形识别的知识。 2.绕过验证码的过程,直接POST。这个要根据具体的漏洞而定。
于是随手在google上搜索了一下,PJBlog还真有这个漏洞。[eek]
具体的漏洞描述如下: blogcomm.asp文件对验证码判断不严格。 如果用户没有请求过GetCode.asp文件,那么服务器端Session里面的GetCode值为空,而用户提交的数据里面验证码也为空,这样刚好空等于空,反而通过了验证码验证。
查看blogcomm.asp源码,在Line 94行有这样的情况。
为了验证这个漏洞是否存在,我们可以自己动手测试一下,用程序模拟POST一次。就拿偶的BLOG做实验吧。首先,随便打开一个文章,启动网络抓包工具,(这里我用的是WSE–WinSocketExpert),随便敲入几个字,查看捕获下来的网络包。我们会发现,POST的数据格式是这样的:
username=Timothy&password=&Message=PostData&logID=171&action=post&submit2=%E5%8F%91%E8%A1%A8%E8%AF%84%E8%AE%BA
username 是评论者名称
password 是密码(游客不需要密码) logID 就是文章编号 Message 就是评论内容了,垃圾广告最关注的就是这个…… action 是一个隐藏的field,值为post,这个可以在页面上通过查看源码看到 submit2 后面的码,转换成中文,其实就是“发表评论”,同样参考评论页面源码
POST的结构知道了,下面我们用程序来模拟POST一下,看漏洞是否存在,测试代码如下: (请慎用此部分代码,不要用于垃圾广告软件,谢谢 [cool])
[code]private void PostFunc()
{
WebClient wc = new WebClient();
string postData = "username=Timothy&password=&Message=PostData&logID=171&action=post&submit2=%E5%8F%91%E8%A1%A8%E8%AF%84%E8%AE%BA";
try
{
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
wc.UploadData("https://xiaozhou.net/cooldog/blogcomm.asp", "POST", Encoding.Default.GetBytes(postData));
}
catch
{
wc.Dispose();
return;
}
wc.Dispose();
}[/code]
运行此程序,可以在我的blog的编号171的文章评论中,看到下图:
看来漏洞真的存在……
这里,我们可以看到POST数据结构中,logID是可以人为改变的,也就是文章编号。如果把logID作为变量自增,测试代码外面,再套一个for循环,这个程序就成了制造垃圾广告的机器了……
找到了漏洞,得赶紧补上才行。其实我们需要修改的地方,就是在blogcomm.asp。找到94行,这里的判断,由于没有对Session进行判断才导致了此漏洞的产生。
修改方法如下:
blogcomm.asp Line:94
原代码:
IF (memName=empty or blog_validate=true) and cstr(lcase(Session(“GetCode”)))<>cstr(lcase(validate)) then
替换后的代码,增加对Session的判断:
IF (memName=empty or blog_validate=true) and (cstr(lcase(Session(“GetCode”)))<>cstr(lcase(validate)) or IsEmpty(Session(“GetCode”))) then
大功告成了……[cool]睡觉去……
MSN机器人是一个比较好玩的东东,通过第三方提供的SDK开发包,允许我们开发自己的MSN机器人,实现一些有趣的功能。比如自动聊天等等。
进行MSN机器人开发,需要你首先申请一个MSN帐号,然后去http://sp.incesoft.com/index注册帐号,把你的MSN机器人挂在平台上面。然后下载SDK,开发机器人逻辑。 开发出来的机器人程序,会主动和第三方的平台登录连接,这个时候,你的机器人就可以运行了。
运行的方式: 1.机器人程序–>登录incesoft服务器—>MSN机器人上线 2.MSN客户端向机器人发起聊天—>incesoft接收到数据包—>转发给你的机器人程序
这样,MSN客户端发给你的机器人的信息,就传递到你的机器人程序了,而你可以根据不同的信息,进行不同的动作,这些动作,都是在incesoft提供的SDK里面封装好了。
通过这种运行方式,要加入远程控制功能,是非常方便的,我们可以将登录MSN机器人程序的机器,作为受控端。而且还有一个好处,就是你不用去关心IP变化,只要机器人上线了,就可以开始控制了,这也是用MSN机器人实现的优势。
远程控制,流程如下: 1.被控制机器,运行MSN机器人程序,登录MSN机器人 2.管理机器,发送OP指令给MSN机器人,获取OP控制权限 3.管理机器,发送控制指令 4.被控制机器端,响应指令,做出回应
好像被我说复杂了,其实实现起来非常的简单。
需要准备的工作,申请MSN帐号,然后去http://sp.incesoft.com/index 申请一个帐号,挂上你的MSN帐号。然后下载SDK包,进行开发。
下面是我实现的一个简单的远程控制功能
1.和机器人交互,出现命令菜单 这个时候需要你进入OP模式,才能进行远程控制的操作
2.输入OP密码,这个时候,就获取了OP控制权限,可以控制远程机器了
3.远程控制示例,列举进程列表
4.杀掉指定进程
5.退出OP模式
关机和重启,功能是实现了的,这里就不演示了,呵呵
放上源代码,大家可以下载下来试试
调试运行的时候,请替换RobotService.cs Line:144 行的用户名和密码,也就是你在incesoft注册的帐号和密码。
站点前几天访问不了,网上问了空间提供商,原来是机房被查封了,郁闷。还好,现在终于恢复了。 最近工作不像前几个月那么忙了,值得庆幸的是,项目达标通过了,大家心里都松了一口气。看来这几个月的努力没有白费,想起往日的加班,凌晨坐出租车回家,往事历历在目,不忍回首啊…… 昨天和老婆去好又多,遇到榴莲搞促销,一口气买了两个榴莲搬回家,这下可以过足瘾了。其实我当初也不喜欢榴莲,可是吃着吃着就吃出感情了,越吃越觉得好吃。 今天把我的blog的音乐也更新了,换成了St.Philips.Boys的作品,天使般的声音,我很喜欢。 帮我老哥做的站点基本完工了,卖年画的站点,大家有空多去碰碰场 泥香久久 www.nixiangjiujiu.cn
给大家推荐一本新书 《深入浅出–Visual Basic 2005入门、进阶与应用实例》 由MVP陈锐编著,是一本不可错过的好书,呵呵
【内容简介】 本书从开发平台搭建入手,详细地介绍了Visual Basic 2005开发的相关技术,包括Visual Basic 2005新特性、数据库访问、My命名空间、异常处理和调试、用户界面设计、创建自定义控件、ASP.NET 2.0编程等,并针对数据库、多媒体、系统、Web等目前几大热点主题,给出3个完整的并具代表性的应用实例,力图将Visual Basic 2005开发技术全面、系统、深入地展现给读者。. 本书不但融合了作者在使用Visual Basic 2005过程中遇到的各种常见问题和应用案例,还总结了作者几年来在CSDN社区VB版所解决的大量问题,并对不同问题的产生原因和相关的原理进行了深入浅出的讲解,更重要的是,还提供了一系列解决问题的思路和方法。 本书适用于打算进入Visual Basic开发领域的初学者,有一定Visual Basic基础并想深入学习Visual Basic 2005的开发人员。本书也可以作为各大中专院校相关专业的参考用书,或作为相关培训机构的培训教材。 本书针对如何使用Visual Basic 2005来设计丰富的Windows和Web程序,以Visual Basic 2005语言为基础进行纵向展开,详细介绍了从开发平台的搭建到完整开发实例的实现。.. 本书是作者多年实践工作的积累和总结,面向实用,由浅入深,循序渐进。全书可分为三个层次,第一层次是开发平台搭建部分;第二层次是基础知识部分,介绍如何使用开发工具提供的功能及控件、如何访问数据库、如何对程序进行调试等;第三层次是实例部分,介绍了3个完整的开发实例:个人信息管理系统、坦克大战游戏和基于Web的办公自动化系统,涉及了数据库、多媒体、系统、Web、开发工具安装调试等目前几大极具关注度的知识点,其剖析和探索程度可见一斑。 本书适用于打算进入Visual Basic开发领域的初学者,有一定Visual Basic基础并想深入学习Visual Basic 2005的开发人员,尤其适用于入门、进阶以及希望深入研究Visual Basic技术的读者。 本书也可以作为各大中专院校相关专业的教学辅导和参考用书,或作为相关培训机构的培训教材。
/*
PhotoAlbum 功能列表: 1.无须数据库支持,直接处理服务器图片目录 2.为大图片生成缩略图,并存放到专门的目录,提高相册预览图片的效率 3.简化图片添加过程,直接上传图片到图片目录即可,相册自动获取、遍历新上传的图片,并生成缩略图 4.增加多页跳转功能 5.简单易用,直接插入控件到你的页面,并进行相关设置即可使用
PhotoAlbum 控件说明: 1.该控件在页面加载的时候,会搜索当前网站指定目录所有jpg格式的文件,在使用时需要指定原图片存放地址和生成的缩略图存放地址,需要添加到web.config文件中:
try { smallfoldername = Server.MapPath(ConfigurationManager.AppSettings[“SmallPath”]); bigfoldername = Server.MapPath(ConfigurationManager.AppSettings[“NormalPath”]); } catch { smallfoldername = Server.MapPath(“./Photo/SmallPics/“); bigfoldername = Server.MapPath(“./Photo/NormalPics/“); }
如果获取用户配置路径失败,控件默认采用./Photo/SmallPics/ 和./Photo/NormalPics/ 两个目录 NormalPics为用户上传原图片的地址,SmallPics为控件生成并存放缩略图的地址。
2.控件在页面加载的时候,遍历原图地址,并逐个生成缩略图,存放到缩略图地址目录。第一次运行,会牺牲效率,当缩略图生成完毕后,运行速度大幅提高。
3.生成缩略图,采用ImageThumbnail类的MakeThumbnail方法实现,缩略图的大小和生成方式,可以自行设置。可以分别按高、宽生成,不过图片可能会产生变形,也可以用CUT裁剪方式。
4.相册处理图片文件,并把图片文件展现给前端浏览器。相册可视化部分,采用DataList控件实现。
相册控件效果图如下: 点击浏览
相册源码下载: 点击下载此文件
开发环境: Windows XP SP2 .NET Framework2.0 Visual Studio 2005 SP1
这是一个封装的在.NET下面实现关机和重启的一个类,其实就是直接引用了Win32 API。 业余的时间,写了个MSN机器人,后来突发灵感,想加入远程控制主机的功能,包括重启和关机,于是用上了这个类。待MSN机器人开发完成,放出源码,hoho。
//关机、重启计算机 封装类 using System; using System.Collections.Generic; using System.Text; using System; using System.Runtime.InteropServices;
namespace MyRobot {
class ShoutDown
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct TokPriv1Luid
{
public int Count;
public long Luid;
public int Attr;
}
[DllImport("kernel32.dll", ExactSpelling = true)]
internal static extern IntPtr GetCurrentProcess();
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
[DllImport("advapi32.dll", SetLastError = true)]
internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,
ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);
[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool ExitWindowsEx(int flg, int rea);
internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
internal const int TOKEN_QUERY = 0x00000008;
internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
internal const int EWX_LOGOFF = 0x00000000;
internal const int EWX_SHUTDOWN = 0x00000001;
internal const int EWX_REBOOT = 0x00000002;
internal const int EWX_FORCE = 0x00000004;
internal const int EWX_POWEROFF = 0x00000008;
internal const int EWX_FORCEIFHUNG = 0x00000010;
public static void DoExitWin(int flg)
{
bool ok;
TokPriv1Luid tp;
IntPtr hproc = GetCurrentProcess();
IntPtr htok = IntPtr.Zero;
ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
tp.Count = 1;
tp.Luid = 0;
tp.Attr = SE_PRIVILEGE_ENABLED;
ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid);
ok = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
ok = ExitWindowsEx(flg, 0);
}
}
}
2007年的MVP Open Day合影,不过感觉比去年冷清了一些,可能成都区的MVP都有事在身,呵呵。这次除了见到以前的老面孔Leo Liang,Eric Liu,Eric Zhong,Simon Lu ,还认识了一个新任的MVP:朱永光。Jack Zou,Aaron Zhao,Kim Luo都有事没能参加。放一张合影看看.
今天看到CSDN中有网友问道如何获取用户按Ctrl+Alt+Del锁定桌面的事件。回帖后大致整理了一下,希望对大家有帮助。
首先我们要了解一下WinLogon,他是负责提供给用户交互式界面的一个程序。
WinLogon初始化时会创建3个桌面:
(1)、winlogon桌面:主要显示window 安全等界面,如你按下CTRL+ALT+DEL,登陆的界面等
(2)、应用程序桌面:我们平时见到的那个有我的电脑的界面(这个大家都见过了吧,呵呵)
(3)、屏幕保护桌面:屏幕保护显示界面。
到这里,仿佛我们找到了方法,就是编写Hook程序,截获CTRL+ALT+DEL,按下的消息,这样不就可以判断用户是否要锁定桌面了吗?其实不然,在WinLogon初始化时,就向系统注册截获CTRL+ALT+DEL消息,所以其他程序就无法得到CTRL+ALT+DEL的消息。
WinLogon会和GINA DLL进行交互,缺省是MSGINA.DLL(在System32目录下)。微软同时也为我们提供的接口,自己可以编GINA DLL来代替MSGINA.DLL。
到这里,我们还能想到的方法,就是采用建立远程线程的方式,注入到WinLogon.exe中,这样也可以截获到Ctrl+Alt+Del的按下的事件。不过写远程线程比较麻烦,而且调试起来也不方便。
其实WinLogin还为我们提供了另外一种方式,就是WinLogin通知包的方式。
Winlogon通知包(Winlogon Notification Package)”就是处理winlogon在切换状态时发出的事件的DLL。你可以通过”Winlogon Notification Package”来监视winlogon事件的响应。你可以注册这些DLL,那么winlogon.exe会在启动时加载它们,并且会在系统状态切换时来调用注册DLL的事件处理函数。
其实说简单一点,就是我们可以自己编写处理winlogon的事件的逻辑,将其作为函数导出,把它编译为Win32 Dll,然后添加信息到注册表。接下来的工作,我们就不用操心了,Winlogon会根据不同的事件,自己来调用我们DLL提供的函数进行处理。
为了注册你的”Winlogon Notification Package”,必须在”HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify”下创建你的”notification package”子键。在”Notify”项下,可以根据需要创建如下键值:
Asynchronous[REG_DWORD]:表明是否异步处理winlogon事件,如设为 1,winlogon将启动一个新线程来处理。
DllName[REG_EXPAND_SZ]:指定要加载的DLL名。
Impersonate[REG_DWORD]:表明是否以登陆用户的权限来处理事件。
Lock[REG_SZ]:锁定桌面事件。
Logoff[REG_SZ]:注销事件。
Logon[REG_SZ]:登陆事件。
Shutdown[REG_SZ]:关机事件。
StartScreenSaver[REG_SZ]:启动屏保事件。
StartShell[REG_SZ]:启动shell(一般指explorer.exe)事件。
Startup[REG_SZ]:系统开机事件。
StopScreenSaver[REG_SZ]:停止屏保事件。
Unlock[REG_SZ]:解除桌面锁定事件。
其中每个事件对应DLL中的一个导出函数,即每当有事件发生时,winlogon.exe便调用相应的函数。
譬如:DllName的值为”test.dll”,Lock的值为”testLock”,那么系统锁定时,winlogon.exe将调用test.dll中导出的”testLock”函数。
关于DLL的实现非常地简单:只要导出处理事件是要调用的函数就行,其他和别的DLL无异。以下是代码的简单实现:
// WinLogonNotify.cpp : Defines the entry point for the DLL application.
//
#include “stdafx.h”
#include “WinLogonNotify.h”
#ifdef _MANAGED
#pragma managed(push, off)
#endif
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
// This is an example of an exported function.
WINLOGONNOTIFY_API void _stdcall testLock(DWORD param)
{
MessageBox(NULL,L”Lock!”,L”Tips”,MB_OK);
return;
}
以上代码在Visual Studio 2005 开发平台上编译通过。
大家可以大包下载代码参考。
这个帖子的源地址如下:
标题:如何获取锁定计算机事件
http://community.csdn.net/Expert/topic/5536/5536030.xml?temp=6.365603E-02
向往Windows Mobile系统的手机已久,昨天终于下手了。呵呵。 Dopod D600,用起来整体感觉还不错。遗憾的地方好像不支持无线局域网,比较郁闷。 从此以后可以在公车上看电影,听音乐,看书,活活~~
手机制式 GSM手机 功能特色 商务手机 网络数据传输 EGPRS/GPRS 支持频段 GSM(900/1800/1900MHz) 手机类型 直板手机 硬件性能 CPU:TI OMAP850 201MHz 通话时间(分钟) 210-300 待机时间(小时) 150 智能手机 Windows系统 操作系统 Windows Mobile 5.0 简体中文版 机身内存 RAM64M,ROM128M