赞
踩
1:反编译没有加壳加固的apk(so文件的反编译后续在搞)
UI 工具:jadx-gui ;
也可以用该工具中的jadx dos中执行命令:jadx -d QQ.apk 生成QQ目录即为反编译的代码
Linux中命令:./jadx -d QQ.apk
resources目录下是资源文件;
sources目录下是代码文件;
2:反编译加壳加固的apk:
apk加壳
所谓 Apk 加壳,就是给目标 Apk 加一层保护程序,把重要数据信息隐藏起来。加壳程序可以有效阻止对程序的反编译和逆向分析。Apk 壳本质的功能就是实现类加载器。系统先执行壳代码,然后将加了密的 dex 进行解密操作,再加载到系统内存中运行。
安卓 dex 加壳原理
加壳过程中主要有三个程序:
加壳过程:
脱壳过程:
壳史
第一代壳:DEX 加密 (混淆技术)
第二代壳:Dex 抽取与 So 加固 (加壳技术)
类抽取常规的有隐藏 dex 文件和修改 dex 结构。隐藏 dex 文件是通过对目标 dex 文件进行整体加密或压缩方式把整个 dex 转换为另外一个文件存放在 assert 文件夹中或者其它地方,然后利用类加载器技术进行内存解密并加载运行。而修改 dex 结构则是抽取 DexCode 中的字节码指令后用零去填充,或者修改方法属性等操作,运行时在内存中做修正,修复等处理工作。
关于 Dex 动态加载,就要提到 dalvik 虚拟机了。它和 java 虚拟机一样,在运行程序时首先需要将对应的类加载到内存中。在标准虚拟机中,类加载可以从 class 文件中读取,也可以是其他二进制流,这样就可以在程序运行时手动加载 class,从而达到代码动态执行的目的。常用的有两个类:DexClassLoader 和 PathClassLoader,PathClassLoader 是安卓应用中的默认加载器。区别:
第三代壳:Dex 动态解密与 So 混淆 (指令抽离)
第四代壳:arm vmp(指令转换)
vmp:用 vmp 加固后的还原过程比较复杂和困难,需要用大量的时间作分析。
加固方案区分:国内提供 apk 加固的第三方技术公司有:娜迦、爱加密、梆梆加固、360加固保、百度加固、腾讯加固等。大多数加密后都会生成相应的特征 so 文件。这样就可以根据 so 来查壳
VirtualXposed
VirtualXposed:无需root手机即可使用Xposed框架。
ZjDroid
ZjDroid是基于Xposed Framewrok的动态逆向分析模块,逆向分析者可以通过ZjDroid完成以下工作: 1、DEX文件的内存dump 2、基于Dalvik关键指针的内存BackSmali,有效破解主流加固方案 3、敏感API的动态监控 4、指定内存区域数据dump 5、获取应用加载DEX信息。 6、获取指定DEX文件加载类信息。 7、dump Dalvik java堆信息。 8、在目标进程动态运行lua脚本。
FDex2
FDex2,可以从安卓app中dump导出有用的dex文件,供后续再从dex导出jar包,jar包导出java源码,功能非常的强大。
frida
frida的原理是,通过在PC上安装Frida,手机上运行frida-server,实现PC对手机的控制,同时通过js注入的方式,将dex从“壳”里“钩”出来。它是一款基于Python的hook(钩子)工具,因此在安装它之前我们需要先配置Py环境,现在的frida仅支持3.7以下的环境,3.8以上的暂不支持。FRIDA-DEXDump
dumpDex
dumpDex是一款Android脱壳工具,需要xposed支持
drizzleDumper
drizzleDumper是一款基于内存搜索的Android脱壳工具,可以从运行中的安卓app中,利用ptrace机制,导出dex文件
VirtualXposed脱壳需要安装xposed软件及下载apk软件 模块dumpDex、FDex2 ,配置完毕重启手机或者模拟器就行,网上很多资料,这里主要说下frida;
环境软件安装:
- pip install frida-tools
- pip install frida-dexdump
记好 frida-dexdump所在目录后面要用;
adb shell
getprop ro.product.cpu.abi 可拿到手机cpu 架构 我这里是x86_64然后去下载frida-server根据自己CPU架构选择
https://github.com/frida/frida/releases/tag/16.0.0
adb push frida-server-16.0.0-android-x86_64 /data/local/tmp
adb shell
cd /data/local/tmp/
chmod 777 /data/local/tmp/frida-server-16.0.0-android-x86_64
启动服务./frida-server-16.0.0-android-x86_64
然后在新开dos 进入frida所在目录 :AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\Scripts
执行:frida-ps -U 查看正在运行的应用。
frida-dexdump -U -p 进程id
frida-dexdump -U -n 名称
就可以在frida-dexdump所在目录看到生成的dex文件然后再用dex2jar2.0 指令转化成jar 在解压就能拿到反编译后的代码了。 d2j-dex2jar.bat classes.dex
或者利用jadx-gui 操作:
jadx -d dexdir classes.dex 生成dexdir 目录即为反编译的代码
Linux中命令:./jadx -d dexdir QQ.apk
3:获取apk的基本信息
(1)获取签名信息指令:keytool -printcert -jarfile xx.apk
也可根据META-INF目录下的签名信息操作:
keytool -printcert -file xx.RSA
同时打开xx.SF
如果.SF文件抬头包含X-Android-APK-Signed: 2,则表明该apk是V1和V2混合签名;
如果.SF文件抬头不包含X-Android-APK-Signed: 2,则表明该apk是纯V1签名;
如果连.SF文件都没有,则表明该apk是纯V2签名;
(2): 获取apk编译信息:aapt dump badging C:\Users\housc\Desktop\xx.apk
package name:包名
versionCode:版本号
versionName:版本名称
sdkVersion: 最低编译环境SDK版本
targetSdkVersion:当前编译环境SDK版本
uses-permission:权限申请
over!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。