as3加密入門-3降低反編譯代碼可讀性的代碼書寫習慣

as3加密入門-3降低反編譯代碼可讀性的代碼書寫習慣

from: http://bbs.9ria.com/viewthread.php?tid=47918

最近在考慮SWF安全方面的技術,看到一些關於這方面不錯的技術文章,記錄下來方便查閱.以下爲轉載內容:

   

    這裏不推薦源代碼中使用無意義的變量名,如

  1. var asd=new Sprite();function asdf();
複製代碼

源代碼中儘量使用有意義的變量名,然後使用第二部分方法混淆即可。
我推薦的書寫習慣(針對代碼混淆):

1.object vs class
儘量少聲明class,絕大多時候,一個object對象({})就完全夠用了:
使用類:

  1. public class mySprite extends Sprite
  2. {
  3. public var vx;
  4. public var vy;
  5. public function mySprite()
  6. ...
  7. }
  8. var myinstc=new mySprite();
複製代碼

使用object(等價寫法):

  1. function newmySprite()
  2. {
  3. var mySprite=
  4. {vx:,vy:,cavans:new Sprite()};
  5. return mySprite;
  6. }
  7. var myinstc=newmySprite();
複製代碼

2.include vs import
include是我最喜歡用的關鍵字
少寫類,我們就可以多用include預編譯指令。
一個極端的做法是隻寫一個類“public class Main extends Sprite”,使用object代替class,將所有函數、變量作爲Main類的類函數、屬性。將相關聯的函數、變量分別寫進一個獨立的.as文件中,最後在Main.as中將這些.as文件include進來。這樣編譯出的swf只有一個類文件,
反編譯出的代碼也就一個超長的Main.as文件,可能含有幾十個變量和函數,極不便於閱讀,從而達到混淆效果。而如果聲明很多類,那反編譯出的代碼結構就會很清晰,各個包、類一目瞭然,很容易被破解者重複利用。


3.[]語法(By Zevan)
不推薦使用,有可能降低swf運行效率。但如果該部分代碼只運行一次,對效率要求不高,可嘗試一下:

  1. graphics.lineStyle(0,0);
  2. graphics[["drawEllipse", "drawRect"][int(Math.random()*2)]](Math.random()*400, Math.random()*300, Math.random()*100,Math.random()*100);
複製代碼

(可將"drawEllipse", "drawRect"賦值給自聲明的變量達到混淆效果):

  1. var drawEllipse="drawRect";
  2. graphics[drawEllipse] (Math.random()*400, Math.random()*300, Math.random()*100,Math.random()*100);
複製代碼

正常寫法

  1. var xp:Number, yp:Number, w:Number, h:Number;
  2.   graphics.lineStyle(0,0);
  3.     xp = Math.random()*400;
  4.     yp = Math.random()*300;
  5.     w = Math.random()*100;
  6. h = Math.random()*100;
  7. var choice:int= int(Math.random()*2)];
  8. if(choice=0)graphics.drawEllipse (xp, yp, w, h);
  9. else
  10. graphics.drawRect(xp, yp, w, h);
複製代碼

其實[]語法是as3比較強大的一種功能,在很多時候使用起來是非常方便的。
[]語法讓我們可以使用字符串來調用as3函數,我們甚至可以利用[]語法寫一個as3代碼解釋器,讓as3代碼不經編譯而直接運行於swf中,
彷彿在flashplayer中運行了一個自定義的flashplayer,而這個自定義的flashplayer可以使用自己定義的語法,混淆效果當然沒得說(當然執行效率也會很低)。
附件AS3Player.swf就是這樣一個簡單的例子。
AS3Player.swf (2.64 KB)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章