今晚浏览博客园看到推荐文章里的一篇名为dnSpy 强大的.Net反编译软件的文章,虽然许久不开发.net程序,不过对反编译.net也有过一定的研究,忍不住进入阅读并下载了dnSpy进行尝试,随手打开常用的基于.NET开发的仿站神器 仿站小工具,如下图
混淆后.png

代码是经过Xenocode混淆的,无法清晰的查看程序的执行流程逻辑,遂又百度有无新的反混淆工具,又发现了de4dot神器,官方的GITHUB是源码没有编译版的,找到编译版下载地址分享一下:

吾爱破解在线工具包
官方编译下载

下载后对仿站小工具进行反混淆处理:
de4dot.png

再次用dnSpy打开反混淆后的文件,可以看到代码已经清晰的多了:
反混淆后.png

dnSpy编辑dll,exe文件的功能很方便,不用其他插件或者辅助,就可以进行修改。可以根据自己的需要来对程序进行DIY改造了。

之前给客户用了一套独立的单商户微商城系统CRMEB,功能比较薄弱,不能满足客户的一些分销、积分兑换的需求,二次开发成本太高,所以决定还是换到人人商城中,做为程序员懒是一种美德,写代码导入商品信息,又有趣又能拜托人工录入商品的痛苦,之前也对微擎有过点研究做过一次修改扩展,不过好久没再弄也忘记差不多了,再次快速查看微擎的开发文档,主要是如何连接外部数据库,下载远程文件,再就是根据微擎的路由规则找到人人商城快速添加商品goods.create的程序位置,添加断点输出json,看人人商城添加商品添加的参数,只需要对某些字段进行修改处理 再入库就可以了。

还有就是要从一个合作商那的APP接口中直接采集最新的产品,合作商的APP接口我们用FIDDLER抓https包的方式获得,需要设置手机代理到开发机器中,并在手机安装相关证书文件,合作商的APP其实是用APICLOUD制作的可以很容易看到源码。有接口就用微擎框架自带的http相关方法获得json数据并解析,处理入库。

<?php
public function importold()
    {
        exit("已经导入");
        error_reporting(E_ALL);
        set_time_limit(0);
        ignore_user_abort();
        load()->func('file');


        //导入商品 为编程的方式解决问题
        $data = json_decode('{"uniacid":3,"title":"\u6563\u517b\u9ed1\u732a\u4e94\u82b1\u8089","unit":"\u4ef6","keywords":"","type":1,"thumb_first":0,"isrecommand":0,"isnew":0,"ishot":0,"issendfree":0,"isnodiscount":0,"marketprice":100,"minprice":100,"maxprice":100,"productprice":"100","costprice":"100","virtualsend":0,"virtualsendcontent":"","virtual":0,"cash":0,"cashier":0,"invoice":0,"dispatchtype":0,"dispatchprice":"","dispatchid":0,"status":0,"goodssn":"","productsn":"","weight":"","total":0,"showtotal":0,"totalcnf":0,"hasoption":0,"subtitle":"","shorttitle":"","content":"<p><img src=\"http:\/\/wx.xunza.com\/web\/index.php?c=utility&a=wxcode&do=image&attach=http%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FMoL5lIhnW9tpHAq13hGLbEVhxZxuK4zM9amH5atS9YyWSChOvOcgl5kGSHXtN1uUc1HnKKtqDcLwGVyRyGOVyw%2F0%3Fwx_fmt%3Djpeg\" width=\"100%\"\/><\/p>","createtime":1545794595,"video":"","discounts":"{\"type\":0,\"default\":\"\",\"default_pay\":\"\"}","pcate":"3","ccate":"9","tcate":0,"cates":"9","pcates":"","ccates":"9","tcates":"","thumb":"images\/3\/2018\/12\/kCbCcZiEccDBEy8Wz4WWlqwD9Ifmjx.jpg","thumb_url":"a:0:{}","isstatustime":0,"statustimestart":1545794220,"statustimeend":1548472620}',true);
        //var_dump($data);die();

        //遍历以前数据库 重置数组相关参数 下载远程文件 保存商品
        $other_database = array(
            'host' => 'www.linsen18.com', //数据库IP或是域名
            'username' => '', // 数据库连接用户名
            'password' => '', // 数据库连接密码
            'database' => 'wx_zchszxx_com', // 数据库名
            'port' => 3306, // 数据库连接端口
            'tablepre' => 'eb_', // 表前缀,如果没有前缀留空即可
            'charset' => 'utf8', // 数据库默认编码
            'pconnect' => 0, // 是否使用长连接
        );
        $other_db = new DB($other_database);
//查询uid为1的会员信息
        $products = $other_db->getall('store_product');

        foreach ($products as $product)
        {
            if($product["id"] > 43 && $product["id"] < 46 ) {
                $data["title"] = $product['store_name'];
                $data["unit"] = $product['unit_name'];
                $data["marketprice"] = $product['price'];
                $data["minprice"] = $product['price'];
                $data["maxprice"] = $product['price'];
                $data["productprice"] = $product['price'];
                $data["costprice"] = $product['price'];
                $data["content"] = $this->replaceimg($product['description']);
                $data["createtime"] = $product['add_time'];
                $data["thumb"] = $product['image'];

                $file = file_remote_attach_fetch($product['image']);
                if (!is_error($file)) {
                    $data->thumb = $file;
                }
                //var_dump($data);
                //远程文件保存
                pdo_insert("ewei_shop_goods", $data);
                echo $data["title"] . "导入成功<br />";

            }
        }
        
    }


    public function importkl()
    {
        exit();
        error_reporting(E_ALL);
        set_time_limit(0);
        ignore_user_abort();
        load()->func('file');
        load()->func("communication");
        $data = json_decode('{"uniacid":3,"title":"\u6563\u517b\u9ed1\u732a\u4e94\u82b1\u8089","unit":"\u4ef6","keywords":"","type":1,"thumb_first":0,"isrecommand":0,"isnew":0,"ishot":0,"issendfree":0,"isnodiscount":0,"marketprice":100,"minprice":100,"maxprice":100,"productprice":"100","costprice":"100","virtualsend":0,"virtualsendcontent":"","virtual":0,"cash":0,"cashier":0,"invoice":0,"dispatchtype":0,"dispatchprice":"","dispatchid":0,"status":0,"goodssn":"","productsn":"","weight":"","total":0,"showtotal":0,"totalcnf":0,"hasoption":0,"subtitle":"","shorttitle":"","content":"<p><img src=\"http:\/\/wx.xunza.com\/web\/index.php?c=utility&a=wxcode&do=image&attach=http%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FMoL5lIhnW9tpHAq13hGLbEVhxZxuK4zM9amH5atS9YyWSChOvOcgl5kGSHXtN1uUc1HnKKtqDcLwGVyRyGOVyw%2F0%3Fwx_fmt%3Djpeg\" width=\"100%\"\/><\/p>","createtime":1545794595,"video":"","discounts":"{\"type\":0,\"default\":\"\",\"default_pay\":\"\"}","pcate":"3","ccate":"9","tcate":0,"cates":"9","pcates":"","ccates":"9","tcates":"","thumb":"images\/3\/2018\/12\/kCbCcZiEccDBEy8Wz4WWlqwD9Ifmjx.jpg","thumb_url":"a:0:{}","isstatustime":0,"statustimestart":1545794220,"statustimeend":1548472620}',true);
        //var_dump($data);die();

        $resp = ihttp_get("https://odoapi.kangerys.com:8443/odoapi/product/list/c270a2babe5946c8b82a09a8eb25ad00?pageSize=100&pageOffset=1&phone=undefined&version=1.0");
        $json = $resp['content'];

        foreach (json_decode($json)->data->datas as $key => $pro) {
            //存入实体
            //var_dump($pro);

            if($key > 20) {
                //打开详情页
                $info = ihttp_get("https://odoapi.kangerys.com:8443/odoapi/product/get/" . $pro->productId . "?version=1.0");

                //下载缩略图
                //正则匹配内容中的图片 下载到本地并替换成新地址  下载不能同时下载多个?文章重名
                $proinfo = json_decode($info['content'])->data;
                $data["title"] = $proinfo->name;
                $file = file_remote_attach_fetch($proinfo->thumbUrl);
                if (!is_error($file)) {
                    $data["thumb"] = $file;
                }

                $data["marketprice"] = $proinfo->retailPrice / 100;
                $data["minprice"] = $proinfo->retailPrice / 100;
                $data["maxprice"] = $proinfo->retailPrice / 100;
                $data["productprice"] = $proinfo->retailPrice / 100;
                $data["costprice"] = $proinfo->retailPrice / 100;
                $data["content"] = $this->replaceimg($proinfo->details);
                $data["createtime"] = time();
                $data["total"] = $proinfo->stock;
                $data["sales"] = $proinfo->sales;

                //var_dump($data);
                //远程文件保存
                pdo_insert("ewei_shop_goods", $data);
                echo $data["title"] . "导入成功<br />";

            }


        }



    }

有几点注意就是json解码后生成对象还是数组的问题,微擎的数据库入库要求是数组,所以在json_decode($data,true)要加true

聊斋书画院lzsy.com的网站8年前是由我们进行改版的,系统是基于ASP.NET开发,当时费用问题并没有更换系统,访问速度实在是不能忍,鉴于客户这么多年一直在我们这边服务器,出于技术的好奇,准备分析一下网站访问慢的原因何在。

经过分析,该系统最大的问题就是把access数据库放在了bin目录下,数据库随时都在更新,bin目录里有文件更新,asp.net就会重新编译,所以每次访问都要经过编译的过程,肯定会慢,由于系统的源码(asp.net是编译的没有cs源码文件没法修改)太久了找不到了,不能通过修改代码的方式将数据库位置移动出去,百度搜索能否将bin及dll移动到别的目录,得到如下方法:web.config中添加以前配置,就可以将bin目录移出

<runtime> 
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
<probing privatePath="bin1"/> 
</assemblyBinding> 
</runtime> 

.net默认web.config文件修改是不重启的,所以自行重启服务器后,再次说观察,速度提升很大,再在aspx中添加页面缓存配置,速度再次提升。优化完成

本案例主要介绍采用LVYECMS,拼图前端框架及模板快速完成某小学网站项目的建设过程.

关于作者:老马,38岁,做了15年网站的老油条,网名tryer,目前处于家庭妇男、自由职业者状态,希望通过一些实际没太有技术含量的文章来记录工作,分享些许经验。

项目概况: 某中心小学,校址就是本人就读的初中,顺便去校园缅怀了一下青春。客户选择用响应式方案制作。

1.设计模板的选择确定与修改 提供演示地址,客户确定风格,提交首页设计修改

虽然本人最早也是所谓的美工,但要设计完全原创的设计,再切图并实现响应式,代价太大很累,建站费用也被市场竞争压缩的很少,所以做为老手,尽量先从网上找一些非常符合客户行业特点,版块要求的模板或者现有网站来加以修改、仿制套用,10yanw上的响应式模板很不错,扒拉了一下找到一个绿色的版块合适的模板,操起《仿站小工具》就将演示模板的首页、列表页、内容页都下载下来,然后先用Sublime text神编辑器,打开文件开始修改,该模板采用的是国产的响应式框架,拼图Pintuer-跨屏响应式布局前端开发CSS框架,之前没用过这个框架,用BOOTSTRAP,妹子比较多,看了下手册,非常容易理解好用,非常喜欢,很容易的就上手将首页修改了,换了个LOGO,各种图片,填充一下客户相关的信息,传到测试地址,就交给了客户,客户一票通过,OH YEAH!

2.后台系统选型,快速套用,尽量最少的修改

设计通过了下面就好弄了,开始根据用户之前的功能要求,物色合适的后台系统,做为技术老手,用过的后台系统还是很多,当然做为懒人,从没开发过自己的CMS系统,都是拿来主义,惭愧惭愧,后台系统尽量选择可以少改动的能完全满足用户需求的系统,并且尽量精简,不要大而全的商业有版权风险的系统,最近用的比较的是YFCMF,LVYECMS,都是采用本人比较熟悉的THINKPHP开发,修改起来比较顺手,LVYECMS的权限系统更适合客户要求的分级权限,审核机制,所以选用LVYECMS做为后台,本地PHPSTUDY快速搭建起运行环境,进入系统,先进相应的栏目批量建立,录入一些测试数据,将原有模板文件重命名,以便随时拿来参考修改新的模板文件,将静态图片,CSS,JS文件放入相应的目录,边看实际运行效果,边修改模板,调取数据。

修改系统的权限,审核机制:

1.审核机制修改:将添加编辑文章中的审核改为默认未审核并隐藏,在相关的栏目权限设置中添加审核的动作选项

2.后台内容管理只显示自己和下级的信息

if (User::getInstance()->isAdministrator() !== true) {
        //角色ID 有没有下级 取角色下的管理员名  有下级取下级的信息 没有的话同级只取自己的信息
        $role_id = User::getInstance()->role_id;
        //var_dump(D("Admin/Role")->getArrchildid($role_id));
        $child = explode(',', D("Admin/Role")->getArrchildid($role_id));
        //如果是数组取所有子级的管理员名
        if(count($child) == 1){
            //没有子级 只取自己的信息
            $where['username'] = array('EQ',User::getInstance()->username);
        }
        else{
            //遍历取所有管理员
            foreach ($child as $k=>$c){
                //第一个是自己只取自己
                if($k == 0){
                    $namearr[] = User::getInstance()->username;
                }
                else{
                    $childuser = M('User')->where(array('role_id' => $c))->field('username')->select();
                    foreach ($childuser as $user){
                        $namearr[] = $user['username'];
                    }
                }
            }
            //var_dump($namearr);
            $where['username'] = array('IN',$namearr);
        }

        //die();

    }

3.根据内容情况,调整页面版块,调取数据

设计与版块应该为内容展示服务,一开始的设计,排版,会因后期内容的不断调整充实而不断变化,有了前端框架栅格系统、现有组件样式,以及MVC模式的页面模板化,改动会比较方便。

4.关于客户 关于感情 关于费用 关于自由职业 职业规划

目前业务渠道单一,大部分业务靠朋友介绍及老客户的推荐,业务网站也没有好的排名,没有做竞价排名,没有做其它的付费推广,并且网站建设业务随着微信公众平台等冲击,政府网站等统一单位,统一域名等因素,加上门槛太低,充斥着大量的网建公司,小小淄博一搜一大片,严重的红海市场,饥一顿饱一顿的状态。哪位高人给指指路