某某视频平台加密视频的解密

说实话这种玩意发出来对我没什么好处,但是本着高尚的自由主义精神,还是稍微发一下。

严重鄙视一位同行写出了类似程序但“解密一个视频收费XXX元”的行为。

做网站的也程序员也挺不容易的,所以在此不点名是哪个视频网站。不过还是要吐槽一下:你们号称的“独创的DRM视频版权保护”能不能不这么垃圾,就把FLV文件用对称加密处理一下文件头有意思伐,Adobe官方出的DRM系统你们倒是有没有了解过。

static void Main(string[] args)
{
    var fs_pcf = new FileStream(args[0], FileMode.Open, FileAccess.Read);
    var fs_flv = new FileStream(args[0] + ".flv", FileMode.Create, FileAccess.Write);
    fs_pcf.Seek(0x43, SeekOrigin.Begin);
    var buf = new byte[8184];
    int cb;
    int times = 5;
    while ((cb = fs_pcf.Read(buf, 0, 8184)) != 0)
    {
        if (times-- > 0)
        {
            var des = DESCryptoServiceProvider.Create();
            des.Key = Encoding.ASCII.GetBytes("Kyo2426C");
            des.Mode = CipherMode.ECB;
            var ciper = des.CreateDecryptor();
            var output = ciper.TransformFinalBlock(buf, 0, 8184);
            fs_flv.Write(output, 0, output.Length);
        }
        else
        {
            fs_flv.Write(buf, 0, cb);
        }
    }
    fs_pcf.Close();
    fs_flv.Close();
}

谢绝转载及二次发布。

有关VB.NET的弱类型和后期绑定

前天应邀在.NET下处理HTML DOM,就按照原来VB中的写:

Dim document = WebBrowser1.Document.DomDocument
MsgBox(document.getelementbyid(“aaaaa”).innerhtml)

工作很正常。然而同学却不懂VB,就翻译成C#,写成

Object document = WebBrowser1.Document.DomDocument
document.getelementbyid(“aaaaa”).innerhtml

结果没法通过编译。网上搜了下,有人说把Object换成var,试了下也不行。

后来查了下MSDN中C#的入门,提到了“C#是强类型语言”,所以,像脚本那样访问DOM是不行的,必须要Cast以后才行,方始发现原来VB和C#还是不一样的啊。

然而.NET终归是一种语言,VB和C#的这个差别在.NET上会是什么样的呢。大家都知道,.NET的母语是C#,换句话说.NET IL也是强类型语言,所以推测是VB的编译器做了手脚。

用Reflactor打开VB编译的EXE,果然不出所料。

如下面的代码:

Dim document = WebBrowser1.Document.DomDocument
document.parentwindow.execscript("alert(jQuery(""table:eq(1) tr:gt(0) td:nth-child(2)"").text());", "javascript")

在Reflactor中变成了:

NewLateBinding.LateCall(NewLateBinding.LateGet(RuntimeHelpers.GetObjectValue(Me.WebBrowser1.Document.DomDocument), Nothing, "parentwindow", New Object(0  – 1) {}, Nothing, Nothing, Nothing), Nothing, "execscript", New Object() { "alert(jQuery(""table:eq(1) tr:gt(0) td:nth-child(2)"").text());", "javascript" }, Nothing, Nothing, Nothing, True)

这么看来VB.NET支持IDispatch的后期绑定,倒是比C#还技高一筹哈哈

ASP.NET MVC折腾系列之(4)——LaTaleDB 1.0 Source Released!

开发环境:Windows 7 + Visual Studio 2008 + ASP.NET MVC 2 + MySql

部署环境:Debian 5 Lenny + Apache 2 + mod_mono + MySql

线上地址:http://www.gmsj.org/chddb

源代码下载:http://www.gmsj.org/chddb/LaTaleDB.rar

131205:链接已失效,需要资源请在评论区使用真实邮箱留言

源代码编译需求:.NET Framework 3.5 SP1 + Visual Studio 2008 SP1 + MySql.Data.dll

数据库导入说明:请自备LaTale客户端,自行编译SPFExtractor.exe提取资源,手动建立数据库,再用MySqlImporter.exe将DATA\LDT中的数据导入数据库。

 

作为练手作业,项目用到的知识技术:

原生HTML与CSS(因为用不惯VisualStudio WebDev,HTML与CSS均为手写,就像高一时和豆子童鞋上课时在纸上写HTML一样,新学到不少CSS的东西)

ASP.NET(母板、Cache、ASP.NET底层运行机制、数据库访问)

ASP.NET MVC(自定义Routing、自定义ActionResult作为实时的图片输出、View中直接引用Model等)

.NET(System.Drawing.Bitmap、ASP.NET运行时)

VB.NET(新学到VB.NET和C#.NET中using语句)

数据库一大堆乱七八糟东西 = = 还有就是蛋疼的Linux下部署(可参考前三篇文章) = =

 

然后。。没了。。作为做了四年PHP开发的忠实粉丝,我对ASP.NET完美秒杀PHP的现实表示压力很大。。

ASP.NET MVC折腾系列之(3)——有关在Debian 5上部署LaTaleDB的各种蛋疼的事儿

作为本人第一个ASP.NET MVC的程序,LaTaleDB的1.0版本准备当作业交了去,亦准备上线部署。

然后就是各种蛋疼至死的事情。。

首先,前面文章提到的mono-apache-server是用的mono 1.9版本,即.net 2.0,不含3.5的东西,于是当我把文件上传到服务器上时,访问时直接得到了个500,就说是出错了,如果要看详细信息,在Web.config中设置customErrors的mode为Off。。

然后错误信息是缺少引用。。就把DLL的多余引用去掉,重新编译传了下,再把再缺的DLL从Windows目录里拷出来上传上去。。

然后提示无法启动编译器进程,aspx要在第一次访问时编译的,但是mono没有带vb的编译器。。

然后我火了,上mono官网去看为嘛debian没有2.6版的mono,回答是2.6在debian 6.0中有,第五代的如果想装请添加backport安装源。。

好不容易从backport安装源安装了完整的mono,结果这下更好,直接apache报500,什么网站都打不开,查apache的log,Mono-WebServer2里的异常,Google了一下,有人说到这个bug,说问题在mscorlib.dll中,有时候官方的trunk里有bug。。

然后就把自己电脑上Windows下mono的mscorlib上传了去,结果继续500,这下log写的是执行了native代码引发了保护断言,即即便是mono,在Windows下和linux下的mscorlib是不同的实现。。

这个时候我连把这次装的卸载掉都搞不定了。。回宿舍在自己机子上的debian 6.0上装。。这下是含有.net 3.5的,看上去框架没有什么严重的bug,就把整个/usr/lib/mono打包上传到服务器上了。

这次没提示缺少文件什么的了,不过还是没有编译器。。服务器上debian5也没有vb编译器的包。。再在自己电脑上安装microsoft.visualbasic.dll和vbnc,打开deb文件,看是哪几个文件,手动上传到服务器上。。

以为好了的,结果编译错误。。错误基本出在System.Web.Extension里,弄了半天也没弄好,突然无意中就感觉是不是后来拷进去的缺少的dll是不是和mono框架冲突,就把传上去的那些dll改名掉。

这下OK了,提示的是routing错误,和上次提到的一样,是System.Web.Routing的bug,把这个改回来。。

然后就说mysql找不到数据库LaTaleDB,而数据库已经导入了啊,估计是大小写吧,在web.config中把connectionString中数据库名改为小写。。

这下数据库找到了,但说找不到表,肯定依旧是大小写问题,我可不至于一个一个改吧,网上Google了一下,修改/etc/mysql/my.cnf,在[mysqld]下加入一行:lower_case_table_names=1,重启mysql,这样就不区分大小写了。。

然后终于运行成功,但是wait,物品列表的图片怎么都不透明了。。仔细看了下,是有的透明有的不透明,和源图有关,Google了下,说是mono的一个bug,把微弱的System.Drawing.dll拷上去发现这个dll里是有调用Windows API的,不能用,看来只能将就了。。

整个下来估计花了5个小时。。崩溃。。

上线的站点将在下篇文章中公布,另外1.0版本将以压缩包的形式开源,至于功能的添加,将视心情而定 = =

ASP.NET MVC折腾系列之(2)——遇到的MONO框架的两个BUG

EVA暂时封存,今天晚上开始折腾ASP.NET。

但是没太大兴致做blog,就把原来的GhostCHD找了出来,把DataCore.vb粘过来,试着做一个彩虹岛的Web数据库。

经测,Web和本机一样,程序集中的全局变量(vb.net中写为class的shared成员变量)在dll卸载前是不会回收的(只要有引用就不会回收),而关键是,在一次请求过后,程序是还在的!这和php有着本质的区别!即服务端是保存状态的(DLL在什么情况下可能被卸载还有待研究),这使得有些东西可以保存在内存中不用每次访问数据库或者文件查找。

在WebDev中调试一切正常,但在MONO中出错。

1、SPFReader,几年前写的,结构是SPFFileStream继承自FileStream,并重写其Seek、Position等函数,在其中调用基类FileStream的同名函数并做一些调整。在MONO中不能正常工作,Position出现负数,原因不明,推测可能是MONO框架在哪里把基类和重写的Position弄混了。代码改为SPFFileStream继承自Stream,FileStream作为其成员变量,问题解决。

2、MVC设置好的Routing在MONO下出现一些BUG,如条件写为/{id}.htm,但在MONO中能成功匹配1.htm、1.html、1.htma等,经查,MONO中的库基本为自己重写,而非微软版本,用微软的版本替换之,问题解决(原理上讲,只要是纯托管并且没有DllImport的DLL,都应该可以替换成微软的原版)。

ASP.NET MVC折腾系列之(1)——Linux下跑ASP.NET

近日因作业需要在捣腾php的模板,无意中注意到了ASP.NET MVC框架,直接被秒杀——半年来我一直在致力于的界面代码数据分离原来用MVC模式可以做的很完美,比我设想中的还要完美。。觉得自己大大的被BS了,软件工程看来还是有点用的。

ASP.NET怎么说呢。一年前帮S姐调大作业,就是ASP.NET的,觉得WebForm对HTML的封装过头了,太傻瓜了,完全不像Web开发了,所以一直很抵制它,又因为发誓不碰Java,所以这一年来还是在php中泡着。php是最方便的web语言,但项目一大,就会出现如速度慢等各种问题,最起码我不喜欢它的类,类这个东西我最喜欢.net,其次是ansi c++。在看到asp.net mvc的结构图时,感觉太帅啦!!这次就学它了!可以同时交三门课的作业呢~~

一直搞不定VS9中文版装MVC项目模板的问题,现在迅雷正挂着英文版的ISO,准备通宵。那边开始忙活VPS上服务器的配置。

大家都知道.net是萎软的东西,不过大家也有必要知道.net是部分开源的,并且现在有个叫mono的跨平台开源框架。自然而然,linux也并非不能跑asp.net。下面简单记录下我在VPS上装asp.net的步骤,以便日后查阅。

1,apt-get install libapache2-mod-mono mono-apache-server2

2,修改/etc/apache2/mods-available/mod_mono.conf,将mono-server2-hosts.conf取消注释,将mono-server-hosts.conf注释起来(据说是跑.net 2.0)

3,因为手头没有现成的asp.net程序,就down一个,apt-get install asp.net2-examples

4,重启apache,在http://www.gmsj.org/samples里就能看到了~(这个设置在/etc/mono-server2/mono-server2-hosts.conf中设置

根据mono官网中的介绍,mono会在后台驻留一个.net exe服务器进程用于处理apache传去的asp.net请求。这是用mod-mono做的,其实也可以用fastcgi做(因为我php就是用fcgi做的),回头可以一试。