Android常见风险2
安卓常见风险Android重打包风险风险:插入广告、扣费
防范措施:使用一些混淆工具,阻止反编译,加壳
敏感数据明文保存风险含义:对app来说重要的数据
防范措施:不能放在公共区域
组件越权风险防范措施
android:exported = "false"
WebView跨域访问风险安卓应用克隆漏洞原理分析及复现(CNVD-2017-36682)
ContentProvider目录遍历漏洞组件拒绝服务漏洞讲解安全审计工具Drozer的安装与使用下载地址:https://github.com/WithSecureLabs/drozer
出现这个图片即算成功(中间过程复杂,都可以询问gpt)
使用
Drozer代码阅读从drozer console connect命令中drozer.bat开始
drozer.bat
@echo offpython.exe "%~dp0drozer" %*
Android常见风险1
安卓常见风险Android重打包风险风险:插入广告、扣费
防范措施:使用一些混淆工具,阻止反编译,加壳
敏感数据明文保存风险含义:对app来说重要的数据
防范措施:不能放在公共区域
组件越权风险防范措施
android:exported = "false"
WebView跨域访问风险(明天再更,难度太大,一时难以理解)
Arm
Arm汇编工具网站谷歌官网:https://developer.arm.com/documentation-beta/
ARM汇编-opcode转换:http://armconverter.com
寻址方式1、立即数寻址:mov r0,#0x1
2、寄存器寻址:mov r0
3、寄存器间接寻址:ldr r0,[r1]
4、寄存器偏移寻址:mov r0,r1,[r1,#4]
5、寄存器基址变址寻址:ldr r0,[r1,#4]
6、多寄存器寻址:ldmia r0,{r1,r2,r3,r4}
7、相对寻址:bl label
8、堆栈寻址:stmfd sp!,{r1-r7,lr}
9、块拷贝寻址:stmia r0,{r1-r7}
跳转指令B label:直接跳,无条件,需要条件就B后面增加条件
BL:跳转之前,下一条指令地址保存到LR寄存器中,然后再调
MOV PC,LR:直接修改PC指针,实现跳转
LDR PC,0x?:和上一条一样,修改PC寄存器
传参参数小于等于4:用r0,r1,r2,r3
大于4:多出来的用栈
内联汇编方式asm(“指令” :输出 :输入 :变化寄存器);
方式asm ...
Smali
Smali汇编了解安卓虚拟机Dalvik虚拟机JIT(Just-In-Time Compile 即时编译),高频率使用代码空闲时间编译好并存储到内存
Art虚拟机AOT(Ahead-Of-Time 预先编译) 一次编译好,oat文件
头文件定义与接口实现(“<>”表示可选)
.class作用:定义类,包括包名和类名
格式:.class <访问权限> [关键修饰字] <完整类名> (“<>”表示可选)
.super作用:定义所属父类
格式:.super <父类完整类名>
.source作用:指定该smail代码所属java源文件
格式:.source <java源代码名称>
.implements作用: 声明实现接口类名称
格式:.implements <接口类名>
静态变量作用:相当于全局变量,跟类实例没关系,属于类
格式:.field <访问权限> static [修饰词] <字段名> : <变量类型>
.field <访问权限> stat ...
ELF
定义Linux平台的一种可执行文件格式,Executable and Linkable Format(可执行 和 可链接 格式 )
的文件
特点C/C++语言编译生成,动静态。x86汇编、arm汇编。执行速度快,逆行成本高。
生成方式//call ndk-build.cmd NDK_PROJECT_PATH=. NDK_APPLICATION_MK=jni\\Application.mk//Application.mk、 Android.mk、xx.c源文件gcc test.c -c test.o && gcc test.c -o test
Main.java
package com.pediy.test;public class Main { public static void main(String[] args) { String soPath = "so/libhello-jni.so"; ParseSo parseSo = new ParseSo(soPath); ...
Dex完整代码解析
DexFile.h/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND ...
Dex代码解析1
代码解析Dex文件Android源码:http://androidxref.com/6.0.1_r10/xref/frameworks/base/core/java/android/app/ActivityThread.java
Android文档:https://source.android.com/docs/core/runtime/instruction-formats?hl=zh-cn
搜索DexHeader
try、catch、finally三个语句的执行顺序
如果 try 块中没有异常抛出,程序会直接跳过 catch 块,执行 finally 块。如果 try 块中有异常抛出,并且有匹配的 catch 块处理该异常,先执行匹配的 catch 块,然后执行 finally 块。如果 try 块中有异常抛出,但没有匹配的 catch 块处理该异常,先执行 finally 块,然后将异常抛出至上层调用栈。
System.arraycopy 方法
//System.arraycopy 是 Java 中用于复制数组内容的方法。它的签名如下:public static void a ...
Dex文件基本结构
Dex文件基本结构Dex文件介绍含义:专门位移动端开发的一种可执行文件格式
优点:比class文件体积小,真内存小,加载速度快,堆栈加载速度快,类查找快等,更适合手机
生成://javac c\b\a\HelloWorld.java
//dx –dex –output = c\b\a\HelloWorld.dex c\b\a\HelloWorld.class//这是旧版本的Android SDK写法
反编译smali
https://source.android.com/docs/core/runtime/instruction-formats?hl=zh-cn
https://source.android.com/docs/core/runtime/dex-format?hl=zh-cn
其他名词解释:
odex(5.0引入)、oat(elf,包含 odex内容)、vdex(8.0引入)
png文件格式的
生成代码如下图
注意下生成.dex的代码:1、要根据Android SDK的版本选择不同的命令
...
APK基本结构
APK文件构成没有aidl文件的解决方法:在build.gradle中添加如下代码:
android{ buildFeatures { aidl = true }}
DexClassLoader
DexClassLoader(参数1,参数2,参数3,参数4);参数1:要加载的Jar的路径参数2:缓存目录参数3:Native目录,可以为空参数4:父类加载器
静态资源文件不需要编译的文件夹:assets
assets目录的添加方法:
MainActivity.java,部分代码
findViewById(R.id.btn_startLoad).setOnClickListener(new View.OnClickListener(){ AssetManager assetManager = MainActivity.this.getAssets();//通过获取MainActivity实例的AssetManager对象,使我们能够访问和管理Android应用程序中包含的原始资产文件。 ...
Android开发基础练习--四种方式遍历SDCard
四种方式遍历SDCard一、java语言首先都要在清单文件中申请读、写、管理SDCard的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.INTERNET"/>
activity_main.xml,部分代码
<Button android:id="@+id/btn_start" android:layout_width=& ...