package com.amoad;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.util.Log;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
class ConfigFile
{
static final String KEY_DSPNAME = "dsp_name";
static final String KEY_DSPUID = "dspuid";
static final String KEY_ID = "id";
static final String KEY_OPTOUT = "optout";
private static final String TAG = "ConfigFile";
private final String CRYPT_ALGORITHM = "AES/ECB/PKCS7Padding";
private final String FILEPATH_FILES = "/files";
private final String HASH_ALGORITHUM = "SHA-1";
private final int SECRET_KEY_LENGTH = 32;
private final String SECRET_KEY_SPEC = "AES";
private LinkedHashMap<String, String> mConfig = null;
private Context mContext = null;
private boolean mDebug = false;
private String mDomainName = null;
private String mFileName = null;
private String mModelName = null;
private byte[] mSecretKey = null;
private String mUserPath = null;
ConfigFile(Context paramContext)
{
this.mContext = paramContext;
this.mConfig = new LinkedHashMap();
this.mUserPath = getUserPath();
}
private String byte2hex(byte[] paramArrayOfByte)
{
StringBuffer localStringBuffer = new StringBuffer();
int i = paramArrayOfByte.length;
for (int j = 0; j < i; j++)
{
String str = Integer.toHexString(0xFF & paramArrayOfByte[j]);
if (str.length() == 1) {
localStringBuffer.append("0");
}
localStringBuffer.append(str);
}
return localStringBuffer.toString();
}
private String createFileName()
{
return getHash(this.mDomainName + this.mModelName, "SHA-1");
}
private byte[] createSecretKey(String paramString)
{
new byte[32];
StringBuilder localStringBuilder = new StringBuilder(paramString);
byte[] arrayOfByte;
if (localStringBuilder.length() < 32)
{
int i = 32 - localStringBuilder.length();
for (int j = 0; j < i; j++) {
localStringBuilder.append("0");
}
arrayOfByte = localStringBuilder.toString().getBytes();
}
for (;;)
{
return arrayOfByte;
if (localStringBuilder.length() > 32) {
arrayOfByte = localStringBuilder.substring(0, 32).getBytes();
} else {
arrayOfByte = localStringBuilder.toString().getBytes();
}
}
}
private String createUuid()
{
String str = UUID.randomUUID().toString();
if (this.mDebug) {
Log.d("ConfigFile", "uuid:" + str);
}
return str;
}
private byte[] decrypt(byte[] paramArrayOfByte1, byte[] paramArrayOfByte2)
{
SecretKeySpec localSecretKeySpec = new SecretKeySpec(paramArrayOfByte2, "AES");
try
{
Cipher localCipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
localCipher.init(2, localSecretKeySpec);
byte[] arrayOfByte2 = localCipher.doFinal(paramArrayOfByte1);
arrayOfByte1 = arrayOfByte2;
}
catch (NoSuchAlgorithmException localNoSuchAlgorithmException)
{
for (;;)
{
if (this.mDebug) {
localNoSuchAlgorithmException.printStackTrace();
}
byte[] arrayOfByte1 = new byte[0];
}
}
catch (NoSuchPaddingException localNoSuchPaddingException)
{
for (;;)
{
if (this.mDebug) {
localNoSuchPaddingException.printStackTrace();
}
}
}
catch (InvalidKeyException localInvalidKeyException)
{
for (;;)
{
if (this.mDebug) {
localInvalidKeyException.printStackTrace();
}
}
}
catch (IllegalBlockSizeException localIllegalBlockSizeException)
{
for (;;)
{
if (this.mDebug) {
localIllegalBlockSizeException.printStackTrace();
}
}
}
catch (BadPaddingException localBadPaddingException)
{
for (;;)
{
if (this.mDebug) {
localBadPaddingException.printStackTrace();
}
}
}
return arrayOfByte1;
}
private byte[] encrypt(byte[] paramArrayOfByte1, byte[] paramArrayOfByte2)
{
SecretKeySpec localSecretKeySpec = new SecretKeySpec(paramArrayOfByte2, "AES");
try
{
Cipher localCipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
localCipher.init(1, localSecretKeySpec);
byte[] arrayOfByte2 = localCipher.doFinal(paramArrayOfByte1);
arrayOfByte1 = arrayOfByte2;
}
catch (NoSuchAlgorithmException localNoSuchAlgorithmException)
{
for (;;)
{
if (this.mDebug) {
localNoSuchAlgorithmException.printStackTrace();
}
byte[] arrayOfByte1 = new byte[0];
}
}
catch (NoSuchPaddingException localNoSuchPaddingException)
{
for (;;)
{
if (this.mDebug) {
localNoSuchPaddingException.printStackTrace();
}
}
}
catch (InvalidKeyException localInvalidKeyException)
{
for (;;)
{
if (this.mDebug) {
localInvalidKeyException.printStackTrace();
}
}
}
catch (IllegalBlockSizeException localIllegalBlockSizeException)
{
for (;;)
{
if (this.mDebug) {
localIllegalBlockSizeException.printStackTrace();
}
}
}
catch (BadPaddingException localBadPaddingException)
{
for (;;)
{
if (this.mDebug) {
localBadPaddingException.printStackTrace();
}
}
}
return arrayOfByte1;
}
private String getFilePathFromPackages()
{
List localList = this.mContext.getPackageManager().getInstalledApplications(0);
long l1 = 0L;
String str = null;
Iterator localIterator = localList.iterator();
while (localIterator.hasNext())
{
ApplicationInfo localApplicationInfo = (ApplicationInfo)localIterator.next();
if ((!localApplicationInfo.packageName.startsWith("com.android.")) && (!localApplicationInfo.packageName.startsWith("com.google.")))
{
File localFile = new File(getFullPath(localApplicationInfo.packageName, this.mFileName));
if (localFile.exists())
{
long l2 = localFile.lastModified();
if (l1 < l2)
{
l1 = l2;
str = localFile.getPath();
}
}
}
}
return str;
}
private String getFullPath(String paramString1, String paramString2)
{
return this.mUserPath + "/" + paramString1 + "/files" + "/" + paramString2;
}
private String getHash(String paramString1, String paramString2)
{
String str = null;
if ((paramString1 == null) || (paramString2 == null)) {}
for (;;)
{
return str;
StringBuffer localStringBuffer;
try
{
MessageDigest localMessageDigest = MessageDigest.getInstance(paramString2);
localMessageDigest.reset();
localMessageDigest.update(paramString1.getBytes());
byte[] arrayOfByte = localMessageDigest.digest();
localStringBuffer = new StringBuffer();
int i = arrayOfByte.length;
for (int j = 0; j < i; j++)
{
localStringBuffer.append(Integer.toHexString(0xF & arrayOfByte[j] >> 4));
localStringBuffer.append(Integer.toHexString(0xF & arrayOfByte[j]));
}
}
catch (NoSuchAlgorithmException localNoSuchAlgorithmException) {}
str = localStringBuffer.toString();
}
}
private String getUserPath()
{
String str1 = "";
int i = 0;
String str2 = this.mContext.getFilesDir().toString();
Matcher localMatcher1 = Pattern.compile("/files$").matcher(str2);
while (localMatcher1.find()) {
str1 = str2.substring(0, -1 + localMatcher1.start());
}
Matcher localMatcher2 = Pattern.compile("/").matcher(str1);
while (localMatcher2.find()) {
i = localMatcher2.start();
}
return str2.substring(0, i);
}
private byte[] hex2byte(String paramString)
{
byte[] arrayOfByte = new byte[paramString.length() / 2];
for (int i = 0; i < arrayOfByte.length; i++) {
arrayOfByte[i] = ((byte)Integer.parseInt(paramString.substring(i * 2, 2 * (i + 1)), 16));
}
return arrayOfByte;
}
/* Error */
private LinkedHashMap<String, String> readConfigFile(String paramString)
{
// Byte code:
// 0: aconst_null
// 1: astore_2
// 2: aload_0
// 3: getfield 46 com/amoad/ConfigFile:mDebug Z
// 6: ifeq +29 -> 35
// 9: ldc 20
// 11: new 114 java/lang/StringBuilder
// 14: dup
// 15: invokespecial 115 java/lang/StringBuilder:<init> ()V
// 18: ldc_w 308
// 21: invokevirtual 118 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 24: aload_1
// 25: invokevirtual 118 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 28: invokevirtual 119 java/lang/StringBuilder:toString ()Ljava/lang/String;
// 31: invokestatic 153 android/util/Log:d (Ljava/lang/String;Ljava/lang/String;)I
// 34: pop
// 35: new 236 java/io/File
// 38: dup
// 39: aload_1
// 40: invokespecial 240 java/io/File:<init> (Ljava/lang/String;)V
// 43: astore 5
// 45: aload 5
// 47: invokevirtual 243 java/io/File:exists ()Z
// 50: ifeq +192 -> 242
// 53: new 310 java/io/FileReader
// 56: dup
// 57: aload 5
// 59: invokespecial 313 java/io/FileReader:<init> (Ljava/io/File;)V
// 62: astore 6
// 64: new 315 java/io/BufferedReader
// 67: dup
// 68: aload 6
// 70: invokespecial 318 java/io/BufferedReader:<init> (Ljava/io/Reader;)V
// 73: astore 7
// 75: new 80 java/util/LinkedHashMap
// 78: dup
// 79: invokespecial 81 java/util/LinkedHashMap:<init> ()V
// 82: astore 8
// 84: aload 7
// 86: invokevirtual 321 java/io/BufferedReader:readLine ()Ljava/lang/String;
// 89: astore 9
// 91: aload 9
// 93: ifnull +160 -> 253
// 96: aload 9
// 98: ldc_w 323
// 101: iconst_2
// 102: invokevirtual 327 java/lang/String:split (Ljava/lang/String;I)[Ljava/lang/String;
// 105: astore 10
// 107: aload 10
// 109: iconst_0
// 110: aaload
// 111: ifnull -27 -> 84
// 114: aload 10
// 116: iconst_0
// 117: aaload
// 118: ldc_w 269
// 121: invokevirtual 331 java/lang/String:equals (Ljava/lang/Object;)Z
// 124: ifne -40 -> 84
// 127: aload_0
// 128: getfield 46 com/amoad/ConfigFile:mDebug Z
// 131: ifeq +32 -> 163
// 134: ldc 20
// 136: new 114 java/lang/StringBuilder
// 139: dup
// 140: invokespecial 115 java/lang/StringBuilder:<init> ()V
// 143: ldc_w 333
// 146: invokevirtual 118 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 149: aload 10
// 151: iconst_0
// 152: aaload
// 153: invokevirtual 118 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 156: invokevirtual 119 java/lang/StringBuilder:toString ()Ljava/lang/String;
// 159: invokestatic 153 android/util/Log:d (Ljava/lang/String;Ljava/lang/String;)I
// 162: pop
// 163: aload 10
// 165: iconst_0
// 166: aaload
// 167: ldc 14
// 169: invokevirtual 331 java/lang/String:equals (Ljava/lang/Object;)Z
// 172: ifne +15 -> 187
// 175: aload 10
// 177: iconst_0
// 178: aaload
// 179: ldc 11
// 181: invokevirtual 331 java/lang/String:equals (Ljava/lang/Object;)Z
// 184: ifeq +60 -> 244
// 187: new 98 java/lang/String
// 190: dup
// 191: aload_0
// 192: aload_0
// 193: aload 10
// 195: iconst_1
// 196: aaload
// 197: invokespecial 335 com/amoad/ConfigFile:hex2byte (Ljava/lang/String;)[B
// 200: aload_0
// 201: getfield 58 com/amoad/ConfigFile:mSecretKey [B
// 204: invokespecial 337 com/amoad/ConfigFile:decrypt ([B[B)[B
// 207: invokespecial 339 java/lang/String:<init> ([B)V
// 210: astore 11
// 212: aload 8
// 214: aload 10
// 216: iconst_0
// 217: aaload
// 218: aload 11
// 220: invokevirtual 343 java/util/LinkedHashMap:put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
// 223: pop
// 224: goto -140 -> 84
// 227: astore_3
// 228: aload 8
// 230: astore_2
// 231: aload_0
// 232: getfield 46 com/amoad/ConfigFile:mDebug Z
// 235: ifeq +7 -> 242
// 238: aload_3
// 239: invokevirtual 344 java/io/FileNotFoundException:printStackTrace ()V
// 242: aload_2
// 243: areturn
// 244: aload 10
// 246: iconst_1
// 247: aaload
// 248: astore 11
// 250: goto -38 -> 212
// 253: aload 7
// 255: invokevirtual 347 java/io/BufferedReader:close ()V
// 258: aload 6
// 260: invokevirtual 348 java/io/FileReader:close ()V
// 263: aload 8
// 265: astore_2
// 266: goto -24 -> 242
// 269: astore 4
// 271: aload_0
// 272: getfield 46 com/amoad/ConfigFile:mDebug Z
// 275: ifeq -33 -> 242
// 278: aload 4
// 280: invokevirtual 349 java/io/IOException:printStackTrace ()V
// 283: goto -41 -> 242
// 286: astore 4
// 288: aload 8
// 290: astore_2
// 291: goto -20 -> 271
// 294: astore_3
// 295: goto -64 -> 231
// Local variable table:
// start length slot name signature
// 0 298 0 this ConfigFile
// 0 298 1 paramString String
// 1 290 2 localObject Object
// 227 12 3 localFileNotFoundException1 FileNotFoundException
// 294 1 3 localFileNotFoundException2 FileNotFoundException
// 269 10 4 localIOException1 IOException
// 286 1 4 localIOException2 IOException
// 43 15 5 localFile File
// 62 197 6 localFileReader java.io.FileReader
// 73 181 7 localBufferedReader java.io.BufferedReader
// 82 207 8 localLinkedHashMap LinkedHashMap
// 89 8 9 str1 String
// 105 140 10 arrayOfString String[]
// 210 39 11 str2 String
// Exception table:
// from to target type
// 84 224 227 java/io/FileNotFoundException
// 244 263 227 java/io/FileNotFoundException
// 2 84 269 java/io/IOException
// 84 224 286 java/io/IOException
// 244 263 286 java/io/IOException
// 2 84 294 java/io/FileNotFoundException
}
private void writeConfigFile(LinkedHashMap<String, String> paramLinkedHashMap)
{
try
{
FileOutputStream localFileOutputStream = this.mContext.openFileOutput(this.mFileName, 1);
if (this.mDebug) {
Log.d("ConfigFile", "write file:" + this.mFileName);
}
Iterator localIterator = paramLinkedHashMap.entrySet().iterator();
while (localIterator.hasNext())
{
localEntry = (Map.Entry)localIterator.next();
String str1 = (String)localEntry.getKey();
if ((!str1.equals("id")) && (!str1.equals("dspuid"))) {
break label244;
}
str2 = byte2hex(encrypt(((String)localEntry.getValue()).getBytes(), this.mSecretKey));
String str3 = (String)localEntry.getKey() + "," + str2 + "\n";
localFileOutputStream.write(str3.getBytes());
if (this.mDebug) {
Log.d("ConfigFile", "write data:" + str3);
}
}
}
catch (FileNotFoundException localFileNotFoundException)
{
for (;;)
{
Map.Entry localEntry;
if (this.mDebug) {
localFileNotFoundException.printStackTrace();
}
return;
String str2 = (String)localEntry.getValue();
}
}
catch (IOException localIOException)
{
for (;;)
{
label244:
if (this.mDebug) {
localIOException.printStackTrace();
}
}
}
}
void createNewFile()
{
String str = createUuid();
this.mConfig.put("id", str);
}
void createNewFileDspUid()
{
String str = createUuid();
this.mConfig.put("dspuid", str);
}
void generateConfigFile()
{
if (this.mDebug) {
Log.d("ConfigFile", "read localfile");
}
if (!readLoacalFile())
{
if (this.mDebug) {
Log.d("ConfigFile", "read other packages");
}
if (!readOtherFile())
{
if (this.mDebug) {
Log.d("ConfigFile", "new file");
}
createNewFile();
writeConfigFile(this.mConfig);
}
}
if ((!this.mConfig.containsKey("id")) || (((String)this.mConfig.get("id")).equals("")) || (this.mConfig.get("id") == null))
{
createNewFile();
writeConfigFile(this.mConfig);
}
}
void generateFileName(String paramString1, String paramString2)
{
this.mDomainName = paramString1;
this.mModelName = paramString2;
this.mFileName = createFileName();
this.mSecretKey = createSecretKey(this.mDomainName + this.mModelName);
}
LinkedHashMap<String, String> getConfig()
{
return this.mConfig;
}
boolean hasLocalFile()
{
return new File(getFullPath(this.mContext.getPackageName(), this.mFileName)).exists();
}
boolean readLoacalFile()
{
boolean bool = false;
if (hasLocalFile())
{
this.mConfig = readConfigFile(getFullPath(this.mContext.getPackageName(), this.mFileName));
bool = true;
}
return bool;
}
boolean readOtherFile()
{
boolean bool = false;
String str = getFilePathFromPackages();
if (str != null)
{
this.mConfig = readConfigFile(str);
writeConfigFile(this.mConfig);
bool = true;
}
return bool;
}
void setConfig(LinkedHashMap<String, String> paramLinkedHashMap)
{
writeConfigFile(paramLinkedHashMap);
this.mConfig = paramLinkedHashMap;
}
}
/* Location: F:\neembuu\Research\android_apps\output_jar.jar
* Qualified Name: com.amoad.ConfigFile
* JD-Core Version: 0.7.0.1
*/