Android病毒分析技巧和方法
分析前的准备工作:
析前首先了解应用自身的的功能,不要将应用自身的工作当作恶意行为来处理.看权限,根据应用的权限判断应用可以产生哪些行为,并判断出这些权限是否和应用的功能相关,如果有与应用本身不相关的功能那么针对这些权限的产生的行为要进行确认的病毒属于在正常应用中插入恶意代码,并且病毒行为需要的权限和应用本身需要的权限是重复的,此时要辨别出那些代码是病毒的代码,那些是应用本身的代码的应用确实需要一些看似和应用无关的权限,比如很多杀入软件也有发送短信的权限和代码,这点可以通过运行程序查看是否有相应的提示,比如在应用界面会有短信反馈意见的提示.常规分析的方法:
压程序后从程序的入口顺序分析程序的运行流程的行为,跳过不必要的代码序运行的包括Application类,主Activity或者各种广播接收者.后顺着入口继续分析Service,Thread,AyncTask等.行过程中可以通过运行命令 tcpdump -p -vv -s 0 -w xxx.pcap的办法对获取网络传输数据,通过分析pcap可以帮助判断是否有隐私窃取行为和远程控制行为行程序过程中连接eclipse,可以通过CatLog和File Explorer查看应用的一些反馈信息和使用的文件等,Emulator Control可以模拟发送短息、接打电话、位置定位来帮助判断是否有系统破坏行为等.快速分析的方法:
感api直接查找法用DroidBox和APIMonitor监控进出的网络数据,文件读写,发出的短信和通话记录,加密类api等.线分析工具和杀毒软件检查,根据以上提供的信息进行行为确认或者重点分析获取不直接数据的方法:
压后在目标代码处注入Log代码来打印目标数据.压后找到数据源和相关的方法,之后把数据源和相关方法加入到自己开发的应用中去执行,从而得到不直接数据用andbug在对目标方法下断点,根据断点提示的信息查看不直接数据.用DroidBox可以监控部分api的数据,如发出的短信号码和内容等解决反编译后不能安装的方法:
码中可能存在签名检查的方法,根据固定的api可以查找的获取签名信息所在的方法和判断逻辑的方法,修改判断逻辑,使之检查失效码中可能存在校验保护的方法,比如针对class.dex文件的hash进行检查,根据固定的api可以查找的获取签名信息所在的方法和判断逻辑的方法,修改判断逻辑,使之检查失效码中可能存在无效的资源,在public.xml文件中删除错误提示中的资源id的元素获取目标代码调用栈的方法:
接eclipse并运行程序, 使用Method Profile可以查看目标方法的调用栈压apk后在目标代码的smali文件里加入new Exception(“trace”).printStackTrace();对应的smali代码,之后重新打包运行该程序,当程序运行到目标代码时会打印出目标方法的调用栈.压apk后在目标方法的前后分别加入android.os.Debug.startMethodTrace(“123”)和android.os.Debug.stopMethodTrace()对应的smali代码,之后重新打包运行该程序,当程序运行到目标代码时会打印出目标方法的调用栈.用androguard的androdd.py工具可以生成apk文件中每个类的方法的调用流程图.用androguard的androgexf.py工具可以生成apk的gexf格式的文件,该文件以节点和边的形式展示apk中各个类之间的方法调用关系,以通过Gephi调整各个节点和边的距离颜色等等解决无法动态调试的方法:
改清单中的android:debuggable=”false”为android:debuggable=”true”并在代码中修改判断允许调试的代码,相关API为ApplicationInfo.FLAG_DEBUGGABLE或者android.Debug.isDebuggerConnected()部分程序只能在真机中调试,不能在模拟器中间调试,可以改为真机调试或者删除应用中判断模拟器的代码备注: 以上提示出大多数方法是在目标方法能够执行的前提下才能实现,若目标恶意代码无执行条件需要首先创造条件让目标代码运行起来
后续补充
