逆向android app相关工具
- Apktool
- dumpDex-Android脱壳工具
- jd-gui A standalone Java Decompiler GUI
- jadx Dex to Java decompiler
-
luyten An Open Source Java Decompiler Gui for Procyon
- dex2jar Tools to work with android .dex and java .class files
反编译android app步骤
加壳判断
1.判断app是否加壳,通过7zip工具解压android app,查看解压后的文件夹的根目录下是否含有classes.dex或者classes2.dex,如果含有一般可以通过上面的jadx工具打开是可以看到对应代码,这个是最简单的情况。
2.如果没有对应的classes.dex,一般可以确定是加壳了。通过查看资料发现大多数加壳后都会生成相应的特征so文件。这样就可以根据so来查壳,本文以360的某一款浏览器为例解压,并在其中可以找到libjiagu.so文件,可以确定该浏览器使用了360加固。
特征So文件 | 所属加固公司 | 特征So文件 | 所属加固公司 |
---|---|---|---|
libchaosvmp.so | 娜迦 | libsgsecuritybody.so | 阿里聚安全 |
libddog.so | 娜迦 | libmobisec.so | 阿里聚安全 |
libfdog.so | 娜迦 | libtup.so | 腾讯 |
libedog.so | 娜迦企业版 | libexec.so | 腾讯 |
libexec.so | 爱加密 | libshell.so | 腾讯 |
libexecmain.so | 爱加密 | mix.dex | 腾讯 |
ijiami.dat | 爱加密 | lib/armeabi/mix.dex | 腾讯 |
ijiami.ajm | 爱加密企业版 | lib/armeabi/mixz.dex | 腾讯 |
libsecexe.so | 梆梆免费版 | libtosprotection.armeabi.so | 腾讯御安全 |
libsecmain.so | 梆梆免费版 | libtosprotection.armeabi-v7a.so | 腾讯御安全 |
libSecShell.so | 梆梆免费版 | libtosprotection.x86.so | 腾讯御安全 |
libDexHelper.so | 梆梆企业版 | libnesec.so | 网易易盾 |
libDexHelper-x86.so | 梆梆企业版 | libAPKProtect.so | APKProtect |
libprotectClass.so | 360 | libkwscmm.so | 几维安全 |
libjiagu.so | 360 | libkwscr.so | 几维安全 |
libjiagu_art.so | 360 | libkwslinker.so | 几维安全 |
libjiagu_x86.so | 360 | libx3g.so | 顶像科技 |
libegis.so | 通付盾 | libapssec.so | 盛大 |
libNSaferOnly.so | 通付盾 | librsprotect.so | 瑞星 |
libnqshield.so | 网秦 | ||
libbaiduprotect.so | 百度 | ||
aliprotect.dat | 阿里聚安全 | ||
libsgmain.so | 阿里聚安全 |
参考来源:APK脱壳简介
脱壳准备工作
既然发现软件加壳,要想看到源代码只能进行脱壳操作。本文以dumpDex-Android脱壳工具进行脱壳。这款工具需要配合安卓5.0以上的手机 + xposed框架操作,如果没有可以使用虚拟机进行操作,或者使用virtualxposed。
国内大部分的安卓模拟器基本不支持5.0以上的android系统,本文使用支持android 5.0 genymotion做演示。
虚拟机安装过程说明:
- 打开官网注册(需要验证邮箱)
- 打开下载网址下载with VirtualBox的Genymotion。
- 下载之后打开Genymotion并安装软件,基本都是点击下一步,同时该软件会安装virtualBox确认并安装。
-
安装完成以后打开Genymotion软件,添加android 虚拟机并安装完成。建议使用google Nexus5X-6.0操作系统。
- 下载Genymotion ARM Translation 密码: g7xw,使android 虚拟机支持arm
- 打开android 虚拟机,在非中文目录将Genymotion ARM Translation.zip用鼠标拖动到android虚拟机界面上,安装文件并重启虚拟机。
- 添加android虚拟与windows共享目录方便脱壳之后的源文件在电脑上分析。
通过dumpDex脱壳
虚拟机安装完成以后,请安装软件到虚拟机上,安装app可以通过拖动app到android虚拟机界面上即可安装。
准备工作做完之后:
- 安装xposed框架,并激活框架
- 安装dumpDex模块并激活
- 安装需要脱壳的软件
安装完成后,没有激活框架或模块的,请务必重启手机(虚拟机),以使xposed框架生效。
以上完成以后,打开需要脱壳的软件,等待片刻,即可在/data/data/包名/dump中看到dex后缀文件即为脱壳后的源文件。
dex文件处理
dex文件可以通过jadx工具直接查看,也可以通过dex2jar转为jar文件后查看,个人还是倾向使用dex2jar转化后通过jd-gui查看。
下载dex2jar并解压,将对应的dex文件放入解压后的dex2jar文件夹,运行下面命令即可。
dex2jar转化命令:
d2j-dex2jar.bat classes.dex
下载jd-gui通过jd-gui打开jar文件。
重要提示:
- 部分通过jd-gui打开的jar文件中,可能有部分函数报错,目前通过网站查询资料发现原因基本都是函数太长了,jd-gui解析不了可以使用Luyten,可以避免直接研究smali文件,smali文件一般来说晦涩多了。 ——- 这块被坑了好久。
- 通过抓包wireshare/手机抓包工具获取部分的请求信息(URL、Headers、参数等)在jd-gui里面搜索可以更快获取想找到的函数。
- 如果对java/android不熟悉,建议先几分钟入门java/android,写出一些基本的代码,以保证能基本代码理解逻辑。
参考链接:
win10安装 Genymotion ARM Translation教程