作者: Yang Woodu

拆解阴阳师安卓apk

不得不说阴阳师真的是个肝到死的游戏。
最近在升6星。在有全程白蛋的情况下,依旧攒狗粮攒到死。

1个6星=……=360个2星,不算经验……。
哭了。

附上触乐视频,各位且看一乐。

(因为渣浪没有给video.weibo.com开https支持,因此没法直接嵌入到这个页面里面)
http://video.weibo.com/player/1034:7755106f8dfb556c1e7f2d40b0d52f31/v.swf

今天的正题是如何拆解《阴阳师》的安卓apk。

为了研究一下素材,在红米里面装了一下。不得不说这玩意的优化真是……(虽然红米也很烂就是了),完全卡的跑不动。

我已经事先刷过了Recovery,进到Recovery里面通过USB链接到电脑拷贝出阴阳师全部文件。

这部分参考的帖子主要是:http://nga.178.com/read.php?tid=10187005&rand=993

路径基本没差,小米版的路径后面有个.mi,我用的是网易官方版,所以没有太大区别。

使用安卓安装数据的原因,是因为安装包拆出来的数据包(*.npk)是分段的,这个不太好解决,还是需要程序自己去解压合并。

这时候,我们需要一个这样的程序:

QuickBMS
by Luigi Auriemma
e-mail: me@aluigi.org
web: aluigi.org
home: http://quickbms.aluigi.org
help: http://zenhax.com

官网下载在上面。

配合这样一个脚本,脚本来自于某个技术论坛里解压网易另外一个使用 Neox 引擎的游戏所给出的脚本。


# NXPK (script 0.1.1)
# script for QuickBMS http://quickbms.aluigi.org

idstring "NXPK"
get FILES long
get OFFSET asize
xmath OFFSET "OFFSET - (FILES * 0x1c)"
goto OFFSET
for i = 0 < FILES
    get NAME_CRC long
    get OFFSET long
    get ZSIZE long
    get SIZE long
    get ZCRC long
    get CRC long
    get FLAGS long
    if FLAGS == 2
        comtype lz4
    else    # 0
        comtype zlib
    endif
    if SIZE == ZSIZE
        log "" OFFSET SIZE
    else
        clog "" OFFSET ZSIZE SIZE
    endif
next i   

将res.npk使用这个脚本即可解压。

可以看出,这个包基本就是对已有压缩包进行了额外的封包。
还挺好玩的。

读源码

http://www.yiichina.com/doc/guide/2.0/structure-controllers

在“控制器ID”一节中这一特性被通过命名规范的方式规定。
错怪yii了。

还是要多看官网。

==16:51更新,以上为更新全文

最近由于工作(因为业余依旧沉迷阴阳师),开始正式研究php7和yii2。
今天试图通过pretty-url将所有/api/v1/action的请求转发到/apiv1下面来进行处理。
于是配置如下:

'urlManager' => [
            'enablePrettyUrl' => true,
            'enableStrictParsing' => false,
            'showScriptName' => false,
            'rules' => array('api/v1/' => 'apiv1/', '' => 'site/index','/'=>'/',)
        ],

然后,在apiv1的controller里面写了这样一个函数:

public function actionFinanceInfo()
    {
        $userObj = new \app\models\User();
        return $userObj::find()->where(['id' => 1])
            ->one();
    }

理论上是没问题的,但是死活就是404。无奈中翻看yii2的源码,发现路由这块的实现是:

public function createAction($id)
    {
        if ($id === '') {
            $id = $this->defaultAction;
        }
        $actionMap = $this->actions();
        if (isset($actionMap[$id])) {
            return Yii::createObject($actionMap[$id], [$id, $this]);
        } elseif (preg_match('/^[a-z0-9\\-_]+$/', $id) && strpos($id, '--') === false && trim($id, '-') === $id) {
            $methodName = 'action' . str_replace(' ', '', ucwords(implode(' ', explode('-', $id))));
            if (method_exists($this, $methodName)) {
                $method = new \ReflectionMethod($this, $methodName);
                if ($method->isPublic() && $method->getName() === $methodName) {
                    return new InlineAction($id, $this, $methodName);
                }
            }
        }

        return null;
    }

竟然是一个将驼峰处理成连字符的函数。文档里貌似就没提到这一条啊。坑。

多看官网多读书

是的,依旧沉迷阴阳师。因此没有好好写文章。周末找个时间干了吧。
最近还在做一个官网,反正事儿也不是没有。
webpack 的 html-loader 是可以直接代替 apache/nginx 进行 server-side-include 的,虽然从原理上看似乎不是一个事儿。

https://github.com/webpack/html-loader

配置webpack的配置文件中,关于html的加载项:

{test: /\.html$/, loader: 'html?interpolate'},

即可。

===更新===

早上话说了一半。
完成上面的工作之后,在页面里面即可使用

${require('./tmpl/footer.tmpl.html')}

这样的语法来引用html模板了。这个 require 可以使用已有的 loader 来载入各种神奇的东西,比如 css js等等,来做各种黑科技。

最近打算写个命题作文

准确点说应该是给定开头的作文。
聊一聊钱的问题吧。
数了数,为了街机,还有各种二次元产品,我已经投入了几乎全部的闲钱,甚至还有负债。
但是这个世界上还是有很多事情不是为了钱的呢。
嘛。因为各种原因跳坑《阴阳师》,估计还要坑一段时间吧。

哦对, PM 日月的官网上线了,给 PTB 的首页和友链都加了顶级入口,算是老玩家最后的支持吧。

香港归来

仔细想了想我还真对我国这几个资本主义社会制度的地区感兴趣呢,有机会还是要走的更远一点。

中秋和花花( @liuyanghejerry )去了一趟香港,这次难得的不是为了出勤而出远门(当然也去刷了一把卡啦)。之前那次去 hk 有点太仓促了,导致没能见的上 PTB 这边的朋友。

这次见到的朋友主要是阿米和 Rai ,凭着记忆讲讲(我和)这两位的故事吧。

我不是个很善于收藏回忆的人,有的时候觉得我很恋旧只是我恰好没有清理我的硬盘而已。

印象中应该是和 Rai 认识的更早一点,只是一直没有交流。说来我一开始在网上搭讪的方式很奇怪,比如一开始在 GJD 是给 花Song 发论坛短信询问他是不是和 nfopo 为同一个人(小白黑历史)。 Rai 倒是一个很自来熟的家伙,最初对她的印象是群里的鼠绘,后来就是知道她还有个属性貌似是傲娇的妹妹。在网上的回忆其实蛮单调的,大家一起在论坛水贴,群里瞎聊,偶尔换个屋顶做个任务啥的。

而后来和 Rai 有更多聊天之后大概也就是 PTB 开始消沉下来的那段时间。我已经跳了音游坑导致某位的严重不满,我也只好在群里找大概有了解的人来聊这些,而已。

说到这里,我倒是觉得对于 PTB 我反而是付出最少的那个。毕竟小火曾经负责制作模板, yy 一个人几乎承担了全部的论坛运营,而花花做了论坛的王牌那一部分,而我只是在水水水 orz  。

扯远了。说说见面之后的事情吧。虽然一见面坐下就被用正式比赛的队伍虐了一把我的通关队,还是要感谢一下 Rai 的代购。之前有在朋友圈晒图,很久很久之前,大概真的就是 Project DIVA Arcade 刚刚铺货到香港的时候,我就有拜托她帮我买到限量版的 aime 卡(后来其实发现那个卡还是蛮普遍的,当然这是后话了)。结果直到 5 年后的上个周五我才拿到手。想来还真是个怠惰的慢递呢(笑 。

Rai 是个很标准的游戏宅(某番女主既视感),感觉以后如果想跳坑或者回坑,还是要多多请教呢。

Rai 给我代购了五年的 aime 卡

Rai 给我代购了五年的 aime 卡

(更多…)

介绍下搭建这个博客遇到的坑

从决定开始重新搭个博客一直到这玩意上线,前前后后花了我大概两个多月的时间。虽然中间还有例如做 mai 硬盘和其他私活,但是我还是觉得时间有点太久了。整理的概要文档都快忘光了,趁彻底忘记自己写的是什么之前把一些坑记录下。

1、vps 的选择

首先就是服务器的选择了。因为个人使用,加上对网络要求比较高,因此我一开始就把目标放在了千元每年左右的vps上。首先一个大坑就是没有选择国内相对稳定的免备案vps,先后尝试了 linode、Diahosting、OneAsia等相对还稍微比较像样的vps,但是无一不在三天后获得gfw认证。尤其是linode,基本开半个小时ssh都被墙掉了。最后还是经过朋友推荐来 aws 开了一年免费套餐,反正一年后正常续费就是了。

这个 aws 偶尔也是会有墙掉的情况,具体症状是我昨天部署完 wordpress 之后,安装程序会导致与服务器的ssl连接莫名其妙断开,之后就连不上了。算了,目前还可以,凑合用。

对了,我选择的是韩国机房。

2、nginx的编译

vps开好了之后,就是环境的搭建了。刚开始踩的大坑是vps内存不够2G是编译不了 mysql 的。装了一堆东西编了一堆垃圾之后,我重新开了新的镜像从零开始。

首先是 nginx ,我参考的编译参数是来自于这个网页的说明:https://my.oschina.net/liucao/blog/470241 ,为了防止原网页挂掉,我把网页的原文粘在下面。

$ ./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-http_spdy_module \
--with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'

第一个坑就来自于编译参数,我现在使用的 nginx 已经是1.11.3,其中的-with-http_ssl_module已经变成了--with-http_v2_module 。 这也证明httpv2正式成为一个新的标准了。

3、php7

选择php7的原因是它真的有了非常大的提升。

之前编译 mysql 给我留下的阴影实在太大了,我转而选择为 yum 增加源,使用 yum 进行安装。

主要参考的文档是:http://blog.csdn.net/dxywx/article/details/50609137

这里有个文字的坑,就是这个博主的代码段里面有很多特殊字符被转成了全角,别的还好。

然后关于源本身和其他插件的安装,需要把 yum install php-**** ,全部都替换成 yum install php70w-**** 。 别的没有什么特别需要注意的了。

4、分区挂载

aws 的定制 centos 确实针对自身做了非常多的优化,但是有些优化也确实让人很摸不着头脑。比如外挂的储存卷,本意的设计是方便快速迁移,但是我一开始真的对着文档蒙逼了半天。特别大的坑也没有,就是默认分区格式是 ext4 ,fstab需要特别指定一下。

5、安全区

我也不知道是不是我遇到 bug 了,之前明明给这台 vpc 开放了80 和 443 端口,但是就是连不上。删掉安全区重新分配后就好了。

6、SSL证书

首先是 openssl 请务必升级一下。aws 带的这个还是1.0.1e,这是我前东家都放弃的版本,包含了完整的两个心跳漏洞。加个源1分钟就更新好了,别省这点事了。

然后说说证书,我选择的 SSL 证书来自ssls.com 。这家是以出售廉价 SSL 证书著名的。我看中的是它签发的根机构是 COMODO 。价格也还好,我分别为woodu.me git.woodu.me(准备装个gitlab)购买了证书,一共花了大概200多块的样子,各三年。因此我觉得价格还可以接受。

购买的过程中基本没有什么要注意的,只有一点,域名认证的时候,推荐选择的是基于域名管理邮箱的邮箱认证,这个速度很快,基本确认了邮件证书就可以下来。我之前主站选择了放置文件进行 check,结果因为编码问题文件不符,还专门去联系了客服帮我手动通过。

(更多…)

Hello World

早知道是这个标题,我干啥要删掉默认的……(

是的,于是我又回来写 WordPress 了。请多指教。

这个博客大概会放点各种各样学习的资料,还有偶尔会写点什么吧,但愿。

总之闲暇的时间会慢慢来写东西的,敬请期待!