论坛首页 移动开发技术论坛

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

浏览 3742 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2016-12-26  

 

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

每次登录,注册输入账号密码是多么繁琐的事情,烦!就要破解它,如果能把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) {

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

}

});

代码如下:

package com.example.xposehook;

import android.util.Log;


import de.robv.android.xposed.IXposedHookLoadPackage;

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

public class Attacker implements IXposedHookLoadPackage{

	@Override
	public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
		//查找包名,被Hook的函数所在的包
		if(lpparam.packageName.equals("com.example.xposetest")){
			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函数之前执行的代码
					
					//传入参数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);	
					
					//传入参数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 模块在手机或者模拟器重启以后就会生效的, 点击运行 crackme02.apk 应程序,

按照输入要求输入随意的用户名和注册码该程序就会验证通过,如下所示:

 

 

  • 大小: 10.2 KB
  • 大小: 13.3 KB
  • 大小: 14.9 KB
  • 大小: 18.6 KB
  • 大小: 48 KB
  • 大小: 28.2 KB
  • 大小: 34 KB
  • 大小: 57.5 KB
  • 大小: 30.5 KB
  • 大小: 47 KB
  • 大小: 82 KB
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics