本文目录一览:
Android APP的破解技术有哪些?如何防止反编译?
由于Android系统的开放性,导致Android
APK很容易被他人破解或是反编译,下面给大家介绍常用的APP破解工具和技术要求。同时根据自己以往的防破解经验,跟大家分析下如何防止反编译。
Android
APK运行环境依赖的文件/文件夹
res、DEX、主配文件Lib
只是简单的加密甚至没有任何保护措施。APKtool(一种反编译工具)可轻易将其轻松破解,再配合其他各种工具基本可以做到:源码暴露(代码混淆也几乎起不到任何安全作用)、资源文件裸奔、主配文件可任意修改、核心SO库暴露、暴力破解恶意利用等。部分大公司会对其应用APK包进行防二次打包和防APKtool破解,但其代码都是写在JAVA层,另外APKtool的可升级导致其安全保护级别也是非常低的。
如何破解安卓系统中已提取的APK程序
一、APK生成 odex文件方法:
编译开源GIT上的build/tools /dexpreopt/dexopt-wrapper这个,使用dexopt-wrapper即可,操作步骤将dexopt-wrapper放到/data/local目录中,使用adb shell执行linux命令行,使用cd命令进入/data/local目录,cd /data/local./dexoptwrapper android123.apk android123.odex
二、合并odex和 少dex的apk 为完整的apk文件
需要用到的工具是smali,一个开源的java处理软件:
1.下载的baksmali和 smali的jar文件到工作目录
2.把ROM里面的core.odex, ext.odex, framework.odex, android.policy.odex, services.odex这5个文件也放在同一目录(也可以放在别的目录,通过设置BOOTCLASSPATH指定,默认就是当前目录)。
例:以teeter为例子 (HTC一些Android常常会内置),ROM里面拿出来的可能是2个文件,teeter.apk + teeter.odex。
1、分解odex文件:java -jar baksmali-1.2.1.jar -x teeter.odex如果没其他问题,会在工作目录生成一个out的目录,里面是分解出来的一些文件,我们在此不深究这些文件的作用。
2、把分解得到的文件变成classes.dex:java -Xmx512M -jar smali-1.2.1.jar out -o classes.dex,这样得到了一个有用的classes.dex文件
3、用WinZip或者WinRAR打开teeter.apk文件,把这个classes.dex 放进去
4、最后再用signapk把最新得到的这个包含classes.dex的apk重新签署一下 (Auto Sign签名工具往期的文章里有下载),就生成一个可以安装的单独APK程序了。
5、签名完成后即可安装使用了
Android破解第三方App
1. 执行命令 java -jar apktool.jar d xxx.apk
如果apk没有加固,执行完命令,就能看到反编译后的smali文件,可以阅读这些smali文件.
2. 打包命令 java -jar apktool.jar b 解包后的目录 xxx.apk
可以执行打包命令,将解包,修改后的smali再打包. 如果需要调试,需要在AndroidManifest.xml文件中,加上debugable.
此时得到的apk包没有签名,需要签名后才能安装
3. 签名 jarsigner -verbose -keystore .\xxx.jks -signedjar signed.apk xxx.apk 'benzhuo'
输入密码后,签名完毕,签名后的包是signed.apk,安装这个包.
1. 执行 java -jar apktool.jar d signed.apk. 解压刚才签名的安装包
2. 用Android Studio 打开解压后的文件夹,此时需要设置一下工程的SDK.
3. 连接上测试手机, 执行命令 adb shell am start -D -W -n 包名/LauncherActivity ,以debug模式打开应用,此时手机上打开应用会弹出提示框, Waiting For Debugger.
4. 点击Android Studio的Attach Debugger 按钮.
5. 选择调试的程序,然后就可以调试了
6. 修改了Smali文件之后,需要重新打包,然后安装在手机上,再调试.
1. 原始类型
|smali类型|java类型|
|----|---|
|B|byte|
|C|char|
|D|double|
|F|float|
|I|int|
|J|long|
|S|short|
|V|void|
|Z|boolean|
|[x| x类型数组|
|Lpackage/Object|对象|
2. 方法