Archive for 七月, 2009

linux 安装tomcat

星期二, 七月 28th, 2009

下载 jdk-6u10-linux-i586.bin apache-tomcat-6.0.18.tar.gz
cd /usr/local
./jdk-6610-linux-i586.bin
vi /etc/profile 加入

JAVA_HOME=/usr/local/jdk1.6
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH PATH JAVA_HOME

tar xzvf apache-tomcat-6.0.18.tar.gz
cd tomcat/bin;./startup.sh

深奥的女人

星期一, 七月 27th, 2009

有的女人就像Windows,虽然很优秀,但是安全隐患太大。
有的女人就像UNIX 她条件很好,然而不是谁都能玩的起。
有的女人就像C# 长的很漂亮,但是家务活不行。
有的女人就像C++,她会默默的为你做很多的事情。
有的女人就像JAVA,只需一点付出她就会为你到处服务。
有的女人就像JAVA script,虽然对她处处小心但最终还是没有结果。
有的女人就像汇编 虽然很麻烦,但是有的时候还得求它。
有的女人就像SQL,她会为你的发展带来莫大的帮助。
爱情就是死循环,一旦执行就陷进去了。
爱上一个人,就是内存泄露,你永远释放不了。
真正爱上一个人的时候,那就是常量限定,永远不会改变。
女朋友就是私有变量,只有我这个类才能调用。
情人就是使用指针的时候一定要小心注意,不然就会来巨大灾难。

mysql 常用命令

星期一, 七月 27th, 2009

增加用户 GRANT ALL PRIVILEGES ON *.* TO shallwe@192.168.0.1 identified by ‘*****’;

备份数据库
flush tables with read lock;
取消锁定
unlock tables;

忘记mysql密码后:
killall -9 mysqld;
killall -9 mysqld_safe;
mysqld-safe –skip-grant-tables;
mysql进去,
update mysql.user set password=PASSWORD(‘shallwe de mima ‘) where user = ‘root’;
flush privileges;exit;

/etc/init.d/mysql restart

c++ 操作系统服务

星期一, 七月 27th, 2009

在网上找的比较零碎,自己总结下

bool ret;
SC_HANDLE hService,hService2;
SC_HANDLE hManager;
SERVICE_STATUS stus;

hManager = OpenSCManager(NULL, 0, SC_MANAGER_ALL_ACCESS);
if (hManager==NULL)
{
m_strwarninfo += _T(“open sc fail;”);
return ;
}

//停止auto_update服务
hService = OpenService(hManager, _T(“wuauserv”), SERVICE_ALL_ACCESS);

if (hService && QueryServiceStatus( hService,&stus) && m_bforbid==1 )
{
if(stus.dwCurrentState == SERVICE_RUNNING)//如果运行则停止
{
if (!ControlService(hService,SERVICE_CONTROL_STOP,&stus))
{
m_strwarninfo += _T(“stop fail;”);
}

}

}

//设置为禁用
if (m_bforbid==1&&! ChangeServiceConfig(
hService, // handle of service
SERVICE_NO_CHANGE, // service type: no change
SERVICE_DISABLED, // service start type
SERVICE_NO_CHANGE, // error control: no change
NULL, // binary path: no change
NULL, // load order group: no change
NULL, // tag ID: no change
NULL, // dependencies: no change
NULL, // account name: no change
NULL, // password: no change
NULL) ) // display name: no change
{
m_strwarninfo += _T(“forbidden fail;”);
}

windbg 命令

星期一, 七月 27th, 2009

u反汇编
kb 堆栈
!load winext/msec.dll
!exploitable -m
1. 查询符号

kd> x nt!KeServiceDescriptorTable*
8046e100 nt!KeServiceDescriptorTableShadow =
8046e0c0 nt!KeServiceDescriptorTable =

kd> ln 8046e100
(8046e100) nt!KeServiceDescriptorTableShadow | (8046e140) nt!MmSectionExtendResource
Exact matches:
nt!KeServiceDescriptorTableShadow =

2. 下载系统文件的符号

symchk c:\winnt\system32\ntoskrnl.exe /s srv*c:\symbols*http://msdl.microsoft.com/download/symbols

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

3. 查看 event 对象的信号状态

!object \BaseNamedObjects
dt -b nt!_KEVENT xxxxxxxx

4. 查看 LastError 值

!gle

5. 指定进制形式, 0x/0n/0t/0y 分别表示 16/10/8/2 进制

? 0x12345678+0n10
Evaluate expression: 305419906 = 12345682

6. 过滤命令窗口输出信息

.prompt_allow -reg +dis -ea -src -sym

7. .formats 命令

以多种格式显示表达式的值
0:000> .formats @eax
Evaluate expression:
Hex: 00181eb4
Decimal: 1580724
Octal: 00006017264
Binary: 00000000 00011000 00011110 10110100
Chars: ….
Time: Mon Jan 19 15:05:24 1970
Float: low 2.21507e-039 high 0
Double: 7.80981e-318

8. 异常处理相关

有 sx, sxd, sxe, sxi, sxn, sxr 几条命令可用来设置异常和事件的处理方式。比如:
0:000> sxe ld
可以在加载 dll 时中断下来。

9. 内核调试时切换进程

lkd> !process 0 0
lkd> .process xxxxxxxx

10. 可在桌面上建立一个 WinDbg.exe 的快捷方式,然后在该快捷方式的属性力设置如下命令行

C:\WinDBG\windbg.exe -c “.prompt_allow +dis -reg -ea -src -sym; .enable_unicode 1; .enable_long_status 1; .logopen /t c:\dbglog\dbglog.txt”

11. 本机内核调试

通过 File/Kernel Debug… 菜单可以打开内核调试选择窗口,选择最后一个 Local 选项页,确定后可以以内核方式调试本地机器。这时所有会挂起系统的命令都用不了了,但可以读写系统内存。另外,有一个方便的用途是用来查看系统结构,比如: dt nt!_EPROCESS 。

12. 其他命令
windbg中常用的命令

~ – list threads in current process context
~* – list detail information of threads in current process context
lm – list all loaded modules
!sym noice/quiet – symbol prompts on/off
.srcpath – set source code path
k – display current stack
~*kb – display current stack for all threads
dv – display current local variable (ctrl + alt + v to switch mode)
.Frame – call stack
dt xxx – display data structure for xxx such as PEB
!gle/!error – display last error for current thread.
!teb – diplay current thread execution block
!peb – diplay current process execution block
r [@register] – display value of all register
ln [Address] – display the object type in Address
x [] – search address for global variable or global function, such as “x kernel32!*”
!locks – display dead lock
!handle – get current handle usage
!htrace [enable] – display and trace handles.
u – disassemble
bp [Kernel!SetLastError] [value] – set break pointer
bl – display break pointer information.
for example:
bp `mysource.cpp:143` “j (poi(MyVar)”0n20) ”; ‘g’ ”
when MyVar is exceed 0x20, g command will be invoked. NOTE: “j” is to set conditional break pointer.
ba – data break pointer
ba w4 0x4000000 “kb;g” – list all modify 0x40000’s call stack.

p,pa,t,ta – control command

Linux系统信息查看命令大全

星期一, 七月 27th, 2009

转载自neeao

# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量

资源

# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh <目录名> # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载

磁盘和分区

# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况

网络

# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息

进程

# ps -ef # 查看所有进程
# top # 实时显示进程状态

用户

# w # 查看活动用户
# id <用户名> # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务

服务

# chkconfig –list # 列出所有系统服务
# chkconfig –list | grep on # 列出所有启动的系统服务

程序

# rpm -qa # 查看所有安装的软件包

activex中实现iobjectsafety

星期一, 七月 27th, 2009

mfc实现

头文件部分
——————————————————————
DECLARE_INTERFACE_MAP()

BEGIN_INTERFACE_PART(ObjSafe, IObjectSafety)
STDMETHOD_(HRESULT, GetInterfaceSafetyOptions) (
/* [in] */ REFIID riid,
/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,
/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions
);

STDMETHOD_(HRESULT, SetInterfaceSafetyOptions) (
/* [in] */ REFIID riid,
/* [in] */ DWORD dwOptionSetMask,
/* [in] */ DWORD dwEnabledOptions
);
END_INTERFACE_PART(ObjSafe);

——————————————————————-

实现部分
——————————————————————-
BEGIN_INTERFACE_MAP( CJyocxsafeCtrl, COleControl )
INTERFACE_PART(CJyocxsafeCtrl, IID_IObjectSafety, ObjSafe)
END_INTERFACE_MAP()

/////////////////////////////////////////////////////////////////////////////
// IObjectSafety member functions

// Delegate AddRef, Release, QueryInterface

ULONG FAR EXPORT CJyocxsafeCtrl::XObjSafe::AddRef()
{
METHOD_PROLOGUE(CJyocxsafeCtrl, ObjSafe)
return pThis->ExternalAddRef();
}

ULONG FAR EXPORT CJyocxsafeCtrl::XObjSafe::Release()
{
METHOD_PROLOGUE(CJyocxsafeCtrl, ObjSafe)
return pThis->ExternalRelease();
}

HRESULT FAR EXPORT CJyocxsafeCtrl::XObjSafe::QueryInterface(
REFIID iid, void FAR* FAR* ppvObj)
{
METHOD_PROLOGUE(CJyocxsafeCtrl, ObjSafe)
return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
}

const DWORD dwSupportedBits =
INTERFACESAFE_FOR_UNTRUSTED_CALLER |
INTERFACESAFE_FOR_UNTRUSTED_DATA;
const DWORD dwNotSupportedBits = ~ dwSupportedBits;

/////////////////////////////////////////////////////////////////////////////
// CStopLiteCtrl::XObjSafe::GetInterfaceSafetyOptions
// Allows container to query what interfaces are safe for what. We’re
// optimizing significantly by ignoring which interface the caller is
// asking for.
HRESULT STDMETHODCALLTYPE
CJyocxsafeCtrl::XObjSafe::GetInterfaceSafetyOptions(
/* [in] */ REFIID riid,
/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,
/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions)
{
METHOD_PROLOGUE(CJyocxsafeCtrl, ObjSafe)

HRESULT retval = ResultFromScode(S_OK);

// does interface exist
IUnknown FAR* punkInterface;
retval = pThis->ExternalQueryInterface(&riid,
(void * *)&punkInterface);
if (retval != E_NOINTERFACE) { // interface exists
punkInterface->Release(); // release it–just checking!
}

// we support both kinds of safety and have always both set,
// regardless of interface
*pdwSupportedOptions = *pdwEnabledOptions = dwSupportedBits;

return retval; // E_NOINTERFACE if QI failed
}

/////////////////////////////////////////////////////////////////////////////
// CStopLiteCtrl::XObjSafe::SetInterfaceSafetyOptions
// Since we’re always safe, this is a no-brainer– but we do check to make
// sure the interface requested exists and that the options we’re asked to
// set exist and are set on (we don’t support unsafe mode).
HRESULT STDMETHODCALLTYPE
CJyocxsafeCtrl::XObjSafe::SetInterfaceSafetyOptions(
/* [in] */ REFIID riid,
/* [in] */ DWORD dwOptionSetMask,
/* [in] */ DWORD dwEnabledOptions)
{
METHOD_PROLOGUE(CJyocxsafeCtrl, ObjSafe)

// does interface exist
IUnknown FAR* punkInterface;
pThis->ExternalQueryInterface(&riid, (void * *)&punkInterface);
if (punkInterface) { // interface exists
punkInterface->Release(); // release it–just checking!
}
else { // interface doesn’t exist
return ResultFromScode(E_NOINTERFACE);
}

// can’t set bits we don’t support
if (dwOptionSetMask & dwNotSupportedBits) {
return ResultFromScode(E_FAIL);
}

// can’t set bits we do support to zero
dwEnabledOptions &= dwSupportedBits;
// (we already know there are no extra bits in mask )
if ((dwOptionSetMask & dwEnabledOptions) !=
dwOptionSetMask) {
return ResultFromScode(E_FAIL);
}

// don’t need to change anything since we’re always safe
return ResultFromScode(S_OK);
}

sitelock使用方法一

星期一, 七月 27th, 2009

sitelock是微软提出的针对activex安全的一个解决方案。可以帮助activex控件只运行在指定域里面,这样即时插件有漏洞,也可以将危害降到最低,导致利用者无法随便挂马。下面是sitelock使用方法。

1.下载sitelock 1.5,url是http://www.microsoft.com/downloads/thankyou.aspx?familyId=43cd7e1e-5719-45c0-88d9-ec9ea7fefbcb&displayLang=en

并将安装目录加入到c++ include目录中,在vc2003中,步骤是工具->选项->项目->vc++目录中的包含文件加上c:\program Files\microsoft\sitelock 1.14。

据sitelock的文档显示,有两种实现方式,我选取后面一种,用csitelock类来实现,比较简单,功能也比较单一。

2.在插件头文件加上

#include
3.让插件继承csitelock
类定义继承
public IObjectWithSiteImpl
在com_map加
COM_INTERFACE_ENTRY(IObjectWithSite)

4.在插件成员变量里加入两个成员
static const SiteList rgslTrustedSites[length];
static const DWORD dwControlLifespan = 600;//文档中说这个600表示插件过期日期,即安装后600天过期,
5.在需要的时候,例如方法里面调用
bool bSafe= InApproveDomain();
if(bSafe == true)
{
//在安全域里面,可以调用
}
else
{
//在非安全域中,直接返回
}
另外,编译时可能会通不过,如提示time_t不认识,在sitelock.h里面加入
#include

面试官必问的几个问题

星期一, 七月 27th, 2009

找工作前先把这几个问题答案想好。

1.为什么要离开,为什么要来我这里?
2.你将来想做个什么样的人?
3.你要多少钱,你为什么值这么多钱? 还有些不是很尴尬,但是也老问到的

1.先简单介绍下你自己?
2.你在之前公司最高兴/最悲伤的一件事情?
3.我这边的工作你打算如何做?

windows的防火墙-ipsec

星期一, 七月 27th, 2009

xp篇

先下载ipseccmd.exe,然后执行下面的脚本即可

%temp%\ipseccmd -p ‘filter’ -w REG -y
%temp%\ipseccmd -p ‘filter’ -w REG -o

%temp%\ipseccmd -p ‘filter’ -r ‘block135’ -f *=0:135:tcp -n BLOCK -w reg
%temp%\ipseccmd -p ‘filter’ -r ‘block139’ -f *=0:139:tcp -n BLOCK -w reg
%temp%\ipseccmd -p ‘filter’ -r ‘block445’ -f *=0:445:tcp -n BLOCK -w reg
%temp%\ipseccmd -p ‘filter’ -r ‘blocku137’ -f *=0:137:udp -n BLOCK -w reg
%temp%\ipseccmd -p ‘filter’ -r ‘blocku138’ -f *=0:138:udp -n BLOCK -w reg

%temp%\ipseccmd -p ‘filter’ -w REG -x

vista篇,用netsh来搞ipsec。

这是在网上流传比较多的文章,但是转载的人都没有自己实验一遍,所以里面一个错误也一直在被转载。

1、创建策略:

netsh ipsec static add policy name=”阻止访问” description=”阻止用户访问指定的端口”
2、创建过滤器:

netsh ipsec static add filter filterlist=”阻止访问1433端口” srcaddr=any srcport=0 dstaddr=me dstport=1433 protocol=tcp mirrored=yes
注:filterlist=name 使用哪个过滤器
dstport=1433 目标端口
srcport=0 源端口
mirrored=yes 双向

3、创建过滤动作:

netsh ipsec static add filteraction name=”阻止” action=block
注:这个命令就是创建堵塞数据包动作,并命名为阻止

4、封装策略:

netsh ipsec static add rule name=”阻止1433端口” policy=”阻止访问” filterlist=”阻止访问1433端口” filteraction=”阻止” desc=”阻止来自任何地方的用户访问1433端口”
5、启用和关闭策略:

netsh ipsec static set policy name=”阻止访问” assign=y
注:如果要关闭这条策略,那么将”assign”的值改为”n”即可。

纯cpp程序,不显示dos窗口

星期一, 七月 27th, 2009

#pragma comment(linker, “/subsystem:\”windows\” /entry:\”mainCRTStartup\”” )

LINUX信任关系建立

星期一, 七月 27th, 2009

a需要登录b
a:ssh-keygen -t rsa
scp id_rsa.pub b:/home/root/.ssh/authorized_keys
ssh b

愿化作一江秋水,只为你那回眸一笑

星期五, 七月 24th, 2009

我住长江头,
君住长江尾。
日日思君不见君,
共饮长江水。

此水几时休?
此恨何时已?
只愿君心似我心,
定不负相思意????

人面不知何处去,桃花依旧笑春风。
xx

大学时的获奖

星期五, 七月 24th, 2009

今天翻了下照片,发现一个获奖照片,纪念下,可惜我不在上面,右二是我们的小组长。
大学最重要一次获奖

感谢amxku反馈安全漏洞

星期五, 七月 17th, 2009

前阵子amxku给我反馈了一个安全漏洞,结果确认和协商,已经修复了这个漏洞,特此感谢。
为了鼓励这类反馈,向公司申请,给amxku和前一阵子帮过我们的安全圈子里的朋友申请了一年vip,估计他们都已经拿到了。

开博啦

星期二, 七月 7th, 2009

您大概没走错,这就是shallwe的博客。