UwAmp——我用过最好用的WAMP Server[修改版放出]

2014-04-07 修改版公开放出
给作者发邮件、发twitter @他,不过作者鸟都不鸟我啊。
算了,直接将我的修改版放出来给大家下载。
链接:http://pan.baidu.com/s/1oy4bk#提取密码=385a

WAMP,注意前面有个W,自然是在windows下使用。ArchLinux下面直接pacman几下就装完了,不用windows下这么麻烦。因此,在使用windows的时候,WAMP就是必不可少的了。
虽然自己手动去下载php , apache ,mysql 安装配置下也很容易,不过重复的事情做多了就会觉得麻烦了。因此,WAMP存在的必要性就有了。平常在公司开发主要是在Linux下面。不过我偶尔下在windows下面调试东西,比如玩完游戏之后发现有个东西要修改下,此时再重启进入Linux当然是不太方便的。

试用过wamp , xampp 诸多 Xamp软件之后,找到一个很好用的工具:UwAmp,不过这货不是开源的。
最初我用的是Apache的好朋友:xampp,开源,也算不错了,这个工具用了两年多吧,最少。
WAMP server也用了好久,还针对它做了一些修改( http://git.ihacklog.com/repo/WampServer.git/log/ ),不过WAMP 这货也不是开源的。wampmanager.exe这货不是wampserver作者写的,而是直接没有修改源代码的情况下使用了Aestan Tray Menu(Delphi写的),这个万能托盘程序,通过修改同名exe的ini文件的读取来配置这个托盘程序的行为。 (要了解详情请见:http://tunps.com/wampserver-aestan-tray-menu ,这位兄弟的文章说得很清楚), WAMP server就是以delphi写的万能托盘程序+一堆PHP脚本(以cli方式执行)来实现的。而且,从用户体验来看,那些个配置项的切换什么的,都非常不方便,经常容易点错。特别是PHP配置,那里拉出来比iphone 10的长度还要长……

某年某月某日,我在google上游荡,找到一个叫UwAmp的WAMP.
试用之后发现非常喜欢(也不是说非常优秀,只是说相对之绝大部分同类程序来说,它确实很不错)。无论是UI体验设计还是功能设计上,都很不错。如php版本切换方便,可以直接点击一下鼠标从php.net官网下载新的php版本,无需手动下载解压什么的。php主要配置的修改,apache配置和虚拟机的添加,都可以在这个小小的程序上完成。

官方的介绍:
UwAmp is a Wamp Server with Apache MySQL PHP and SQLite
优点官方也说了:
Without installation : UwAmp is available as a Zip archive, just unpack it and you can run the wamp server. UwAmp doesn't install files in the system to keep it clean.

Easy interface : UwAmp is provided with a management interface that lets you start or stop the server with one click.

Multi PHP Version : Change PHP version in one click to test compatibility and download new PHP version directly from php.net repository.

CPU Monitoring : Real time Apache and MySQL process CPU monitoring.

U3 Mode : Can be run from a USB stick.

貌似是完美的东西了?
我在试用后发现它不支持apache 2.4 + php 5.5.x以上的版本。
可是——它不是开源的!
我试图联系作者,看作者能不能把源码给我,我好修改下,让它支持apache 2.4.
不过邮件都发送过去几天了,作者一直没有回复。

好吧,软的不行,只能来硬的了。直接拿二进制代码开刀——对UwAmp.exe进行修改。
apache 2.4的最主要变化和对此WAMP程序最主要的影响是:
1.访问控制指令的变化
2.php的apache模块文件名的变化。
3.基于名称的虚拟主机,在2.4以上版本中不需要再添加NameVirtualHost "*:80"指令了

对于第1点,举例说明吧:
2.2 configuration:
Order deny,allow
Deny from all

2.4 configuration:
Require all denied
----------------
2.2 configuration:

Order allow,deny
Allow from all

2.4 configuration:
Require all granted
----------------
2.2 configuration:
Order Deny,Allow
Deny from all
Allow from example.org

2.4 configuration:
Require host example.org

这是官方文档中的例子
第2点主要是php5.5 的apache模块文件对应的名称是 php5apache2_4.dll
第3点的话,修改相关代码,使之不再自作聪明地在httpd.conf中写入NameVirtualHost "*:80" 这行配置。

其实这前面两点也可以通过曲线救国的方式实现:
对于第1点,启用access_compat_module就行了:
LoadModule access_compat_module modules/mod_access_compat.so
对于第2点,委屈一下apache , 将 php5apache2_4.dll 重命名为 php5apache2_2.dll
这样按理来说应该是行的,不过我并未测试。
用兼容2.2的方式的访问控制命令,还有就是修改2.4的模块名为2.2的,这不是我喜欢做的事。
因此,我还是以直接修改UwAmp更加彻底的方式来实现。

拖入IDA pro, 在.rdata段看到了相关的配置指令:
Order deny,allow,0Ah, 0,9,Deny from all,0Ah, 0
我只需要修改为
Require all denied,0Ah,0
就OK了。

Order deny,allow,0Ah, 0,9,Deny from all,0Ah, 0
修改为
Require all denied,0Ah,0

Allow from 127.0.0.1 localhost,0Ah,0
修改为
Require ip 127.0.0.1,0A,0
这里0Ah 即是\n 换行的ASCII码, 09 是\t, 00 是字符串的结束标志.
前面这几处只是数据的修改,实际上与这几个字符串相关的代码也是需要调整一下的。
大概看了下写配置的那个函数,接收两-三个参数,一个是字符串指针,还有一个是字符串的长度。因此,这里我们字符串的长度给它改变了,自然要按照实际的长度给它修改回去。
以Order deny,allow,0Ah, 0为例,原本是 push 11h的(字符串的长度是16+1,这个1是\n),
我们修改为Require all denied,0Ah,0后,要修正为push 13h,其它的依此类推……

然后把 a2_2_1
a_Apache2_2_dll
aChe2_2_dll
几个全局字符串变量对应的值中的2_2修改为2_4即可。此其二。
最后一项修改:通过搜索文本: meVirtualHost "
定位到aMevirtualhost这个变量.再通过交叉引用找到关键跳转,修改跳转达到目的完事。
aMevirtualhost_string.png

aMevirtualhost_jmp.png
经测试,程序不会再自行写入apache 2.4中已经deprecated的配置指令:
NameVirtualHost "*:80"

最后,还有一项需要修正:
localhost
修正为:
127.0.0.1
因为在win7以后,localhost默认都是不指向本地环回地址的。因此,直接用环回地址更安全。

还有就是session.save_path的位置 aSession_save_0 , 我给它从
N;{APACHEPATH}/sessions
修改到了
N;{TEMPPATH}/sessions
放在temp目录下,比放在apache目录下要好。

其实我还想加几个按钮的,不过貌似比较麻烦,这货是C开发的,用wxWidgets做的界面,不是VC默认的东西南北。看了下代码,窗口和按钮控制都是直接绘制的。窗口资源文件都没得。

另外:版本号从2.2.1修改为了8.8.4 ,以示与官方版的区别。
好了,改造完毕。完美支持apache 2.4 + php 5.5.x。

修改版先不放出来,我又发了一封邮件给作者了,希望能得到答复。
还有,要尊重作者的劳动,没有经过作者的允许,修改的东西还是先不放出来吧。如果对方回复了表示不给源码(这个可以理解),然后也不让我发布暴力修改版(这个……)咋办?呃呃,这个嘛,既然你不给面子,我也就不必了……

放两张图吧,没图没真相:

更多
11 Responses Post a comment
  1. LinQuan

    非常感谢分享。
    wordpress测试rewrite_mod不起作用。

  2. sancia

    mac 有个很好使的,叫 mamp ,pro版本可以自由切换php,mysql版本,还可以自定义域名。

  3. 云袭

    给力 wampserver我也改过 加了一个vhost的入口和php的版本切换 但是一直不完美 找来找去也找不到好的替代 因为我需要可以切换php版本的 有个phpstudy最近刚试用 还行 不过nginx下会是不是假死。。 试试博主这个
    ps:http://git.ihacklog.com/repo/WampServer.git/log/ 这个地址挂了?

  4. nero

    完全看不懂,不过为什么贴上来的所有图都显示code 403呢

Leave a Reply

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS