常见APP漏洞及风险
静态破解
通过工具apktool、dex2jar、jd-gui、DDMS、签名工具,可以对任何一个未加密应用进行静态破解,窃取源码。
二次打包
通过静态破解获取源码,嵌入恶意病毒、广告等行为再利用工具打包、签名,形成二次打包应用。
本地储存数据窃取
通过获取root权限,对手机中应用储存的数据进行窃取、编辑、转存等恶意行为,直接威胁用户隐私。
界面截取
通过adb shell命令或第三方软件获取root权限,在手机界面截取用户填写的隐私信息,随后进行恶意行为。
输入法攻击
通过对系统输入法攻击,从而对用户填写的隐私信息进行截获、转存等恶意操作,窃取敏感信息。
协议抓取
通过设置代理或使用第三方抓包工具,对应用发送与接收的数据包进行截获、重发、编辑、转存等恶意操作。
用这个工具
他的结构和使用的jar包
然后反编译这个软件
先看manifest文件
<?xml version="1.0" encoding="utf-8"?>
<manifest android:versionCode="1" android:versionName="1.0" package="net.droid.installer"
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application android:label="@string/app_name" android:icon="@drawable/icon">
<activity android:theme="@*android:style/Theme.NoTitleBar" android:label="@string/app_name" android:name=".InstallActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation">
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT" />
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:theme="@*android:style/Theme.NoTitleBar" android:name=".RuleActivity" android:screenOrientation="portrait" />
<activity android:theme="@*android:style/Theme.NoTitleBar" android:name=".LoaderActivity" android:screenOrientation="portrait" />
<activity android:theme="@*android:style/Theme.NoTitleBar" android:name=".StartActivity" />
<receiver android:name=".StartupReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
<service android:name=".UpdateService" android:enabled="true" />
<receiver android:name=".UpdateReceiver" />
<receiver android:name=".MessageReceiver">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<receiver android:name=".Scanner">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<service android:name=".USSDDumbExtendedNetworkService">
<intent-filter>
<action android:name="com.android.ussd.IExtendedNetworkService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
</application>
</manifest>
我们先来看权限
别人总结的权限详情
http://ask.dcloud.net.cn/article/100
<!--网络-->
<uses-permission android:name="android.permission.INTERNET" />
<!--短信的权限-->
<uses-permission android:name="android.permission.WRITE_SMS" />
<!--读取彩信-->
<uses-permission android:name="android.permission.READ_SMS" />
<!--收发短信-->
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<!--读写sd卡的权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这个是重点!!!!!
<!--允许应用程序在手机锁屏后进程仍然运行-->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!--允许程序访问手机状态信息-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--安装快捷方式权限-->
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<!--打电话的权限-->
<uses-permission android:name="android.permission.CALL_PHONE" />
<!--夺取logcat的输出信息-->
<uses-permission android:name="android.permission.READ_LOGS" />
<!--开机自启动广播-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
有几个不熟悉的 比如夺取log信息的那个
详解见: http://drops.wooyun.org/tips/3812
安卓安全分析
http://blog.csdn.net/androidsecurity/article/details/9428861
我们来看那个编译后的文件
<receiver android:name=".StartupReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
<service android:name=".UpdateService" android:enabled="true" />
<receiver android:name=".UpdateReceiver" />
<receiver android:name=".MessageReceiver">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<receiver android:name=".Scanner">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<service android:name=".USSDDumbExtendedNetworkService">
<intent-filter>
<action android:name="com.android.ussd.IExtendedNetworkService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
我们来看注册后的组件
不用想 重点肯定是在Service上面
然后看看recevier来激活什么东西(配合一个activity)
java -jar shakafix bs F:\android\classes.dex -o ~/desktop/classes 反编译
java -jar shakafix s F:\android\classes -o ~/desktop/classes 回编译