APP逆向入门-某违规app分析
字数 1060 2025-08-22 12:23:00
APP逆向分析实战教学:某违规APP分析
1. 初步分析
1.1 应用基础信息
- 应用未加固,便于逆向分析
- 启动Activity为
Splash0Activity - 广告Activity为
AdvertActivity,位于启动Activity之后
1.2 广告跳过方法
- 定位广告Activity代码
- 找到关键判断逻辑:
if (position >= this.data.size()) - 修改方案:将此判断条件取反
- 修改后可能触发官方检测机制
2. 反检测机制绕过
2.1 签名校验检测
- 检测函数位于
MainActivity中的checkpackage函数 - 关键检测代码:
checkoutPackageName(activity) && activity.getString(R.string.app_signature).equals(getSignature(activity)) - 检测内容:
- 包名是否匹配
- 签名是否匹配
2.2 绕过方案
- 方案一:修改if判断逻辑取反
- 方案二:定位调用checkPackage()的位置并注释掉相关smali代码
3. 登录机制分析
3.1 登录Activity
- 登录Activity名称为
LoginActivity - 登录需要:
- 手机号
- 密码
- 验证码
3.2 登录API分析
- 登录函数:
goLoginByPhone - 自定义注解:
@MethodInfo(name = "user/loginbyphone") - 表示该方法是用于通过手机号码进行登录的操作
3.3 网络请求基础
- 在
ApiServices中找到baseUrl定义 - 这是所有网络请求的基础URL
4. 免登录实现尝试
4.1 登录状态判断
- 关键函数:
Util.isLogin() - 实现代码:
public static boolean isLogin() { return APP.getInstance().getUserInfo() != null; }
4.2 修改方案
- 将
!= null改为== null - 效果:可以跳过登录提示,但部分功能无法使用
- 原因:部分功能需要用户身份信息(如VIP状态)
5. VIP功能破解
5.1 VIP相关函数
- 主要涉及四个函数:
- 两个getter函数
- 两个setter函数
5.2 修改方案
- 将两个setter函数修改为非0值
- 或者修改判断是否为VIP的函数:
- 方案一:修改判断逻辑
- 方案二:直接修改返回值
5.3 smali代码修改示例
初始错误修改:
const-string v0, "1"
iput-object v0, p0, Lcom/re/ng/juu/entity/bean/UserInfo;->vip_grade:Ljava/lang/String;
正确修改:
const-string p1, "1"
iput-object p1, p0, Lcom/re/ng/juu/entity/bean/UserInfo;->vip_grade:Ljava/lang/String;
6. 注意事项
-
测试环境:
- 应在可控环境中进行测试
- 不要泄露个人隐私信息
- 使用测试账号进行登录
-
法律合规:
- 该分析内容已举报给有关部门
- 仅用于学习逆向工程技术
- 不得用于非法用途
7. 技术要点总结
-
基础分析工具:
- MT管理器的activity记录器
- Jadx反编译工具
-
关键修改技术:
- 条件判断取反
- 函数调用注释
- smali代码修改
-
分析流程:
- 从manifest文件入手
- 跟踪activity流程
- 定位关键函数
- 分析网络请求
- 修改关键逻辑
-
常见问题解决:
- 签名校验绕过
- 广告跳过
- 免登录实现
- 会员功能破解