之前一段时间看了一下android开发,发现android还是挺有意思的,最近看了些android分析的资料,决定自己动手试试,本人比较菜,此贴纯属学习总结贴,请各位指教!
找了几个带有恶意代码的样本用于学习和分析。
首先,解压APK,我使用了apktool将APK文件解压成smali文件,另外还用zip解压工具解压了一份,一份用于看smali,一份再用dex2jar和xjad转成java文件,看java代码。
文件夹classes_dex2jar中存放的就是软件的java文件,将这些java文件加入sourceInsight中,这样方便查看。
第二,先从整体上看看这个项目,首先看的就是AndroidManifest.xml文件。其中主要注意一些敏感权限就行,比如发送短信,拨打电话,连接网络,但是这些也是作为一个查考。在文件中有两句话应该要提高警惕:
一个是在收到短信的时候有事件响应,另一个是去电时候有事件响应。
第三,开始java文件的分析,这里需要使用刚刚导入sourceInsight的那些文件了。
此时可以直接全文搜索关键字,如sms、Internet、url等敏感字眼,但是,有时可能没有用,这里作为学习,还是从入口函数开始:
可以看出在创建的时候就触发了很多自己实现的函数,接下来可以继续跟进函数,首先是load():
可以看出load()方法就已经侵犯了用户的隐私了,跟入上面花圈的函数,就会发现它读取了用户的SIM卡的信息,获取用户的手机号码等,并将这些信息存入Constants中,这里有个Constants.data是一个加密的字段,对于这种已经侵犯了隐私的软件,这种加密字段就非常可疑了,所以我是想通过反编译出来的函数来解密这个字段:
事实证明,反编译器不是万能的,有些东西还是出不来的,这个时候我有想到了smali文件,但是要将大量的smali转成java工作量太大,不合适,而且我还没有学习smali语法,所以。。。
不过静态调试不行,又想到了动态调试,如果可以下断点,或是输出就好了,这里我使用了smali注入的方法,直接将解密后的data值打印,找到Constants.smali文件,添加Log.d对应的语句:
添加完成之后,不着急打包,先继续分析一下,回到load方法,发现这个加密字段被作为JSON存放了起来,这里就提示我们要小心后面软件调用到的JSON。
回到入口,继续查看:
这里开始开启服务操作,之后启动MainService:
对于画线的方法,其实就是调用了ThreadOperationRun,这个在ThreadOperation.java中定义了,而这个ThreadOperationRun()没有做别的事情,就是在尝试发送短信,它调用了startRepeatTimer()、startSmsTimer、sendSms:
对于最后一个没有什么好说的了,就是发送短信,前面两个的话都有同一条语句:
而在MainReceiver中的OnReceiver(),我们可以轻易的找到,收到短信触发事件的语句:
之后就是获取电话号码,发送短信,删除短信的业务了:
注意startRepeatWaitTimer,它有一次启动了MainReceiver。现在就可以打包APK并签名安装了,用logcat可以看见刚刚加入的输出信息(我还在一些敏感函数前加了一些log,方便分析流程):
至此这个样本初步分析完成,样本中还有一些打电话和打开网页下载的地方,由于本人初学,smali语法还没有看,java文件又被破坏,所以暂时分析不了,等这几天看完后再分析之!
小弟初入android门庭,如有不对的地方,请各位大牛指正!
再次声明,这个就是学习笔记,不要喷哦~
附件:http://pan.baidu.com/share/link?shareid=3625277739&uk=3121684825
[培训]内核驱动高级班,冲击BAT一流互联网大厂工
作,每周日13:00-18:00直播授课