app逆向实战之定位关键代码

前言

在保证App能够正常使用的前提下,我们可以通过抓包查看是否存在抓包检测。如果可以进行抓包,我们首先进行登录代码定位,并伪造请求进行登录,然后实现App中的某个功能。本文以某嘟牛app为例,抓包结果如下:
g)

控件定位关键代码

由于现在app开发框架相对较多,因此需要确定这个app是什么框架下进行开发的。因为区分不从的开发方式,可以快速定位关键代码位置。通过Android Studio中uiautomatorviewer.bat工具来查看app的哪个框架进行开发的,其结果如下:

在这里插入图片描述

我们可以观察到,该app中按钮控件ID等信息,这个app为传统的Android框架开发。然而app中做了反截屏检测,此时则无法使用这个工具,相关代码如下:

activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);

常用的解决办法是使用Frida hook掉该函数或调用API函数清除截屏标志:

activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);

确认该App为传统Android框架开发后,我们查看其是否加固。在未加固的情况下,可以直接使用进行反编译:
在这里插入图片描述

在反编译完成以后,可以使用t工具查看登录按钮的id,然后在找到相关的代码:
在这里插入图片描述
在Jadx中搜索ID,查看代码引用结果:
在这里插入图片描述
显然这里就是代码的关键位置:

在这里插入图片描述
关键代码:
在这里插入图片描述
登录逻辑如下:

private void login(String userName, String pwd) {
    // 初始化请求返回类型为RequestResult<User>类型
    this.DEFAULT_TYPE = new TypeToken<RequestResult<User>>() { 
        // 类的匿名内部类
    }.getType();
    
    // 清空参数列表
    this.para.clear();
    
    // 将用户名和密码放入参数列表
    this.para.put("username", userName);
    this.para.put("userPwd", pwd);
    
    // 如果设备ID为空,则获取设备ID并赋值
    if (TextUtils.isEmpty(DodonewOnlineApplication.devId)) {
        DodonewOnlineApplication.devId = Utils.getDevId(DodonewOnlineApplication.getAppContext());
    }
    
    // 将设备类型和登录设备ID放入参数列表
    this.para.put("equtype", Config.equtype);
    this.para.put("loginImei", "Android" + DodonewOnlineApplication.devId);
    
    // 发起网络请求,请求登录接口,传递参数列表和返回类型
    requestNetwork("user/login", this.para, this.DEFAULT_TYPE);
}

字符串定位关键代码

抓包以后,点击登录按钮发送的数据包如下:
在这里插入图片描述
搜素结果如下:
在这里插入图片描述

也可以搜索加密的参数Encyrpt,如下图所示:
在这里插入图片描述
在结果较多的情况下,可以加上引号过滤一些搜索结果:
在这里插入图片描述
此时优先查看app包名的类
在这里插入图片描述
找到两个函数后,需要使用Hook或动态调试方式查看哪个方法调用了函数。

总结

可以通过这两种方式定位关键代码,然而控件的方式在有些复杂的app当中,可能离着关键代码很远。针对字符串的方式会面临字符串加密,我们在搜索字符串搜不到相应的代码。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值