记一次APP爆破登陆并平行越权
APP名称:加油广东 APP版本:3.2
准备工具: DDMS,Fiddler,JEB 2.x,Android Studio
1.) 初始分析
先配置好抓包环境并挂上代理抓包
登录帐号: 1392411****密码:任意字符
出现下图
要求接短信验证码完善帐号信息,我们看看抓的登录包
双向传输密文,没有看到任何明文看看POST参数表
我们找别的请求看看
isencrypt
这个参数变化以后POST数据差异
可以看出isencrypt
= 0则不通过RSA+AES交换数据
反编译看APP的流程:(APP是360加固,需要先脱壳,这里略过不说)
看上图标注,
跳转到引用,可以看到是一个封装好的HttpRequestUtils工具类
继续深入packageLogin
继续往下看addEncryptFlag方法
为了方便理解,我修改了参数名称
到这里登录的加密流程已经分析完了,我们通过Hook实现强制禁用RSA+AES交换数据
if (Param.packageName.equals("com.sunboxsoft.oilforgdandroid")){
//coord: (0,18,33) | addr:
Lnet/sourceforge/simcpux/httputils/HttpPackageParams;->addEncryptFlag(Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Map;
| loc: ?
Class<?> utils = XposedHelpers.findClass("net.sourceforge.simcpux.httputils.HttpPackageParams",Param.classLoader);
findAndHookMethod(utils, "addEncryptFlag", Map.class, String.class, String.class, String.class,
String.class, new XC_MethodHook()
{
@Override
protected void beforeHookedMethod(MethodHookParam
param) throws Throwable {
super.beforeHookedMethod(param);
HookUtils.asyncLogi(TAG,"replace isencrypt 0");
param.args[1] = "0";
}
});
}
重启,让插件生效再次抓登录包,还是那个帐号密码:任意字符
发现虽然我们停留在登录页面并提示登录失败,但是服务器已经给我们返回了帐号信息
2) 爆破登录
我们返回HttpRequestUtils类的地方反向查找postLogin引用
有4个引用,这里就不一个一个看了我们从view入手确定调用
DDMS Dump View Hierarchy
是个FrameLayout, 确定为引用3,点进去继续分析
因为网络状态是OK的,所以我们只看onSuccess
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)