<h1>View8</h1>
<p><code>View8</code>是一个静态分析工具,旨在将序列化的V8字节码对象(JSC文件)反编译为高级可读代码。View8使用经过修补的已编译V8二进制文件来解析和反汇编这些序列化对象。因此,View8生成的文本输出类似于JavaScript。</p>
<h2>要求</h2>
<ul>
<li>Python 3.x</li>
<li>反汇编器二进制文件。可用版本:</li>
<ul>
<li>V8版本 <code>9.4.146.24</code>(用于Node V16.x)</li>
<li>V8版本 <code>10.2.154.26</code>(用于Node V18.x)</li>
<li>V8版本 <code>11.3.244.8</code>(用于Node V20.x)</li>
</ul>
</ul>
<p>对于已编译版本,请访问<a href="https://github.com/suleram/View8/releases">发布页面</a>。</p>
<h2>使用方法</h2>
<h3>命令行参数</h3>
<ul>
<li><code>input_file</code>:输入文件名。</li>
<li><code>output_file</code>:输出文件名。</li>
<li><code>--path</code>,<code>-p</code>:反汇编器二进制文件的路径(可选)。</li>
<li><code>--disassembled</code>,<code>-d</code>:指示输入文件是否已经反汇编(可选)。</li>
<li><code>--export_format</code>,<code>-e</code>:指定导出格式。选项包括<code>v8_opcode</code>、<code>translated</code>和<code>decompiled</code>。可以组合多个选项(可选,默认:<code>decompiled</code>)。</li>
</ul>
<h3>基本用法</h3>
<p>反编译V8字节码文件并导出反编译的代码:</p>
<pre><code>python view8.py input_file output_file</code></pre>
<h3>反汇编器路径</h3>
<p>默认情况下,<code>view8</code>会检测输入文件的V8字节码版本(使用<code>VersionDetector.exe</code>),并自动在<code>Bin</code>文件夹中搜索兼容的反汇编器二进制文件。要指定不同的反汇编器二进制文件,请使用<code>--path</code>(或<code>-p</code>)选项:</p>
<pre><code>python view8.py input_file output_file --path /path/to/disassembler</code></pre>
<h3>处理已反汇编的文件</h3>
<p>要跳过反汇编过程并提供已反汇编的文件作为输入,请使用<code>--disassembled</code>(或<code>-d</code>)标志:</p>
<pre><code>python view8.py input_file output_file --disassembled</code></pre>
<h3>导出格式</h3>
<p>使用<code>--export_format</code>(或<code>-e</code>)选项指定导出格式。您可以组合多种格式:</p>
<ul>
<li><code>v8_opcode</code></li>
<li><code>translated</code></li>
<li><code>decompiled</code></li>
</ul>
<p>例如,要并排导出V8操作码和反编译的代码:</p>
<pre><code>python view8.py input_file output_file -e v8_opcode decompiled</code></pre>
<p>默认使用的格式是<code>decompiled</code>。</p>
<h3>VersionDetector.exe</h3>
<p>V8字节码版本以哈希形式存储在文件开头。以下是<code>VersionDetector.exe</code>可用的选项:</p>
<ul>
<li><code>-h</code>:获取一个版本并返回其哈希值。</li>
<li><code>-d</code>:获取一个哈希值(小端序)并使用暴力方法返回其对应的版本。</li>
<li><code>-f</code>:获取一个文件并返回其版本。</li>
</ul>