Xpose实战一:来,让我们任性登录,替换掉它的登录验证

                                       来,让我们任性登录,替换掉它的登录验证

每次登录,注册输入账号密码是多么繁琐的事情,烦!就要破解它,如果能把app里面的登录验证函数换成我们的“无敌登录”那是多么吊炸天的事。如果可以“QQ,微信,支付宝(咳咳想多了)”,不过就这样想想是多么激动的事情。

无敌登录的意思是:把人家的验证程序换成“自己的无敌登录”==“不需要验证登录”。

当然这个过程也不是一帆风顺的,要不你真的可以随意破解app了,首先需要知道我们要攻击的app中登录验证的函数名,以及所带的参数,例如:


 

好!现在我们要开始了~~

===================================================================================

【制作一个将要遭受攻击的登录app】:

1.布局函数做一个登录界面:

大家刚开始做做的登录界面可能比较古板,下面的EditText是经过调试边框+颜色+圆角之类,不用纠结简单用即可



 【主代码】然后编写我们的界面登录管理验证:

public class MainActivity extends Activity {

    EditText username;
    EditText passwd;
    Button logbut;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		username=(EditText)super.findViewById(R.id.username);
		passwd=(EditText)super.findViewById(R.id.passwd);
		logbut=(Button)super.findViewById(R.id.logbut);
		logbut.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				String a=new String(username.getText().toString());
				String b=new String(passwd.getText().toString());
				if(checklogin(a, b)){
					Toast.makeText(getApplicationContext(), "登录成功", Toast.LENGTH_SHORT).show();
				}
				
			}
		});
			
		
	}
	public boolean checklogin(String username,String passwd){
		
		if(username.equals("张依依")&&passwd.equals("123456")){
			return true;
		}
		return false;
		
		
	}


 验证函数就是我们这个:

public boolean checklogin(String username,String passwd){
		
		if(username.equals("张依依")&&passwd.equals("123456")){
			return true;
		}
		return false;
		
		
	}

我们运行一下看输入不是我们规定的账号密码会怎么样?




 
 

 ==================================================================================

针对 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) {

//函数执行之后要做的操作

}

});

代码如下:

public class Attacker implements IXposedHookLoadPackage{

	@Override
	public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
		//查找包名,被Hook的函数所在的包
		if(!lpparam.packageName.equals("com.example.xposetest"))
			return;
			XposedBridge.log("loaded App:"+lpparam.packageName);
			//开始对要Hook的函数进行操作
			XposedHelpers.findAndHookMethod("com.example.xposetest.LogActivity",
					lpparam.classLoader, "checklogin",String.class,String.class, new XC_MethodHook(){
				protected void beforeHookedMethod(MethodHookParam param)
						throws Throwable {
					// Hook函数之前执行的代码
					  XposedBridge.log("开始劫持了~");
					//传入参数1
					XposedBridge.log("beforeHookedMethod userName:" + param.args[0]); 
					//传入参数2 
					XposedBridge.log("beforeHookedMethod sn:" + param.args[1]);
					//函数返回值
					XposedBridge.log("beforeHookedMethod result:" + param.getResult());
				}
				
				@Override
				protected void afterHookedMethod(MethodHookParam param)
						throws Throwable {
					// Hook函数之后执行的代码
					
					//通过对checkSN函数的分析发现,只要修改函数的返回值即可实现注册的破解
					param.setResult(true);	
					  XposedBridge.log("劫持结束了~");
					//传入参数1
					XposedBridge.log("afterHookedMethod userName:" + param.args[0]); 
					//传入参数2 
					XposedBridge.log("afterHookedMethod sn:" + param.args[1]);
					//函数返回值
					XposedBridge.log("afterHookedMethod result:" + param.getResult());
				}
			});
	
		}
		
	}

   

之后我们开始测试:

首选手机要root

在 Xposed 框架中安装刚才已经编写好的 Hook 模块 XposedDemo 如上图所示,然后重启手机或者模拟器,

我们编写的 XposedDemo 模块在手机或者模拟器重启以后就会生效的。

主要步骤:

1.点击框架

2.点击安装,安装后会重启



 
 注意某些机型装了xpose框架会不停重启,这个ee也遇到过,每隔几分钟重启,建议做完这个实验就卸吧,由于ee是真机强迫症受害者,建议大家用虚拟机,诸多不便,没有砖机风险大。

3.在模块选择我们的apk,登录劫持apk嘿嘿嘿

 

4.记住装好我们需要劫持的apk,我的要劫持的apk叫XposedTest.apk

然后选择完模块又需要重启:不要崩溃,小编就是在不断重启的去实验坚持下来的。

然后我们在我们登录界面输入随便的密码和用户名,原来我们判定用户名为:zyy  密码:123456  才会验证通过,现在都可以通过了。劫持成功,如图示:

然后我们不仅要用户登录成功,还要获取到用户输入的用户名密码,因为,我知道你们想到什么了,对就是钓鱼app,我们点击日志,导出日志,或者输出看下:



 至此就完全结束了。大家可以想像如何劫持EditText的getText()方法(用户所有输入获得的方法),如果这个方法可以被替换,那么我们所有app都不需要知道其验证方法就可以偷偷盗取其用户名和密码了,那么到底会不会那么简单呢?这种类似键盘钩子原理的是否能够实现?我也是很好奇。让我们拭目以待

方便交流学习:

有任何问题

请发邮箱:[email protected]

ee期待大家一起交流
 



 

 



 

猜你喜欢

转载自429899791.iteye.com/blog/2347457