ããã«ã¡ã¯ã ãã©ãã·ã¥ã¢ãââãªã±ãŒã·ã§ã³ã®éçºã§äœ¿çšãããã³ãŒã調æ»ãè©æ¬ºãçé£ããä¿è·ããããã®ããã€ãã®æ¹æ³ãšããããã®ããã€ããåé¿ããæ¹æ³ã«ã€ããŠã話ããŸãã
çŸåšããã®ãããã¯ã«é¢ããå€ãã®åªãããã¬ãŒã³ããŒã·ã§ã³ãšäœåããããŸãïŒèšäºã®æåŸã®ãªã³ã¯ãåç §ïŒããããã€ãã®ãã¥ã¢ã³ã¹ããã詳现ã«èª¬æãããããã¯ã«é¢ããå€ãã®æ å ±ã1ãæã«ãŸãšããããšæããŸãã å°ãªããšãç§ã¯ãããããããšããŸãã
å人çãªå©çãèäœæš©äŸµå®³ãã©ã€ã»ã³ã¹å¥çŽãããã³ããããåœã®æ³åŸãååŸããããã«ããã®èšäºã«èšèŒãããŠãããã¹ãŠã®ãã®ã決ããŠäœ¿çšããªãã§ãã ããã åºåã¯ãããŸããããã¹ãŠã¯å人çãªå¥œã¿ãšçµéšã«åºã¥ããŠæžãããŠããŸãã ãã®èšäºã®ã³ãŒãäŸã¯ç°¡åãªäŸã§ãããããèŠããŠãããŠãã ããã
-ã¯ããã«
ãã©ãã·ã¥ã®äžçïŒã¹ããŒãããã¡ããã¯ã©ã€ã¢ã³ãã«ã€ããŠïŒã§ã¯ãäŸµå ¥è ã«å¯Ÿããä¿è·ã¯ä¿èšŒãããŠããŸãããäžå¹žãªãã®ã ããé€å€ããæåŸãŸã§è¡ãããšã«æ±ºãã人ã®äœæ¥ãè€éã«ããããšãã§ããŸãã æªè ã®è²»çšãšæéãå¯èœãªéãé«ãããè²»çšãã§ããã ãäœãããããã«åªåããããšã¯äŸ¡å€ããããŸãã çæ³çã«ã¯ãæ»æè ãé害ç©ãåé¿ãããããããŒãããè³Œå ¥ãŸãã¯æžã蟌ã¿ãç°¡åãé«éãå®äŸ¡ã«ã§ããããã«ããŠãã ããã
ä¿è·ã·ã¹ãã ãšãã€ãã¹/ä¿è·è§£é€ã·ã¹ãã ã®éã®éäºã¯é²è¡äžã§ãã ããã¯ãActionScript3ïŒä»¥éAS3ïŒã³ãŒããã³ã³ãã€ã«ãããSWF圢åŒãšãã€ãã³ãŒãïŒ ãã ã ãã ã ããã§ãïŒã®ä»æ§ã«ã¢ã¯ã»ã¹ã§ãã人ã誰ã§ãã¢ã¯ã»ã¹ã§ãããšããäºå®ã«ãããã®ã§ãã ããã«ãããSWFãã¡ã€ã«ãã³ã³ããŒãã³ãïŒã°ã©ãã£ãã¯ããµãŠã³ãããã€ãã³ãŒããªã©ïŒã«è§£æããããã®ç¬èªã®ã©ã€ãã©ãªãšã¢ããªã±ãŒã·ã§ã³ãèªç±ã«èšè¿°ã§ãããã€ãã³ãŒãã䜿çšããŠäœã§ãã§ããŸãã次ã«äŸã瀺ããŸãã
- ABCïŒActionScriptByteodeïŒãã¡ã€ã«ãéã³ã³ãã€ã«ããããã®ãã€ãã³ãŒãã¢ãã©ã€ã¶ãŒãäœæããŸããããã¯ãã³ã³ãã€ã«ãããAS3 SWFãã¡ã€ã«ã®ãDoABCãã¿ã°ã«ãããŸãïŒAS2ã§ã¯ãéåžžãã³ãŒãã¯ãDoActionãããã³ãDoInitActionãã¿ã°ã«ãããŸãïŒã
- ããšãã°ãç¬èªã®ç®çã§éã³ã³ãã€ã«ã®è©³çŽ°ã䜿çšã§ããããŸããŸãªææ³ã䜿çšããŠãã€ãã³ãŒããé£èªåããããã«ããã€ãã³ãŒããå€æŽããã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
- ã³ã³ãã€ã«æžã¿ã®SWFãã¡ã€ã«ã®ãã€ãã³ãŒããå€æŽïŒãããïŒã§ããã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
- FPãå€æŽããŠãå®è¡å¯èœãã€ãã³ãŒããåºåïŒãã¬ãŒã¹ïŒããŸãã
-ã³ã³ãã³ã
ããã€ãã®æ¹æ³ïŒå®è£ ã ãã§ãªããæå³ããç®çãç°ãªãïŒã®ããã€ããåé¿ããäŸãšãã³ãŒãã調ã¹ããšãã«äœ¿çšã§ããããã€ãã®ããŒã«ãæ€èšããŸãã
- URLããã¯ïŒ1ã€ãŸãã¯è€æ°ã®ãã¡ã€ã³ã«ãã€ã³ãïŒãããŒã«ã«èµ·åã«å¯Ÿããä¿è·
- å€æ°ããªãœãŒã¹ãããã³ã¯ã©ã¹
- éãã
- SWFãããã³ã°
- åçãªã³ãŒãçæãšSWFç·šé
- ã³ãŒãã®é£èªåãšããŒã¿ã®é èœ
- ã¡ã¢ãªããã®SWFãã¡ã€ã«ã®ä¿åã«å¯Ÿããä¿è·
- Flash ExplorerããŒã«ããã
-1. URLããã¯ãããŒã«ã«èµ·åã«å¯Ÿããä¿è·
ç®æšã¯ãSWFãã¡ã€ã«ãç¹å®ã®æ¡ä»¶äžãããšãã°1ã€ä»¥äžã®ãã¡ã€ã³ã§ã®ã¿æ©èœãããããšããŸãã¯ããŒã«ã«ã§ã®èµ·åãçŠæ¢ããããšã§ãã
å¿ èŠãªå Žæã«SWFãèµ·åãããŠããªãããšã確èªããåŸãå¿ èŠã«å¿ããŠãã®åäœãããã°ã©ã ã§ããŸãã äžèŠãªãã¡ã€ã³\ URLããµãŒããŒã«éä¿¡ããŠïŒlocalhostã§ãªãå ŽåïŒãããããäœããã®ãã°ã«å ¥åã§ããŸãã
å ã®ãã¡ã€ã³ïŒSWFãã¡ã€ã«ãæ©èœããïŒãæå·åããã圢åŒã§ä¿æããããã¯ã©ã€ã¢ã³ãã«ãŸã£ããä¿æããªãïŒãµãŒããŒãããæå·åããã圢åŒã§åãå ¥ããïŒããšããå§ãããŸãã
ãã¡ã€ã³ã«ãã€ã³ãããŠããŒã«ã«ã¹ã¿ãŒãã¢ããã決å®ããããã€ãã®æ¹æ³ãèŠãŠã¿ãŸãããã
çŸåšã®URL \ãã¡ã€ã³ãååŸããŠãã¡ã€ã³ã«ãã€ã³ããã
ããã¯ããã¡ã€ã³ã«ãã€ã³ãããæãäžè¬çãªæ¹æ³ã§ãã çŸåšã®URLãŸãã¯ãã¡ã€ã³ãååŸããã«ã¯ãé垞次ã䜿çšããŸãã
aïŒ loaderInfo ïŒ
-
root.loaderInfo.url
ïŒ_root._url
-AS2ã®å ŽåïŒ_root._url
ãã¡ã€ã«èªäœãžã®ãã¹ãå«ãŸããŸãroot.loaderInfo.url
å¥ã®SWFã䜿çšããŠããŒããããå ŽåãããŒããããSWFã®root.loaderInfo.url
åããŸãŸã§ãã -
root.loaderInfo.loaderURL
-SWFãã¡ã€ã«èªäœãžã®ãã¹ããŸãã¯å¥ã®SWFãã¡ã€ã«ã䜿çšããŠããŒããããå Žåã¯ããŒããŒãžã®ãã¹ãå«ãŸããŸã -
root.loaderInfo.loader
-Loaderã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãžã®ãªã³ã¯ããŸãã¯SWFãå€éšããŒããŒã«ãã£ãŠããŒããããªãã£ãå Žåã¯nullãå«ãŸããŸãïŒroot.loaderInfo.loader == root.parent
ãããã³SWFããªãå Žåã¯root.parent == stage
泚æããŠãã ããïŒããŒãããŒããŒïŒã ããã«ãããŒãããŒããŒãä¿¡é Œã§ãããŸãŒã³ïŒå¥ã®SecurityDomainã«ããïŒã«ãªãå Žåãèªã¿èŸŒãŸããSWFããroot.loaderInfo.loader
ãŸãã¯root.parent
ã«ã¢ã¯ã»ã¹ãããšãSecurityErroräŸå€ãroot.parent
ããã®ã¡ãã»ãŒãžã«ã¯ããŒãããŒããŒãžã®ãªã³ã¯ãå«ãŸããŸã
bïŒ LocalConnection ïŒ LocalConnection.domainã䜿çšããŠãSWFãã¡ã€ã«ãçŸåšå®è¡ãããŠãããã¡ã€ã³ã®ååãååŸã§ããŸãã
å€éšSWFãSWFã®ãã¡ã€ã³ä»¥å€ã®ãã¡ã€ã³ã«ããã次ã®ããã«çŸåšã®ã»ãã¥ãªãã£ãã¡ã€ã³ã«ãã®SWFãã¢ããããŒãããå ŽåïŒ
var context:LoaderContext = new LoaderContext(true); context.securityDomain = SecurityDomain.currentDomain; loader.load(new URLRequest(url), context);
ãŸãã¯Loader.loadBytes
ã䜿çšãã
LocalConnection.domain
ããŒããããSWFã®
LocalConnection.domain
SWFã®ãã¡ã€ã³ãå«ãŸããŸãã
SWFãã¡ã€ã«èªäœã移åããã«éãã€ãã£ããã¡ã€ã³ã®HTMLããŒãžã«SWFãåã蟌ãã å Žåããã¹ã¯å€æŽãããŸããã
cïŒ ExternalInterface ïŒJavaScriptïŒä»¥éJSïŒã䜿çšã§ããŸãã ããšãã°ãSWFãåã蟌ãŸããŠããçŸåšã®ããŒãžãžã®ãã¹ã¯ã
window.location.href
ã䜿çšããŠååŸã§ããŸãã JSãåŒã³åºãã«ã¯ã
ExternalInterface.call
䜿çšããŸãã ãªããªã æåã®ãã©ã¡ãŒã¿ãŒãã¡ãœããã®ååãåãã
window.location.href
ãããããã£ã§ããå Žåã¯ãtoStringïŒïŒã䜿çšããå¿ èŠããããŸãã
var myHTMLUrl:String = ExternalInterface.call("window.location.href.toString");
ã¡ãªã¿ã«ããã¡ã€ã³ã¯ExternalInterface.call
ãããååŸã§ããŸãã
var domain:String = ExternalInterface.call ("eval", "document.domain");
ExternalInterfaceã䜿çšããŠãSWFãé 眮ãããŠããããŒãžã§JSé¢æ°ãåŒã³åºãããšãã§ããŸã-æ¢åã®ãã®ãševalã䜿çšããŠèªåã§äœæãããã®ã®äž¡æ¹ïŒ
var customJavaScriptCode:String = "function customJS(){alert('Yes, this is a custom JS');}"; ExternalInterface.call("eval", customJavaScriptCode); ExternalInterface.call("customJS");
ãŸãããã®æ¹æ³ã«ã¯JSãå¿
èŠã§ããããšãå¿ããªãã§ãã ãããããã¯åžžã«å¯èœã§ã¯ãããŸããã
SWFãã¡ã€ã«èªäœã移åããã«ãéãã€ãã£ããã¡ã€ã³ã®HTMLããŒãžãžã®åã蟌ã¿ããã€ãã¹ããããšãããšã
ExternalInterface.call
ã®å®è¡ã«ããSecurityErrorãçæãããŸãã
dïŒ FlashVars ïŒHTMLããŒãžã«SWFãé 眮ãããšãããŸãã¯å¥ã®SWFããèªã¿èŸŒããšãã«ãFlashVarsãä»ããŠãã¡ã€ã³ãä»ã®ããŒã¿ãžã®ãã¹ã転éããå ŽåããããŸãïŒããã¯ããã¡ã€ã³ïŒïŒ
FlashVarsã¯ãã©ã¡ãŒã¿ãŒãšããŠæž¡ãããšãã§ããŸãã
<object ...> <param name="FlashVars" value="var1=value1&var2=value2" /> </object>
ãŸãã¯ãã¡ã€ã«åã§ïŒ
<object ...> <param name="movie" value="somecoolmovie.swf? var1=value1&var2=value2" /> </object>
次ã®ããã«FlashVarsã«ã¢ã¯ã»ã¹ã§ããŸãã
root.loaderInfo.parameters.var1
_root.var1
çŸåšã®URLãŸãã¯ãã¡ã€ã³ãååŸããã«ãã¡ã€ã³ã«ãã€ã³ããã
ãã®æ¹æ³ã¯ãã¯ãã¹ãã¡ã€ã³ã»ãã¥ãªãã£ããªã·ãŒã«åºã¥ããŠããŸãã èµ·åæã«ãã€ã³ããããSWFã¯ãcrossdomain.xmlãã¡ã€ã«ãååšããç¹å®ã®ãã¹ããããç¹å¥ãªããããŒãã¡ã€ã«ãããŠã³ããŒãããããšããŸãããã®éãSWFã®1ã€ã«ããä¿¡é Œã§ãããã¡ã€ã³ããã®ã¿ãªãœãŒã¹ãããŠã³ããŒãã§ããŸãã ãããã£ãŠããçãŸãããSWFãã¡ã€ã«ãcrossdomain.xmlã§æå®ãããŠããªããã¡ã€ã³ã®ãç¹å¥ãªããã¡ã€ã«ã«ã¢ã¯ã»ã¹ãããšããµã³ãããã¯ã¹ã»ãã¥ãªãã£éåãçºçãããç¹å¥ãªããã¡ã€ã«ã¯ããŒããããŸããã ããã«ãäŸå€ãã¹ããŒãããLoaderInfoã¯ã©ã¹ïŒ
Loader.contentLoaderInfo
ïŒã®ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠ
SecurityErrorEvent.SECURITY_ERROR
ã€ãã³ããçºç
Loader.contentLoaderInfo
ãŸãã ããã«ãããSWFãæ¬æ¥ããã¹ãå Žæã«ãªãããšãããããŸãã
ãç¹å¥ãªããã¡ã€ã«ã¯ã眮æãé²ãããã«çŽæ¥ã¢ã¯ã»ã¹ããå¿ èŠããããŸãã
ããŒã«ã«ããªã¬ãŒå®çŸ©
SWFã®ããŒã«ã«èµ·åã¯ãSWFãŸãã¯HTMLãžã®ãªã³ã¯ãååŸãããµãã¹ããªã³ã°ãfileïŒ//ãã®ååšã確èªããããšã§å€æã§ããŸãã
SWFãHTMLã®å€éšã§å®è¡ãããå Žåã
ExternalInterface.call
ã¡ãœããã¯nullãè¿ããŸãã
Capabilities.playerType
ã䜿çšããŠãSWFãå®è¡ãããFPã®ã¿ã€ãã確èªããããšãã§ããŸãã
- ãActiveXã-ããšãã°ãIEã§äœ¿çšãããActiveX FPã§åçããå Žå
- ããã¹ã¯ãããã-Adobe AIRã©ã³ã¿ã€ã çšïŒ
Capabilities.playerType
ããããã£ããPlugInãã«èšå®ãããHTMLããŒãžã§ããŒããããSWFã³ã³ãã³ããé€ãïŒ - ãå€éšã-å€éšFPãä»ããŠåçãããšãããŸãã¯Flash Professional IDEããèµ·åãããšã
- ããã©ã°ã€ã³ã-ãã©ãŠã¶ãŒãã©ã°ã€ã³ãä»ããŠåçããå ŽåïŒããã³AIRã¢ããªã±ãŒã·ã§ã³ã®HTMLããŒãžã§ããŒããããSWFã³ã³ãã³ãã®å ŽåïŒ
- "StandAlone" -ã¹ã¿ã³ãã¢ãã³FPã§åçããå ŽåïŒãã©ãŠã¶ãŒã§ããŒã«ã«SWFãã¡ã€ã«ãéå§ããå Žåãå€ã¯
Capabilities.playerType != "StandAlone"
ïŒ
Security.sandboxType
ãš
Security.REMOTE
æ¯èŒããããšã§ãã
ãããã®ãã¹ãŠã®æ¹æ³ã«ã¯é·æãšçæããããŸãããµãŒããŒãå¿ èŠãšããªããã®ããããŸããããã€ã³ãã£ã³ã°ãè¡ããã¡ã€ã³ãå€æŽããéã«SWFãã¡ã€ã«ãåã³ã³ãã€ã«ããå¿ èŠããããã®ããããŸãã
èšäºã®ã³ãŒãïŒã¢ãŒã«ã€ããžã®ãªã³ã¯ã¯èšäºã®æåŸã«ãããŸãïŒã®ã1-URL Lockããã©ã«ããŒã«ã説æãããŠããããã€ãã®ã¡ãœããã®å®è£ ã®äŸãšãã¡ãœããã®1ã€ã«å¯Ÿãããããã®ããã€ãã®äŸããããŸãã
泚æïŒ ã»ãšãã©ã®URLããã¯ããªãã¯ã¯ãDenwerãXAMPPãªã©ã®ããŒã«ã«ãµãŒããŒã§äœæ¥ããããšã§åé¿ã§ããŸãã
-2.å€æ°ããªãœãŒã¹ãããã³ã¯ã©ã¹
éåžžãå€æ°ãšãªãœãŒã¹ã¯ã²ãŒã ãäœæãããšãã«åŠçãããŸãã ãã¡ãããéèŠãªããžãã¯ãããŒã¿ãå€æ°ãã¯ã©ã€ã¢ã³ãã®å€éšã«çœ®ãæ¹ãè¯ãã®ã§ãããæ®å¿µãªãããããã¯åžžã«å¯èœãšã¯éããŸããããã®ãããè©æ¬ºã®æãç©Žã®æ°ãæžããæ¹æ³ãèããå¿ èŠããããŸãã
å€æ°ã®ç·šéã»ã©é »ç¹ã«ãªãœãŒã¹ãšã¯ã©ã¹ã®çœ®æã䜿çšããŸããããããã§ã䜿çšããŸãããã®ãããããããã©ã®ããã«äœ¿çšããã©ã®ããã«é²æ¢ã§ãããã説æããŸãïŒããããèªåãä¿è·ããããšã¯äžå¯èœã§ãïŒã
å¯å€ä¿è·
å€æ°ã¯é衚瀺ã«ããå€æŽããä¿è·ããå¿ èŠããããŸãã é衚瀺ã«ããæãç°¡åãªæ¹æ³ã¯ãåºæ¬ã¯ã©ã¹ã®åšãã«ç¬èªã®ã©ãããŒãäœæããããšã§ãã
ããšãã°ãCryptIntãCryptStringãªã©ã ã¯ã©ã¹èªäœã«ã¯ãå€ãåãåã£ãŠè¿ããæå·åãŸãã¯åŸ©å·åããã¡ãœãããèšè¿°ã§ããŸããããã«ãããã¡ã¢ãªå ã®å€æ°ãé衚瀺ã«ãªããŸãã ã2-MemoryïŒDomain \ MemoryExampleããã©ã«ããŒå ã®èšäºã®ã³ãŒãã«ããCryptIntããã³CryptStringã¯ã©ã¹ã®å®è£ ãèŠãŠãã ããã
ãŸããå€æ°ã®å€ãé衚瀺ã«ããããã«ãå€æ°ãã³ã³ããŒãã³ãã«å解ããæ··åãã·ãããªã©ããããšãã§ããŸãã é ãããå€ãããå€æ°ããå¥ã®å€æ°ã«ç§»åããGCïŒã¬ããŒãžã³ã¬ã¯ã¿ãŒïŒã«äœ¿çšãããå€æ°ã解æŸãããããªãã€ãã©ã€ã³ãäœæããããšãã§ããŸãã ByteArrayã¯ããããããAlchemyãïŒ Azothã® fastmemã Apparatã® MemoryïŒã䜿çšããŠããã®ãããªãªãµã€ã¯ã«å¯èœãªå€æ°ã®ãäžæã¹ãã¬ãŒãžããšããŠäœ¿çšã§ããŸãã
ãããŠãå€æ°ãèŠã€ãã£ãŠãå€æŽã§ããªãããã«ãããšãã°ãå€æ°ã®å€ãåç §ãšæ¯èŒããããšãã§ããŸãã ããã«ãå€æ°ã®å€æŽæãŸãã¯å€æ°ãžã®ã¢ã¯ã»ã¹æãããã³æå®ãããééã®äž¡æ¹ã§æ¯èŒãè¡ãããšãã§ããŸãã
ãªãœãŒã¹äº€æ
SWFå šäœã眮ãæãããããã©ãŠã¶ãã£ãã·ã¥ã«å€éšãã¡ã€ã«ãããŒãã§ããŸãã åœã®SWFãã¡ã€ã«ãŸãã¯ã¹ããŒãã£ã³ã°ããããªãœãŒã¹ã§ã¯ãã°ã©ãã£ãã¯ã¹ïŒãµã€ãºãéæ床ãã·ããããã¬ãŒã ã¬ãŒããªã©ïŒããã³ã³ãŒãïŒããã¯äœã§ãããããªãïŒã«å€æŽãå ããããšãã§ããŸãã
æªè ã®ã¿ã¹ã¯ãè€éã«ããïŒãªãããŸããã身ãå®ãããšã¯äžå¯èœã§ãïŒããã«ãããŠã³ããŒãããããŒã¿ãšèªåã®ä¿¡authenticæ§ãæ€èšŒããå¿ èŠããããŸã-ããšãã°ãMD5ãä¿åããŠèµ·åæã«æ¯èŒããMD5ãæå·åããã圢ã§ã©ããã«ä¿åããå¿ èŠããããŸãã
SWFããµãŒããŒãšéä¿¡ããå Žå-é衚瀺ã®ãã§ãã¯ãå®è¡ãã-ããšãã°ãããŠã³ããŒããããªãœãŒã¹ãMD5ãµãŒããŒã«éä¿¡ããŸãã
å¯èœã§ããã°ãã¹ããŒãã£ã³ã°ãé²ãããã«ãå€éšSWFããã³ãã®ä»ã®ãªãœãŒã¹ãã¡ã€ã³SWFã®æ¬äœã«æå·åããã圢åŒã§ä¿åããèªåããåé€ããåŸã«
Loader.loadBytes
ã§ããŒãã§ããŸãã
Loader.loadBytes
ã¯ãããŠã³ããŒãããããŒã¿ããã©ãŠã¶ãŒã®ãã£ãã·ã¥ã«ä¿åããŸããããåæã«ã¡ã€ã³SWFã¯ãã£ãã·ã¥ãããŸãã ãã®ãããªå Žåã®
Loader.loadBytes
䜿çšã«é¢ãã詳现ã¯ãèšäºã®æ¬¡ã®ã»ã¯ã·ã§ã³ã®ããããã«èšèŒãããŠããŸãã
æå·åããã圢åŒã®ãªãœãŒã¹ããã®ä»ã®SWFãã¡ã€ã«ããµãŒããŒã«èŠæ±ãããããã埩å·åããŠ
Loader.loadBytes
ä»ããŠããŠã³ããŒãããããšãã§ããŸãã
ã¯ã©ã¹ã®ãªãŒããŒã©ã€ã
ããããèªåãå®ãããšãäžå¯èœã ãšããã«èšããŸãã
ApplicationDomain
ããŒããŒã«ã¿ãŒã²ããSWFãããŒãããããšã«ãããã¯ã©ã¹ã眮ãæããããšãã§ããŸãã ãããè¡ãã«ã¯ã眮ãæããããã¯ã©ã¹ãšåãååã®ã¯ã©ã¹ãå«ãããŒãããŒããŒãäœæããSWFããã¡ã€ã³ã«ããŒãããŸãã
var appDomain:ApplicationDomain = ApplicationDomain.currentDomain; var swfLoader:Loader = new Loader(); swfLoader.load(new URLRequest('original.swf'), new LoaderContext(false, appDomain));
ãããã£ãŠãããŒããããSWFã¯ãããŒããŒããã¯ã©ã¹ãšãéä¿¡ãããããšã匷å¶ãããŸãã å®è£
äŸã¯ãã2-MemoryïŒDomain \ applicationDomainããã©ã«ããŒã«ããèšäºã®ã³ãŒãã§ç¢ºèªã§ããŸãã åããã³ãã¡ã€ã³ãžã®ã¢ããããŒãã䜿çšããã¯ã©ã¹çœ®æã®äŸããããŸãã ãç ç²è
ãã«ã¯ã茻茳ããã§ãã¯ããããã®ããã€ãã®ãªãã·ã§ã³ããããŸãïŒããããå«ãŸããã¯ã©ã¹ã®çœ®æãããããŸãïŒã
ãããé²ãã«ã¯ãç¬èªã®ããŒããŒãä»ããŠã¡ã€ã³SWFãæ°ããApplicationDomainã«ããŒãããŸãã
var appDomain:ApplicationDomain = new ApplicationDomain(null); var swfLoader:Loader = new Loader(); swfLoader.load(new URLRequest('original.swf'), new LoaderContext(false, appDomain));
ããŒãããŒããŒãšã¡ã€ã³SWFã®éã«åŒ·åãªæ¥ç¶ã確ç«ããŠããããããåé¢ãããããšã¯éåžžã«å°é£ã§ãã ãã ããããŒãããŒãã眮ãæããŠããã®æ¥ç¶ãç¶æã§ããå Žåããããã®åªåã¯ç¡é§ã«ãªããŸãã
æ¬åœã«éèŠãªå€æ°ãšããŒã¿ã®ã¿ãä¿è·ããã¡ãœãããçµã¿åãããŸãã
å¯èœã§ããã°ããµãŒããŒã®éèŠãªå€æ°ãæäœããããžãã¯ã䜿çšãããªãœãŒã¹ã®ãµãã¹ã¯ã©ã€ããšå€æŽã®ç¢ºèªãè¡ããŸãã
-3.éãã
ãããã¯ãã³ããŒé²æ¢ãéæ³äœ¿çšãããã³åºåç®çã«äœ¿çšã§ããŸãã
ãããã®ã¿ã€ãã®äžéšã次ã«ç€ºããŸãã
- èŠèªæ§ã®é«ãèŠçŽ ïŒããã¹ããããŽãç»åãªã©
ã©ãã«ããã¯ãã ä»ãããããŠããå ŽåïŒSWFã®ç»åãšã°ã©ãã£ãã¯ã®äž¡æ¹ã«é©çšãããŸãïŒãã©ãã«ã«é©çšãããããŒã¿ãç·šéããŠæåã§åé€ããå¿ èŠããããŸããããã¯éåžžã«å°é£ãŸãã¯å®å šã«äžå¯èœãªäœæ¥ã§ãã
ããšãã°ãSWFã®æäžäœã®ãã¬ã€ã€ãŒãã«ã©ãã«ãåå¥ã«é 眮ãããŠããïŒãŸãã¯ããã°ã©ã ã§è¿œå ãããŠããïŒå Žåãã©ãã«ãæ éã«åé€ãããå¯èœæ§ã¯ã¯ããã«é«ããªããŸãã - é ãã¢ã€ãã ã 圌ãã¯ã©ãã«ã§ãããããšãã§ããŸãã ãã®ãããªéãããåãé€ãããšã¯ãã°ãã°äžå¯èœã§ãããªããªã äœæè 以å€ã¯èª°ãã©ããèŠãã¹ããããããªãã§ãããã ãããã®ããŒã¯ã¯ãããããå®éã«ããŒã¯ã§ãããããããç¹°ãè¿ãããšãäžå¯èœã§ããããšãæ³å»·ã§èšŒæã§ããããã«ããããã«äžæã§ãªããã°ãªããŸããã
-4. SWFã®ãããã±ãŒãžåã
SWFãå®å šã«é ãããšã¯ã§ããŸããããäžéãªæ»æè ã«ããç®çã®SWFã®æ€çŽ¢ãè€éã«ããå¯èœæ§ã®ããéåžžã«ããç¥ãããæ¹æ³ãå°ãªããšã1ã€ãããŸãã
Embedã¿ã°ã䜿çšããŠãããšãã°æ¬¡ã®ããã«ãSWFãflexãŸãã¯flashãããžã§ã¯ãã«è¿œå ã§ããŸãã
[Embed(source = "./dummy.swf", mimeType = "application/octet-stream")] private var _content:Class;
ãã®æ¹æ³ã§è¿œå ããããã¡ã€ã«ïŒè€æ°ã®Embedã¿ã°ãããå Žåãä»»æã®ãã€ããªãã¡ã€ã«ãŸãã¯è€æ°ã®ãã¡ã€ã«ïŒãDefineBinaryDataã¿ã°ã«é
眮ãããŸãã
次ã«ã次ã®ããã«
Loader.loadBytes
ã䜿çšããŠããã®æ¹æ³ã§ãããã¯ãããããã¡ã€ã«ãããŒãã§ããŸãã
var someFile:ByteArray = new _content(); loader.loadBytes(someFile);
SWFãã¡ã€ã«ã®è§£æãšã¿ã°ã®æäœã«ã¯å€ãã®ããŒã«ããããDefineBinaryDataã¿ã°ã眮ãæãããè¿œå ãããããããšãã§ããŸãã
ããããã¹ãŠãç¥ã£ãŠããã°ãããã»ã¹ãèªååããããã«åçŽãªãããã«ãŒããã¹ã±ããã§ããŸãã ã©ããããåã«ãSWFãäœããã®æ¹æ³ã§å€æããããšãã§ããŸããããšãã°ãåçŽã§é«éãªå¯Ÿç§°xorã§åŠçããããŒãããŒããŒïŒãããã¯ããããSWFãå«ãïŒã§SWFã埩å·åããŠããŒãããã³ãŒããèšè¿°ããŸãã xorã䜿çšããåçŽãªãæå·åãã¯ããã³ã³ãã€ã©ã«ããèªååŠçããä¿è·ããããã«ã®ã¿å¿ èŠã§ãããããSWFãã¡ã€ã«ã¯ãçŽç²ãªåœ¢åŒãã§ããŒããŒã«å«ãŸãããããè€éãªæå·åã¯ç¡æå³ã§ãã
BitmapDataã®åœ¢åŒãªã©ãä»ã®æ¹æ³ã§ãã¡ã€ã«ããåã蟌ãŸãããè€æ°ã¬ãã«ã®ãã¹ããäœæãããããšããããŸãã
æãåçŽãªããã«ãŒã®å®è£ äŸã¯ãèšäºã®ã³ãŒãã®ã3-SWFPackerããã©ã«ããŒã«ãããŸãã ãŸããorig.swfãšpacked.swfã®2ã€ã®ãã¡ã€ã«ããããŸããããããéã³ã³ãã€ã«ããŠæ¯èŒããããšãã§ããŸãã
ãã®ã¡ãœããã¯ãå°ãªããšã2ã€ã®æ¹æ³ã§è¡ããŸãã
-ããŒãããŒããŒã§ã®ãã³ãŒããŒã¢ã«ãŽãªãºã ã®ç 究ãšç¬èªã®ãã³ãŒããŒã®äœæïŒç¹ã«å€§èŠæš¡ãªãã¹ãããŒããŒã§ã¯æéããããïŒ
-æ¢ã«è§£åãããŠFPã«ããŒããããSWFãã¡ã€ã«ãååšããã¡ã¢ãªéšåãä¿åããŸãïŒç¹ã«ã以äžã§èª¬æããã¡ã¢ãªããã®ä¿è·ã«å¯Ÿããä¿è·æ段ã䜿çšãããŠããªãå Žåã¯ãç°¡åãã€è¿ éã«ïŒ
-5.åçãªã³ãŒãçæãšSWFç·šé
ãã§ã«ç¹°ãè¿ãå°ããããŠããŸã-ãªã¢ã«ã¿ã€ã ãã©ãã·ã¥ã§ã³ãŒããçæããããä»ã®SWFãã¡ã€ã«ãäœæããã³ç·šéããããšã¯å¯èœã§ããïŒ çãã¯ã€ãšã¹ã§ããå¯èœã§ãïŒ
ã³ãŒãã«ã€ããŠã¯ã AS3Commons ByteCodeãè©ŠããŠãã ããã ãã®ãããžã§ã¯ãã§ã¯ããªã¢ã«ã¿ã€ã ã®ãã€ãã³ãŒããåéããŠå®è¡ã§ããŸãã
ããŸããŸãªã¡ãœãããšããããã£ãæã€ã¯ã©ã¹ãæåããäœæããããä»ã®ã¯ã©ã¹ããç¶æ¿ãããã§ããŸãã ããšãã°ãã¡ãœããæ¬äœã¯ããã€ãã³ãŒããçŽç·çã«äœ¿çšããŠèšè¿°ããããšãã§ããŸã
methodBuilder.addOpcode(Opcode.getlocal_0)
ãŸãã¯ããã«ãããã¯ã§ïŒ
var source:String = (<![CDATA[ getlocal_0 pushscope ... getlocal_1 returnvalue]]>).toString(); methodBuilder.addAsmSource(source);
abcBuilder.buildAndLoad()
ã䜿çšããŠãçæãããã³ãŒããAVMã«ããŒãã§ããŸãã
ãŸãããã€ãã³ãŒããæäœããããã«as3abcãè©Šãããšãã§ããŸããããã¯ãèè ã«ããã°ãæªåé«ãJoa Ebertã«ãããã°ãããApparatãã¬ãŒã ã¯ãŒã¯ã®éšåçãªç§»æ€çã§ãã
ãã€ãã³ãŒãã§ã¯ãªãã¹ã¯ãªããã®åçãªå®è¡ã倢èŠãŠãããªãã as3scriptinglibãèŠãŠãã ãã ã ãã®ãããžã§ã¯ãã䜿çšãããšãJavaScriptãå«ãActionScript 3 / ECMAScriptã¹ã¯ãªããããªã¢ã«ã¿ã€ã ã§ã³ã³ãã€ã«ããã³å®è¡ã§ããŸãã ãããflexãã¢ã¢ããªã±ãŒã·ã§ã³ã§ã©ã®ããã«æ©èœãããã確èªã§ããŸã ã æ®å¿µãªããããããžã§ã¯ãã¯é·ãéæŽæ°ãããŠããŸããã
SWFãã¡ã€ã«èªäœãšãã®æ§é ãè©Šãã«ã¯ã as3swfãŸãã¯swfassistãè©ŠããŠãã ããã
ãªã³ã¶ãã©ã€ã§ã³ãŒããçæããæ©èœãããã³ãªã¢ã«ã¿ã€ã ã§SWFãç·šéããã³äœæããæ©èœã«ãããããŸããŸãªè€éãªã¹ã¯ãªãããããªãã¯ãäœæããŠãæ»æè ãæ··ä¹±ãããã³ãŒããé ãããšãã§ããŸãã ããã§ãããšãã°ãç§ã®é ã«æµ®ããã æåã®3ã€ã®ããªãã¯ïŒ
- ãµãŒããŒåŽã®éšåã§ã¯ã©ã€ã¢ã³ãåŽã§code \ bytecodeãçæããã³å®è¡ããã³ãŒãå šäœããå ã®SWFã«æªæã®ãããŠãŒã¶ãŒãæ®ããŸãããã ããããããæ®ããŠãããŸããŸããïŒç¡æã®ã©ã€ãã©ãªããã¿ã³ãªã©ã®ã³ãŒãïŒ+ãã³ãŒããŒã®ã³ãŒãããã«ããŒãã¯ãã§ã«æçµã³ãŒãã§ãã
- ã³ãŒãã®ããªãã¯ãšåæ§ã«ãã¯ã©ã€ã¢ã³ãåŽã§SWFãéšåçã«åéããŸããã¿ã°ã§åéãããããµãŒããŒããåä¿¡ããããããŒãããŒããŒã«ããã¯ãããæå·åããŒã¿ãã1ã€ãã€ã¢ã³ããã¯ãããã§ããŸãã
- å®è¡ããã»ã¹äžã«èªå·±ä¿®æ£ã³ãŒããäœæããŸããããšãã°ãç¹å®ã®ã«ãŒã«ãŸãã¯ãã¿ãŒã³ã«åŸã£ãŠç°ãªãæ¹æ³ã§åãã¡ãœãããçæããŸãã ããšãã°ãi ++ã¯i + = 1ãšããŠå®è£
ã§ããŸãïŒFP 10.1ã§ã¯å°ãªããšãç°ãªããã€ãã³ãŒãã«ãªããŸãïŒããŸããã«ãŒãã¯ããŸããŸãªæ¹æ³ã§å®è£
ã§ããŸãã
çæãããã³ãŒãããããçæããã¡ãœãããå€æŽãããããªæ¹æ³ã§å·¥å€«ããããšãå¯èœãããããŸããã ããšãã°ãå®è¡ã®æ¬¡ã®å埩ã§ä»ã®ã¯ã©ã¹ãšã¡ãœãããçæããããããã³ãŒããå€§å¹ ã«è€éåããã³æ··ä¹±ãããããæ»æè ãååŸããå Žåãæ»æè ã¯ãã®ãæ··ä¹±ãããã¹ãŠè§£æããããã«ã§ããã ãå€ãã®æéãè²»ããå¿ èŠããããŸããã
ããã¯ããªãè€éãªïŒãŸãã¯ãã©ãã·ã¥ã§ã¯äžå¯èœãªïŒããªãã¯ã ãšæããŸãã ãã©ãã·ã¥äžã§ãã®ã¢ã€ãã¢ã®å®éã«æ©èœããå®è£ ã«ãŸã äŒã£ãŠããŸããã ããªããäŒã£ããªããã©ããèŠãã¹ããæããŠãã ãããç§ã¯å匷ããã®ãããããã§ãã
-6.ã³ãŒãã®é£èªåãšããŒã¿ã®é èœ
ãŸãé£èªåã«ã€ããŠã ãœãŒã¹ã³ãŒããšãã€ãã³ãŒãã§ã³ã³ãã€ã«ãããã³ãŒãã®äž¡æ¹ãå ¬éã§ããŸãã ãœãŒã¹ã³ãŒãã®é£èªåã¯ããã»ã©äŸ¿å©ã§å¹æçã§ã¯ãããŸããããã€ãã³ãŒãã®é£èªåã¯ããé åçã«èŠããŸãã ãœãŒã¹ã³ãŒãã¯ã³ã³ãã€ã©ã®èŠä»¶ãæºãããªããã°ãªããŸãããã³ã³ãã€ã©ã®èŠä»¶ã¯ããã€ãã³ãŒãã«ã€ããŠã¯èšããŸãããããã«ãæ³ååãšåµæ工倫ã®çŸãã®ç¯å²ãã¯ããã«åºããªã£ãŠããŸãã
ãã€ãã³ãŒãã®é£èªåã«ã¯ãã¢ã³ããã³ã³ãã€ã©ããªãã¯ã®äœ¿çšãã³ãŒãã®é衚瀺ããã³ããã€æšãŠããªã©ãèŠçŽ ã®ååãã³ã³ãã€ã©ã«ãšã£ãŠæå³ã®ãªã蚱容ã§ããªãååã«å€æŽããããšãå«ãŸããå ŽåããããŸãã
ååã®å€æŽã¯ããããããå°ãªããšãäœãããã©ãã·ã¥ã«é ãããã®å¯äžã®äžå¯éçãã€100ïŒ ã®äœæ¥æ¹æ³ã§ãã ã¡ãœããã®æ¬è³ªã¯ãã¡ãœãããããããã£ãããã±ãŒãžãããã³ã³ã³ãã€ã«åŸã«ä¿åããããã³ãŒãã®å®è¡æã«ã¯äœ¿çšãããªãååã®ä»ã®èŠçŽ ãå€æŽããããšã§ãã å ã®ååãèªåçã«åŸ©å ããããšã¯äžå¯èœã§ããã³ãŒãã®èª¿æ»äžã«æå³ãæšæž¬ããªããããããæåã§è¡ãå¿ èŠããããŸãã é£èªååŸãæ°ããååã«ã¯ç¡å¹ãªæåãŸãã¯äºçŽèªãå«ãŸããå Žåããããéã³ã³ãã€ã«åŸã«ååŸããã³ãŒããç°¡åã«åã³ã³ãã€ã«ããŠäœ¿çšããããšã¯ã§ããŸããã
ãã€ãã³ãŒããé£èªåãããšãéã³ã³ãã€ã©ãã³ãŒããè€éãªæ¹æ³ã§ãããã¯åäœã§åæãããšããäºå®ã«åºã¥ããŠãéã³ã³ãã€ã©ã«ããã©ããããèšå®ãããå ŽåããããŸãã
- ç¡å¹ãªããããã³ãŒãã-人çºçãªæ¡ä»¶ä»ãé·ç§»ãäœæãããåžžã«1ã€ã®ãã©ã³ãã®ã¿ãå®è¡ãããŸãã ãããã£ãŠã2çªç®ã®ãã©ã³ãã«ã¯ã決ããŠå®è¡ãããªãããéã³ã³ãã€ã©ãŒã«ãã£ãŠåŠçãããã³ãŒãããããŸãã ãããŠãäºæž¬ã§ããªããã®ãããã°ïŒãããŠãFPã¯ããã«å°éããªãã®ã§ãç§ãã¡ã¯äœã§ãã§ããŸãïŒãããã€ãã®éã³ã³ãã€ã©ãŒã¯ç°åžžã«æ¯ãèãããšãã§ããŸã-äŸãã°ãã¯ã©ãã·ã¥ããŸãã
- FPãç¡èŠããããéã³ã³ãã€ã©ãŒãåžžã«ç¡èŠããŠæ£ããåŠçããããã§ã¯ãªãé åã®äºæž¬äžèœãªãã€ãã
ããŒã¿ã¯ããŸããŸãªæ¹æ³ã§é衚瀺ã«ã§ããŸããããšãã°ã次ã®ãšããã§ãã
- SWF . , flex- Embed SWF DefineBinaryData, , SWF (FP ) , .
, "4-CustomTag" â as3swf (com.codeazur.as3swf.factories.SWFTagFactory
com.codeazur.as3swf.tags.TagCustom
). , SWF â , â , , , SWFLoader.loadBytes()
SWF . - . , ( , , ):
package { [FocusMeta(name="secret", data="123")] public class Dummy { [Cool(key="another secret")] public var dummyInt:int; public var dummyStr:String; } }
describeType()
:
var typeXML: XML = describeType(Dummy); var myMeta: XMLList = typeXML.factory.metadata.(@name == "FocusMeta");
, , , SWF . â SWF , .
SWF, "", , , , . "" , .
â 7. SWF
. , , â SWF- ( SWF ), SWF . SWF , = SWF .
, ByteArray. , :
private function spamMemory(swfBytes:ByteArray):void { var allLen:uint = swfBytes.readUnsignedInt(); var swfLen:uint = swfBytes.readUnsignedInt(); var spamMemorySWFLen:uint = swfBytes.readUnsignedInt(); var spamMemorySWFBytes:ByteArray = new ByteArray(); spamMemorySWFBytes.endian = Endian.LITTLE_ENDIAN; swfBytes.readBytes(spamMemorySWFBytes, 0, spamMemorySWFLen); var allBytes:ByteArray = new ByteArray(); while (allBytes.length < allLen) { spamMemorySWFBytes.position = 4; spamMemorySWFBytes.writeUnsignedInt((((swfLen * 3) / 4) + ((Math.random() * swfLen) / 2))); allBytes.writeBytes(spamMemorySWFBytes); }; Sprite.prototype["__spam_"] = allBytes; }
, swfBytes â "" "" "" , "" .
â 8. flash
, ( 2010 ):
:
- Action Script Viewer (ASV) â , timeline, , . â $80.
- AS3 Sorcerer ( ASV) â , ASV, . ASV 2010 , AS3 Sorcerer . 3 â $22.
- Sothink SWF Decompiler â , ASV. â $79.99.
- ASV Sothink , .
- Nemo440 â "Advanced ActionScript 3/ABC2/Flex 2/Flex 3/Flex 4/AIR disassembler". .
- Yogda â "AVM2 bytecode workbench" â , , , SWF, . .
- RABCDAsm â "Robust ABC (ActionScript Bytecode) [Dis-]Assembler" â \ . (+ ).
- secureSWF â , , . , , secureSWF . , , "" .. , "" SWF . , : Standard $199.
- irrFuscator â , , , , , .. . , , "" . Standard 79 .
- OBFU â , flash, ( â 1500 ). â , haXe. â AS3, .. , , as2 2005 . , , - , , .
, , , , makc3d .
\ ..:
- SWF Reader â â , , .. \ ( , doSWF, secureSWF). C â 10 .
- SWF Decrypt â Amayeta SWF Encrypt DComSoft SWF Protector (Mochi Encryption ). .
- SWiX â SWF XML . .
â
, , , , . , SWF , , , , , . â , .
â SWF , .. , .
, . , - . , , .
():
- Claus Wahlers "Hacking SWF" FITC Amsterdam 2010.
- ( valyard ) " " FlashGAMM 2010
- , - , .
- romamik " ".
- Nautilus " ".
- puzzlesea "Robolander, 25 days later. , ".
- flashco ": â¬1500".
- Alexis' SWF Reference â , SWF .
- OWASP â , flash ( , ..).
- flash senocular "Security Domains, Application Domains, and More in ActionScript 3.0".
- Adobe flash.
- Adobe FP 10 (White Paper).
: codestage.ru/files/flash_defend_files.7z