前言
很久没发技术帖了,我其实是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 包开始写程序。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!