XPosed入门(登陆劫持演示)

如果想飞得高,就该把地平线忘掉。

前段时间写了一篇有关于CydiaSubstrate的广告注入的文章(地址:),大家都直呼过瘾。但是,真正了解这一方面的同学应该这道,其实还有一个比CydiaSubstrate更出名的工具:XPosed。

不是因为Xposed比CydiaSubstrate做的多好,而是Xposed是彻底开源的。今天,,我们就向大家简单的介绍一下Xposed,并书写一个简单的登陆劫持demo,让大家快速的入门学习Xposed。

Xposed

Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持。

基于Xposed框架可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。

此外,Xposed框架中的每一个库还可以单独下载使用,如Per APP Setting(为每个应用设置单独的dpi或修改权限)、Cydia、XPrivacy(防止隐私泄露)、BootManager(开启自启动程序管理应用)对原生Launcher替换图标等应用或功能均基于此框架。

官网地址:。 源码地址:https://github.com/rovo89。

Xposed框架是基于一个Android的本地服务应用XposedInstaller与一个提供API 的jar文件来完成的。

所以,安装使用Xposed框架我们需要完成以下几个步骤:

安装本地服务XposedInstaller 需要安装XposedInstall.apk本地服务应用,我们能够在其官网的framework栏目中找到,下载并安装。地址为:

安装好后进入XposedInstaller应用程序,会出现需要激活框架的界面,如图8-5所示。这里我们点击“安装/更新”就能完成框架的激活了。部分设备如果不支持直接写入的话,可以选择“安装方式”,修改为在Recovery模式下自动安装即可。

因为安装时会存在需要Root权限,安装后会启动Xposed的app_process,所以安装过程中会存在设备多次重新启动。

TIPS:由于国内的部分ROM对Xposed不兼容,如果安装Xposed不成功的话,强制使用Recovery写入可能会造成设备反复重启而无法正常启动。

下载使用API库

其API库XposedBridgeApi-.jar(version是XposedAPI的版本号,如我们这里是XposedBridgeApi-54.jar)文件,我们能够在Xposed的官方支持xda论坛找到,其地址为:

下载完毕后我们需要将 Xposed Library 复制到 lib目录(注意是 lib 目录不是Android提供的 libs 目录),然后将这个 jar 包添加到 Build PATH 中

如果直接将jar包放置到了libs目录下,很可能会产生错 误“IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation”。 估计Xposed作者在其框架内部也引用了BridgeApi,这样操作避免重复引用。

实战,登陆劫持(原理)

之前跟大家也说过使用CydiaSubstrate进行广告注入(地址:),很多网友问我,就只能简单的注入一个广告,还能做什么吗?

登陆劫持!!!,你没听错,今天我们这里就简单的演示一下,如何对一个应用程序的登陆功能进行劫持,并把账号密码打印出来。

如我们常见的登陆劫持,就是使用到了Hook技术来完成的。那么这个登陆劫持是如何完成的呢?下面我们就具体来看看,一个我们在开发中常见到的登陆例子。首先我们看看一个常见的登陆界面是什么样子的。

其对应的登陆流程代码如下所示:

// 登陆按钮的onClick事件mLoginButton.setOnClickListener(new OnClickListener() {(View v) {// 获取用户名String username = mUserEditText.getText() + “”;// 获取密码String password = mPasswordEditText.getText() + “”;if (isCorrectInfo(username, password)) {Toast.makeText(MainActivity.this, “登陆成功!”, Toast.LENGTH_LONG).show();} else {Toast.makeText(MainActivity.this, “登陆失败!”, Toast.LENGTH_LONG).show();}}});

我们会发现,登陆界面上面的用户信息都是存储在EditText控件上,然后通过用户手动点击“登陆”按钮才会将上面的信息发送至服务器端去验证账号与密码是否正确。这样就很简单了,黑客们只需要找到开发者在使用EditText控件的getText方法后进行网络验证的方法,Hook该方法,就能劫持到用户的账户与密码劫了。

TIPS:当然,我们也可以仿照上之前CydiaSubstrate的广告注入例子(地址:),做一个一模一样的Activity,在劫持原Activity优先弹出来,达到欺骗用户获取密码的目的。

具体流程如下:

实战,登陆劫持(编码)

明白了原理下面我们就实际的操作一次,这里我们选择使用Xposed框架来操作。使用Xposed进行Hook操作主要就是使用到了Xposed中的两个比较重要的方法,handleLoadPackage获取包加载时候的回调并拿到其对应的classLoader;findAndHookMethod对指定类的方法进行Hook。它们的详细定义如下所示:

/*** 包加载时候的回调*/public void handleLoadPackage(final LoadPackageParam lpparam)/*** Xposed提供的Hook方法** @param className 待Hook的Class* @param classLoader classLoader* @param methodName 待Hook的Method* @param parameterTypesAndCallback hook回调* @return*/Unhook findAndHookMethod(String className, ClassLoader classLoader, String methodName, Object… parameterTypesAndCallback)

当然,我们使用Xposed进行Hook也分为如下几个步骤:

你并不一定会从此拥有更美好的人生,

XPosed入门(登陆劫持演示)

相关文章:

你感兴趣的文章:

标签云: