反編譯調(diào)試flash的程序,有了Yogda,開(kāi)發(fā)人員可以修改/優(yōu)化的Adobe Flash應(yīng)用程序編譯后的字節(jié)碼。
說(shuō)起來(lái)修改FLASH游戲,理論上應(yīng)該可以找到更好的解決辦法——直接去修改二次編譯后的代碼,那樣就可以為所欲為了,咕~~(╯﹏╰)b。有位老大爺說(shuō)得好,工欲善其事必先利其器!這東東嘎哈的不用說(shuō)了,這丫的可以直接修改代碼……咕~~(╯﹏╰)b挺好挺強(qiáng)大。
yogda詳細(xì)介紹:
Yogda是一個(gè)AVM2 bytecode級(jí)的swf編輯器。
由著名flash開(kāi)源3D引擎Yogurt3d的開(kāi)發(fā)者開(kāi)發(fā),但Yogda是一個(gè)商業(yè)軟件。
使用Yogda可更改/替換swf的tag,并可以直接對(duì)swf的doabc做匯編級(jí)別的修改(AVM2時(shí)代的flasm?),
可以把它看成一個(gè)高級(jí)一點(diǎn)的"閃客之錘"。
這意味著swf加解密又多了一個(gè)方便可靠的工具。
反編譯:
用你選擇的反編譯器打開(kāi)導(dǎo)出的SWF,Yogda則依次展開(kāi)左邊的樹(shù),來(lái)到這里:
Public function _fla:frame1();
看右面(我只是右鍵復(fù)制的):
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
}
看見(jiàn)紅的那幾行了吧(當(dāng)然你編輯器上不是紅的,看行號(hào),要是沒(méi)紅的,看下面),就是gr.lineStyle(1, 0x999999);反編譯的結(jié)果了,0x999999呢?除了byte,bool類型,其他的一般都被索引代替了,可以翻看左面的Integers,里面依次有編號(hào),但是編號(hào)和這里的編號(hào)不對(duì)應(yīng),應(yīng)該+1。 不扯遠(yuǎn)了,再次對(duì)比:
gr.lineStyle(1, 0x999999);
就是:
23 getlocal0
25 getproperty gr
27 pushbyte 1
29 pushint 1
32 callpropvoid lineStyle,2
注:前面的數(shù)字不是行號(hào),是字節(jié)號(hào)。
翻譯一下,注意對(duì)照看ABC:
23,其語(yǔ)義應(yīng)理解為T(mén)his.
25,Gr.
27,咱就不說(shuō)堆棧,參數(shù)1
29,咱還不說(shuō)堆棧,參數(shù)2
32,調(diào)用
前面的倆參數(shù),是給后面調(diào)用用的。很明白了吧。所以,我們想把這鬼子丫的改成清晰的黑框子,很易:
雙擊29那行,修改為pushbyte 1,點(diǎn)OK保存。然后小鼠標(biāo)輕點(diǎn)工具欄上內(nèi)保存按鈕,重新運(yùn)行那個(gè)new.swf,丫的黑了吧!
很易是不,不過(guò)還得說(shuō),我們還得用WINHEX,因?yàn)槲伊?xí)慣于WINHEX,直接CTRL+ALT+X查找一串標(biāo)志性的16進(jìn)制,然后去編輯——2D 01改為24 01……暈了吧,開(kāi)個(gè)玩笑。