博客

  • 赞片苹果v10自适应模板带明星新闻模板pc+wap影视网站模板

    赞片苹果v10自适应模板带明星新闻模板2019pc+wap影视网站模板

    全网发布!请放心购买! 本网站亲测可以正常安装使用 保证正品 请您放心购买 本宝贝上架的均有货 可放心购买 由于网站程序具有可复制性 一经发出 商品拒绝退款和退货  温馨提示:请购买者不要说别家怎么价格低之类的话语,本站所有宝贝保证您的使用安全,绝无后门,保证网站安全性!别家卖多少钱是别家的事情,您敢放心用就行!本站保证使用安全性。

    1.本套网站支持苹果CMSV10程序,模版为自适应模板,有新闻,演员,直播留言等等。

    2.本套网站超强SEO优化和细节都是精心处理,删除许多多余代码,优化js调用,模版干净无错,绝非论坛等其他地方免费分享的带有后门和木马的垃圾程序。

    3.网站很多亮点功能本地反复安装调试完成美无错.请你放心使用

    4.在使用网站过程中的任何问题请和我们联系我们会不断更新.完善.我们努力为您创造更为全面,可靠的好用的网站。

    5.特别说明:使用请遵循国家法律法规。若因非法使用引起纠纷,一切后果由使用者承担。

    此为苹果CMS10的电影模板费用,包含了电脑版和手机版,如果还有其它需求请联系我们处理!

    网站演示地址:www.laotiedyw.com  保证模板和演示站一模一样,请您确定好后购买!

    网站支持电脑版、手机版、微信公众号以及APP!

    [b2_insert_post id=”345″]

  • 船说4.2破解开源完整版(简繁转移、长尾词插件、开源无加密)

    船说4.2破解开源完整版(简繁转移、长尾词插件、开源无加密)

    2023年9月15日 修复了长尾词页面打开404的Bug

    2023年8月9日 修复了长尾词插件不完整及后台操作的BUG

    2023年7月15日 长尾词插件不完整,功能不能正常使用

    使用环境: php5.6 – php8.x (开发环境php7.3)

    使用教程,

    1. 上传三个文件夹 ( www, shipsay, themes ) 到服务器
    2. 将网站的入口文件指向 /www/index.php (或运行目录用 /www), 宝塔用户请”关闭防跨站攻击”
    3. 建立数据库: ( 建子站,请跳过这步 ) 3.1、使用船说做源站:
      新建空白数据库
      导入 /sql/船说优化版.sql ( 或 /sql/船说分表版.sql )
      所有选择编码的地方都选择 utf8 3.2、使用杰奇做源站
      在杰奇数据库中导入 /sql/update.sql
    4. 配置服务器伪静态 ( 伪静态规则在最后 )
    5. 浏览器打开 http://你的域名/admin/ 进入后台, 完成最后配置.

    其他:

    • 免维护站点地图
      访问地址:
      百度: http://你的域名/sitemap/sitemap.xml
      神马: http://你的域名/sitemap/sm_sitemap.xml
      物理文件: /www/sitemap/, 可点开文件看使用说明.

    * 伪静态规则 **

    rewrite ^/sitemap/sitemap_([0-9]+).xml$  /sitemap/ss_sitemap.php?page=$1;
    rewrite ^/sitemap/sitemap.xml$  /sitemap/ss_sitemap.php;
    rewrite ^/sitemap/sm_sitemap_([0-9]+).xml$  /sitemap/sm_sitemap.php?page=$1;
    rewrite ^/sitemap/sm_sitemap.xml$  /sitemap/sm_sitemap.php;
    if (!-d $request_filename){
    	set $rule_0 1$rule_0;
    }
    if (!-f $request_filename){
    	set $rule_0 2$rule_0;
    }
    if ($rule_0 = "21"){
    	rewrite ^/(.*)$ /index.php last;
    }

    Apache 伪静态: 无需设置.

     IIS伪静态规则

    <?xml version="1.0" encoding="UTF-8"?>
    <rules>
        <rule name="ShipSay SiteMap for ss_page">
            <match url="^sitemap/sitemap_([0-9]+).xml$" ignoreCase="false" />
            <action type="Rewrite" url="sitemap/ss_sitemap.php?page={R:1}" appendQueryString="false" />
        </rule>
        <rule name="ShipSay SiteMap for ss_index">
            <match url="^sitemap/sitemap.xml$" ignoreCase="false" />
            <action type="Rewrite" url="sitemap/ss_sitemap.php" />
        </rule>
        <rule name="ShipSay SiteMap for sm_page">
            <match url="^sitemap/sm_sitemap_([0-9]+).xml$" ignoreCase="false" />
            <action type="Rewrite" url="sitemap/sm_sitemap.php?page={R:1}" appendQueryString="false" />
        </rule>
        <rule name="ShipSay SiteMap for sm_index">
            <match url="^sitemap/sm_sitemap.xml$" ignoreCase="false" />
            <action type="Rewrite" url="sitemap/sm_sitemap.php" />
        </rule>    
        <rule name="ShipSay CMS" stopProcessing="true">
            <match url="^(.*)$" ignoreCase="false" />
            <conditions logicalGrouping="MatchAll">
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
            </conditions>
            <action type="Rewrite" url="index.php" appendQueryString="true" />
        </rule>
    </rules>
    

    关于长尾词插件的说明,本4.2版本长尾词插件不完整。完整版请到此下载

    此版本已替换为完整版本,如需要单独长尾词插件,请到以下地址

    [b2_insert_post id=”5200″]

    gggg20230703092224
    wfg230703093136

    修复完如下图:

    111fffw120230703092506
    qqqw20230703092527

    船说CMS4.2全开源小说站群程序,外带长尾词插件最新版。程序功能就不多介绍了,比较强大威猛,这里直接上图。本程序船说cms 这个版本的功能已经非常完善,后期不需要在去增加额外的功能了,做小说的都知道,无非就是性能和资源的快慢,在此之前我们从2.4版本一直发布到目前的3.7版本,使用反馈非常好,因为代码全部开源,我们去除了一些作者自己加入的无用验证授权逻辑代码,这样减少了一些无用的请求,并且大家用了之后开源的才放心,否则网站做起来被人黑了太不值得了!

    现在这款我们同时把长尾词插件也加入了进来(具体效果看截图),原版本的船说cms长尾词插件也是加密的,我们也做了解密做到了整套程序完全性的开源!

    sssffd333fc00ec1d26798

    注意事项

    1、如果开启Redis需要数据库为外网,打开/shipsay/class/router.php 第164行将127.0.0.1改成你的数据库服务器IP(数据库记得开启外网访问/安全性可以指定访问 宝塔有这个功能)

    这个程序缓存可以使用的,是CENTOS 安装的redis版本兼容问题redis版本为6.0.6,改为5.0.8有用2、船说cms长尾词插件使用空白原因: 那是因为模板使用tpl_info.php或tpl_indexlist.php的不同,如果使用tpl_info.php那么就不需要改动。如果模板使用的是tpl_indexlist.php空白解决方法:shipsay/app/info_langtail.php将“require_once __THEME_DIR__.’/tpl_info.php’;”改为“require_once __THEME_DIR__.’/tpl_indexlist.php’;”

    功能增加:
    增加静态首页生成
    增加神马结构化站点地图
    增加TXT下载和小说推荐功能
    增加Gzip选项,通过压缩网页从而大幅提升访问速度. ( 注: 如服务器已开启Gzip, 则效果不明显. )
    增加搜索记录开关
    数据库增加 “持久连接” 选择
    路径增加小说拼音方式: 如 /book/cangyuantu.html

    源码优化:
    SEO 优化: 增加 Last-modified 返回
    对文本内容特殊符号 ( 如: & < > 等 ) 的优化处理
    数据库 “测试连接” 更准确

    船说CMS前台演示效果

    ssdfbb2-13552aef02517ed

    船说CMS后台功能演示效果

    111683798438-c27b4ac3820bc43
    221683798431-d1824301fd5b73b
    33683798435-c26671041ac050f
    441683798436-45acc9c93fbfe44
    551683798434-1c603e9c2804ead
    661683798433-22f9ba0c939bc23
    771683798437-059433452069fdf
    881683798448-5c70c6a4f42f745
    99683798450-ba856ba89478f04
    10101683798439-ec007b2f23f29bc
    11111683798449-f02d89376b03a69
    12121683798446-35c702c99a4c70d
    1313683798447-ec7fe6a3eac5398
  • 最新版PTCMS小说程序源码4.3.0

    最新版PTCMS小说程序源码4.3.0

    注意,此源码非开源源码。代码是swoole加密的,需要安装swoole组件。

    全新开发,新版UI,添加原创专区,新闻发布,书单发布,采集日志,百度推送,神马推送,推送日志功能。

    前端高仿起点小说网,自适应模板,可以分设手机域名。

    后端采用LAYUI全新开发。

    一、服务器环境得要求

    宝塔环境

    推荐linux环境,win得也支持,不过没去测试搭建,自行按照下面得教程测试,下面是我得搭建环境

    nginx1.15     MySQL5.5      php7.3 (重要:必须7.3)  

    安装php拓展   fileinfo    memcached   swoole4   

    扩展安装

    删除禁用函数

    2.安装加密Loader

    进入php7.3设置,在配置文件里面末尾添加代码

    extension=/www/网站路径/loader73.so
    swoole_license_files=/www/网站路径/license
    
    代码安装好后,重启PHP或者重载配置
    

    3.配置网站

    3.1 设置目录

    在宝塔指定网站运行目录为public,不是根网站目录!

    3.2 宝塔伪静态设置

    if (!-e $request_filename) {
        rewrite ^/(.*)  /index.php?s=$1 last;
    }

    4.配置采集

    修改host

    vim /etc/hosts

    106.13.47.93 api.kxcms.com api.ptcms.com

    5.安装程序

    安装地址:域名/install.php,然后输入用户名、数据库名、数据库密码。

    安装完毕后,不想官方发现你的域名,最好更改后台统计代码数字和public/static/admin/index.js文件的统计代码数字,即百度统计id更换为自己的。

    手机端、MIP、AMP的搭建方法和主端一样,域名都指向运行目录,搭建后需在网址后台域名设置填写相对于域名即可访问相应网址。

    6. 配置cron

    主进程状态失败-任务开关开启教程:

    PT后台-采集管理-任务管理-任务设置将任务开关开启,否则会报主进程关闭错误
    SSH输入:cd  /www/wwwroot/网站目录,进入网站目录
    复制/www/server/php/73/bin/php kx cron:check ssh,提示主进程开启则安装完成(73PHP版本,自行修改) 后台运行监控刷新
    创建计划任务
    登陆宝塔后台-计划任务,任务类型为shell脚本,脚本内容为php /www/wwwroot/网站目录/kx cron:master >>/dev/null 2>&1 时间自行填写,保存执行即可

    后台预览

     

  • 船说cms4.01,对接小浣熊漫画

    船说最新版本是4.2,请访问以下链接了解详情

    [b2_insert_post id=”320″]

    船说cms4.01,对接小浣熊漫画

    船说cms4.0.1版本免费分享下载啦,前几天网上买来的玩玩,免费分享给大家用,嘿嘿 我是不是宅心仁厚,卖家说这个是船说无限制全开源的站群版还支持php8哟,压缩包里有船说cms安装教程你们自己搭建看吧搭建方法很简单,程序也很简陋,简陋到访问后台竟然都不需要密码验证太神奇了,搭建好后只能修改后台文件夹名称来防止别人登录,看网上说船说cms是杰奇套壳的小说源码程序,安装的时候看见有两个数据库,优化版和分表版,两个我都安装测试了,看到优化版的数据库里面有几个数据表名称竟然都还是jieqi_开头命名的,杰奇套壳是可以坑定了嘛。。。

    202110311635691993580471

    安装好访问后台,后台真是简陋就简单的网站名称和小说txt以及小说封面图片路径等一些简单的和前台url设置,另外有个redis缓存功能和长尾词功能,船说cms繁体插件还是很不错的其它的没啥东西,会员功能都没有前台都不支持注册会员。。。

    不过船说cms自带的模板还是挺好看的船说cms电脑pc模板和手机wap模板都挺好看,船说cms运行速度还是不错的挺快不卡,数据毕竟是采集到本地硬盘的嘛,访问看小说就是爽。。。

    船说ShipSay支持百度地图和神马地图自带生成哦源码目录里有php文件,类似于船说cms插件的存在吧后台没有设置的选项菜单;

    202110311635691987654913

    听说船说cms3.7.8版本有会员功能比船说cms4.0.1版本功能要多一点,也不知道真假,我没有买,想着新的总比旧的实用嘛,所以就买了个新一点的的玩玩,我看官网好像发布船说cms最先源码了船说cms4.1版本,船说cms授权官网好像需要1000元,正规做站还是买正版靠谱点;

    总体来说船说cms4.0.1功能很少正规使用还是可以船说cms二开一下然后一起开发一套船说cms模板那就爽呆呆了;

    船说cms采集小说windows系统的话一般和杰奇一样使用关关采集器(船说cms规则关关的还是挺多的);

    linux系统可以使用python采集器,专业爬虫就是牛比,有人说php采集比python快有能力的可以测试一下,我没测试过(python现在真是流行,“人生苦短,我用Python”英文原句:Life is short,you need Python);

    快来用船说cms4.0.1版本配合python开发的linux采集器来搭建小说原站吧;

  • 牛犇CMS免费小说站群系统安装使用

    牛犇CMS免费小说站群系统安装使用

    自主开发,支持杰奇所有版本

    自定义书号 自定义章节ID 自定义url 首页随机获取书籍ID 长尾词 可自己diy属于自己的站 让你只用一个库可以做出无限个不同的站 省去多库的烦恼 是最简单最容易功能最健全的小说站群程序

    使用船说类似结构,可以直接从船说转到牛犇CMS

    本站提供的是授权版破解版,突破所有限制。购买链接

    [b2_insert_post id=”434″]

    安装

    首先环境建议使用Linux,LNMP

    上传文件到web目录,然后导入数据库脚本。

    访问后台,即可配置数据库相关信息,配置完成后就可以登陆后台了。

    注意要先配置一下仿静态规则,否则可以无法正常访问。

    if (!-d $request_filename){
    set $rule_0 1$rule_0;
    }
    if (!-f $request_filename){
    set $rule_0 2$rule_0;
    }
    if ($rule_0 = “21”){
    rewrite ^/(.*)$ /index.php last;
    }

    后台设置

    444bac111a209d743049910c48a8cadb429-1
    555bfb217bc4f134ffe9efff8644bbf19f4-1
    77770e5421c71a814f48915ae9015a509f17-1
    8886f30c2687c2e4a1e829368d7e801b0a6-1
    9997e5a60d8d89b4039810f0c8868db858a-1
    000059815696e1c74816a986ec839b386a44-1
    110dc3941833794d96b2fbeb89f3360f7d-1
    1275680fb860cc42c49d02a8a546af7c7d-1
    13d6b9b07aa03438fa99b9e65e9d5a9c7-1
    1461e0df2f92148beab87e9ab8bd34b69-1
  • 宝塔7.9开心版安装

    安装

    wget -O install.sh http://download.bt.sy/ltd/install/install-ubuntu_6.0.sh && sudo bash install.sh
    ShellScript

    升级到7.9

    curl https://io.bt.sy/install/update_panel.sh|bash
    ShellScript

    如果遇到不能安装请手动制定hosts

    206.119.73.11  io.bt.sy  download.bt.sy  api.bt.sy  cloud.bt.sy  auth.bt.sy  poi.bt.sy  io.bt.sy
    ShellScript
  • 量子非凡资源站去广告的代码,把里面的域名换成自己的域名就可以了!

    量子非凡资源站去广告的代码,把里面的域名换成自己的域名就可以了!

    <?php
    error_reporting(0);
    //关闭所有PHP错误报告
    define('IFHC',1);
    //是否缓存视频链接 1 缓存 0 不缓存
    define('HCFILE',__DIR__.'/cache/');
    //缓存保存的文件夹 如果不缓存请无视
    define('HCTIME',604800);
    //缓存时效 秒为单位 如果不缓存请无视
    header('Content-type: text/json;charset=utf-8');
    
    $url = $_GET['url'];
    $MD5 = Md5($url).'.m3u8';
    if (is_dir(HCFILE)==false) {
      mkdir(HCFILE,0755,true);
    }
    if (IFHC==1 && file_exists(HCFILE.$MD5) && filemtime(HCFILE.$MD5) + HCTIME > time()) {
      $arr = array(
        'code' => 200,
        'msg' => '解析成功',
        'cache' => true,
        'url' => 'https://www.wucuoym.com/cache/'.$MD5
      );
      die(json_encode($arr,456));
    }
    $data = curl($url);
    if (empty($data)) {
      die(404);
    }
    if (strstr($data,'.ts')==false) {
      $explode = explode('/',$data);
      $ts = explode("\n",$explode[0])[2];
      $url = str_replace('index.m3u8','', $url).$ts.'/'.$explode[1].'/'.$explode[2];
      $data = curl($url);
    if (empty($data)) {
      die(404);
    }
    }
    echo m3u8ts($url,$MD5,$data,$explode[2]);
    
    
    function m3u8ts($wz , $file , $data , $name){
        $data = preg_replace('/#EXTINF:(.*),\n?http(.*)\n?/','',$data);
        preg_match('/\/\/(.*)\/'.$name.'/',$wz,$ym);
        $web = 'https:'.str_replace($name,'', $ym[0]);
        $m3u8 = preg_replace('/#EXTINF:(.*),\n?(.*)\n?/',"#EXTINF:$1,\n$web$2\n",$data);
        file_put_contents(HCFILE.$file,$m3u8);
        $arr = array(
          'code' => 200,
          'msg' => '解析成功',
          'url' => 'https://www.wucuoym.com/cache/'.$file
        );
        die(json_encode($arr,456));
        return;
    }
    function curl($url) {
    if(!function_exists('curl_init')) die('php.ini未开启php_curl.dll'); 
      $user_agent = $_SERVER['HTTP_USER_AGENT'];
      $ch = curl_init(); 
      curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        "accept: */*",
        "accept-encoding: gzip, deflate",
        "accept-language: zh-CN,zh;q=0.9",
        "Connection: keep-alive",
      ));
      curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36');
      curl_setopt($ch, CURLOPT_REFERER,'https://www.wucuoym.com/');
      curl_setopt($ch, CURLOPT_ENCODING, "gzip, deflate");
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
      @ $file = curl_exec($ch);
      curl_close($ch);
      return $file;
    }
    PHP
  • 如何将OTF / TTF文件转换为EOT格式?

    如何将OTF / TTF文件转换为EOT格式?

    最简单的方法就是使用

    font-face generator (everythingfonts.com)

    不仅会生成所有的web字体,还会把css自动生成好,无比的方便。

    @font-face {
      [font-family: <family-name>;]?
      [src: [ <uri> [format(<string>#)]? | <font-face-name> ]#;]?
      [unicode-range: <urange>#;]?
      [font-variant: <font-variant>;]?
      [font-feature-settings: normal|<feature-tag-value>#;]?
      [font-stretch: <font-stretch>;]?
      [font-weight: <weight>];
      [font-style: <style>];
    }

    使用字体松鼠发生器 – 这不仅会产生EOT,而且还会产生SVG和WOFF格式,并且一次转换多个字体文件,并将所有内容与相关的CSS一起提供到单个存档中。

    这里有一个快速的方法来从otf一步build立TTF和EOT版本。 当然,如果你不需要所有的东西,你可以把相关部分拉出来。 请注意,你从otf得到eot你必须去otf-> ttf-> eot。

    安装fontforge和ttf2eot。 他们在MacPorts中可用,不确定其他平台。

    将其保存为名为otf2ttf2eot.sh的脚本文件:

    (此脚本已更新为新的fontforge版本;原始脚本在post的末尾):

    #!/bin/sh otfFont="$1.otf" ttfFont="$1.ttf" eotFont="$1.eot" fontforge -c ' import fontforge font = fontforge.open("'$otfFont'") font.generate("'$ttfFont'") ' ttf2eot "$ttfFont" >"$eotFont"

    假设您有一个名为FontName.otf的字体,请运行:

    sh otf2ttf2eot.sh FontName

    旧版本fontforge的原始脚本:

    #!/bin/sh # Convert an OTF font into TTF an EOT formats. otfFont="$1.otf" ttfFont="$1.ttf" eotFont="$1.eot" fontforge -c ' Open("'$otfFont'"); Generate("'$ttfFont'"); Quit(0);' ttf2eot $ttfFont > $eotFont
  • JSJiaMi V6 解密工具

    JSJiaMi V6 解密工具

    解密效果

    源代码
    function cancelMacWithUserNameAndMac(userId, userMac, trid) {
    	var test = confirm("关闭无感认证后,只能在设备本机上再次开启!");
    	if (test) {
    		AuthInterFace.cancelMacWithUserNameAndMac(userId, userMac, function (data) {
    			if (data.result == 'success') {
    				//$("#"+trid).hide();
    				//$("#autoMacNumTip").html($("#autoMacNumTip").html()-1);
    				var userIndex = getQueryStringByName("userIndex");
    				AuthInterFace.freshOnlineUserInfo(userIndex, function (freshOnline) {
    					getTime = 1;
    					fillData();
    				});
    			} else {
    				alert(data.message);
    			}
    		});
    	}
    }
    加密后

    已省略全局解密函数

    为方便对比已进行格式化处理

    function cancelMacWithUserNameAndMac(_0x1437f8, _0x17c421, _0x18daca) {
    	var _0x18d784 = {
    		'OGRic': '4|2|6|8|0|5|7|3|9|1',
    		'AAvHe': function (_0x4a9629, _0x140a6c) {
    			return _0x4a9629(_0x140a6c);
    		},
    		'wIUwe': 'margin-left',
    		'TQJfu': '#loginFrameLogofood_hk_2',
    		'Ussjm': function (_0x3a631e, _0x5a538a) {
    			return _0x3a631e - _0x5a538a;
    		},
    		'mwhyn': function (_0x5c1515, _0x3e12d0) {
    			return _0x5c1515 * _0x3e12d0;
    		},
    		'eMmnc': '#hk_margin_left_1',
    		'pROLs': _0x64f0('9c5', 'DWlJ'),
    		'RtPyd': function (_0x1a2925, _0x3178e2) {
    			return _0x1a2925(_0x3178e2);
    		},
    		'ktmyn': _0x64f0('9c6', 'NMy2'),
    		'gxaAs': 'width',
    		'QzLeH': function (_0x52c760, _0x2740a1) {
    			return _0x52c760(_0x2740a1);
    		},
    		'MhTAi': _0x64f0('9c7', '*6xD'),
    		'FkPFD': '#leftId',
    		'izkEP': _0x64f0('9c8', 'a5h*'),
    		'qjdIA': function (_0x2af297, _0xb650bb) {
    			return _0x2af297 * _0xb650bb;
    		},
    		'feKqI': function (_0x1f7f78, _0x596751) {
    			return _0x1f7f78 === _0x596751;
    		},
    		'hmFcx': 'yhlbV',
    		'lNkRh': function (_0x16de55) {
    			return _0x16de55();
    		},
    		'mGvzI': _0x64f0('9c9', 'hSvn'),
    		'mjXUQ': function (_0x112f06, _0x404547) {
    			return _0x112f06 - _0x404547;
    		},
    		'dKWSL': function (_0x5dba1c, _0x2b83a9) {
    			return _0x5dba1c(_0x2b83a9);
    		},
    		'oOHzr': function (_0x3e2c53, _0x4c0c40) {
    			return _0x3e2c53 - _0x4c0c40;
    		},
    		'KnyVW': function (_0x1a0714, _0x336008) {
    			return _0x1a0714(_0x336008);
    		},
    		'oJrGK': function (_0x3f8456, _0x1ddba4) {
    			return _0x3f8456 / _0x1ddba4;
    		},
    		'hQFPI': function (_0xd930d9, _0x1db4bd) {
    			return _0xd930d9 - _0x1db4bd;
    		},
    		'EZHrV': function (_0x5ab773, _0x3893c7) {
    			return _0x5ab773(_0x3893c7);
    		},
    		'lMeUM': function (_0x34d463, _0x4d6b7b) {
    			return _0x34d463 - _0x4d6b7b;
    		},
    		'aycWe': function (_0x58ef0e, _0x3891ab) {
    			return _0x58ef0e - _0x3891ab;
    		},
    		'lKwci': _0x64f0('9ca', 'OJFQ'),
    		'ZkOVs': function (_0x4a6dbd, _0x4542cb) {
    			return _0x4a6dbd - _0x4542cb;
    		},
    		'zyJTu': function (_0x5e1b93, _0x446452) {
    			return _0x5e1b93 / _0x446452;
    		},
    		'vjWbs': function (_0x2575e0, _0x11c14c) {
    			return _0x2575e0 / _0x11c14c;
    		},
    		'NFCIT': _0x64f0('9cb', 'Zg5['),
    		'dsuhf': function (_0x89f937, _0x597b3f) {
    			return _0x89f937 + _0x597b3f;
    		},
    		'ncXTx': function (_0x12a7de, _0x22e70b) {
    			return _0x12a7de > _0x22e70b;
    		},
    		'lPPfO': function (_0x275710, _0x5a84db) {
    			return _0x275710(_0x5a84db);
    		},
    		'JBQXr': function (_0x287953, _0x123071, _0x2eab92) {
    			return _0x287953(_0x123071, _0x2eab92);
    		},
    		'AMUoZ': _0x64f0('9cc', 'NMy2'),
    		'OzLtF': _0x64f0('9cd', 'DWlJ'),
    		'TBrqo': 'userIndex',
    		'zaUUW': function (_0x43ad2d, _0x154b85) {
    			return _0x43ad2d !== _0x154b85;
    		},
    		'GJkAC': _0x64f0('9ce', 'gS57'),
    		'uJjdS': _0x64f0('9cf', 'y@FJ'),
    		'GKNWk': function (_0x446ff5, _0x613452) {
    			return _0x446ff5 !== _0x613452;
    		},
    		'PcETE': _0x64f0('9d0', 'tkAR')
    	};
    	var _0x3c08d6 = _0x18d784[_0x64f0('9d1', 'HmCh')](confirm, _0x18d784[_0x64f0('9d2', ')rYM')]);
    	if (_0x3c08d6) {
    		if (_0x18d784[_0x64f0('9d3', 'y@FJ')](_0x64f0('9d4', '7#T0'), _0x18d784['PcETE'])) {
    			var _0x2cfb1e = _0x18d784[_0x64f0('9d5', 'a5h*')][_0x64f0('9d6', 'z1V4')]('|'), _0x234a2d = 0x0;
    			while (!![]) {
    				switch (_0x2cfb1e[_0x234a2d++]) {
    					case'0':
    						_0x18d784[_0x64f0('9d7', 'fv0b')]($, _0x64f0('9d8', 'A4bS'))[_0x64f0('9d9', '*E$X')](_0x18d784['wIUwe'], $marginLeft - 0x64);
    						continue;
    					case'1':
    						$(_0x18d784[_0x64f0('9da', '7zoT')])[_0x64f0('871', 'G%jM')]('margin-left', _0x18d784['Ussjm'](0xc8, _0x18d784['mwhyn']($body, 0.1)));
    						continue;
    					case'2':
    						_0x18d784[_0x64f0('9db', 'TR]&')]($, _0x18d784['eMmnc'])['css'](_0x18d784['pROLs'], $marginLeft);
    						continue;
    					case'3':
    						_0x18d784[_0x64f0('9dc', 'JsoZ')]($, _0x18d784['ktmyn'])['css'](_0x18d784[_0x64f0('9dd', 'nO3k')], $width);
    						continue;
    					case'4':
    						if ($marginLeft < 0x6e) {
    							$marginLeft = 0x6e;
    						}
    						continue;
    					case'5':
    						_0x18d784[_0x64f0('9de', 'Zg5[')]($, _0x18d784['ktmyn'])['css'](_0x64f0('9df', 'xViR'), $marginLeft);
    						continue;
    					case'6':
    						_0x18d784[_0x64f0('9e0', 'xViR')]($, _0x18d784[_0x64f0('9e1', '8Vu)')])['css'](_0x18d784[_0x64f0('9e2', '(DaA')], $marginLeft);
    						continue;
    					case'7':
    						$(_0x18d784[_0x64f0('9e3', 't7O$')])['css'](_0x64f0('9e4', 'HmCh'), $width);
    						continue;
    					case'8':
    						$(_0x18d784[_0x64f0('9e5', '8Vu)')])[_0x64f0('289', 'hSvn')](_0x64f0('9e6', 'OJFQ'), $marginLeft - 0x6e);
    						continue;
    					case'9':
    						$(_0x18d784['izkEP'])[_0x64f0('26f', 'fv0b')](_0x18d784['wIUwe'], 0xc8 - _0x18d784[_0x64f0('9e7', 'kUYz')]($body, 0.1));
    						continue;
    				}
    				break;
    			}
    		} else {
    			AuthInterFace[_0x64f0('9e8', 'j510')](_0x1437f8, _0x17c421, function (_0x2380dc) {
    				var _0x3d57b1 = {
    					'MfrKs': function (_0x423e2b, _0x595c7e) {
    						return _0x18d784[_0x64f0('9e9', 'hY8M')](_0x423e2b, _0x595c7e);
    					},
    					'riefY': _0x18d784[_0x64f0('9ea', '8Vu)')],
    					'XnjaP': function (_0x154812, _0x17b089) {
    						return _0x18d784[_0x64f0('9eb', '4Ats')](_0x154812, _0x17b089);
    					},
    					'BtknR': function (_0x4afb84, _0x199c9f) {
    						return _0x18d784[_0x64f0('9ec', 'DWlJ')](_0x4afb84, _0x199c9f);
    					},
    					'qyGnJ': function (_0x489a77, _0x12aaa3) {
    						return _0x18d784[_0x64f0('9ed', 'Bk0K')](_0x489a77, _0x12aaa3);
    					},
    					'AFDMo': function (_0x4abfba, _0x219d81) {
    						return _0x18d784[_0x64f0('9eb', '4Ats')](_0x4abfba, _0x219d81);
    					},
    					'mPxnb': function (_0x3693d8, _0x598331) {
    						return _0x18d784['lPPfO'](_0x3693d8, _0x598331);
    					},
    					'eoqvl': function (_0x24b619, _0xfe706) {
    						return _0x18d784[_0x64f0('9ee', 'NMy2')](_0x24b619, _0xfe706);
    					},
    					'YICcj': '</div><div\x20class=\x27secondLine\x27>小时</div>',
    					'sUjOF': function (_0x1661d8, _0x395e79, _0x34d552) {
    						return _0x18d784['JBQXr'](_0x1661d8, _0x395e79, _0x34d552);
    					}
    				};
    				if (_0x18d784[_0x64f0('9ef', 'JsoZ')](_0x18d784['AMUoZ'], _0x18d784['OzLtF'])) {
    					limit = limit[_0x64f0('9f0', 'FBUA')](0x0, limit[_0x64f0('9f1', 'EeGR')]('B'));
    					limit = _0x3d57b1[_0x64f0('9f2', 'kUYz')](limit, 0x400) + 'KB';
    				} else {
    					if (_0x2380dc['result'] == _0x64f0('9f3', 'hSvn')) {
    						var _0x36923d = getQueryStringByName(_0x18d784[_0x64f0('9f4', 'fv0b')]);
    						AuthInterFace[_0x64f0('9f5', '3Pmi')](_0x36923d, function (_0x5c66cc) {
    							if (_0x18d784[_0x64f0('9f6', '(DaA')](_0x18d784['hmFcx'], 'IAutA')) {
    								var _0x130c29 = _0x3d57b1['riefY']['split']('|'), _0x5d6347 = 0x0;
    								while (!![]) {
    									switch (_0x130c29[_0x5d6347++]) {
    										case'0':
    											var _0x2d9053 = _0x3d57b1[_0x64f0('9f7', '3Pmi')](theTime2, '');
    											continue;
    										case'1':
    											if (_0x3d57b1['BtknR'](_0x2d9053[_0x64f0('9f8', 'Q((!')]('.'), -0x1)) {
    												_0x2d9053 = _0x2d9053['substring'](0x0, _0x2d9053['indexOf']('.'));
    											}
    											continue;
    										case'2':
    											if (_0x3d57b1[_0x64f0('9f9', 'j510')](_0x542dd2, 0x0)) {
    												_0x2d9053 = _0x3d57b1[_0x64f0('9fa', '7zoT')](_0x3d57b1[_0x64f0('9fb', '8Vu)')](parseInt, _0x2d9053), _0x542dd2);
    											}
    											continue;
    										case'3':
    											result = _0x3d57b1['AFDMo'](_0x3d57b1[_0x64f0('9fc', '7#T0')]('<div\x20class=\x27firstLine\x27>', _0x2d9053), _0x3d57b1['YICcj']);
    											continue;
    										case'4':
    											var _0x542dd2 = _0x3d57b1[_0x64f0('9fd', 'kUYz')](fomatFloat, _0x3d57b1[_0x64f0('9fe', '(DaA')](_0x3d57b1[_0x64f0('9ff', 'Lclw')](parseInt, theTime1), 0x3c), 0x1);
    											continue;
    									}
    									break;
    								}
    							} else {
    								getTime = 0x1;
    								_0x18d784[_0x64f0('a00', 'xViR')](fillData);
    							}
    						});
    					} else {
    						if (_0x18d784[_0x64f0('a01', 'DWlJ')](_0x18d784[_0x64f0('a02', 'hSvn')], _0x18d784[_0x64f0('a03', '*6xD')])) {
    							var _0x529cc9 = _0x18d784[_0x64f0('a04', 'A4bS')][_0x64f0('a05', 'EeGR')]('|'),
    								_0x5cbedb = 0x0;
    							while (!![]) {
    								switch (_0x529cc9[_0x5cbedb++]) {
    									case'0':
    										_0x18d784[_0x64f0('a06', 'wpSi')]($, _0x64f0('a07', 'tUE5'))[_0x64f0('894', 'nO3k')](_0x18d784[_0x64f0('a08', 'Lclw')], _0x18d784[_0x64f0('a09', 'F[EM')](_0x18d784[_0x64f0('a0a', 'F[EM')]($body, 0x384) / 0x2, 0xfa));
    										continue;
    									case'1':
    										_0x18d784[_0x64f0('a0b', 'tkAR')]($, '#divPop')['css'](_0x18d784[_0x64f0('a0c', 'fv0b')], _0x18d784['oOHzr'](_0x18d784[_0x64f0('a0d', '3Pmi')]($body, 0x384) / 0x2, 0xfa));
    										continue;
    									case'2':
    										_0x18d784['KnyVW']($, _0x64f0('a0e', ')rYM'))['css'](_0x18d784[_0x64f0('a0f', 'G%jM')], _0x18d784[_0x64f0('a10', 'wpSi')](_0x18d784[_0x64f0('a11', 'hSvn')]($body, 0x384), 0x2) - 0xfa);
    										continue;
    									case'3':
    										_0x18d784['EZHrV']($, _0x64f0('a12', 'G%jM'))[_0x64f0('4ed', '4Ats')](_0x64f0('a13', 'xViR'), _0x18d784[_0x64f0('a14', 'FBUA')](_0x18d784[_0x64f0('a15', 'Zg5[')](_0x18d784['aycWe']($body, 0x384), 0x2), 0xfa));
    										continue;
    									case'4':
    										$(_0x18d784[_0x64f0('a16', '4Ats')])['css'](_0x18d784['wIUwe'], _0x18d784[_0x64f0('a17', 'hSvn')](_0x18d784[_0x64f0('a18', 'Lclw')](_0x18d784[_0x64f0('a19', 'm*Jj')]($body, 0x384), 0x2), 0xd2));
    										continue;
    								}
    								break;
    							}
    						} else {
    							alert(_0x2380dc[_0x64f0('868', 'xViR')]);
    						}
    					}
    				}
    			});
    		}
    	}
    }
    解密后

    为方便对比已进行格式化处理

    function cancelMacWithUserNameAndMac(_0x1437f8, _0x17c421, _0x18daca) {
    	var _0x3c08d6 = confirm('关闭无感认证后,只能在设备本机上再次开启!');
    	if (_0x3c08d6) {
    		AuthInterFace.cancelMacWithUserNameAndMac(_0x1437f8, _0x17c421, function (_0x2380dc) {
    			if (_0x2380dc.result == 'success') {
    				var _0x36923d = getQueryStringByName('userIndex');
    				AuthInterFace.freshOnlineUserInfo(_0x36923d, function (_0x5c66cc) {
    					getTime = 1;
    					fillData();
    				});
    			} else {
    				alert(_0x2380dc.message);
    			}
    		});
    	}
    }

    功能介绍

    • 解除全局加密
      • 还原类似 _0x51f5('7', 'Ik*@') 的加密内容。
    • 解除代码块加密
      • 还原代码块中被统一收集的字符串及运算符。
    • 清理死代码(花指令)
      1. 清理仅包含常量字符串判断的 if 语句。
      2. 还原使用 switch...while 打乱顺序执行的语句。
    • 解除环境限制
      1. 解除 禁止控制台调试 限制。
      2. 解除 禁止控制台输出 限制。
      3. 解除 防止格式化 限制。
      4. 解除 安全域名 限制。
    • 提升代码可读性
      1. 合并串联字符串('spl'+'it' → 'split'
      2. 转换十六进制数字(0xf → 15
      3. 替换索引器(Object['keys'] → Object.keys
      4. 转换Unicode字符(\x22 → "
    • 格式化代码
      1. 将代码根据语句进行简易的代码缩进。
      2. 因能力有限且类似工具颇多,不做更多的优化和处理。

    使用须知

    • 解密文件中必须有且仅有通过某些特定的加密器加密的 JavaScript 代码(允许经过简单的格式化),解密前请将无关代码(如 HTML 的<script>标签或与加密脚本相关的非加密上下文)移除。
    • 某些特殊情况下,解密无法一次完成,可能需要使用不同的配置进行多次解密。
    • 注释和局部变量名在代码压缩、混淆的过程中已经丢失或被篡改,无法还原。
    • 在不安装依赖的情况下解密器将会使用 Node.js 内建的 vm 模块。若你无法安装依赖,请不要用于解密不可信的 JavaScript 文件。

    使用方法

    值得注意的是,请务必确保 config.json 文件存放在运行脚本时所在的文件夹(而不是解密器所在的文件夹,虽然它们通常是相同的)。

    1. 运行 npm install 。(可选,安装依赖后解密更安全)
    2. 根据需求在 config.json 中自定义配置。
    3. 运行 Jsjiemi.js 。

    输出结果

    每一解密步骤完成后,解密器都会输出一个结果文件

    你可以根据你的需求从以下结果中选择一个作为最终解密结果。

    支持通过配置文件修改输出文件的位置和命名格式。

    • JsjiemiResult0.js:净化代码
    • JsjiemiResult1.js:解除全局加密
    • JsjiemiResult2.js:解除代码块加密
    • JsjiemiResult3.js:清理死代码(花指令)
    • JsjiemiResult4.js:解除环境限制
    • JsjiemiResult5.js:提升代码可读性
    • JsjiemiResult6.js:格式化代码
  • 突破Discuz!的防采集

    突破Discuz!的防采集

    当短时间内频繁采集discuz,会触发discuz的防采集机制,默认打开的是一段javascript脚本,然后再通过跳转跳转到真实地址,这样子的情况下如何采集呢,本文将教会你如何破解这类型的防采集的采集。

    Discuz开启防采集后的采集方法,也就是帖子后面加了?dsign=这样子的

    Discuz在X3中增加了防采集功能,具体见Discuz x3.0防采集设置图文教程

    [b2_insert_post id=”558″]

    开启防采集后,访问DZ站点的伪静态链接如http://www.discuz.net/thread-3275423-1-1.html后面会跟上一个?_dsign=xxxxxx,正常链接如http://www.discuz.net/forum.php?mod=viewthread&tid=3305274会加上&_dsign=xxxxxx。这让人很不爽 (o#゜ 曲゜)o

    使用httplib2访问原帖子页面(下面以http://www.dz.net/forum.php?mod=viewthread&tid=768为例),返回的是一段混淆过的js,如:

    <script type="text/javascript">RKbW=function(){'RKbW';var _R=function(){return '=76'}; return _R();};function AIV(AIV_){function _A(AIV_){function ph(){return getName();}function AIV_(){}return ph();return AIV_}; return _A(AIV_);}DmZP='iew';_IX161 = 'assign';function zoQ(zoQ_){function ti(){return getName();};return ti();return 'zoQ'}function r2oe(){'return r2oe';return 'ad&'}_eloda = 'replace';F59s=function(){'return F59s';return 'p?m';};HP=function(){'return HP';return 'n';};function getName(){var caller=getName.caller;if(caller.name){return caller.name} var str=caller.toString().replace(/[\s]*/g,"");var name=str.match(/^function([^\(]+?)\(/);if(name && name[1]){return name[1];} else {return '';}}uM=function(){'return uM';return '9';};eG9=function(eG9_){'return eG9';return eG9_;};function kp(kp_){function _k(kp_){function o(){return getName();}function kp_(){}return o();return kp_}; return _k(kp_);}vD='1';BN=function(){'BN';var _B=function(){return 'r'}; return _B();};HALw='rum';_RZnE9 = 'href';o5y=function(o5y_){'return o5y';return o5y_;};function PH(){'return PH';return '.'}_BDkwZ = location;function w2(){'return w2';return '_'}KTI4=function(){'return KTI4';return '910';};_NUuAJ = window;wX=function(){'wX';var _w=function(){return 'd'}; return _w();};iyL=function(iyL_){'return iyL';return iyL_;};location.replace((function(){'return Q8mM';return '/fo'})()+HALw+PH()+AIV('Gs8')+F59s()+kp('nm')+(function(){'return njFH';return (function(){return 'd=v';})();})()+DmZP+eG9('th')+BN()+(function(){'return XD';return 'e'})()+r2oe()+zoQ('yKM')+wX()+RKbW()+'8&'+w2()+o5y('ds')+iyL('ig')+HP()+(function(){'return l26W';return '=6f'})()+uM()+(function(){'return by';return (function(){return '7';})();})()+KTI4()+vD);_NUuAJ['href']=(function(){'return Q8mM';return '/fo'})()+HALw+PH()+AIV('Gs8')+F59s()+kp('nm')+(function(){'return njFH';return (function(){return 'd=v';})();})()+DmZP;</script>

    显然这样人类是无法理解的……不过使用notepad++的JSFormat插件格式化后还是能看懂的嗯-v-

    实际上这是一个字符串替换然后重定向的脚本,生成原理如下(不完全按照上面的例子):

    • 原始字符串为location.href=forum.php?mod=viewthread&tid=768&_dsign=6f979101
    • 随机分割这个这个串,如分成l, oc, a, tio, n., ……
    • 对每一个子串替换成一个随机命名的函数,如l替换成_Oc9S(),则在脚本里加一句function _Oc9S(){return ‘l’;}以此类推
    • 每个function都可能加入奇怪的例如’return l;’这样毫无意义的混淆
    • 最后在末尾加上window.href=yyy,yyy为取forum.php?mod=viewthread&tid=768&_dsign=6f979101的前x个字符后得到一个子串

    我大概写得不清楚……就……这么个意思……

    [content_hide]

    毫无疑问要使用PyV8了,本来想自己写个解释器,但是算法太渣只能呜呼哀哉QAQ
    这里有个问题,PyV8只是一个js解释器的包装,不是浏览器的js运行时,因此location啊window啊都是undefined的,所以要手动把这些都去掉。(有一点要说明,就是由于js很骚,location.href有时会被写成location[‘href’],或者用location.assign或者location.replace,而assign和replace都可能被一个随机命名的变量替换掉了)

    dz-anti-anti-crawler

    直接看代码吧

    import PyV8
    import re
    js='''<script type="text/javascript">.........</script>'''
    #去掉<script>标签
    js=js[31:-9]
    for st in ['window','location',"'assign'","'href'","'replace'"]:
    equal=re.findall('[_A-Za-z0-9 =]+%s;'%st,js)#找到变量赋值等式
    if equal==[]:#有可能没有
    continue
    else:
    equal=equal[0]
    var=equal.split('=')[0].strip()#找出变量名
    #把等式干掉
    js=js.replace(equal,'')
    #把变量替换成它真正的意思
    js=js.replace(var,st)
    #把['xx'] 替换成 .xx
    js=js.replace("['%s']"%st.strip("'"),'.%s'%st.strip("'"))
    #将 window.href= 后的内容踢掉,因为当PyV8只输出最后一个等式的值
    if re.findall('window\.href=.+',js)!=[]:
    js=js.replace(re.findall('window\.href=.+',js)[0],'')
    #删掉location.xxx=
    js=js.replace('location.href=','').replace('location.replace','').replace('location.assign','')
    #交给你了-v-
    ctxt2 = PyV8.JSContext()
    ctxt2.enter()
    print ctxt2.eval(js)

    这样就得到了包含dsign的新url,可以继续爬了

    最后对DZ的防采集再说几句

    1. 防采集是对IP不对用户的
    2. 而且要看站长的设置,有可能只对帖子或日志等开启;你们可以到Discuz x3.0防采集设置图文教程感受一下
    3. _dsign的值是固定的,计算完一次js后可以考虑保存起来,以后可以直接访问加上_dsign的url
    4. 防采集是针对不支持js的机器人的,如果用python直接控制浏览器的话,可以无视之
    5. 如果mechanize和PyV8能合体那该多好~ o(* ̄▽ ̄*)o

    [/content_hide]