Decode Autoit Exe files

I have some Autoit scripts, is there a way to decode them and verify the scripts that are in there? I only have the Autoit EXE files.
LVL 8
cooljai1Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

mohan21_kumarCommented:
Hi,
  I have some java file to decode the file u can try with this code to decode

The Code is as Follows



package DecodeFile;
import java.io.*;
public class Base64
{
    public final static boolean ENCODE = true;
    public final static boolean DECODE = false;
    private final static int MAX_LINE_LENGTH = 76;
    private final static byte EQUALS_SIGN = (byte)'=';
    private final static byte NEW_LINE = (byte)'\n';
    private final static byte[] ALPHABET =
    {
        (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G',
        (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N',
        (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U',
        (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z',
        (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g',
        (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n',
        (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u',
        (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z',
        (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5',
        (byte)'6', (byte)'7', (byte)'8', (byte)'9', (byte)'+', (byte)'/'
    };


    private final static byte[] DECODABET =
    {
        -9,-9,-9,-9,-9,-9,-9,-9,-9,                 // Decimal  0 -  8
        -5,-5,                                      // Whitespace: Tab and Linefeed
        -9,-9,                                      // Decimal 11 - 12
        -5,                                         // Whitespace: Carriage Return
        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 14 - 26
        -9,-9,-9,-9,-9,                             // Decimal 27 - 31
        -5,                                         // Whitespace: Space
        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,              // Decimal 33 - 42
        62,                                         // Plus sign at decimal 43
        -9,-9,-9,                                   // Decimal 44 - 46
        63,                                         // Slash at decimal 47
        52,53,54,55,56,57,58,59,60,61,              // Numbers zero through nine
        -9,-9,-9,                                   // Decimal 58 - 60
        -1,                                         // Equals sign at decimal 61
        -9,-9,-9,                                      // Decimal 62 - 64
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,            // Letters 'A' through 'N'
        14,15,16,17,18,19,20,21,22,23,24,25,        // Letters 'O' through 'Z'
        -9,-9,-9,-9,-9,-9,                          // Decimal 91 - 96
        26,27,28,29,30,31,32,33,34,35,36,37,38,     // Letters 'a' through 'm'
        39,40,41,42,43,44,45,46,47,48,49,50,51,     // Letters 'n' through 'z'
        -9,-9,-9,-9                                 // Decimal 123 - 126
    };

    private final static byte BAD_ENCODING    = -9; // Indicates error in encoding
    private final static byte WHITE_SPACE_ENC = -5; // Indicates white space in encoding
    private final static byte EQUALS_SIGN_ENC = -1; // Indicates equals sign in encoding

    private Base64(){}


    private static byte[] encode3to4( byte[] threeBytes )
    {
            return encode3to4( threeBytes, 3 );
    }

    private static byte[] encode3to4( byte[] threeBytes, int numSigBytes )
    {   byte[] dest = new byte[4];
        encode3to4( threeBytes, 0, numSigBytes, dest, 0 );
        return dest;
    }

    private static byte[] encode3to4(byte[] source, int srcOffset, int numSigBytes,byte[] destination, int destOffset )
    {
        int inBuff =   ( numSigBytes > 0 ? ((source[ srcOffset     ] << 24) >>>  8) : 0 )
                     | ( numSigBytes > 1 ? ((source[ srcOffset + 1 ] << 24) >>> 16) : 0 )
                     | ( numSigBytes > 2 ? ((source[ srcOffset + 2 ] << 24) >>> 24) : 0 );

        switch( numSigBytes )
        {
            case 3:
                destination[ destOffset     ] = ALPHABET[ (inBuff >>> 18)        ];
                destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ];
                destination[ destOffset + 2 ] = ALPHABET[ (inBuff >>>  6) & 0x3f ];
                destination[ destOffset + 3 ] = ALPHABET[ (inBuff       ) & 0x3f ];
                return destination;

            case 2:
                destination[ destOffset     ] = ALPHABET[ (inBuff >>> 18)        ];
                destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ];
                destination[ destOffset + 2 ] = ALPHABET[ (inBuff >>>  6) & 0x3f ];
                destination[ destOffset + 3 ] = EQUALS_SIGN;
                return destination;

            case 1:
                destination[ destOffset     ] = ALPHABET[ (inBuff >>> 18)        ];
                destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ];
                destination[ destOffset + 2 ] = EQUALS_SIGN;
                destination[ destOffset + 3 ] = EQUALS_SIGN;
                return destination;

            default:
                return destination;
        }
    }

    public static String encodeObject( java.io.Serializable serializableObject )
      {
           return encodeObject( serializableObject, true );
      }

    public static String encodeObject( java.io.Serializable serializableObject, boolean breakLines )
    {
        java.io.ByteArrayOutputStream baos  = null;
        java.io.OutputStream          b64os = null;
        java.io.ObjectOutputStream    oos   = null;

        try
        {
            baos  = new java.io.ByteArrayOutputStream();
            b64os = new Base64.OutputStream( baos, Base64.ENCODE, breakLines );
            oos   = new java.io.ObjectOutputStream( b64os );

            oos.writeObject( serializableObject );
        }
        catch( java.io.IOException e )
        {
            e.printStackTrace();
            return null;
        }
        finally
        {
            try{ oos.close();   } catch( Exception e ){}
            try{ b64os.close(); } catch( Exception e ){}
            try{ baos.close();  } catch( Exception e ){}
        }

        return new String( baos.toByteArray() );
    }

      public static String encodeBytes( byte[] source )
    {
        return encodeBytes( source, true );
    }


      public static String encodeBytes( byte[] source, boolean breakLines )
    {
        return encodeBytes( source, 0, source.length, breakLines );
    }

      public static String encodeBytes( byte[] source, int off, int len )
    {
        return encodeBytes( source, off, len, true );
    }

    public static String encodeBytes( byte[] source, int off, int len, boolean breakLines )
      {
              int    len43   = len * 4 / 3;
              byte[] outBuff = new byte[   ( len43 )
                                         + ( (len % 3) > 0 ? 4 : 0 )
                                         + (breakLines ? ( len43 / MAX_LINE_LENGTH ) : 0) ];
              int d = 0;
              int e = 0;
              int len2 = len - 2;
              int lineLength = 0;
              for( ; d < len2; d+=3, e+=4 )
              {
                  encode3to4( source, d+off, 3, outBuff, e );

                  lineLength += 4;
                  if( breakLines && lineLength == MAX_LINE_LENGTH )
                  {
                      outBuff[e+4] = NEW_LINE;
                      e++;
                      lineLength = 0;
                  }
              }

              if( d < len )
              {
                  encode3to4( source, d+off, len - d, outBuff, e );
                  e += 4;
              }

              return new String( outBuff, 0, e );
    }


      public static String encodeString( String s )
    {
        return encodeString( s, true );
    }

    public static String encodeString( String s, boolean breakLines )
      {
              return encodeBytes( s.getBytes(), breakLines );
    }


    private static byte[] decode4to3( byte[] fourBytes )
      {
              byte[] outBuff1 = new byte[3];
              int    count    = decode4to3( fourBytes, 0, outBuff1, 0 );
              byte[] outBuff2 = new byte[ count ];

              for( int i = 0; i < count; i++ )
                  outBuff2[i] = outBuff1[i];

              return outBuff2;
    }

    private static int decode4to3( byte[] source, int srcOffset, byte[] destination, int destOffset )
      {
              if( source[ srcOffset + 2] == EQUALS_SIGN )
              {
                  int outBuff =   ( ( DECODABET[ source[ srcOffset    ] ] & 0xFF ) << 18 )
                                | ( ( DECODABET[ source[ srcOffset + 1] ] & 0xFF ) << 12 );

                  destination[ destOffset ] = (byte)( outBuff >>> 16 );
                  return 1;
              }

              else if( source[ srcOffset + 3 ] == EQUALS_SIGN )
              {
                  int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] & 0xFF ) << 18 )
                                | ( ( DECODABET[ source[ srcOffset + 1 ] ] & 0xFF ) << 12 )
                                | ( ( DECODABET[ source[ srcOffset + 2 ] ] & 0xFF ) <<  6 );

                  destination[ destOffset     ] = (byte)( outBuff >>> 16 );
                  destination[ destOffset + 1 ] = (byte)( outBuff >>>  8 );
                  return 2;
              }

              else
              {
                  try{
                  int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] & 0xFF ) << 18 )
                                | ( ( DECODABET[ source[ srcOffset + 1 ] ] & 0xFF ) << 12 )
                                | ( ( DECODABET[ source[ srcOffset + 2 ] ] & 0xFF ) <<  6)
                                | ( ( DECODABET[ source[ srcOffset + 3 ] ] & 0xFF )      );


                  destination[ destOffset     ] = (byte)( outBuff >> 16 );
                  destination[ destOffset + 1 ] = (byte)( outBuff >>  8 );
                  destination[ destOffset + 2 ] = (byte)( outBuff       );

                  return 3;
                  }
                  catch( Exception e)
                  {
                      System.out.println(""+source[srcOffset]+ ": " + ( DECODABET[ source[ srcOffset     ] ]  ) );
                      System.out.println(""+source[srcOffset+1]+  ": " + ( DECODABET[ source[ srcOffset + 1 ] ]  ) );
                      System.out.println(""+source[srcOffset+2]+  ": " + ( DECODABET[ source[ srcOffset + 2 ] ]  ) );
                      System.out.println(""+source[srcOffset+3]+  ": " + ( DECODABET[ source[ srcOffset + 3 ] ]  ) );
                      return -1;
                  }
              }
          }

          public static byte[] decode( String s )
          {
              byte[] bytes = s.getBytes();
              return decode( bytes, 0, bytes.length );
          }

          public static String decodeToString( String s )
            {
                  return new String( decode( s ) );
          }

          public static Object decodeToObject( String encodedObject )
            {
                    byte[] objBytes = decode( encodedObject );

                    java.io.ByteArrayInputStream bais = null;
                    java.io.ObjectInputStream    ois  = null;

                    try
                    {
                        bais = new java.io.ByteArrayInputStream( objBytes );
                        ois  = new java.io.ObjectInputStream( bais );

                        return ois.readObject();
                    }
                    catch( java.io.IOException e )
                    {
                        e.printStackTrace();
                        return null;
                    }
                    catch( java.lang.ClassNotFoundException e )
                    {
                        e.printStackTrace();
                        return null;
                    }
                    finally
                    {
                        try{ bais.close(); } catch( Exception e ){}
                        try{ ois.close();  } catch( Exception e ){}
                    }
          }


          public static byte[] decode( byte[] source, int off, int len )
            {
                    int    len34   = len * 3 / 4;
                    byte[] outBuff = new byte[ len34 ];
                    int    outBuffPosn = 0;

                    byte[] b4        = new byte[4];
                    int    b4Posn    = 0;
                    int    i         = 0;
                    byte   sbiCrop   = 0;
                    byte   sbiDecode = 0;
                    for( i = 0; i < len; i++ )
                    {
                        sbiCrop = (byte)(source[i] & 0x7f);
                        sbiDecode = DECODABET[ sbiCrop ];

                        if( sbiDecode >= WHITE_SPACE_ENC )
                        {
                            if( sbiDecode >= EQUALS_SIGN_ENC )
                            {
                                b4[ b4Posn++ ] = sbiCrop;
                                if( b4Posn > 3 )
                                {
                                    outBuffPosn += decode4to3( b4, 0, outBuff, outBuffPosn );
                                    b4Posn = 0;


                                    if( sbiCrop == EQUALS_SIGN )
                                        break;
                                }

                            }

                        }
                        else
                        {
                            System.err.println( "Bad Base64 input character at " + i + ": " + source[i] + "(decimal)" );
                            return null;
                        }
                    }

                    byte[] out = new byte[ outBuffPosn ];
                    System.arraycopy( outBuff, 0, out, 0, outBuffPosn );
                    return out;
            }


 public static class InputStream extends java.io.FilterInputStream
    {
        private boolean encode;
        private int     position;
        private byte[]  buffer;
        private int     bufferLength;
        private int     numSigBytes;
        private int     lineLength;
        private boolean breakLines;



        public InputStream( java.io.InputStream in )
        {
            this( in, Base64.DECODE );
        }

        public InputStream( java.io.InputStream in, boolean encode )
        {
            this( in, encode, true );
        }


        public InputStream( java.io.InputStream in, boolean encode, boolean breakLines )
        {
            super( in );
            this.breakLines = breakLines;
            this.encode = encode;
            this.bufferLength = encode ? 4 : 3;
            this.buffer   = new byte[ bufferLength ];
            this.position = -1;
            this.lineLength = 0;
        }

        public int read() throws java.io.IOException
        {
            if( position < 0 )
            {
                if( encode )
                {
                    byte[] b3 = new byte[3];
                    int numBinaryBytes = 0;
                    for( int i = 0; i < 3; i++ )
                    {
                        try
                        {
                            int b = in.read();

                            if( b >= 0 )
                            {
                                b3[i] = (byte)b;
                                numBinaryBytes++;
                            }

                        }
                        catch( java.io.IOException e )
                        {
                            if( i == 0 )
                                throw e;

                        }
                    }

                    if( numBinaryBytes > 0 )
                    {
                        encode3to4( b3, 0, numBinaryBytes, buffer, 0 );
                        position = 0;
                        numSigBytes = 4;
                    }
                    else
                    {
                        return -1;
                    }
                }

                else
                {
                    byte[] b4 = new byte[4];
                    int i = 0;
                    for( i = 0; i < 4; i++ )
                    {
                        int b = 0;
                        do{ b = in.read(); }
                        while( b >= 0 && DECODABET[ b & 0x7f ] <= WHITE_SPACE_ENC );

                        if( b < 0 )
                            break;

                        b4[i] = (byte)b;
                    }

                    if( i == 4 )
                    {
                        numSigBytes = decode4to3( b4, 0, buffer, 0 );
                        position = 0;
                    }
                    else if( i == 0 ){
                        return -1;
                    }
                    else
                    {
                        throw new java.io.IOException( "Improperly padded Base64 input." );
                    }

                }
            }

            if( position >= 0 )
            {
                if( position >= numSigBytes )
                    return -1;

                if( encode && breakLines && lineLength >= MAX_LINE_LENGTH )
                {
                    lineLength = 0;
                    return '\n';
                }
                else
                {
                    lineLength++;
                    int b = buffer[ position++ ];

                    if( position >= bufferLength )
                        position = -1;

                    return b & 0xFF;

                }
            }

            else
            {
                throw new java.io.IOException( "Error in Base64 code reading stream." );
            }
        }


        public int read( byte[] dest, int off, int len ) throws java.io.IOException
        {
            int i;
            int b;
            for( i = 0; i < len; i++ )
            {
                b = read();

                if( b >= 0 )
                    dest[off + i] = (byte)b;
                else if( i == 0 )
                    return -1;
                else
                    break;
            }
            return i;
        }

    }

            public static class OutputStream extends java.io.FilterOutputStream
          {
              private boolean encode;
              private int     position;
              private byte[]  buffer;
              private int     bufferLength;
              private int     lineLength;
              private boolean breakLines;



              public OutputStream( java.io.OutputStream out )
              {
                  this( out, Base64.ENCODE );
              }



              public OutputStream( java.io.OutputStream out, boolean encode )
              {
                  this( out, encode, true );
              }



              public OutputStream( java.io.OutputStream out, boolean encode, boolean breakLines )
              {
                  super( out );
                  this.breakLines   = breakLines;
                  this.encode       = encode;
                  this.bufferLength = encode ? 3 : 4;
                  this.buffer       = new byte[ bufferLength ];
                  this.position     = 0;
                  this.lineLength   = 0;
              }



              public void write(int theByte) throws java.io.IOException
              {
                  if( encode )
                  {
                      buffer[ position++ ] = (byte)theByte;
                      if( position >= bufferLength )
                      {
                          out.write( Base64.encode3to4( buffer, bufferLength ) );

                          lineLength += 4;
                          if( breakLines && lineLength >= MAX_LINE_LENGTH )
                          {
                              out.write( NEW_LINE );
                              lineLength = 0;
                          }

                          position = 0;
                      }
                  }


                  else
                  {

                      if( DECODABET[ theByte & 0x7f ] > WHITE_SPACE_ENC )
                      {
                          buffer[ position++ ] = (byte)theByte;
                          if( position >= bufferLength )
                          {
                              out.write( Base64.decode4to3( buffer ) );
                              position = 0;
                          }
                      }
                      else if( DECODABET[ theByte & 0x7f ] != WHITE_SPACE_ENC )
                      {
                          throw new java.io.IOException( "Invalid character in Base64 data." );
                      }
                  }
              }




              public void write( byte[] theBytes, int off, int len ) throws java.io.IOException
              {
                  for( int i = 0; i < len; i++ )
                  {
                      write( theBytes[ off + i ] );
                  }

              }


              public void flush() throws java.io.IOException
              {
                  super.flush();

                  if( position > 0 )
                  {
                      if( encode )
                      {
                          out.write( Base64.encode3to4( buffer, position ) );
                      }
                      else
                      {
                          throw new java.io.IOException( "Base64 input not properly padded." );
                      }
                  }

                  out.flush();
              }


              public void close() throws java.io.IOException
              {
                  super.close();
                  out.close();

                  buffer = null;
                  out    = null;
              }

    }

}

Try with this
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
cooljai1Author Commented:
Hi,
Thanks a lot for the effort. Tried to compile taht and it generates tehse errors..

pls help.. very new to java..

C:\PROGRA~1\JAVA\JDK\BIN>java Base64
Exception in thread "main" java.lang.NoClassDefFoundError: Base64 (wrong n
ecodeFile/Base64)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.j
4)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
0
mohan21_kumarCommented:
Create the folder as DecodeFile put the class files in the DecodeFile folder
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

Ahsan_786Commented:
if you want to decompile your autoit script EXE to original code.
Then send a email to
amkbpk@gmail.com
and request for a (Latest) AutoIt v3.2.12.0 Decompiler and DeObfuscator Software.

it works 100% without any errors.

Tested By me...

for more info add me to your messenger list or send me mail at : inangeleyes@gmail.com

It is Really a Perfect and working Solution! :D

0
Ahsan_786Commented:
have you sent email to amkbpk
dont send any email to me asking for a decompiler.

the only way to get it is to send a email on amkbpk@gmail.com

as i said it works 100% without any errors.
0
Mark DamenERP System ManagerCommented:
If you install AutoIt V3, in the Start Menu folder is an option to "Decompile .exe to script"  !!!!!
0
Ahsan_786Commented:
[QUOTE]If you install AutoIt V3, in the Start Menu folder is an option to "Decompile .exe to script"  !!!!![/QUOTE]

it will not work  without a password and also disabled in newer versions.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Programming

From novice to tech pro — start learning today.