来,让我们任性登录,替换掉它的登录验证
每次登录,注册输入账号密码是多么繁琐的事情,烦!就要破解它,如果能把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都不需要知道其验证方法就可以偷偷盗取其用户名和密码了,那么到底会不会那么简单呢?这种类似键盘钩子原理的是否能够实现?我也是很好奇。让我们拭目以待
方便交流学习:
有任何问题
请发邮箱:429899791@qq.com
ee期待大家一起交流