在[tamarin系列之6] tamarin外篇---As3Eval中, 我们讲了一个实用的as3编译和反编译工具, 下面我们介绍另一个编译反编译工具AS3C.这两者有什么不同呢,其实AS3Eval属于在线动态利用ABC进行编译和解析,而as3c更像javac或者mxmlc这样的离线编译器
1、HOW TO GET
获得AS3C的方法很简单, 项目就挂在google code上(http://code.google.com/p/as3c/), 我们可以随时关注项目的发展动态和下载源码(http://as3c.googlecode.com/svn/trunk/).
2、HELLO WORLD
(1) 我们可以直接粘贴项目主页的例子到FLEX中(注意直接粘贴代码有问题, 第21行多了个符号´ 去掉就可以编译了)
- package
- {
- import flash.display.Sprite;
- import de.popforge.asm.Op;
- import de.popforge.asm.__asm;
- /**
- * Hello World example using As3c inline asm syntax.
- *
- * @author Joa Ebert
- */
- public class Main extends Sprite
- {
- public function Main()
- {
- __asm(
- Op.findPropertyStrict('public::trace'),
- Op.pushString('Hello World!'),
- Op.callPropertyVoid('public::trace', 1)
- );
- }
- }
- }
(2) 编译这个as文件生成Main.swf, 将这个swf拷贝到as3c.exe的同级目录下
(3) cmd, 进入控制台, 用as3c编译这个项目: as3c.exe -inline Main.swf
(4) 把Main.swf拷回bin-debug文件夹覆盖第(2)步生成的Main.swf
(5) Debug测试结果, 输出Hello World!
3、开始使用as3c.exe
为了方便使用, as3c提供了很多个参数, 大体分为三种模式:
(1) replace: 主要用于部分替换编译, 用自己写的bytecode替换掉已经存在的方法体
常见用法: as3c -replace -o 生成的swf -class 要替换的类 -method 要替换的方法 源swf文件 ASM文件
举例: as3c -replace -o op.swf -class test -method testasm test.swf a.asm
这一系主要可选参数如下
-namespace [uri]
-class [name]
-method [method]
-constructor
-static-method [method]
-static-constructor
参数具体作用从字面意思就可以看出
(2) inline: 使用内联的ASM进行编译
常见用法: As3c.exe -o 生成的swf -inline 源swf
As3c.exe -inline 源swf
举例: As3c.exe -o output.swf -inline input.swf
As3c.exe -inline input.swf
这种方式是最常使用的编译方式
(3) dasm: 反编译
常见用法: As3c.exe -o 反编译后的opcde文件 -as3c 源文件
举例: As3c.exe -dasm -o dasm.txt -as3c test.swf
4、是实践的时候了
深入出真知, as3 opcode汇编是AS3的最底层, 也是AVM2的直接解析代码, 为了学习opcode 我们可以使用as3c.
不过as3c的dasm dump出的opcode实在是太多了, 在这个时候, AS3Eval就有作用了, 我们首先打开as3Eval的url(http://eval.hurlant.com/demo)
然后我们选择EvalUI, 清空TextArea里面的内容,输入一个最简单的method: function a() {return 1}, 然后我们Comple, Dump
观察dump后的方法结果:
- function ():* /* disp_id 0*/
- {
- // local_count=2 max_scope=0 max_stack=1 code_len=12
- 0 debugfile "test"
- 2 debugline 1
- 4 pushbyte 1
- 6 setlocal1
- 7 getlocal1
- 8 kill 1
- 10 returnvalue
- 11 returnvoid
- }
我们可以根据结果构建出我们的inline DEMO:
- package {
- import de.popforge.asm.Op;
- import de.popforge.asm.__asm;
- import flash.display.Sprite;
- public class test extends Sprite
- {
- public function testasm()
- {
- __asm(
- Op.pushByte(1),
- Op.setLocal1(),
- Op.getLocal1(),
- Op.kill(1),
- Op.returnValue(),
- Op.returnVoid()
- );
- }
- public function test() {
- trace(testasm());
- }
- }
- }
然后inline编译: as3c.exe -inline test.swf
COPY 处理后的test.swf到bin-debug, 然后DEBUG
输出1
怎么样,, 知道内部的opcode的结构答题如何了吧, 如此正反都可以练习opcode, 大家还等什么呢, 争取做一个as3 opcode高手吧
相关推荐
资源来自pypi官网。 资源全名:tamarin-utils-0.14.5.tar.gz
学习tamarin的必读文档之一,建议在阅读tamarin用户手册之前先阅读该文档。该文档为tamarin-prover的入门级介绍文档,可以快速了解tamarin的用途、使用方式与效果。
Tamarin证明者资料库 本自述文件描述了Tamarin证明者用于安全协议验证的存储库的组织。 它的目标受众是Tamarin证明者的感兴趣的用户和将来的开发人员。 有关Tamarin证明器的安装和使用说明,请参见手册的第2章: : ...
redtamarin, 在 命令行/server 端,运行 AS3 redtamarin简而言之,redtamarin是基于 Tamarin项目( 例如。 Flash Player 虚拟机),并允许在命令行上运行AS3代码。因为Tamarin只支持,( 对象,array,等等 ),...
gem 'tamarin' 然后执行: $ bundle 或者自己安装: $ gem install tamarin 用法 运行服务器: bundle exec ruby lib / tamarin 然后,在其他终端运行: curl http : //localhost :3030 贡献 分叉它( )...
EM验证 这是EMV标准的模型,是我们IEEE S&P 2021论文EMV标准:Break,Fix,Verify的补充材料。 有关这项工作的详细信息,请访问 。... :GNU脚本,用于生成目标模型并对其进行Tamarin分析。 *.oracle
近期国内外很多安全研究人员使用Tamarin对一些经典安全协议进行分析,并发现了经典协议的漏洞,其中包括TLS核5G通信协议,以及最近火爆流行的ECU安全通信协议SecOC。 本文档为Tamarin用户手册,是学习Tamarin的最佳...
资源来自pypi官网。 资源全名:tamarin-utils-0.15.1.tar.gz
资源来自pypi官网。 资源全名:tamarin-utils-0.8.5.tar.gz
基于Tamarin的5G AKA协议形式化分析及其改进方法_.pdf
python库。 资源全名:tamarin-utils-0.15.4.tar.gz
是GNU脚本,用于生成目标模型并对其进行Tamarin分析。 *.oracle是证明支持的*.oracle 。 包含自动生成的目标模型( .spthy )及其证明( .proof )。 以HTML格式显示分析结果。 包含有用的脚本: 是一个Python...
语言:English (United States) 包括Tamarin的HD图像动作冒险视频游戏。 对于Banjo Kazooie Donkey Kong和Mario 64的粉丝! 包括Tamarin的高清图像,动作冒险视频游戏。... 3:没有广告或恼人的弹出窗口
Thane 是 Tamarin ( ) 的一个轻微修改版本,具有部分 Flash Player 兼容层,主要用 ActionScript 编写,并带有一点原生胶水。 引擎本身被修改为在 x86_64 架构下的 Unix 平台上运行。 现有的 Windows/64 支持已扩展...
形式化分析、安全协议分析
monkey.org的数据过于杂乱,将其分开并分类处理
文章中所做的测试所需要的东西,包括Tamarin、asc.jar、builtin.abc、toplevel.abc等 博文链接:https://rednaxelafx.iteye.com/blog/196278