First, this is not a post to talk about how much pirating apps sucks etc... 
I just want to post what I found hackers using to unlock my application from 
using the Licensing Tools provided by Android.  Anyone have any clues how to 
prevent this particular hack? Anyone familiar with this particular hack?

Please find attached the recovered file found when I decompiled hacked 
version of my application.

Thanks!
-Moto

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.util.Log;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class SmaliHook extends Activity
{
  public static int checkSignatures()
  {
    return 0;
  }

  public static int checkSignatures(String paramString1, String paramString2)
  {
    return 0;
  }

  public static int getApplicationEnabledSetting(PackageManager paramPackageManager, String paramString)
  {
    try
    {
      int i = paramPackageManager.getApplicationEnabledSetting(paramString);
      int j = i;
      if (j == 2)
        j = 0;
      k = j;
      return k;
    }
    catch (IllegalArgumentException localIllegalArgumentException)
    {
      while (true)
        int k = 0;
    }
  }

  public static String getInstallerPackageName(String paramString)
  {
    return "com.google.android.feedback";
  }

  public static PackageInfo getPackageInfo(PackageManager paramPackageManager, String paramString, int paramInt)
    throws PackageManager.NameNotFoundException
  {
    try
    {
      PackageInfo localPackageInfo1 = paramPackageManager.getPackageInfo(paramString, paramInt);
      localPackageInfo2 = localPackageInfo1;
      if ((paramInt & 0x40) == 64)
      {
        Signature[] arrayOfSignature1 = spoofSignatures();
        Signature[] arrayOfSignature2 = localPackageInfo2.signatures;
        Signature localSignature = arrayOfSignature1[0];
        arrayOfSignature2[0] = localSignature;
      }
      return localPackageInfo2;
    }
    catch (PackageManager.NameNotFoundException localNameNotFoundException)
    {
      while (true)
        PackageInfo localPackageInfo2 = paramPackageManager.getPackageInfo("com.application.packagename.here", paramInt);
    }
  }

  public static Object invokeHook(Method paramMethod, Object paramObject, Object[] paramArrayOfObject)
    throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException, InstantiationException, ClassNotFoundException, PackageManager.NameNotFoundException
  {
    String str1 = paramObject.getClass().getName();
    String str2 = paramMethod.getName();
    String str3 = "smali hook - class: " + str1 + " method: " + str2;
    int i = Log.d("lohan", str3);
    Object localObject1;
    if ((str1.equals("android.app.ContextImpl$ApplicationPackageManager")) || (str1.equals("android.app.ApplicationContext$ApplicationPackageManager")) || (str1.equals("android.content.pm.PackageManager")) || (str1.contains("ApplicationPackageManager")))
      if (str2.equals("getInstallerPackageName"))
        localObject1 = getInstallerPackageName((String)paramArrayOfObject[0]);
    while (true)
    {
      return localObject1;
      if (str2.equals("getPackageInfo"))
      {
        int j = ((Integer)paramArrayOfObject[1]).intValue();
        if (str1.equals("android.content.pm.PackageManager"))
        {
          PackageManager localPackageManager1 = (PackageManager)paramObject;
          String str4 = (String)paramArrayOfObject[0];
          localObject1 = getPackageInfo(localPackageManager1, str4, j);
          continue;
        }
        try
        {
          Object localObject2 = paramMethod.invoke(paramObject, paramArrayOfObject);
          localObject3 = localObject2;
          if ((j & 0x40) == 64)
          {
            Signature[] arrayOfSignature1 = spoofSignatures();
            Signature[] arrayOfSignature2 = ((PackageInfo)localObject3).signatures;
            Signature localSignature = arrayOfSignature1[0];
            arrayOfSignature2[0] = localSignature;
          }
          localObject1 = localObject3;
        }
        catch (Exception localException)
        {
          while (true)
          {
            Object[] arrayOfObject = new Object[1];
            arrayOfObject[0] = "%!AppPackage";
            Object localObject3 = paramMethod.invoke(paramObject, arrayOfObject);
          }
        }
      }
      if (str2.equals("getApplicationEnabledSetting"))
      {
        PackageManager localPackageManager2 = (PackageManager)paramObject;
        String str5 = (String)paramArrayOfObject[0];
        localObject1 = Integer.valueOf(getApplicationEnabledSetting(localPackageManager2, str5));
        continue;
      }
      if (str2.equals("checkSignatures"))
      {
        String str6 = (String)paramArrayOfObject[0];
        String str7 = (String)paramArrayOfObject[1];
        localObject1 = Integer.valueOf(checkSignatures(str6, str7));
        continue;
        if ((str1.equals("java.io.File")) && (shouldSpoofFileInfo(((File)paramObject).getName())) && (str2.equals("length")))
        {
          localObject1 = Long.valueOf(length((File)paramObject));
          continue;
        }
      }
      localObject1 = paramMethod.invoke(paramObject, paramArrayOfObject);
    }
  }

  public static long length(File paramFile)
  {
    long l;
    if (shouldSpoofFileInfo(paramFile.getName()))
      l = 2144919L;
    while (true)
    {
      return l;
      l = paramFile.length();
    }
  }

  public static boolean shouldSpoofFileInfo(String paramString)
  {
    if (paramString.contains("com.application.packagename.here"));
    for (int i = 1; ; i = 0)
      return i;
  }

  public static Signature[] spoofSignatures()
  {
    Signature[] arrayOfSignature = new Signature[3];
    int i = 0;
    while (true)
    {
      if (i >= 3)
        return arrayOfSignature;
      Signature localSignature = new Signature("3082021f30820188a00302010202044a218400300d06092a864886f70d0101050500305431183016060355040a130f56697375616c20426c61737465727331183016060355040b130f56697375616c20426c617374657273311e301c060355040313154a6f6e617468616e204d6172636f73204d65736f6e301e170d3039303533303139303734345a170d3334303532343139303734345a305431183016060355040a130f56697375616c20426c61737465727331183016060355040b130f56697375616c20426c617374657273311e301c060355040313154a6f6e617468616e204d6172636f73204d65736f6e30819f300d06092a864886f70d010101050003818d0030818902818100e3ea40fe5d10011745d5f02761a2c1379cb549645e92d55afff63bb1307b26a344e8995ca14bc61db7069e2c8fed42ff082921c5d24e68ef08ca4141afe858413f2a38c7f5a4591b3fcb8349b82c55e3cce28b8b5c1ab6e44b5b8dd8691d5c2f40c3e16c69e5f8b3ed69902551d08e1012816e6e522fc2f0102e226363ef54550203010001300d06092a864886f70d010105050003818100bd3ab25b857e8eab472884be1816b2b0f406d05fa6d0eb558cf22e89e20d36d37c76ef86a86d604f5722e8d1664d4468caf06ebea1ae2b7203a86469b60254652fbf69fad0c2349639faf9a0f867fffd0ea4612dabb7069b8d616f1fc5afde761c44adc15a8121e0a52ac8fd5334bd0e0d11c89409aea298f80f0dca12bfb8ff");
      arrayOfSignature[i] = localSignature;
      i += 1;
    }
  }
}

/* Location:           D:\Projects\Android\beta_releases\dex2jar-0.0.7.8-SNAPSHOT\com.application.packagename.here.apk.dex2jar.jar
 * Qualified Name:     SmaliHook
 * JD-Core Version:    0.6.0
 */

Reply via email to