我有一些关于dex文件的问题
dexAndroid中的文件是什么?我需要具体的信息请帮忙,欢迎任何真实的例子!
用户是否能够将我的应用程序的apk文件转换回实际代码?如果他们这样做 - 有什么办法可以阻止这种情况吗?
我找到了将文件dex反编译为jar的解决方案来自此链接http://code.google.com/p/dex2jar/downloads/list但我不明白如何使用它.
众所周知,Android应用程序是用Java编写的.在Java中,无论你做什么,都不可能保护编译代码免受反编译或反向工程,如Stack Overflow问题如何锁定已编译的Java类以防止反编译?提示.
如何保护包含逆向工程的算法商业秘密的应用程序?
"如何"我不仅指软件技术,还指其他创造性方法.
我正在我的应用程序上尝试新的MultiDex支持,到目前为止我已经设法正确编译我的应用程序,但在运行它时,我得到以下异常:
java.lang.RuntimeException: Unable to instantiate application android.support.multidex.MultiDexApplication: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me..main-2, /vendor/lib, /system/lib]]
at android.app.LoadedApk.makeApplication(LoadedApk.java:507)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4382)
at android.app.ActivityThread.access$1500(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5086)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me.myapp.main-2, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
at android.app.Instrumentation.newApplication(Instrumentation.java:998)
at android.app.LoadedApk.makeApplication(LoadedApk.java:502)
Run Code Online (Sandbox Code Playgroud)
这是我的gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion …Run Code Online (Sandbox Code Playgroud) 我有Android应用程序,它具有硬编码(静态字符串常量)凭据(用户/通行证),用于通过SMTP发送电子邮件.
问题是.apk中的.dex文件可以很容易地进行逆向工程,每个人都可以看到我的密码.
有没有办法如何保护这些凭据,而我仍然可以在我的课程中使用它们?
我知道如何使用基于Windows的系统将apk文件解压缩到类中,如下所示:
第1步:重命名.apk文件
使用扩展名.zip重命名.apk文件(例如,让文件为"demofile.apk",然后在重命名后变为"demofile.apk.zip")
第2步:从apk获取java文件
现在解压缩特定文件夹中的重命名的zip文件,例如,让该文件夹为"demofolder".现在从windows的链接下载dex2jar并将该zip文件解压缩到"demofolder"文件夹中.
现在打开命令提示符并转到上一步创建的文件夹并输入命令"dex2jar classes.dex"并按Enter键.这将在同一文件夹中生成"classes.dex.dex2jar"文件.
现在从链接下载java反编译器并解压缩并启动(双击)jd-gui.exe
从jd-gui窗口浏览demofolder中生成的"classes.dex.dex2jar"文件,这将通过src名称给出所有类文件.
现在从File菜单中选择"save all sources",这将生成一个名为"classes_dex2jar.src.zip"的zip文件,其中包含所有包和java文件.
解压缩该zip文件(classes_dex2jar.src.zip),您将获得该应用程序的所有java文件.
以上步骤将生成java文件,但要获取xml文件执行以下步骤.
第3步:从apk获取xml文件
从链接下载apktool和apktool安装并解压缩两个文件并将其放在同一个文件夹中(例如"demoxmlfolder").
将.apk文件放在同一个文件夹中(即demoxmlfolder)
现在打开命令提示符并转到存储apktool的目录(这里是"demoxmlfolder")并输入命令"apktool if framework-res.apk"上面的命令应该导致"Framework installed ..."现在在命令提示符下键入命令"apktool d filename.apk"(其中filename是apk文件的名称)这将在当前目录(此处为demoxmlfolder)中生成名称filename的文件夹,其中所有xml文件将存储在res\layout文件夹中.
但我想知道如何在Android中以编程方式完成上述操作.所以我的android应用程序可以简单地提取另一个应用程序的dex文件.我不介意dex文件是否被复制到手机上的其他地方,然后反编译(这只是我坚持的反编译)
根据以下原则,我可以访问每个应用程序的dex,而不知道如何在Android中对其进行反编译.
任何帮助都会很棒.
final PackageManager pm = getPackageManager();
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo("PACKAGE NAME HERE", PackageManager.GET_META_DATA);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
File file = new File(packageInfo.applicationInfo.sourceDir);
Uri uri = Uri.fromFile(file);
Run Code Online (Sandbox Code Playgroud) 我想知道用android中的应用程序打包数据库是多么安全.用户可以轻松访问数据库吗?由于我拥有的数据库将拥有数据,我不想被用户滥用而被滥用,在移动应用程序中保护数据库的最佳方法是什么?
我的应用程序也将使用Web服务(联系我自己的网站),例如http:\ www.mysite.com/services/xxx
我的网站会将一些数据返回给移动应用.如果有人反编译java代码(在apk中),他将很容易访问我用于Web服务的URL.如何保护我的网站数据免受恶意用户的攻击.如果有人知道URL,他只需在浏览器中键入该URL并获取json格式的所有数据,这是我不想要的,因为这些数据可能非常敏感.即使我保持编码,用户也可以从java代码(他在反编译apk后获得)中了解编码.
如何保护我的数据库不被滥用?
如果我的应用程序要在移动设备上显示诸如餐馆,酒吧等本地地点,我应该总是使用网络服务从网站上获取它们,或者提供具有这些详细信息的本地数据库,以便可以快速获取信息.在这种情况下,我可以提供UPDATE Web服务,它将更新本地数据库.但是本地数据库的安全性对我来说非常重要.
任何人都可以建议在哪里保留数据库以及如何保护它?
Rgds,Sapan
在iPhone上有几种方法可以检测用户何时打开盗版应用程序的版本.
有没有办法在Android上检测用户何时使用您的应用程序的盗版版本?
android ×9
java ×4
dex ×3
apk ×2
decompiling ×2
credentials ×1
database ×1
decompiler ×1
gradle ×1
obfuscation ×1
piracy ×1
security ×1
smali ×1
sqlite ×1
xml ×1