学习尼古拉斯.赵四的大黄书的一些自己不会的知识点,给自己留个提醒。
1、android字段签名
int function(int foo, Date date, int[] arr)
签名为 (Iljava/util/Date;[i)I
2、native如何调用java中的method和field?如何调用方法
通过env->GetFieldID或者env->GetMethodID
通过Call<Type>Method()调用方法
3、多态、虚函数的理解
这篇文章讲得不错
主要的应用还是接口的情况,可以复用代码。
java基础还得补,重写、重载的概念都不太清晰。
封装、继承、多态。
多态主要利用了java动态绑定的特性。
4、手打一次jni代码
# include<iostream.h>
# include<com_jni_demo_JNIDemo.h>
JNIEXPORT void JNICALL Java_com_jni_demo_JNIDemo_sayHello (JNIEnv *env,jobject obj)
{
jclass clazz_date = env->FindClass("java/util/Date");
jmethodID mid_date = env->GetMethodID(clazz_date,"<init>","()V");
jobject now = env->NewObject(clazz_date, mid_date);
jmethodID mid_date_getTime = env->GetMethodID(clazz_date,"getTime","()J");
jlong time = env->CallLongMethod(now,mid_date_getTime);
printf("%I64d",time)
}
5、遇到android 资源混淆怎么办?
比如代码中的资源编号是2131230929变成16进制是0x7f0800d1,在res/values/public.xml中可以根据id找到name。
6、setuid和setgid
通常,在类 Unix 操作系统上,文件和目录的所有权是基于文件创建者的默认 uid(user-id)和 gid(group-id)的。
启动一个进程时也是同样的情况:它以启动它的用户的 uid 和 gid 运行,并具有相应的权限。
这种行为可以通过使用特殊的权限进行改变。
7、allowBackup属性
allowBackup为true的话,用户可以在没有root的情况下备份和恢复应用程序数据。
8、apk签名机制
修改了apk中的任何内容,必须重新签名。
签名文件、证书文件。
9、android应用加固原理
加壳程序:
对源程序apk进行加密,合并脱壳程序的dex文件,然后输出一个加壳之后的dex文件。
脱壳程序:
获取源程序apk,然后解密,然后动态加载进来,运行程序。
10、android中的so加固原理
好难,没看懂。
11、打开系统调试总开关
注入init进程,修改内存中的属性值。
使用工具mprop。
12、apktool+dex2jar+jd-gui
三朵金花
13、xposed
关键点:
1、多个dex时和动态类如何hook
先hook Application.class的"attach"方法,拿到上下文,然后再去hook
2、使用xposed提供的反射类
findClass、getObjectField、getFloatField、setObjectField、setFloatField、callMethod等
开发步骤:
1、新建模块项目
2、编写模块代码
3、添加模块入口
asserts下的xposed_init文件
4、增加模块额外信息
AndroidManifest.xml中增加版本、描述等信息
14、zjdroid
原理是hook每个app的Application的OnCreate方法,应用在启动的时候都会注册一个广播,后续可以通过发送广播来操控应用。
命令:
1、dump_dexinfo
获取应用运行时内存中dex的信息
2、dump_dexfile
dump出应用内存中的dex文件
3、
15、Cydia Substrate
还可以hook native层
16、smail语法
17、arm指令
阮一峰汇编语言入门
网友评论