?
Solved

Decode Autoit Exe files

Posted on 2004-11-26
9
Medium Priority
?
8,323 Views
Last Modified: 2012-08-14
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.
0
Comment
Question by:cooljai1
7 Comments
 
LVL 1

Accepted Solution

by:
mohan21_kumar earned 2000 total points
ID: 12685815
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
 
LVL 8

Author Comment

by:cooljai1
ID: 12696559
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
 
LVL 1

Expert Comment

by:mohan21_kumar
ID: 12723978
Create the folder as DecodeFile put the class files in the DecodeFile folder
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 

Expert Comment

by:Ahsan_786
ID: 21702488
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
 

Expert Comment

by:Ahsan_786
ID: 21770781
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
 
LVL 13

Expert Comment

by:Mark Damen
ID: 22651028
If you install AutoIt V3, in the Start Menu folder is an option to "Decompile .exe to script"  !!!!!
0
 

Expert Comment

by:Ahsan_786
ID: 22669964
[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

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article will inform Clients about common and important expectations from the freelancers (Experts) who are looking at your Gig.
When you discover the power of the R programming language, you are going to wonder how you ever lived without it! Learn why the language merits a place in your programming arsenal.
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…
Loops Section Overview

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question