Nicewords 2.0.0128程序破解全过程

时间:2008-03-16 00:15:16  类别:php是什么  作者:boris10

经过我24小时的努力..nicewords 2.0.0128版已经破解完毕.

站点: http://74.222.17.104/nw/

先不要问我要程序...我先做一下工作总结...

版主不要过份关注本贴,不要删掉就好了.

我也知道落伍不是讨论这个东西的地方,

我也只是和大家分享一下工作心得而已.....

昨晚心血来潮,在基本上做完www.dezend.cc的程序之后.

听说很多朋友说dezend后的很多程序都无法运行,

于是我就找了一个大家关注的程序来试 [看大家都上传了什么东西到我的DEZEND站点上解码就知道什么是热门了]

原来是Nicewords

有好多人上传了1214这个版本...

但也有人上传了2.0.0128

于是我就选择了nw 2.0.0128这个版本进行操作了.

查看DEZEND后的代码,

果然乱码...

按我的经验...凡是DEZEND后有中文乱码的话...那程序无法动作的可能性会很大!!

先不理会它...在网站上, 先上传ZEND过的原版...

先要找以破解点..也就是说要找出哪此地方是需要破解的

先是安装...到了安装NW2的第N个步骤..需要输入NW官方的帐户,

虽然提示可以免费注册,但我注册完毕后..重新回到安装页面...

还是提示我的帐户过期..无法使用...

YES!!这就是一个注入点了!!

OK...破解工作开始....

文件编辑工具:UltraEdit 32 [绝对推荐,功能强大!代码转换简单]

在本地打开/admin/install/login.php文件 [虽然网站上那个步骤是显示/admin/install/?act=login 但看到index.php的原代码可以得知那个步骤实际是由login.php这个文件处理的..]

看到Login.php提交的表单处理是login.php本身...而处理表单很重要的一个函数是

api_check_login

于是寻找这个函数的出处..

找到是在/include/common.inc.php 最快的方法是用UE的[在文件中搜索]功能...

也就是说要对common.inc.php解码处理了...

先是做些简单的转移操作...

转代码为unicode等...反正是让英文显示正常,中文能看懂...[这工作量不小]

转换时可以一边转一边试...

因为有些),"等特别符号会转没掉的...这时语法就出现错误的了...

所以要一边用php.exe filename.php试.一边改...

改到用php.exe filename.php不显示语法错误时...dezend工作才算基本完成...

一个特别介绍的是,,,要注意一下代码里面有没有特殊的符号等,那些代码在UE可能也不会显示,但如果用其它基本的查看器可以看到有些特殊代码的,

比如我用WINRAR的查看器...

那些特殊代码会让PHP.EXE的语法检查通过...但PHP.EXE进程却不会对这个PHP文件进行解释的..[我研究半天才明白]

所以.出现这个情况时,请详细检查你的代码里面有没有可疑的空格[因为那些代码显示为空白的]

解码完成后..就可以将这个文件代替网站上面那个ZEND过的文件了...

这时运行出错...

unset这语句出现错误..

原代码那一行是这样的

unset ( $a->'b');

熟悉PHP的应该知道这是删除变量的.但这变量是数组中的一个..也就是

$a['b']

我很少用unset的.

这可能是解释的错误吧...于是我将它改为

unset ($a['a]);

测试通过...

[全个文件才有几个类似语句...]

这时common.inc.php 的 dezend工作才算真正完成...

开始分析那个api_check_login函数..

原理很简单..

就是使用提交过来的用户名和密码.再向外站[官方站]提交POST页面请求.

然后返回信息...再检查返回的信息,判断是否合法用户.

要破解的做法是...不去提交数据到他们的官方站...可以直接不判断,直接返回成功信息啊.

但我是绝对的支持落伍者的..

所以.我将它改为提交到落伍者..判断是否落伍!!!

不落伍就XXX...哈哈.

这有个插曲,因为落伍者登陆的表单并不只是用户名和密码,,,还有那个自问自答..

于是我们在调用函数的参数方面.要多加二个变量..这样就需要同时修改调用函数的login.php文件了.这个相对来说是比较简单的.就懒说了..

这函数不只是判断是否真实用户,,,但必须写那些用户信息到本地文件保存...

如果我们有一个真实的NW用户资料..可以试着提交一次表单..看返回什么信息回来...如果没有..就只能看代码猜了...

我是猜出了一些[事后证明是偶是没错的]

我修改后的完全的api_check_login函数代码如下:

[code]

function api_check_login( $username,$password,$questionid,$answer, &$cccc )

{

$site="http://www.im286.com/logging.php?action=login";

$submit=array();

$submit['username']=$username;

$submit['password']=$password;

$submit['questionid']=$questionid;

$submit['answer']=$answer;

$submit['cookietime']=0;

$submit['loginsubmit']="ture";

$im286 = new snoopy();

if ($im286->submit($site,$submit)){

$result= $im286->results;

if (!strstr($result,"欢迎您回来")) { //根据落伍登陆页面提示...没有"欢迎你回来"的肯定是未落伍了..对不?

$cccc="你不是落伍人,混!!!";

return FALSE;

}

$bb['levelName']="2.8.6 [v]";

$bb['c']=""; //没用的;

$bb['valid_from']=1203538828;//有效期开始时间, 破解之日.嘻...

$bb['valid_thru']=1518898828;//过期时间, 10年之后......

$bb['user_id']=286; //We are 286!

$bb['username']=$username; //用户名为提交的用户名

$bb['password']=md5($password);//PASSWORD

write_userinfo ($bb); //写入本地资料

$cccc=serialize($bb); //函数之间的变量传递...

return ture;

}

[/code]

另外..看common.inc.php 看到有二个可疑的函数,估计是在运行过程中随机检查程序合法性的...

api_check_state check_state

这个破解就简单了,,,直接在函数开始返回成功信息就OK了...[看到这个函数有个时间控制的.在2007年12月23日前使用程序就直接返回成功信息的了..

这样...common.inc.php基本破解完成.....

跟着是同时修改admin/login.php这个管理登陆文件了...一般登陆是读取本地用户信息的.不需要读取外站的用户信息...

反正我们像admin/install/login.php一样.添加二个表单就OK了..其它自由发挥...

OK...系统安装完成!!!!使用落伍者的用户资料库...落伍了才能用...

跟着一步一步操作...到手动更新数据时...提示错误了...而错误信息都是些错误代码...没有实用的..于是分析原代码..[记住..运行的是ZEND过的代码.分析是用dezend的代码]

从admin/live.php 分析到 crontab/live.php 实际调用的几个函数是

update_sitemap

update_word

update_rss

等...

另一方面...我们估计可能还有某个函数会向NW官方的URL提交数据..从而有可能判断我们的程序是破解的.从而不让运行.

因为这程序都是用 snoopy 这个类来向外站提交数据的...

于是我们就从原码包中查看 new snoopy这个词..

虽然有好几个文件都有可疑...但我们很容易发现database.db.php这个文件可疑很大..

再仔细看到那相应的函数fetch_rss_from_service的代码.

没错..就是这个函数出鬼..

这个函数由update_rss可能调用..

估计的功能是向NW官方提交站点数据及关键词...官方网站返回有关关键词的搜索URL之类的意思吧..

反正我是没办法去仿造数据去提交了...试了二次都不行就算掉了....

而我又没办法知道它返回的信息是什么...这个是关键啊..估计返回的内容也不会太复杂.应该只是一个URL差不多的东西

无耐之下..后来让我想起了我以前装过一个1214版的NW[别人破解的]或许可以从那个程序找到突破点....

于是又找出那个旧版本...然后DEZEND...奇怪的是找不到fetch_rss_from_service这个函数了...可能这个是新版本添加进去的..

而旧版本的update_rss函数也找不到[看到有调用,但找不到原代码在哪里..那应该是再加密的了..

于是找啊找啊...奇怪的是看到有几个php文件是一堆乱码...那些可能是可疑的哦..比如func.inc.php文件...

于是我从这程序包中查找这个文件名 ..原来是busioness.inc.php最低部有一行这样的...

eval( base64_decode( str_replace( array( "-", "_", "!" ), array( "+", "/", "=" ), file_get_contents( ROOT_PATH."include/func.inc.php" ) ) ) );

果然是加码的了..我们直接将这行代码改为

echo base64_decode( str_replace( array( "-", "_", "!" ), array( "+", "/", "=" ), file_get_contents( ROOT_PATH."include/func.inc.php" ) ) );

将它放在一个空的PHP文件里面...再运行...

果然输出的就是我们要找的update_rss函数了...而在这个函数里面.我们可以看到它用来搜索关键词的搜索URL的格式....

NW的人也真搞笑..到这步了.还加什么密.....

$rssurl = base64_decode("aHR0cDovL2Jsb2cueW9kYW8uY29tL3NlYXJjaHJzcz9xPQ==").urlencode($row['word']) ;

我们再

echo base64_decode("aHR0cDovL2Jsb2cueW9kYW8uY29tL3NlYXJjaHJzcz9xPQ==");

得到的结果是...

http://blog.yodao.com/searchrss?q=

原来它是用"有道"的BLOG搜索...

其实我们应该可以很清楚地知道原来NW是利用搜索引XX的RSS输出...来寻找我们感兴趣的内容...

有道的格式是上面那些...

经我分析..

百度和gg的格式可能是下面二个

baidu: http://blogsearch.baidu.com/s?tn=baidublogrss&word= 关键词

google: http://blogsearch.google.cn/blogsearch_feeds?output=rss&q= 关键词

我们可以随便选择一种...

有了以上信息..我们就直接可以回到nw2.0里面改代码了...

我们看到update_rss这个更新函数是调用fetch_rss_from_service的....

一方面我们可以更改fetch_rss_from_service函数.让它随机选择一个搜索引XX 来返回搜索URL.

另一方面,我们简单点.直接在update_rss函数指定更新的URL格式[回复到V1.X版的方法]...

二种方法都是可行的..关键的东西找到后...

其它的代码之类的编写.就简单多了...

我选择的是第二种...直接改update_rss函数...使用有道....

这个改完后...在后台手动更新数据时..没有提示出错了....

但新的问题又来了..

更新说找到了N篇文章..但是说不符合要求...不采用...不可能吧...

于是又看代码....

看了好久...竟然发现原来是代码有错..真的不知是解码错..还是原来的就有错了...

那段代码也是在update_rss函数里面..

代码简单介绍如下:

if 有过滤词 {

{检查过滤词}

if 查到有过滤词 {

退出

}

}

else{

添加数据...

}

.

.

.

WO KAO!!

那简单点一看就知道...只有是没有设置过滤词才会添加数据...

直接将添加数据前的else {和后面相应的}去掉...就没问题了..

果然...修复后就正常了...

至此...整个NW2.0.0128破解完成......

总共破解文件就四个

/include/common.inc.php

/include/business.inc.php

/admin/login.php

/admin/install/login.php

破解总共花了我十个小时左右吧...白天老是有其它事烦着我...所以不能专心..晚上没人理偶..才是工作的好时间...

先说到这里吧..今晚还准备将我的BLOG做起来呢.


特别推荐

广而告之