安卓逆向实践3——Hook神器Xposed

前面我们在安卓逆向实践4 中通过静态分析获取到了flag,这其中有一个很关键的点就是如何获取应用的签名信息,之前我们是通过编写Java代码通过包名来获取的,在这里,我们借助Xposed框架来实现,顺带来记录一下Xposed框架Hook Java层代码上的使用方法。

首先是环境搭建,我们需要一台ROOT过的手机并安装好了Xposed框架。
环境搭建好之后,接下来就进行正式的操作了。

第一步 新建一个Android项目,导入Xposed工具包

具体步骤为,新建folder文件夹并命名为lib,将jar文件拷贝到lib文件夹中,右击jar文件选择build path->Add to build path。
这里需要注意的是不能使用libs文件夹。在Eclipse中,如果把工具放入libs文件夹中,默认是加入到编译路径中的,同时在编译出来的程序中也是包含这个工具中的所有类,而对于其他非libs文件夹,我们添加工具包之后在add buildpath之后只是做到了工程引用工具包的功能,而最终并不会把这个工具包包含到程序中。

第二步 编写模块代码
编写模块代码还是比较简单的,我们只要新建一个实现IXposedHookLoadPackage接口的类,然后在handleLoadPackage回调方法中进行拦截操作即可,而具体的拦截操作是借助XposedHelpers.findAndHookMethod方法和XposedBridge.hookMethod方法实现的,这两个方法也是比较简单的,从参数含义可以看到,主要是Hook的类名和方法名,然后还有一个就是拦截的回调方法,一般是拦截之前做什么的一个beforeHookedMethod方法和拦截之后做什么的一个afterHookedMethod方法。

注意:如果要Hook一个类的具体方法,就必须了解这个方法的信息,如参数类型和个数,返回类型等。因为在拦截的过程中必须要对这个方法进行分析,比如得到方法参数来进行具体参数的修改,返回值信息进行返回值修改。

嗯,上面是为了对Xposed模块编写有一定的理解,下面就是自己针对于cm1.apk编写的相应的模块来对Java层代码进行hook:

第三步 添加模块入口
告诉Xposed框架中一个模块Hook的入口,这里的入口是XposedHook类,所以需要在assets目录下添加xposed_init文件,文件的内容是模块入口类的全称名称:
com.example.cm1Xposed.XposedHook

第四步 添加模块的额外信息
最后一步就是需要在模块的AndroidManifest.xml文件添加额外信息,具体包括模块的描述信息,版本号等:

xposedmodule:代表的是Android程序作为Xposed中的一个模块,所以值为true;
xposeddescription:代表的是对本模块的功能的描述,可以自己简单叙述下就可以了;
xposedminversion:代表的是本模块开发时用到的xposed的jar包的最低版本号,我所用的xposed的jar包版本是54;

最后就是进行测试了,将Cm1Xposed.apk以及cm1.apk通过adb install命令安装到手机上。此时打开Xposed框架管理器,模块中会自动识别出安装好的Xposed模块,勾选上,然后进行软重启,Xposed模块就安装好了。
打开我们要进行Hook操作的程序cm1.apk,并点击中的check按钮,我们就能够挂钩genKey方法从而获取到程序的原始签名信息了。

至此,我们的Xposed模块的编写以及测试就完成了。我们成功通过hook的方法获取到了程序的原始签名信息。
这里只是Xposed的一个简单使用,可以看到Xposed功能还是相当强大的。

猜你喜欢

转载自blog.csdn.net/hbhgyu/article/details/81268428
今日推荐