完成
chrome tools
chrome 32 以上,Chrome Toolbox 失效后的版本
- 强制 –user-data-dir=”X:\ChromeDir\UserData”
- 标签栏滚轮切换标签
-
快捷键:
F1 <—-> CTRL + PAGE_UP
F2 <—-> CTRL + PAGE_DOWN
F4 <—-> ALT + W
ALT + Z <—-> CTRL + SHIFT + T
clean up qq
fuck qq
碧之轨迹逆向系列(1)——场景攻击
序
去年碧轨 PC 版刚出来的时候,我花了很多时间去分析它的各种二进制文件。
包括 itp、itc、剧情脚本、战斗脚本、物品脚本等等,可以说是除了 3D 模型之外的东西,差不多都分析完了。
之后我用 python 写了一套工具——这也是我第一次用 python 写快餐脚本以外的东西,很多地方删删改改,看起来很混乱。 这套工具能将二进制文件转换为 python 代码,通过执行 python 代码又可以生成对应的二进制文件。
编写这样一套工具,是我六年前学编程的目标和动力,现在,终于达成了。
接下来我将通过一系列文章,把分析的成果记录下来。
场景攻击
从零之轨迹开始,在大地图下可以直接攻击魔兽,等级高于魔兽 10 级以上时,可以直接秒杀,节省战斗时间的同时还可以刷耀晶片。 它的学名叫作 FieldAttack(FA)。
下图是我自定义的七柱的攻击动作:
每个人的攻击动作都保存在 FA 脚本中:
,XXX 是角色编号(10进制)。1
\ED_AO\data\system\fachrXXX._bn
所有可控角色对应编号如下:
编号 | 角色 |
---|---|
0x0000 | 罗伊德 |
0x0001 | 艾莉 |
0x0002 | 缇欧 |
0x0003 | 兰迪 |
0x0004 | 瓦吉 |
0x0005 | 银 |
0x0006 | 神狼蔡特 |
0x0007 | 亚里欧斯 |
0x0008 | 诺艾尔上士 |
0x0009 | 达德利搜查官 |
0x000A | 加尔西亚 |
文件结构
下图是罗伊德的 FA 脚本1
\ED_AO\data\system\fachr000._bn
两字节,头部大小,包含自身、itc 索引和 eff 文件名
四字节,itc 索引,也就是人物的贴图,索引格式看 这里
以单字节 0 结尾的字符串,不包含后缀的 eff 文件名。
只能指定 \ED_AO\data\effect\eff\ 目录下的 .eff 文件。
eff 文件决定了攻击范围,击中效果,击中音效。
另外有的 eff 是无法击中目标的。
不定长,FA Byte Code
FA Byte Code
FA 脚本一共 14 条 Byte Code,相比其它两个脚本,数量是相当少,当初只花了不到半小时就搞定了, 代码在这。
ByteCode | 助记符 | 参数 |
---|---|---|
0x00 | Return | NO_OPERAND |
0x01 | SetChrSubChip | C |
0x02 | Sleep | H |
0x03 | PlayEffect | WHHHHHB |
0x04 | Sound | H |
0x05 | Voice | HHHH |
0x06 | FA_06 | NO_OPERAND |
0x07 | FA_07 | NO_OPERAND |
0x08 | FA_08 | h |
0x09 | FA_09 | HH |
0x0A | BlurSwitch | HH |
0x0B | FA_0B | H |
0x0C | FA_0C | WW |
0x0D | FA_0D | NO_OPERAND |
表中的参数定义在这。 基本原则是小写有符号,大写无符号
参数 | 类型 | 字节 |
---|---|---|
c/b | CHAR | 1 |
C/B | UCHAR | 1 |
w/h | SHORT | 2 |
W/H | USHORT | 2 |
l/i | LONG | 4 |
L/I | ULONG | 4 |
q | LONG64 | 8 |
Q | ULONG64 | 8 |
f | FLOAT | 4 |
d | DOUBLE | 8 |
s | bytes | len |
S | str | encoded len + 1 |
o | short label | 2 |
O | long label | 4 |
所以上面那个 FA 脚本会被反汇编成:
图中七柱的 FA 脚本:
FA 脚本的分析到此就结束了,最后附上解析 FA Byte Code 的代码位置:
1
2
3
4
5
6
7
8
006F6B48 . /0F84 8A0A0000 je 0x6F75D8
006F6B4E . |8B45 E8 mov eax, dword ptr [ebp-0x18]
006F6B51 . |0FB608 movzx ecx, byte ptr [eax]
006F6B54 . |898D 80FCFFFF mov dword ptr [ebp-0x380], ecx
006F6B5A . |83BD 80FCFFFF 0D cmp dword ptr [ebp-0x380], 0xD
006F6B61 . |0F87 6C0A0000 ja 0x6F75D3
006F6B67 . |8B95 80FCFFFF mov edx, dword ptr [ebp-0x380]
006F6B6D . |FF2495 04786F00 jmp dword ptr [edx*4+0x6F7804]
Windows 下 jekyll 环境搭建
虽然网上教程不少,但照着做也折腾了我一个下午,可见还是有问题的。
现在以 Windows 8.1 x64 为例,把流程记录一下:
-
安装 ruby,假设安装目录是 C:\ruby
x64 安装包,安装程序可以自动添加 ruby 目录进 PATH
x64 7z压缩包,需要手动添加 ruby 目录进 PATH,或者写个 run.bat 保存到 ruby 目录:
1
@set path=%~dp0;%path% & @cmd /k
-
更新 RubyGems 到最新版
cmd 下执行
1
gem update --system
-
下载 DevKit
http://rubyinstaller.org/downloads/
DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe
解压到
1
C:\ruby\devkit
-
安装 DevKit
-
切换到 devkit 目录
1
cd/d C:\ruby\devkit
-
1
ruby dk.rb init
此时会生成一个
。1
C:\ruby\devkit\config.yml
打开它,把最后一行的
1
---
改成
1
- C:/ruby
-
1
ruby dk.rb install
-
-
切换到淘宝的 RubyGems 镜像
-
安装 jekyll、wdm、kramdown
-
1
gem install jekyll --version=1.4.2
当前最新版本是
,据说跟 Windows 相性不好1
1.4.3
-
1
gem install wdm
当前最新版是
1
0.1.0
-
1
gem install kramdown
当前最新版是
1
1.3.2
-
另外还有些小问题:
- 使用绿色版的 python 2.x
- ruby 自带的 httpserver 不支持带中文的 path
- jekyll 不支持中文,只需要在
里加上一行1
_config.yml
1
encoding: "utf-8"
最后可以写个批处理启动 jekyll