反编译调试flash的程序,有了Yogda,开发人员可以修改/优化的Adobe Flash应用程序编译后的字节码。
说起来修改FLASH游戏,理论上应该可以找到更好的解决办法——直接去修改二次编译后的代码,那样就可以为所欲为了,咕~~(╯﹏╰)b。有位老大爷说得好,工欲善其事必先利其器!这东东嘎哈的不用说了,这丫的可以直接修改代码……咕~~(╯﹏╰)b挺好挺强大。
yogda详细介绍:
Yogda是一个AVM2 bytecode级的swf编辑器。
由著名flash开源3D引擎Yogurt3d的开发者开发,但Yogda是一个商业软件。
使用Yogda可更改/替换swf的tag,并可以直接对swf的doabc做汇编级别的修改(AVM2时代的flasm?),
可以把它看成一个高级一点的"闪客之锤"。
这意味着swf加解密又多了一个方便可靠的工具。
反编译:
用你选择的反编译器打开导出的SWF,Yogda则依次展开左边的树,来到这里:
Public function _fla:frame1();
看右面(我只是右键复制的):
function 0000 *():
{
// Max stack : 5
// Local count : 1
// Scope depth : 10
// Max Scope depth : 11
// Exception Count : 0
// Trait Count : 0
// Code Length : 65 bytes.
0 getlocal0
1 pushscope
2 getlocal0
4 pushbyte 60
6 initproperty _w
7 getlocal0
9 pushbyte 60
11 initproperty _h
12 getlocal0
14 getlex graphics
16 initproperty gr
17 getlocal0
19 getproperty gr
22 callpropvoid clear,0
23 getlocal0
25 getproperty gr
27 pushbyte 1
29 pushint 1
32 callpropvoid lineStyle,2
33 getlocal0
35 getproperty gr
37 pushint 2
39 pushdouble 1
42 callpropvoid beginFill,2
43 getlocal0
45 getproperty gr
47 pushbyte 20
48 dup
49 getlocal0
51 getproperty _w
52 getlocal0
54 getproperty _h
57 callpropvoid drawRect,4
58 getlocal0
60 getproperty gr
63 callpropvoid endFill,0
64 returnvoid
}
看见红的那几行了吧(当然你编辑器上不是红的,看行号,要是没红的,看下面),就是gr.lineStyle(1, 0x999999);反编译的结果了,0x999999呢?除了byte,bool类型,其他的一般都被索引代替了,可以翻看左面的Integers,里面依次有编号,但是编号和这里的编号不对应,应该+1。 不扯远了,再次对比:
gr.lineStyle(1, 0x999999);
就是:
23 getlocal0
25 getproperty gr
27 pushbyte 1
29 pushint 1
32 callpropvoid lineStyle,2
注:前面的数字不是行号,是字节号。
翻译一下,注意对照看ABC:
23,其语义应理解为This.
25,Gr.
27,咱就不说堆栈,参数1
29,咱还不说堆栈,参数2
32,调用
前面的俩参数,是给后面调用用的。很明白了吧。所以,我们想把这鬼子丫的改成清晰的黑框子,很易:
双击29那行,修改为pushbyte 1,点OK保存。然后小鼠标轻点工具栏上内保存按钮,重新运行那个new.swf,丫的黑了吧!
很易是不,不过还得说,我们还得用WINHEX,因为我习惯于WINHEX,直接CTRL+ALT+X查找一串标志性的16进制,然后去编辑——2D 01改为24 01……晕了吧,开个玩笑。