Nicewords 2.0.0128程序破解全过程
经过我24小时的努力..nicewords 2.0.0128版已经破解完毕.
先不要问我要程序...我先做一下工作总结...
版主不要过份关注本贴,不要删掉就好了.
我也知道落伍不是讨论这个东西的地方,
我也只是和大家分享一下工作心得而已.....
昨晚心血来潮,在基本上做完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做起来呢.