100层楼两个杯子找临碎点

首先,我们以10为区间,则得出(1,10)(11,20)(21,30)(31,40)(41,50)(51,60)(61,70)(71,80)(81,90)(91,100)则最大的需要20次,具体的方法是:先从10层摔下,若不碎,则从第二十层再摔,如此内推,我们可以找到一个临界区间,如(51,60),我们再从51开始,一层一层的往下摔,摔碎的那一点是临界点,则这样平均少于20次。

通过这个方法,我们可以知道,平均次数少于20次,则最优的结果毕竟是不会超过20次的。我们做这样的考虑,每一次比较,我们都让这一次比较的次数抵消掉前一次比较过的次数,亦即区间的范围逐渐减小,如(1,10)(11,19)(20,27)…(54,55)56 57 …. 100,这到了第56以后就不能保证该次比较的次数抵消掉上一次比较过的次数,这不成立,我们接着用12,13比较也不行,当我们用14时,我们可以得出范围为(1,14)(15,27)(28,39)… (96,99)100,则可以得出少于14次。

反编译工具JAD

反编译工具JAD—Eclipse配置JAD

JAD是什么东西,不多解析,自己百度,谷歌。下面直接上主题。

1.安装包的准备

1)jad158g.win.zip,下载地址
2)eclipse的插件:net.sf.jadeclipse_3.3.0.jar,下载地址

2.安装过程

1)解压jad158g.win.zip,解压后有jad.exe,把该.exe文件放在jdk的安装目录下的bin下

2)把net.sf.jadeclipse_3.3.0.jar放在Eclipse的plugins下

3)重启Eclipse
配置大概完成了,但是现在还不能正常打开.class的文件,我们需要把.class的文件设置默认打开方式
具体配置过程如下:
1.点击Windows —> Preference 打开Preference窗口
2.在Preference窗口的左侧菜单依次点击 General —> Editors —> File Associations
3.点击.class 若在下面Associated editors框中有JadClipse Class File Viewer,则选中设为默认值,若没有则在这个框的右边点击Add,找到JadClipse Class File Viewer,选中,并设为默认
4.点击
.class without source ,跟步骤3一样。
配置完成,现在可以使用了。

END

Struts2升级

Struts2.0.6升级Struts2.3.16.1

1.升级原因

在2013年6月底发布的Struts 2.3.15版本被曝出存在重要的安全漏洞,主要问题如下:
1)可远程执行服务器脚本代码
用户可以构造http://host/struts2-blank/example/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}链接,command goes here可以换成是破坏脚本的路径和参数,比如fdisk -f等,造成破环系统无法运行的目的。
2)重定向漏洞
用户可以构造如知名网站淘宝的重定向连接,形如http://www.hostname.com/test.html?redirect:http://hacker.com/getyourPassword,引导用户点击后进入钓鱼网站,在界面上让其进行登陆用以获取用户的密码。

2.解决办法

笔者试过两种升级方案,第一种是在不替换原有的struts包的情况下,通过代码来进行升级,但是这种升级方案效果并不理想,这只能修复重定向漏洞,并不能修复第一个漏洞,是一种轻量级的伪升级。
第二种升级方案是升级struts2的jar包,本文也主要讲的也就是这种升级方案。(ps:本文写的从Struts2.0.6或者升级到Struts2.3.16.1的过程,其他更高版本的Struts可能会更加简单,只是单纯的替换一下jar包并修改一下配置文件就可以了)

1)升级需要的jar包

struts2.3.16.1的jar包,下载地址

2)升级过程

(1)新增下列的包
struts2-core-2.3.15.2.jar
struts2-spring-plugin-2.3.15.2.jar
struts2-json-plugin-2.3.15.2.jar
xwork-core-2.3.15.2.jar
ognl-3.0.6.jar
javassist-3.11.0.GA
commons-lang3-3.1.jar
把以前的跟上面的包同名的jar包删除
(2)修改web.xml文件
找到

1
2
3
4
5
6
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>

明显这是一个过时的语法,把它改为

1
2
3
4
5
<filter>
<filter-name>struts2</filter-name>
<filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>

若有

1
2
3
4
5
6
<filter>
<filter-name>struts2Cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter>

这也是一个过时的用法,把它改为

1
2
3
4
5
6
<filter>
<filter-name>struts2Cleanup/filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>

(3)修改各个配置文件
a.把配置文件中的:

1
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

修改为

1
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">

b.把validation配置文件中的:

1
2
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">

修改为

1
2
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

(4)修改其他文件
把一些过时的类名改为现在的

(5)其他
在升级后,可能引起以前的一些用法不兼容,如从struts2.0.11以后,Struts2的标签库就不在支持EL表达式了,这种情况下就需要把所有的在Struts2标签中EL表达式改为OGNL表达式。

END