编译avm

2013年时Adobe停止了对Tarmain项目的维护,不想2016年三月居然重新更新了代码,近几年AVM的变化终于又能借此一窥究竟了。

linux下编译avmplus是最容易的:

Windows下无论是用VS2010还是VS2015都无法顺利编译通过,基本上会遇到两类问题,一个是字符不识别,一个是函数未解析
1. 字符问题在Windows 10时已经不存在了,但Windows 7与到时候也非常容易解决,删掉ErrorConstant文件中非英语部分就OK了
2. 至于 unresolved symbol 问题,可以先查找到缺失类所属的文件,然后把它们加入到工程的对应目录也就OK了,这个错误按说真是很奇怪,怎么会漏掉文件没有加入到项目中呢

获取斗鱼直播视频的下载地址

斗鱼直播应该火了好一阵了,和每一个互联网新兴业务一样,人气激增到国家都专门为其制定管理政策了。对流行节拍有意而为之的后知后觉,让我近一两个月才关注了几个主播。女主播看脸蛋,也插科打诨来几个污段子,才美兼备的自是不多。男主播的话,就看他套路其他女主播的真人秀,或视频或夜店。

只是直播时间都太晚,看几次就觉得严重影响睡眠,能自动录播就好了。

网页里的播放器自然是用Flash开发的,P2P式的NetStream。如果找到主播房间号对应的NetStream传输地址就可以使用第三方软件去下载视频流了。虽然播放器的主程序是加密传输到本地后载入内存的,但毕竟Loader真正开始加载的时候,该解密的都解了。播放器外部代码还做了混淆,但主程序因为加密放下戒备,真Dump下来的话,可读性极高。

开源的FFDEC出现以后,SWF Decompiler和As3 Sorcerer都再没用过。直播开始后,FFDEC去Dump浏览器进程中的Flash文件,大小1.5M左右的就是解密后的播放器主程序。反编译可以看见代码本身包含调试信息,只要当前页面的URL中包含dydebug的字样,播放器就会调用浏览器的console.log输出不同阶段的中间结果,这当中就包含了NetStream流的地址,形如:

组合RtmpUrl和LiveID就得到了视频地址,直接粘贴到浏览器地址栏就下载视频到本地了。

正好新装了Visual Studio 2015,就写了个下载地址解析的工具,距离上一次使用C#写点什么已经四五年了。Anyway,webBrowser控件很方便,可以自动调用IE引擎打开附加dydebug的直播地址。由于console是浏览器自定义的调试模块,webBrowser作为一个控件需要自行实现一个console供Flash调用。其实也就是在页面加载完毕后,添加一段javascript,声明一个window.console.log,内部调用external.log就能传递消息调试信息给C#代码了。 更多内容

变革时别分神

这个假期回家有点早,也真的是后面的票都卖没了。也许是以天为单位的时差的缘故,除了旅途中短暂的喧嚣,世界甚至有些寂静。回想大学每次回家前,我总爱制定个时间表,紧锣密鼓、分秒必争,预习明年的课程或者写个程序练练手。研究生以后,说不上是看破红尘了还是怎么的,习惯就凭空消失了。怀着这段倍感亲切的记忆,我煞有介事地又写下了这个假期的时间表

望着新表,我觉得张口就能过度解释,拽很多理论进来。但还是很满意,下了车就逐条解释给最友好的听众,我妈。

虽然总看英文材料,但拼写能力真是递弱代偿,抽空抄抄单词是个简单的任务,练练字熟悉拼写,赚取第一笔成就感。然后看看书,随便哪本,毕竟书比网络快餐,收获的不仅仅是事实还有思想。

精彩的部分来了,11:00开始的一个小时是灵活时间段,姑且这么称呼好了。灵活时间段是本表区别以往的最大亮点,在这段时间里,可以和姥爷打牌,可以帮忙干活,并没有固定方向。一天中总会发生计划外的情况,尽量把他们安排在灵活时间段,既不会因为计划没完成产生负罪感,搞得一天心情都很糟糕,也能确保后面的计划照常执行。As you see,下午2:30是另一个灵活时间段。

午饭和晚饭的时间也相对靠后,家人和上班族当然不一样,即,计划时也要考虑周边人的情况,越少地影响他们越容易顺利执行。晚饭过后除了活动活动筋骨,foremost的任务就是完成家里电脑集体升迁Windows 10。回家前我就全副武装了U盘,常用工具和操作系统都备齐,毕竟家装的方正宽带(电信)表面提速暗地里断路。

现实是我妈实在懒得折腾去备份她电脑的资料,我只能循循善诱在D盘目录建了个bak文件夹,让她每天整理一点资料进去,打算最后再把bak拷到活动硬盘。这期间我大刀阔斧地给买了小米60寸、换了联通线路的宽带、给朋友爹的iMac重装了系统、买了新鞋,并通过数次谈话节目给姥爷从软文讲起,告诉他不能相信报刊上的医院信息,开药要适量,还有我的工作。到后来由于释放能量过多,甚至觉得空虚寂寞冷了。

不管怎样终于要开始升级Windows 10了,说说笑笑,我就重启进入硬盘分区步骤,把所有盘合并,准备分成三个区,再安装系统,恍然间,妈问,bak还没拷到活动硬盘吧。这下傻了,除了临行前她叮嘱的消消乐的作弊脚本拷走了,bak的内容全成了分区狂魔的刀下鬼。哎,准备了这么久,全白费啊,妈赶紧说没了就没了,更加剧了我的懊悔。

Windows 10安装完毕,期间无语。我只分了C盘用于操作系统,其余空间保持未分配的状态。一进入系统,赶紧试了试最近听说的一个磁盘恢复软件TestDisk,迷迷糊糊的用它恢复了分区信息。然后重启,果然Windows 10没了。重装Windows 10,D盘找回来了,bak也回来了。也许说了这么多都是变革,但初衷的升级Windows 10一溜号差点成了绝唱。

总结一下技术细节:

 

Linux下编译WebKit和JSC

Safari和Chrome的内核都是webkit,无论是打算自己开发个浏览器还是在程序里集成完整的HTML解析功能,webkit都是为数不多的选择。特别是webkit分支中的jsc,可以命令行下解释执行javascript,真是想想就让人亢奋的玩物。编译环境选择的是Ubuntu 15.04 x86_64,由于玩心太重,所以首先考虑把jsc编译出来。

下载代码

有大概三种途径弄到代码,git,svn和直接下载tar.xz,我只试了后面两种

或者从webkitgtk直接下载tar.xz

准备编译环境

执行webkit/Tools/gtk/install-dependencies可以安装大部分缺失的库代码,另外再手动补下刀

其余的库要是还缺,apt-cache search+apt-get install 缺啥补啥吧

编译

如果下载的tar.xz的话,参考linuxfromscratch进入webkit目录执行以下代码,编译好的jsc位于./build/bin/jsc

如果是svn得到的代码,进入webkit目录后执行编译脚本得到./WebKitBuild/Release/bin/jsc

WordPress自动安装本地升级包

自从安装了WordPress,升级工作一直不太顺利。本地搭建的LAMP环境测试没问题,但虚拟空间真刀真枪的时候就每每提示自动升级失败。试过手动升级,小心地覆盖各个文件夹时候心揪的稀碎啊,特别是WordPress不解风情地老推送升级包过来。

社区讨论最多升级失败都归咎于文件夹权限没设置好。但我这个调来调去发现就是虚拟主机访问WordPress资源站点,耽搁的太久,超时带来的副作用。

所以自己走VPN下载升级包是在所难免了。不过比起手动升级,把升级包下载到站点目录,然后让WordPress自动升级还是能省不少心,也就是自动安装本地升级包。唯一要做的就是稍微hack一下升级代码。以升级WordPress 4.4为例,修改代码示例:

 

OS X运行MATLAB时addpath函数报错解决方法

最近用新买的MacBook Pro运行MATLAB程序,在Windows下跑的好好的.m程序拿到OS X愣是报错。

addpath_error

这可真是X了狗了,我找到报错的那行,是一条添加work directory的code,用的MATLAB自带的addpath函数,是这么写的:

上看下看左看右看也没看出哪里有错,妹的莫非是系统bug?不能吧… 盯着这条code足有10秒,聪明如我突然就顿悟了,原来是OS X中路径的斜杠与Windows的斜杠方向正好是反的,简单改下就成了:

然后就是见证奇迹的时刻了,have fun!

Mounty写NTFS移动硬盘时文件损坏的解决方案

感恩节期间在美帝新买了个MacBook Pro,拆封完毕第一件事情就是安装各类需要的软件。为了防止意外,就把好不容易找来的破解版安装包都做了个备份。当我想把这些备份安装包转移到移动硬盘的时候,万万妹想到,意外发生啦!意外发生啦!!意外发生啦!!!

移动硬盘是NTFS格式的,这是Windows操作系统最常见的文件系统格式之一,but苹果的OS X对它的支持做得并不是太好(NTFS是微软的协议,可能是商业竞争之类的原因,微软没授权给苹果)。具体表现在,Mac对于NTFS格式的移动硬盘,默认是只能读不能写的。为此,我下载了度娘推荐的Mounty。本以为故事到这里就是happy ending了,哪里知道这里才是恶梦的开始

通过Mounty备份到移动硬盘里的东西通通都打不开了,图标是灰色的,修改日期统一显示为1984年,双击显示正在被占用无法读取。(以下图片来源于网络)

file_crash

occupied

情急之下热插拔了一次,之后硬盘就不能被mount了

not_remountable

还好,我就是传说中的解决问题小能手。通过一早上的尝试和搜寻Google,终于找到了解决办法。

更多内容

武侠梦

大学起的生活很快让看电视节目成了再没真正拾起的旧习。可有闲有幻想的中学时代里那些金庸剧中的刀光剑影,仍时不时闪回在生活的很多瞬间。

下班路上,会兴奋地抓起着雪,攥成球后飞掷向敌方头目(路牌和栏杆);跆拳道课后的回家途中,要是遇到一段人少的小巷,会情不自禁地突展手臂企图用六脉神剑的光影照亮前方;又或是赶上大风天肆虐,有多少次幻想着用自己的掌风与之相抵;出门晚了的话,走的一快,深呼吸间就开始尝试施展凌波微步,哦,施展不成功~基本身法等级不够,还没做拿武学图谱的任务呢。

2000年算得上是网游元年,《石器时代》、《传奇》等屈指可数的网络游戏招揽了绝大部分有志投身互联网娱乐行业的莘莘学子们。我那会儿就用《金庸群侠传online》(网金)杀过时间。初一下学期开始,玩了快两年,什么点卡、道具、外挂、代练能买的都买了。最后半年,第一次听到其他玩家劝说:“如胶似漆,莫做固陋井底之蛙;回头是岸,迈向精彩大千世间”时开始萌生了去意(这句话放在当年其实一点不突兀,很多玩家多少有点古诗文言文的情节。客观原因是古风古气的游戏作派,而且金庸老前辈是那会儿中学生心目中深厚文字功底的代表,主观原因是经常为了考试题目背对联、背古文)。直到有一次琢磨着要汇款1000给代练公司的时候,突然虎躯一震,意识到大势已去,网金的故事已经跑偏了,该撤了。得益于那段传奇经历,今天对更为粘人的页游手游都不太感冒。

如果说网金提供了在虚拟世界做大侠的平台,游戏外挂就称得上是现实世界中的让你梦想成真的绝世武功。那会儿的神行太保、金庸通天、网金游侠,网金也疯狂等外挂都能让你手中虚拟人物在地图上快速飞跃,自动练习伐木、采矿等铸造神兵利器的技能,自动遇敌战斗获取学点,自动跟掌门学习武功,跨越游戏的限制任意驰骋。耗时乏味的练级时间全部可以让外挂代劳。外挂能通过挂钩游戏进程后强制执行特定代码片段跳过部分耗时操作,或按照游戏协议发送网络封包给服务器,直接完成目标任务。外挂开发者对于游戏代码的逆向分析几乎达到了完备的状态,每个NPC的编号、武功、属性依赖、任务条件、地图、技能的练习方法、哪些游戏规则可以适当逾越、哪些就要严格遵守才能不被封号以及游戏和服务器的通信的协议等。虽然那会儿也想自己写一个或者绕过验证免费用人家的外挂,但实在知之甚浅、无从下手。

十五年过去了,网金居然仍在线运营,外挂们也是一路相伴。就在初冬的一个下午,我闪身回眸间,又望见了尘封十五年的往事。加上最近脚扭伤了,没法去上跆拳道课,就重温了一下网金。这次打算好好折腾一下外挂,跨越时空为那个小小少年圆个梦。

更多内容

Linux下运行Flash独立播放器

Adobe很早就停止了对Linux下Flash的功能更新,和最新的Flash 18相比,Linux下的Flash仍然停留在11.2。

即便如此,Flash 11.2日常播放个简单的动画还是绰绰有余的,点击下载Flash独立播放器

直接运行绝对报错,形式类似:

官方也没详细说明,后来在64位的ubuntu 14上折腾一阵,发现安装以下的依赖库就OK了

复用IDA的分析结果

IDA Pro分析二进制程序时可以加载PDB,因而可以很容易查看符号信息。

利用这个原理,如果已知二进制应用加载了开源库,可通过自行编译开源库得到PDB,再经由IDA载入目标二进制程序,获得符号信息,辅助逆向分析。如果IDA加载PDB文件出错就换一个版本再试,我就出现6.6、6.8都加载不成功的PDB,6.5反而可以。

现在尝试让Flash复用Tamarin的符号:

  1. 用VS编译后,得到avm.pdb
  2. IDA分析avm.exe过后再载入PDB
  3. 使用IDB2SIG插件生成PAT文件
  4. sigmake -nflash_symbol avm.pat flash.sig
  5. 这一步会得到EXC格式的文件,进去删掉第一行注释后重新执行上述命令就得到了flash.sig
  6. IDA分析Flash过后,载入flash.sig就能看到符号信息了

编译选项很有讲究,如果Flash是VS2008编译的,那生成Tamarin时也应该用VS2008。比如,Win 8.1的Flash是VS2012编译的,或者开启了CFG选项的话,那Tamarin就同样方式编译,这样的sig才会有更高的匹配率。