在老师以学分的要挟下,第一次接触Xposed。没办法,为了学分,只能苦逼的找度娘。经过一大堆新名词,名种不懂带来的煎熬后,终于有了些眉目。这篇文章是有以下内容:
1.说说对于Xpoesd和HOOK的理解;
2.Xposed框架的搭建;
3.结合攻击登录实例实现对Xposed工具的使用及Hook的作用。
一、Xpoesd和HOOK的理解
【什么是Hook】:
android安全可以从三个层面考虑,一次是java虚拟机层,native层,还有linux kernel层,本次hook api是属于native层的。hook api之后就可以使得程序对原有系统函数的调用改为对我们自己编写的函数的调用,这既可以作为一种攻击手段,又可以在维持程序运行的情况下更新程序等等。
【什么是Xposed】:
Xposed框架是一款可以在不修改APK的情况下影响程序运行的框架服务,通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的虚拟机的劫持。
总体来说,Xposed是android进行HOOK操作的一款强大的工具。我一个同学的比喻很形象:Xpose和Hook是相互协作的,首先由Xposed FrameWork 去买通Zygote皇宫守卫,然后Hook偷偷潜入皇宫进行“狸猫换太子”见不得人的勾当(这里直接用了ee的话,不要介意)。
二、搭建框架(如果看客没有android的基础知识,建议可以看看android的入门视频,很容易理解的,我用的开发工具是eclipse)
1.新建一个项目
这里项目名最好为英文。
2.新建一个下载lib文件,将XposedBridge.jar复制到该文件中(选中XposedBridge.jar,Ctrl+C,再选中lib 文件,Ctrl+V)这里注意,android项目是自带libs文件的,但一定要放在lib文件中,据说如果直接将jar包放置到了libs目录下,很可能会产生错 误“IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation”。我没有试过,如果你表示怀疑,可以自己尝试。至于为啥这样做,我也不明白。
再选中XposedBridge.jar,右击,选择buid path+add to path,好啦,我们就可以在Referenced Libraries中找到它了。
3. 在AndroidMainifest.xml文件,配置如下:
4.在com.example.xposed下创建一个名为XposedHook的类。
针对 Hooking Android App 的 Hook 关键点实现 Hook 模块
1). 实现 IXposedHookLoadPackage 接口
2). 确定要 Hook 的 Android App 的包名
3). 判断要 Hook 的包名
4). 确定要 Hook 的 Android App 的方法
5). 具体实现 Android App 的函数 Hook,调用 XposedHelpers.findAndHookMethod(“包名+类名”,
lpparam.classLoader, “要 hook 的函数名称”, 第一个参数类型, 第二个参数类型….. ,
new XC_MethodHook() {
protectedvoid beforeHookedMethod(MethodHookParam param) {
//函数执行之前要做的操作
}
protectedvoid afterHookedMethod(MethodHookParam param) {
//函数执行之后要做的操作
}
});
注意,这里1—4所指的东西大家可能还不清楚到底是个啥东西,不着急,在后面会给出要HOOK的APP。
5.初始化声明,在assets文件中新建一个 xposed_init文件(文本文件),声明HOOK函数所在的类。
做到这里,我们的攻击代码就算写好了,接下来我们来写一个简单的被攻击APP,这里是一个简单的登录功能。
三、实例演示
1. 新建项目的过程与上面一样,在这里被攻击的APP叫做 TestLogin,在LoginActivity中实现登录功能。登录界面的代码网上很多,在这里就不给出了。