反编译调试flash的程序,有了Yogda,开发人员可以修改/优化的Adobe Flash应用程序编译后的字节码。
说起来修改FLASH游戏,理论上应该可以找到更好的解决办法——直接去修改二次编译后的代码,那样就可以为所欲为了,咕~~(╯﹏╰)b。有位老大爷说得好,工欲善其事必先利其器!这东东嘎哈的不用说了,这丫的可以直接修改代码……咕~~(╯﹏╰)b挺好挺强大。
Yogda是一个M2 bytecode级的swf编辑器。由著名flash开源3D引擎Yogurt3d的开发者开发,但Yogda是一个商业软件。使用Yogda可更改/替换swf的tag,并可以直接对swf的doabc做汇编级别的修改(M2时代的fla?),可以把它看成一个高级一点的闪客之锤。这意味着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 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……晕了吧,开个玩笑。
电竞地带