对android的逆向分析一般如下所示。首先是观察其权限。如下
接着查看接收器,服务等等,如下图
具体步骤如下:首先从BootReceiver入手,主要是利用android.intent.action.PHONE_STATE以及android.intent.action.BOOT_COMPLETED这两个动作启动ManageService。即当手机重启或者电话状态改变时启动服务ManageService。
转移到ManageService服务,代码如下
其中b 为定时器,判断条件为j.a(this.a, j.l(this)) 。转到类j类查看器函数a作用。转跳以后发现j类中函数a的个数很多,我们在定位函数a时需要借助一些条件进行排除。
首先j.a(this.a, j.l(this))的参数个数为2,j.l的返回类型为string。通过以上一些条件,我们可以确定j.a函数的代码。而参数this.a根据定义为context类型。
从而我们可以定位出函数j.a。代码如下
我们可以确定下来该判断条件就是是否存在该安装包,如果存在则停止。不存在则启动服务startService(new Intent(this, Providers.class))。转跳到Providers,其部分代码如下
可以看到主要是要对j.a进行判断,可以看到,这里面的两个参数都是string类型的,据此我们定位到j.a。代码如下。可以看到jd-gui解析失败。大体可以看到是执行linux指令
可以利用smali文件进一步判断,其smali代码如下
主要的作用是将assets中的config.dat(其本身为apk)变为config.apk,并且安装。
接着查看Providers。其构造函数onCreate 如下
其中比较重要的是(new n(this.a).a()),(new e(this.a, this.b).a()) 这两个条件。定位到n.a()函数,其代码如下。
可见n.a()函数主要是对crptdat0进行操作,利用魔法字可以很容易的判断其文件格式,发现标识符为elf,为so文件。使用IDA打开,观察strings table可以快速判断其文件的主要作用,该文件的作用进行root.
定位到e.a()函数
充分说明需要根据参数个数,类型,返回值等进行准确定位。同时对于附件中的文件我们也应该仔细分析
利用IDA分析assets中的so文件crptdat1,查看字串表,发现其主要作用是查看是否存在线程数限制(该漏洞的主要原理是因为线程数超过范围),如果没有限制,则利用srptdat0来进行root.
查看附件中的config.dat文件(本身为apk文件),进行分析。打开APK文件,我们首先观察期权限,以及是否存在图标等情况。如下图可见,说明该文件不存在图标,而且开机自启动,具有很多敏感权限,以服务的形式运行。
接着看代码,比较快捷的办法直接是查看敏感函数。这里我们可以看到它是可以静默发送彩信的。
上传IMSI等信息
其他的各位自己接着看。主要是利用定时器自动上传信息,推送广告,下载恶意软件等等
样本附上,希望起到抛砖引玉的作用。
9be49854ceb927aafd7d425885802b95.apk
[培训]《安卓高级研修班(网课)》月薪三万计划,掌
握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法