(Flex) Flex (2012 год)

FlexStringObfuscator - Flame-преобразования во Flex.

To view this page ensure that Adobe Flash Player version 11.1.0 or greater is installed.


По мотивам моей заметки Криптография во Flex и моих веб-сервисов Веб-сервисы компании FlySeason я написал этот онлайновый OpenSource-инструмент для криптографических (и других) преобразований - на основе библиотеки Flame.

Этот инструмент может применяться для онлайновых обфускаций кода. В отличие от самого первого моего инструмента в этом Freeware-разделе, опубликованного ровно для тех же целей (NetStringObfuscatorHelper) - флексовый инструмент существенно удобнее. Он не требует установки и работает как web-приложение.

В моем инструменте задействован лишь один криптографический алгоритм (AES) из большого набора криптографических преобразований, поддерживаемых Flame. Опираясь на мой OpenSource-код вы легко сможете добавить нужные вам функции.

Код этого инструмента перед вами:


   1:  <?xml version="1.0" encoding="utf-8"?>
   2:  <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
   3:                 xmlns:s="library://ns.adobe.com/flex/spark" 
   4:                 xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="700" minHeight="550" height="550" width="700">
   5:      <fx:Script>
   6:          <![CDATA[
   7:              import flame.crypto.AES;
   8:              import flame.crypto.ICryptoTransform;
   9:              import flame.crypto.PaddingMode;
  10:              import flame.crypto.RSA;
  11:              import flame.crypto.RSAParameters;
  12:              import flame.crypto.Rijndael;
  13:              import flame.utils.ByteArrayUtil;
  14:              import flame.utils.Convert;
  15:              
  16:              import mx.collections.ArrayCollection;
  17:              import mx.controls.Alert;
  18:              import mx.events.FlexEvent;
  19:              import mx.rpc.events.FaultEvent;
  20:              import mx.rpc.events.ResultEvent;
  21:              import mx.utils.UIDUtil;
  22:              
  23:              import spark.events.IndexChangeEvent;
  24:              import spark.events.TextOperationEvent;
  25:              
  26:              protected var Aes:flame.crypto.AES;
  27:              protected var Md5:flame.crypto.HashAlgorithm;
  28:              protected var OperList:ArrayCollection = new ArrayCollection([{t:"MD5"}, {t:"ToBase64"}, {t:"FromBase64"},{t:"ToHex"}, {t:"FromHex"},{t:"AES crypt"}, {t:"AES decrypt"}]);
  29:              protected var FromArr:ByteArray;
  30:              protected var ToArr:ByteArray;
  31:              
  32:              
  33:              protected function NewAesGO(event:MouseEvent):void
  34:              {
  35:                  Aes = new flame.crypto.AES();
  36:                  Aes.padding=flame.crypto.PaddingMode.PKCS7;
  37:                  Aes.keySize=128;
  38:                  Aes.blockSize=128;
  39:                  AESKey.text = flame.utils.ByteArrayUtil.toHexString(Aes.key);
  40:                  AESIV.text = flame.utils.ByteArrayUtil.toHexString(Aes.iv);
  41:              }
  42:   
  43:              protected function OperGO(e):void
  44:              {
  45:                  if (Oper.selectedItem==null){
  46:                      Oper.selectedIndex=0;
  47:                  }
  48:                  try{
  49:                      switch (Oper.selectedItem.t){ 
  50:                          case "MD5" : 
  51:                              FromArr=new ByteArray();
  52:                              Md5= new flame.crypto.MD5();
  53:                              FromArr.writeUTFBytes(FromText.text);
  54:                              Md5.computeHash(FromArr);
  55:                              ToText.text = flame.utils.ByteArrayUtil.toHexString(Md5.hash);
  56:                              break;     
  57:                          case "ToBase64" : 
  58:                              FromArr=new ByteArray();
  59:                              FromArr.writeUTFBytes(FromText.text);
  60:                              ToText.text=flame.utils.Convert.toBase64String(FromArr);
  61:                              break;     
  62:                          case "FromBase64" : 
  63:                              FromArr=new ByteArray();
  64:                              FromArr=flame.utils.Convert.fromBase64String(FromText.text);
  65:                              ToText.text=FromArr.readUTFBytes(FromArr.length);
  66:                              break;     
  67:                          case "ToHex" : 
  68:                              FromArr=new ByteArray();
  69:                              FromArr.writeUTFBytes(FromText.text);
  70:                              ToText.text=flame.utils.ByteArrayUtil.toHexString(FromArr);
  71:                              break;     
  72:                          case "FromHex" : 
  73:                              FromArr=new ByteArray();
  74:                              FromArr=flame.utils.ByteArrayUtil.fromHexString(FromText.text);
  75:                              ToText.text=FromArr.readUTFBytes(FromArr.length);
  76:                              break;     
  77:                          case "AES crypt" : 
  78:                              if (Aes==null){
  79:                                  Aes = new flame.crypto.AES();
  80:                                  Aes.padding=flame.crypto.PaddingMode.PKCS7;
  81:                                  Aes.keySize=128;
  82:                                  Aes.blockSize=128;
  83:                              }
  84:                              Aes.key=flame.utils.ByteArrayUtil.fromHexString(AESKey.text);
  85:                              Aes.iv=flame.utils.ByteArrayUtil.fromHexString(AESIV.text);
  86:                              FromArr=new ByteArray();
  87:                              FromArr.writeUTFBytes(FromText.text);
  88:                              var CryptoTransform:flame.crypto.ICryptoTransform = Aes.createEncryptor(Aes.key,Aes.iv);
  89:                              ToArr=new ByteArray();
  90:                              ToArr=CryptoTransform.transformFinalBlock(FromArr,0,FromArr.length);
  91:                              ToText.text=flame.utils.ByteArrayUtil.toHexString(ToArr);
  92:                              break;     
  93:                          case "AES decrypt" : 
  94:                              if (Aes==null){
  95:                                  Aes = new flame.crypto.AES();
  96:                                  Aes.padding=flame.crypto.PaddingMode.PKCS7;
  97:                                  Aes.keySize=128;
  98:                                  Aes.blockSize=128;
  99:                              }
 100:                              Aes.key=flame.utils.ByteArrayUtil.fromHexString(AESKey.text);
 101:                              Aes.iv=flame.utils.ByteArrayUtil.fromHexString(AESIV.text);
 102:                              FromArr=new ByteArray();
 103:                              FromArr=flame.utils.ByteArrayUtil.fromHexString(FromText.text);
 104:                              var CryptoTransform:flame.crypto.ICryptoTransform = Aes.createDecryptor(Aes.key,Aes.iv);
 105:                              ToArr=new ByteArray();
 106:                              ToArr=CryptoTransform.transformFinalBlock(FromArr,0,FromArr.length);
 107:                              ToText.text=ToArr.readUTFBytes(ToArr.length);
 108:                              break;     
 109:                      }
 110:                  }
 111:                  catch (ex:Error){
 112:                      Alert.show(ex.message);
 113:                  }    
 114:              }
 115:   
 116:   
 117:          ]]>
 118:      </fx:Script>
 119:      
 120:      <fx:Declarations>
 121:   
 122:      </fx:Declarations>
 123:      
 124:      <s:BorderContainer width="100%" height="100%" borderWeight="2"  cornerRadius="5" dropShadowVisible="true" y="0">
 125:          <s:backgroundFill>
 126:              <s:LinearGradient rotation="90">
 127:                  <s:GradientEntry color="0xF4F4F4" />
 128:                  <s:GradientEntry color="0xB9B9B9" />
 129:              </s:LinearGradient>
 130:          </s:backgroundFill>
 131:      </s:BorderContainer>
 132:      <mx:Form x="20" y="20">
 133:          <mx:FormItem label="AES" height="20">
 134:              <s:HGroup width="490" height="20">
 135:              <s:Button label="New" click="NewAesGO(event)" id="NewAes" width="50" />
 136:              <s:Label text=" (PaddingMode.PKCS7, keySize=128, blockSize=128)" width="430" height="20" paddingTop="5"/>
 137:              </s:HGroup>
 138:          </mx:FormItem>
 139:          <mx:FormItem label="Key:">
 140:              <s:TextArea id="AESKey" width="500"  height="20" text="сюда введите или сгенерируйте Ключ для AES"  fontFamily="Courier New"/>
 141:          </mx:FormItem>
 142:          <mx:FormItem label="IV :" >
 143:              <s:TextArea id="AESIV" width="500" height="20" text="сюда введите или сгенерируйте IV для AES"  fontFamily="Courier New"/>
 144:              <mx:VRule height="30" visible="false"/>
 145:          </mx:FormItem>
 146:          <mx:FormItem label="From:">
 147:              <s:TextArea id="FromText"  width="500" height="150" text="сюда введите исходный текст и выберите преобразование"  fontFamily="Courier New"  change="OperGO(event)"/>
 148:              <mx:VRule height="10" visible="false"/>
 149:          </mx:FormItem>
 150:          <mx:FormItem label="Convert">
 151:              <s:HGroup width="490" height="20">
 152:              <s:DropDownList id="Oper" width="250" dataProvider="{OperList}" change="OperGO(event)" labelField="t"></s:DropDownList>
 153:              <s:Label text=" (UTF8)" width="430" height="20" paddingTop="5"/>
 154:              </s:HGroup>
 155:              <mx:VRule height="10" visible="false"/>
 156:          </mx:FormItem>
 157:          <mx:FormItem label="To:">
 158:              <s:TextArea id="ToText"  width="500" height="150" text="здесь будет результат преобразования"   fontFamily="Courier New"/>
 159:          </mx:FormItem>
 160:      </mx:Form>
 161:  </s:Application>

Обратите внимание, насколько недопустимо хранение чуствительных данных в коде в открытом виде - мне потребовалось не более 10 кликов мышкой - чтобы увидеть пароли шифрования в SWF-файле, прошитые туда без обфускации:




Comments ( )
<00>  <01>  <02>  <03>  <04>  <05>  <06>  <07>  <08>  <09>  <10>  <11>  <12>  <13>  <14>  <15>  <16>  <17>  <18>  <19>  <20>  <21>  <22>  <23
Link to this page: //www.vb-net.com/Flame/index.htm
<SITEMAP>  <MVC>  <ASP>  <NET>  <DATA>  <KIOSK>  <FLEX>  <SQL>  <NOTES>  <LINUX>  <MONO>  <FREEWARE>  <DOCS>  <ENG>  <CHAT ME>  <ABOUT ME>  < THANKS ME>