京东网站开发费用,程序员找工作的网站,美食网站的设计与制作,wordpress难度指数文章目录 安卓加固apk文件结构dex加固过程 其它安全问题 安卓加固 从App的加固技术来看:主流分为dex加密和so加密,目前来看保护dex文件更为重要,因为dex反编译后的java代码可读性更强。
android-ndk: Native Development Kit 官网解释#xff1a;这套工具使您能在 Android 应… 文章目录 安卓加固apk文件结构dex加固过程 其它安全问题 安卓加固 从App的加固技术来看:主流分为dex加密和so加密,目前来看保护dex文件更为重要,因为dex反编译后的java代码可读性更强。
android-ndk: Native Development Kit 官网解释这套工具使您能在 Android 应用中使用 C 和 C 代码 apk文件结构
文件或目录说明assets存放资源文件lib存放ndk编译出来的so文件META-INF签名信息res存放资源文件AndroidManifest.xml清单文件classes.dexjava源码编译后的dalvik字节码resources.arsc编译后的二进制资源文件
dex加固过程 上图中的重打包签名的详细图 ProxyApplication就是壳dex的入口。
其它安全问题
除了混淆源码、加固源码还有以下问题需要注意
风险名称风险解决方案篡改和二次打包修改文件资源添加病毒、广告窃取支付密码拦截短信混淆资源文件对签名过后的hash进行验签资源文件被窃取钓鱼网站混淆资源文件webview明文存储密码风险用户使用webview默认存储密码到databases/webview.dbroot的手机可以产看webview数据库关闭webview存储密码的功能调试日志函数调用日志中含有敏感信息关闭调试日志函数删除日志文件不安全加密ECB模式和OFB模式改用CBC或CFB密钥硬编码逆向窃取密钥应该模仿best practice去随机生成动态调试gdb调试java调试在so文件中对调试进程进行监听androiddebuggable“false”应用数据被备份清单文件中allowbackuptrue攻击者可以使用adb命令对APP应用数据进行备份allowbackupfalse全局可读写内部文件不同软件之间不必要的数据共享其它应用可以读取或修改内部文件MODE_WORLD_READABLEandroid: sharedUserId使用MODE_PRIVATE模式创建内部存储文件加密后存储或者干脆脱敏内网测试信息残留通过测试的Url测试账号等对正式服务器进行攻击等清除测试痕迹随机数不安全使用不够随机不使用setseed方法使用/dev/urandom /dev/randomhttp/https明文传输中间人攻击X509TrustManager checkServerTrusted校验函数要按需实现不能留空白HostnameVerifier 检查证书的主机名和使用证书的主机名是否一致输入监听窃取密码等自定义键盘截屏攻击对app界面进行截图或录屏添加属性getWindow().setFlags(FLAG_SECURE)不让用户截图和录屏模拟器运行风险刷单模拟位置禁止在模拟器上运行四组件导出风险Activity被第三方应用访问导致被任意应用恶意调用自定义权限动态注册Receiver风险使用带权限检验的registerReceiver API进行动态广播的注册PendingIntent错误使用Intent风险使用PendingIntent的时候如果使用了一个空Intent会导致恶意用户劫持修改Intent的内容禁止使用一个空Intent去构造PendingIntentIntent组件隐式调用风险使用隐式Intent没有对接收端进行限制导致敏感信息被劫持对接收端进行限制建议使用显示调用方式发送Intentfragment注入攻击风险PreferenceActivity的子类中没有加入isValidFragment方法进行fragment名的合法性校验攻击者可能会绕过限制访问未授权的界面1.如果应用的Activity组件不必要导出或者组件配置了intent filter标签建议显示设置组件的“android:exported”属性为false2.重写isValidFragment方法验证fragment来源的正确性webview远程代码执行风险风险WebView.addJavascriptInterface方法注册可供JavaScript调用的Java对象通过反射调用其他java类等建议不使用addJavascriptInterface接口对于Android API Level为17或者以上的Android系统Google规定允许被调用的函数必须在Java的远程方法上面声明一个JavascriptInterface注解zip文件解压目录遍历风险Java代码在解压ZIP文件时会使用到ZipEntry类的getName()方法如果ZIP文件中包含“…/”的字符串该方法返回值里面原样返回如果没有过滤掉getName()返回值中的“…/”字符串继续解压缩操作就会在其他目录中创建解压的文件1. 对重要的ZIP压缩包文件进行数字签名校验校验通过才进行解压。 2. 检查Zip压缩包中使用ZipEntry.getName()获取的文件名中是否包含”…/”或者”…”检查”…/”的时候不必进行URI Decode以防通过URI编码”…%2F”来进行绕过测试发现ZipEntry.getName()对于Zip包中有“…%2F”的文件路径不会进行处理。Root设备运行风险已经root的手机通过获取应用的敏感信息等检测是否是root的手机禁止应用启动从sdcard加载Dex和so风险未对Dex和So文件进行安全完整性及校验导致被替换造成用户敏感信息泄露1.放在APP的私有目录 2.对文件进行完成性校验。