首页
社区
课程
招聘
[原创]关于android xposed hook在android emulator上的搭建
发表于: 2017-3-13 14:53 4350

[原创]关于android xposed hook在android emulator上的搭建

2017-3-13 14:53
4350

前言

很久没发技术帖了,我其实是2007年的样子开始学习安全的,入门比较晚了。在x86时代的时候,晃荡了一转然后转型做自然语言处理了。所以近年来,无论各种安全的技术帖子都很少发了(似乎过去也发的不多,实际上是完全没有能力),因为感觉不是这个行业,也说不清楚很多事儿。偶尔,在网上看点资料,然后仿照别人做点东西。没有什么有爆发的研究。感觉都是些流水账。



流水账就流水账吧。我也写点吧。至少可以省掉一些前期调研的过程。大神们请飘过~~~~


后续,我有时间就来写点流水账吧。


1. 第一步,是要先root掉 emulator. emulator在运行过程中会使用临时的system.img。具体这个system.img.应该是保存在ubuntu 的/tmp/android_{当前用户} 这个目录下。我们要完成第一步,需要处理四个文件。依次是:

1.1 /tmp/android_{当前用户} 目录下的真实system.img

1.2 userdata-qemu.img

1.3 cache.img

1.4 hardware-qemu.ini

我这里的环境是编译出来的android 4.4镜像lunch 1的那个。在ubuntu 上。然后安装root可以,直接使用了大杀器RootGenius-

2.2.84帮忙root下

那1.1的文件资源的真实system img 在我们安装root 后.android emulator没有停止的时候,并且已经root了后。应该立刻备份下。

那1.2 和1.3的文件应该在停止android emulator后,立刻删除之.

那1.4的文件同学们都知道是个配置文件了~~~我们要让里边的配置system.img的文件,在第二次启动前指向我们备份了的system.img.

具体为什么这样做,老实话,我也不是很清楚。其实改吧改吧源码应该就能root了。???,纯新手哈。很多逻辑还不太懂。不过这样干也能行~~~


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>





2. 第二步,这时候,我们已经可以给系统的需要root权限的程序。这个时候,我们就要来装xposed_install这么个东西了。第二步的时候还要注意个问题。装这个东西的时候我们的emulator需要有sd card.

2.1 创建个sd card 放在 hardware-qemu.ini 的 hw.sdCard.path 所指定的地方。我当时好像是怎了个200M的。

2.2 这个时候的emulator是可以给root权限的,当安装完xposerd_install后,再用root权限安装frame就好了。



>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>





3. 安装完了,xposed_frame 后。就要开始写代码了。代码分成两个部分,一个被hook的程序,一个去hook的程序。

3.1需要一个briger.这个briger 的和xposed 安装frame里头的那个版本号一致。比如,我就是去下载的这个briger XposedBridgeApi-54.jar


贴出一个被hook端的代码。


package com.example.testhook;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String outstr = "";
        if(getcase() == 0)
        {
            outstr = "helloworld";
        }
        else
        {
            outstr = "goodbayworld";
        }
        Toast.makeText(getApplicationContext(), outstr, Toast.LENGTH_LONG).show();
    }
    
    int getcase()
    {
        return 0;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

贴出一个去hook的代码。


package com.example.testxposed;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;


public class MainXposed implements IXposedHookLoadPackage{
    @Override
    public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
        // TODO Auto-generated method stub
        if(!lpparam.packageName.equals("com.example.testhook")){
            return;
        }
       
        XposedHelpers.findAndHookMethod("com.example.testhook.MainActivity", lpparam.classLoader, "getcase",new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                // TODO Auto-generated method stub
                //super.beforeHookedMethod(param);
                param.setResult(123);
            }
        });
    }
    

}



关于xpose 代码的书写和工程的一些点,可以参考这篇博文。效果很好很直观


http://www.blogfshare.com/xposed-hook.html



ok实验成功~~~~


最后打个总结~~~~大概流程是这样的。1 首先root掉emulator,2其次拥有一个sdcard.然后安装xposed install.然后在root权限下安装xposed frame.3随后,开始使用同样版本的XposedBridgeApi 包开始写程序。



[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 172
活跃值: (572)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好文章  支持!
2017-10-7 16:04
0
游客
登录 | 注册 方可回帖
返回
//