解压和打包安卓DAT文件

Posted on

安卓5.0的卡刷包系统基本上都是在一个 dat文件里面的。但是对于很多国内ROM,要不就是植入了很多流氓软件, 要不就是有很多无用软件。我们可以通过解压DAT文件并进行修改然后再封装回去就完美啦~

首先把DAT解压成IMG镜像

我们要使用sdat2img工具把 DAT文件转换成IMG镜像

    ./sdat2img <transfer_list> <system_new_file> <system_ext4>
    - <transfer_list> = input, system.transfer.list from rom zip
    - <system_new_file> = input, system.new.dat from rom zip
    - <system_ext4> = output ext4 raw image file

一个很简单的例子:

    ./sdat2img system.transfer.list system.new.dat system.img

新生成的IMG镜像便是我们下一步需要的.

挂载IMG镜像

    sudo mount -t ext4 -o loop system.img /mnt/android

这时候你可以在系统的 /mnt/android目录下看到文件的具体内容然后进行修改了.

打包回IMG镜像

把修改好的内容打包回去需要使用make_ext4工具

    ./make_ext4fs -T 0 -S file_contexts -l 1073741824 -a system system_new.img /mnt/android

file_contexts文件是ROM本身提供的.后面的一串数字指的是打包的IMG文件的大小 1G

封装成DAT文件

封装仍需要使用工具 使用 rimg2sdat

    ./rimg2sdat <system_img>

这样就打包好了新的DAT文件,放入刷机ROM.刷机即可~ 以上操作最好在Linux环境下,Win下不保证成功.

参考 XDA

tagged: notes

Windows下如何进行进程注入

Posted on

上学期学了有关Windows程序底层方面的知识,学习到病毒的基本工作原理。好记性不如烂笔头,学完之余还是写点东西出来吧~ 不过我也只是抛砖引玉,详细知识还是得自己多多钻研~

首先打开进程

首先使用Win系统的OpenProcessAPI打开所要注入的进程。 使用参数是进程的PID,可以使用任务管理器查看进程的PID,打开成功之后返回程序的句柄。

开辟内存空间

Win系统也提供了开辟内存空间的VirtualAllocExAPI。 传入的参数包括进程句柄,开辟起始地址,开辟空间的大小,分配的数据类型,分配空间的权限。例如: pRemoteCode = (PBYTE) VirtualAllocEx(hProcess, 0, dwSizeOfCode, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

写入恶意代码

使用Win系统的WriteProcessMemoryAPI向新开辟的内存空间写入数据。注意这里写入的是二进制数据,要考虑到各种API函数的寻址问题。

执行注入的代码

微软照样还是提供了相关的CreateRemoteThreadAPI,我们注意最后一个参数是输出而不是输入。

获取执行的结果

如果要获取执行的结果,首先我们得等待线程的执行完成,使用WaitForSingleObjectAPI.例: WaitForSingleObject(hThread, INFINITE); 然后再使用GetExitCodeThreadAPI,得到返回的结果。

释放开辟的空间

干了坏事得不留痕迹才行,回收自己开辟的空间,使用VirtualFreeExAPI.

关闭打开的进程

打开的进程也得关闭,使用CloseHandleAPI.

代码示例:

        hProcess = OpenProcess(PROCESS_CREATE_THREAD 
            | PROCESS_QUERY_INFORMATION
            | PROCESS_VM_OPERATION 
            | PROCESS_VM_WRITE 
            | PROCESS_VM_READ,
            FALSE, PID);

        if (hProcess == NULL) {
            printf("failed.\n"); 
            return -1;
        }   
        printf("ok.\n");

        printf("[I]: Allocating remote memory with size of 0x%08x ......", 
            dwSizeOfCode);

        pCodeRemote = (PBYTE) VirtualAllocEx(hProcess, 
                0, 
                dwSizeOfCode, 
                MEM_COMMIT, 
                PAGE_EXECUTE_READWRITE);        
        if (pCodeRemote == NULL) {
            printf("failed.\n");
            CloseHandle(hProcess);
            return -1;
        }
        printf("ok at 0x%08x.\n", pCodeRemote);

        do_link_before_inj(pCodeRemote);

        printf("[I]: Writing code ......");
        if (WriteProcessMemory(hProcess, 
                pCodeRemote, 
                pCode, 
                dwSizeOfCode, 
                &dwNumBytesXferred) == 0) {
            printf("failed.\n");
            VirtualFreeEx(hProcess, pCodeRemote,
                    dwSizeOfCode, MEM_RELEASE);
            CloseHandle(hProcess);
            return -1;
        };
        printf("ok (%d bytes were written).\n", dwNumBytesXferred);

        printf("[I]: Creating a remote thread ......");
        hThread = CreateRemoteThread(hProcess, NULL, 0, 
                (LPTHREAD_START_ROUTINE) pCodeRemote,
                pCodeRemote, 0 , &dwThreadId);
        if (hThread == 0) {
            printf("failed.\n");
            if ( pCodeRemote != 0 ) 
                VirtualFreeEx(hProcess, pCodeRemote, 0, MEM_RELEASE);
            if ( hThread != 0 )         
                CloseHandle(hThread);
            return -1;
        }
        printf("ok.\n");

        printf("[I]: Waiting the remote thread ......");
        WaitForSingleObject(hThread, INFINITE);
        GetExitCodeThread(hThread, (PDWORD) &exitcode);
        printf("exited with 0x%08X\n", exitcode);

        VirtualFreeEx(hProcess, pCodeRemote, 0, MEM_RELEASE);
        CloseHandle(hProcess);
tagged: notes

使用Aria2下载百度网盘和115的资源

Posted on

虽然我已经开发了两款专门为Aria2用的下载插件,但是我发现还是有同学不会用Aria2c这么好的东西呢~ 于是还是写一篇文章来好好的介绍下吧~

安装Aria2

Aria2官网,通过官网应该能找到各个系统的下载包啦~ Linux用户可以直接通过包管理器进行下载安装,OSX我就没有经验了...Win用户直接下载对应的ZIP包就可以了

配置Aria2

Aria2有两种下载模式,一种是命令行下载模式,一种是RPC Server模式.前者不建议使用,后者的使用方式很方便. RPC模式就是启动之后什么也不做,等着通过RPC接口接受下载请求.下载完也不会退出,一直等待. 使用命令行加参数的方式配置Aria2非常不推荐,建议使用配置文件的方式,下面贴出我的配置文件.

    #用户名
    #rpc-user=user
    #密码
    #rpc-passwd=passwd
    #上面的认证方式不建议使用,建议使用下面的token方式
    #设置加密的密钥
    #rpc-secret=token
    #允许rpc
    enable-rpc=true
    #允许所有来源, web界面跨域权限需要
    rpc-allow-origin-all=true
    #允许外部访问,false的话只监听本地端口
    rpc-listen-all=true
    #RPC端口, 仅当默认端口被占用时修改
    #rpc-listen-port=6800
    #最大同时下载数(任务数), 路由建议值: 3
    max-concurrent-downloads=5
    #断点续传
    continue=true
    #同服务器连接数
    max-connection-per-server=5
    #最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
    min-split-size=10M
    #单文件最大线程数, 路由建议值: 5
    split=10
    #下载速度限制
    max-overall-download-limit=0
    #单文件速度限制
    max-download-limit=0
    #上传速度限制
    max-overall-upload-limit=0
    #单文件速度限制
    max-upload-limit=0
    #断开速度过慢的连接
    #lowest-speed-limit=0
    #验证用,需要1.16.1之后的release版本
    #referer=*
    #文件保存路径, 默认为当前启动位置
    dir=/home/acgotaku/Downloads
    #文件缓存, 使用内置的文件缓存, 如果你不相信Linux内核文件缓存和磁盘内置缓存时使用, 需要1.16及以上版本
    #disk-cache=0
    #另一种Linux文件缓存方式, 使用前确保您使用的内核支持此选项, 需要1.15及以上版本(?)
    #enable-mmap=true
    #文件预分配, 能有效降低文件碎片, 提高磁盘性能. 缺点是预分配时间较长
    #所需时间 none < falloc ? trunc << prealloc, falloc和trunc需要文件系统和内核支持
    file-allocation=prealloc

小白用户可以直接copy我的配置文件保存成aria2.conf进行使用.
然后在终端里面输入 aria2c --conf-path=<PATH> 注意PATH必须是绝对路径.
例如: D:\aria2\aria2.conf 可以使用 -D 参数使Aria2在后台运行,即使关闭终端也不会停止运行. Win下可以把这个命令行保存成bat文件进行运行.注意路径不需要使用引号括起来.

接下来是如何管理Aria2的下载任务了,推荐使用binux菊苣的YAAW,超级好用,下载打开即用.
懒得下载的话可以使用在线版,只需在设置里面修改下RPC PATH为 http://localhost:6800/jsonrpc

百度网盘插件

我开发的百度网盘插件已经发布到Web Store了,无法翻墙的同学可以去Github下载安装包进行安装.安装之后打开百度网盘会发现在我的设备按钮的 右侧多了一个导出下载按钮,如果你使用的是默认配置的话那么选中要下载的文件之后点击ARIA2 RPC即可导出到Aria2进行下载,前提是你已经开启了Aria2的RPC模式.

115网盘插件

115网盘插件刚刚发布功能还不完善,可能还有未知的BUG,我后续会进行优化和开发的.安装之后打开115网盘, 会发现多了一个 设置导出按钮 的按钮.点击这个按钮之后会提示设置成功的,然后把鼠标移动到要下载的文件上会出现 导出下载 的按钮, 点击即可导出到Aria2下载.

参考: Aria2下载示例

如果有不懂的可以在GithubGoogle+上联系我~

tagged: notes

使用Postfix,Dovecot和Mysql配置邮件服务器

Posted on

由于学习的需要,我要配置个本地邮件服务器.虽然找到了一篇很详细的资料,但是在配置过程中还是遇到了这样那样的问题. 写篇文章记下来自己的学习过程,毕竟好记性不如烂笔头嘛.

详细教程

Google一下便找到了一个十分详细的教程,分享给大家:How To Configure a Mail Server Using Postfix, Dovecot, MySQL, and SpamAssasin 教程虽然很详细,但难免有不理解和差错的地方.下面就讲下我遇到的问题:

Dovecot证书问题

教程上设置的证书位置是:

    ssl_cert = </etc/ssl/certs/dovecot.pem
    ssl_key = </etc/ssl/private/dovecot.pem

但实际上是空的 需要手动copy过去,默认存储的位置是:

    ssl_cert = /etc/dovecot/dovecot.pem
    ssl_key = /etc/dovecot/private/dovecot.pem

查看日志发现读取配置出错

出错信息如下:

    dovecot: lmtp(11504): Fatal: Error reading configuration: Invalid settings:
    postmaster_address setting not given

查到相关资料Invalid settings: postmaster_address setting not given 简单来说就是在/etc/dovecot/dovecot.conf文件内添加一行 postmaster_address=postmaster at DOMAIN 即可

重启Dovecot

当我们执行 service dovecot restart 时,发现根本没有这个service.
其实dovecot已经在运行了,我们只需执行 dovecot reload 即可

邮件无法发送

日志输出如下:

    B0E4F26077E: to=<root@example.jp>, orig_to=<root>, relay=none, delay=6780, delays=6780/0/0.09/0, dsn=5.4.4, status=bounced (Host or domain name not found. Name service error for name=example.jp type=AAAA: Host not found)

这个问题是因为Postfix默认启用了IPv6并且优先级比IPv4要高,所以需要在配置文件 /etc/postfix/main.cf里面设置 inet_protocols = ipv4 这样就关闭IPv6了.即可解决问题.

大概就是遇到这么多问题了,最后祝愿大家圣诞节快乐~

tagged: notes

扇贝单词助手发布

Posted on

最近受菊苣binux的要求,希望能开发一款扇贝网的单词助手,可以标记任意页面上已经背过的单词.项目源码在Github. 然后我就趁着国庆就开坑了,binux也给了我很多参考资料.因为之前也开发过Chrome的扩展,所以对Chrome提供的API比较熟悉.这里就介绍下使用的相关的JavaScript的知识吧~

Promise

Promise是用来处理大量的异步操作,因为异步操作不能直接return返回值,必须进行回调.所以就会导致很多异步操作在一起 不断的进行嵌套,这样实在是很不优雅的代码书写方式.代码首先是用来跟人读的,其次才是可以运行.使用Promise就可以把多个 异步操作的返回值以数组的形式返回来,然后再进行回调.语言描述不好,还是上例子吧.

    function get_cookie(site,name){
        return new Promise(function(resolve, reject) {
            chrome.cookies.get({"url": site, "name": name}, function(cookies) {
                if (cookies) {
                    var data = cookies.name + "=" + cookies.value;
                    resolve(data);
                }else{
                    reject();
                }
            });
        });
    }

Chrome的API全部是异步操作,所以我一开始使用return的时候并没有得到值.把回调函数封装到一个Promise对象里面,然后传入两个参数 resolve,reject 分别代表异步操作成功执行或失败需要调用的函数.

    var site1 = "http://pan.baidu.com/";
    var name1 = "BDUSS";
    var site2 = "http://pcs.baidu.com/";
    var name2 = "pcsett";
    Promise.all([get_cookie(site1,name1), get_cookie(site2,name2)]).then(function(value){
        console.log(value);
    },function(){});

这里我们需要调用两次异步操作,一般情况的话需要函数嵌套,但是使用Promise对象的话,只需要在then里面需要写上 resolve 和 reject 需要的执行函数, 传入的value就是两次异步操作的返回值数组.然后就可以进行相关的处理.代码就变得清晰有条理.

Promise文档

Promise.all

tagged: notes

Archlinux折腾笔记

Posted on

四月也算过去了一大半了,经过了一个月的奔波与折腾,总算安顿好自己了.在学校本地找了一个还算不错的实习. 阴差阳错的选择了Web开发工程师的职位,其实我最想做的是后端开发,前端也还是比较喜欢的.但是我有个很大的 缺点就是不会设计... 不会设计的前端开发工程师很鸡肋的,每次网站开发都是同学出设计图我来做的.这样不行的, 我必须能独当一面才算能在公司站得住脚.

近况就是这些,接下来就是记录下自己在Archlinux下折腾的东西.方便自己以后查询使用.

Linux下视频截图制作动态GIF

观看视频遇到经典的镜头当然得录下来做成GIF~ 首先需要安装 imagemagick 这个软件包才行

mplayer -vo png -ss 00:08:28 -frames 200 123.mp4 
mogrify -resize 848x480 *.png
convert -delay 4  *.png ry.gif

第一句话是利用mplayer输出png格式图片,从8分28秒开始,截图200帧,也可以换成

mplayer -vo png:z=1 -ss 00:08:28 -endpos 8  123.mp4

这样就是截取8秒,png后面的z=1是压缩比例从0到9 压缩程度递增,压缩速度也递增. 第二行便是修改尺寸,毕竟720p的GIF实在是吃不消啊.然后第三行变把这些png生成GIF了.

sudo设置环境变量

有时候程序需要使用root权限,但当我使用sudo的时候结果发现这时候程序又使用root用户的配置文件了.
现在的需求就是程序使用root权限运行但是执行时候读取HOME变量还是当前用户.
Run_X11_apps_using_sudo wiki上有清楚的讲解这样的解决办法.

面试笔记

Posted on

三月下旬,病还没有完全康复.我便赶往上海.只因为认识的一位菊苣帮我投递了一下简历.而且据说人家对我简历印象还不错. 现在想想,自己还真是幼稚...这句话就像你问店里员工我的菜怎么还没上,人家一定会回答:马上就好了,都已经下锅了. 刚刚抵达上海的时候已经是晚上,这是我人生第一次去上海,有种乡下人进城里的感觉.带着梦想与希望,来到了这个地方.

当天晚上便和HR联系面试时间,第二天早上10点就赶到约好的地方进行面试.说实话第一次面试,没有任何经验,炮灰的概率太大了. 虽然我有心理准备,但是面试的时候还是有点小紧张.不过面试的都很基础,例如问了我python如何进行文件读写,这不是太简单了么. 直接查看文档这不就几秒钟的事情么,简单到我根本不会去记住文件读写的具体写法.因为用的时候自然会去看文档,当然了熟练的话 就直接写出来了,我是一个对着电脑编程根本停不下来的人,但是给我纸笔的话反而写不好.这个文件读写放在项目里根本我都不当回事, 但是面试的时候尴尬的没回答好...后来菊苣也说了,这个时候你就如实回答查下文档不就行了么...

后来又去面试了一家公司,好吧.这回面试的公司主动反问我有什么想问的么...当时我就傻逼了,不是面试官考我么...我还问啥啊? 好吧,当时大脑空白不知道该说什么好就草草结束了这场面试,现在想想真是浪费了一次大好的机会.

第三次面试的是一家小公司,这家公司HR之前是知道我面试两家失败了的,然后她问了我一句:你有反思上两家面试的时候为什么失败么? 这可真是一针见血,虽然多多少少我知道自己的不足,但是还没有进行过深刻的反思,HR就对我说了,首先,你说话太快,导致面试官很难听清 你到底在说什么,妈呀...我父母都说我说话太快.这确实是个问题,因为面试官不可能因为你说话快就让你再重复的,也就一带而过了. 第二就是说话紧张,很难发挥自己平常真实的一面,其实我是一个很怕生的人,让我不紧张实在太难了.第三就是转移话题,面试官问的问题要 就事论事,别扯太多,这个,说实话因为上两次面试没有好好的表达自己的能力这回就想多说点证明自己的实力结果还起了反效果... 第三次面试还是失败了,但是HR确实给我很深刻的印象,能告诉面试者不足的HR才是好的HR,没有任何音讯的公司,以后我能力出众的时候你来 挖我我也不会去的,这体现的是一个公司的态度.

三次面试之后我便回学校了,因为上海的生活成本实在太高,我HOLD不住,在学校的时候把毕业论文搞定再说吧.不过在学校的时候也可以继续投递 简历,反思下自己哪方面做的不好有待进步.还是在本校接受电话面试,成功的话再去公司才是正确的选择.毕竟对于我这样的死宅来说长途旅行真是 要命,状态不知道要几天才能调节回来...如果有菊苣有好的职位推荐的话,顺便弱弱的球内推,实习职位即可.方向有:前端开发,Python开发和运维 职位.希望自己之后的面试能顺顺利利~

tagged: notes

漫无止境的三月

Posted on

三月...好漫长...整个2月不是过年走亲戚就是在家看PDF,鸟哥的Linux私房菜,虽然自己用了一年多Linux桌面了,但是感觉知识还是 不够系统,于是又去把鸟哥的Linux私房菜好好读一遍去了...

感觉鸟哥的Linux私房菜写的超小白,有时候想跳着读,但又怕错过了什么...又放弃了,感觉读的有点很浮躁,说实话很多功能如果不常用 的话,也会慢慢忘记,不过还是有印象的,但是就不知道在哪个位置,这就是PDF的缺点了,如果是纸质书的话很容易再去翻阅需要的知识点, 虽然 Ctrl+F 搜索很好用,但是得到的结果总是不尽如人意,我个人还是喜欢纸质书.

光看书真的很没劲,于是我又开坑了...为了练习python,我想当后端工程师啊!IE一天不死我写前端就不会痛快! 新项目就这么愉快的开坑了,前端懒的设计就直接用Bootstrap了,感觉Bootstrap也就只能用些组件的UI, 布局神马的还是不符合我的胃口.项目部署的网址是:http://netkuu.icehoney.me/ 目前还是绝赞填坑中~ 前端后端全部自己一个人写,希望能把自己锻炼成full stack developer~ 现在就差数据库练手了,好久没玩数据库了.

大家肯定会好奇为啥到现在还不去上学或工作,一直在家,其实由于种种原因,上了手术台,在家养病中.希望能尽快康复.我想出去挣钱啊 QAQ

每月一篇文章任务完成~

tagged: notes

GUI和CLI的使用比较

Posted on

GUI和CLI也算是使用软件的两大流派吧,Win下几乎都是GUI程序,Linux下几乎都是CLI程序.因为两者面向的用户不同, 初衷也不同.今天看了<程序员修炼之道>这本书,可谓是有了更深入的了解.GUI侧重于易用,CLI则侧重于效率.

对于使用Linux的程序员,工作台就是命令shell.在shell提示下,你可以调用你的全套工具,并使用管道,以这些开发者从未想过的方式 把他们组合在一起.在shell下,你可以启动应用、调试器、浏览器、编辑器以及各种实用程序.你可以搜索文件、查询系统状态、过滤输出. 通过对shell进行编程,你可以构建复杂的宏命令,用来完成你经常进行的各种活动.在shell下面,可以高效率的处理事务,并且shell可以完成 在GUI下几乎所有的任务.GUI和IDE会让程序员变得更懒,更无知,各种辅助工具,例如自动补全可能让某些程序员 连asynchronous这个单词都无法完整的拼写出来.

对于在GUI界面和集成开发环境(IDE)上成长起来的程序员,这似乎显得很极端.毕竟,用鼠标指指点点,你不是也同样能把这些事情做好吗?

简单的回答:"不能".GUI界面很奇妙,对于某些简单操作,它们可能更快、更方便.移动文件、阅读MIME编码的电子邮件以及写信,这些都是你可能想要 在图形环境中完成的事情.但如果你使用GUI完成所有的工作,你就会错过你的环境的某些能力.你将无法使常见任务自动化,或是利用各种可用工具的全部 力量.同时,你也将无法组合你的各种工具,创建定制的宏工具.GUI的好处是WYSIWYG--所见即所得(what you see is what you get).缺点是WYSIAYG-- 所见即全部所得(what you see is all you get).

GUI环境通常受限于它们的设计者想要提供的能力.如果你需要超越设计者提供的模型,你大概不会那么走运--而且很多时候,你确实需要超越这些模型.注重实效的程序员 并非只是剪切代码、或是开发对象模型、或是撰写文档、或是构建过程自动化--所有这些事情我们全都要做.通常,任何一样工具的适用范围都局限于该工具预期要完成的任务. 例如,假定你需要把代码预处理器集成进你的IDE中(为了实现按合约设计、多处理编译指示,等等).除非IDE的设计者明确地为这种能力提供了挂钩,否则,你无法做到这一点.

你也许已经习惯于在命令提示下工作,这种情况下,本文就可以忽略啦~ 否则,你也许还需要我们向你证明,shell是你的朋友.

作为注重实效的程序员,你不断的想要执行特别的操作--GUI可能不支持的操作.当你想要快速地组合一些命令,以完成一次查询或某种其他的任务时,命令行要更为适宜. 例如:

在上周哪些Java 文件没有改动过?

  Shell  find . -name '*.java' -mtime +7 -print  
  GUI    点击并转到"查找文件",点击"文件名"字段,敲入"*.java",选择"修改日期"选项卡
           .然后选择"介于".点击"开始日期",敲入项目开始的日期.点击"结束日期",敲入1周以前
           的日期(确保手边有日历).点击"开始查找".

这样的例子很多.shell命令可能很晦涩,或是太简略,但却很强大,也很简练.同时,因为shell命令可被组合进脚本文件中,你可以构建命令序列,是你常做的事情自动化. 希望你看完这篇文章能逐渐接受CLI并熟悉shell.多用你的命令shell,你会惊讶他能使你的生产率得到怎样的提高.

tagged: notes

安徽师范大学校园视频下载器2.0版本发布

Posted on

安师大的校园视频网是个资源不错但软件坑爹的东西. 当然这个服务不是安师大自己研发的,是由沈阳光音网视科技有限公司开发的,应该是学校出钱购买的吧.不过那个坑爹的客户端只给在线观看不给下载, 网页也是完美的兼容IE6,Javascript 里面也调用了好多微软自己的ActiveX控件,所以只能用学校提供的自带的那个客户端浏览和观看视频.

对于这种反人类的做法我当然是很不爽了,客户端的网址栏虽然是不变的,不过是通过重定向的方式访问学校的服务器了吧,通过修改hosts我也可以直接在 IE浏览器中查看,然后查看源代码进行了分析工作.原理其实很简单,就是通过解析服务器上的XML文件进行网页的渲染,XML文件里面记录了服务器上所有的 视频资源和视频的ID,然后通过一步步的研究直接找到了资源的下载地址.详细的原理请看我github上公开的VideoSeach 里面的Function.cs记录了具体解析过程.

通过研究知道了原理便和同学商量这开发个下载器方便大家使用,Win版本是由同学基于.Net Framework 2.0开发的,由于我的特殊需求变移植了 web版本,1.0版本是在上学期开发并发布的.现在软件使用的用户大概有一万人左右,因为很多学校也用的这个视频服务提供商,我们变提供了配置按钮可以满足 各个学校的需求.不过寒假回来发现下载器不能再下载视频了,我便抽出一晚上时间研究了原因,发现是学校的服务器屏蔽了下载器的功能.手法也很简单使用 User-Agent: Novasoft NetPlayer/4.0 进行屏蔽非官方客户端,知道原因事情就很简单了,伪造UA嘛,之前下载器是调用迅雷下载的,现在在里面内置了下载功能.

软件官网: www.icehoney.me

百度云盘下载:Download

软件截图: 安师大校园视频下载器

tagged: notes

个人博客的建立

Posted on

好吧,我建立个人博客的想法其实已经差不多有一年了吧.一直没去实现...主要原因还是自己太懒...一开始想用WordPress搭建一个....其实我也搭建了 但是由于一直找不到好看的主题就坑在那一年多了...后来还想用Octopress来搭建...又由于自己当时的系统是Win而放弃了,现在我把自己的系统换成 Arch并且在学习Python,于是又开坑了...

虽然是自己动手写出来的,但基本属于山寨,毕竟现在自己对Python的掌握还属于初级阶段...UI其实也是山寨的 >_>

嘛嘛,先搭建出来一个再说,之后自己再慢慢装饰吧,不过总算是把坑给填上了.万事开头难,迈出了第一步,之后就容易多了....

不过我这个文笔很差的人写的博客估计也没人看

tagged: notes