{"id":89,"date":"2009-08-21T13:45:51","date_gmt":"2009-08-21T20:45:51","guid":{"rendered":"http:\/\/wahlers.com.br\/claus\/blog\/?p=89"},"modified":"2009-08-22T17:15:17","modified_gmt":"2009-08-23T00:15:17","slug":"undocumented-swf-tags-written-by-mxmlc","status":"publish","type":"post","link":"http:\/\/wahlers.com.br\/claus\/blog\/undocumented-swf-tags-written-by-mxmlc\/","title":{"rendered":"Undocumented SWF Tags written by MXMLC"},"content":{"rendered":"<p>While testing my AS3 SWF library <a href=\"http:\/\/github.com\/claus\/as3swf\/tree\/master\">as3swf<\/a> yesterday, i found that MXMLC (the compiler that comes with the Flex SDKs) \u00c2\u00a0writes undocumented SWF tags to the SWFs it produces.<\/p>\n<p>I was able to identify two so far:<\/p>\n<p><strong>ProductInfo<\/strong> (Tag ID 41)<\/p>\n<p>The ProductInfo tag contains <em>infos about the tool used to generate the SWF<\/em>, as well as the <em>date and time the SWF was compiled<\/em>. It also contains info about the &#8220;Edition&#8221; of the software used (see below), and although this seems to be always set to &#8220;None&#8221; in Flex Builder 3 and Flash Builder 4, it potentially could become a privacy issue, especially being an undocumented feature (you better know about this tag just in case you accidentally publish commercial work with your non commercial Flash Builder license).<\/p>\n<ul>\n<li>ProductID (UI32)<br \/>\n0: Unknown<br \/>\n1: Macromedia Flex for J2EE<br \/>\n2: Macromedia Flex for .NET<br \/>\n3: Adobe Flex<\/li>\n<li>Edition (UI32)<br \/>\n0: Developer Edition<br \/>\n1: Full Commercial Edition<br \/>\n2: Non Commercial Edition<br \/>\n3: Educational Edition<br \/>\n4: Not For Resale (NFR) Edition<br \/>\n5: Trial Edition<br \/>\n6: None<\/li>\n<li>MajorVersion (UI8)<\/li>\n<li>MinorVersion (UI8)<\/li>\n<li>BuildLow (UI32)<\/li>\n<li>BuildHigh (UI32)<\/li>\n<li>CompilationDate (UI64)<br \/>\nMilliseconds since 1.1.1970<\/li>\n<\/ul>\n<p>Examples:<\/p>\n<p>Flex 4.0 &#8211; [41:ProductInfo] ProductID: 3, Edition: 6, Version: 4.0.0.7791, CompileDate: Fri Aug 21 05:18:21 GMT-0300 2009<\/p>\n<p>Flex 3.2 &#8211; [41:ProductInfo]\u00c2\u00a0ProductID: 3, Edition: 6, Version: 3.2.0.3958, CompileDate: Fri Aug 21 05:23:22 GMT-0300 2009<\/p>\n<p><strong>DebugID<\/strong> (Tag ID 63)<\/p>\n<p>This tag is written to SWFs that are enabled for debugging. It contains a 16 byte UUID.<\/p>\n<ul>\n<li>UUID (UI8[16])<\/li>\n<\/ul>\n<p>Example:<\/p>\n<p>[63:DebugID] UUID: b8f36d6a-c735-a340-daa7-44730af92505<\/p>\n<p><strong>Reference<\/strong><\/p>\n<p>Flex SDK:<\/p>\n<ul>\n<li><a href=\"http:\/\/opensource.adobe.com\/svn\/opensource\/flex\/sdk\/trunk\/modules\/swfutils\/src\/java\/flash\/swf\/TagValues.java\">TagValues.java<\/a><\/li>\n<li><a href=\"http:\/\/opensource.adobe.com\/svn\/opensource\/flex\/sdk\/trunk\/modules\/swfutils\/src\/java\/flash\/swf\/tags\/ProductInfo.java\">ProductInfo.java<\/a><\/li>\n<li><a href=\"http:\/\/opensource.adobe.com\/svn\/opensource\/flex\/sdk\/trunk\/modules\/swfutils\/src\/java\/flash\/swf\/tags\/DebugID.java\">DebugID.java<\/a><\/li>\n<\/ul>\n<p>Community:<\/p>\n<ul>\n<address><span style=\"line-height: 33px; font-size: 21px; color: #3e3e3e;\"> <\/span><\/address>\n<\/ul>\n<ul>\n<li>Igor Costa: <a href=\"http:\/\/www.igorcosta.org\/?p=220\">Reading the compilation date of SWF with the magic of ByteArray<\/a><\/li>\n<li>Judah Frangipane: <a href=\"http:\/\/www.judahfrangipane.com\/blog\/?p=252\">Cache busting your Flex SWF and the SWF Compilation Date<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>While testing my AS3 SWF library as3swf yesterday, i found that MXMLC (the compiler that comes with the Flex SDKs) \u00c2\u00a0writes undocumented SWF tags to the SWFs it produces. I was able to identify two so far: ProductInfo (Tag ID &hellip; <a href=\"http:\/\/wahlers.com.br\/claus\/blog\/undocumented-swf-tags-written-by-mxmlc\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,12,3],"tags":[],"class_list":["post-89","post","type-post","status-publish","format-standard","hentry","category-as3","category-swf","category-webdev"],"_links":{"self":[{"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/posts\/89","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/comments?post=89"}],"version-history":[{"count":12,"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/posts\/89\/revisions"}],"predecessor-version":[{"id":92,"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/posts\/89\/revisions\/92"}],"wp:attachment":[{"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/media?parent=89"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/categories?post=89"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/tags?post=89"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}