记一次因为无聊引发的逆向(Android逆向)
字数 1199 2025-08-22 12:22:36
Android逆向实战:去除广告与修改游戏数据
概述
本教程详细记录了一次针对Android应用的逆向工程过程,主要包括去除应用内广告和修改游戏数据两个部分。通过使用多种逆向工具和技术手段,成功实现了对目标应用的修改。
前期准备工具
- 安卓模拟器:逍遥模拟器(用于运行目标应用)
- 网络监控工具:Fiddler(监控应用网络流量)
- 逆向工具:
- AndroidKiller(逆向、回编译、生成签名)
- Jadx(查看Java代码)
- 调试工具:DDMS(查看Logcat日志信息)
工具配置步骤
AndroidKiller绑定模拟器
- 找到模拟器的进程ID
- 查询对应的本地端口
- 在AndroidKiller的
/bin/adb目录下执行adb.exe的Connect操作 - 刷新查看绑定状态
去除APP广告
方法一:修改smali代码
- 通过
AndroidManifest.xml查找主活动页面地址 - 分析网络请求,提取关键字(如"Newfeatureview")
- 在AndroidKiller中全局搜索关键字
- 修改smali代码:
# 修改前
.method public run()V
.locals 8
.prologue
.line 292
const-string v4, "http://Newfeatureview.xxxxx.com/featureview/gettime/"
const/4 v5, 0x0
# 修改后
.method public run()V
.locals 7 # 寄存器数量减1
.prologue
.line 292
#const-string v4, "http://Newfeatureview.xxxxx.com/featureview/gettime/" # 注释掉请求
const/4 v5, 0x0
注意事项:
- 注释掉代码后必须相应减少
.locals声明的寄存器数量 - 或者可以将请求地址替换为"127.0.0.1",这样不需要修改寄存器数量
方法二:修改权限
在AndroidManifest.xml中修改网络权限:
<!-- 保留基本网络权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 删除以下权限 -->
<!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATEM,"/> -->
<!-- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> -->
注意:完全删除INTERNET权限可能导致应用无法运行。
修改游戏数据
数据库修改方法
- 分析应用目录结构,找到数据库文件(如
test.db) - 通过文件头
SQLite format 3确认是SQLite数据库 - 将数据库文件复制到本地,使用数据库软件打开
- 修改关键数据:
- 将第一关的奖励值改为5201314
- 将通关状态从False改为True
- 将修改后的数据库文件替换回原位置
其他修改方法
- 通过DDMS分析日志信息
- 定位商店相关代码包
- 注意加密参数和验证机制,可能需要构造特定参数
关键知识点总结
-
smali代码修改:
- 寄存器数量必须与代码中使用的一致
- 注释代码后要相应调整
.locals声明
-
权限控制:
INTERNET权限是基本网络权限ACCESS_WIFI_STATE和ACCESS_NETWORK_STATE是辅助网络信息权限
-
数据存储:
- 游戏数据可能存储在SQLite数据库中
- 修改前确认数据库结构和关键字段
-
网络请求拦截:
- 可以通过修改请求地址或注释请求代码来阻止广告
- 使用Fiddler监控网络流量有助于分析请求结构
注意事项
- 修改前备份原始APK和重要文件
- 注意保持代码逻辑完整性,避免因修改导致崩溃
- 数据库修改时要确保数据结构一致性
- 复杂的加密验证机制可能需要更深入的分析
通过以上步骤,可以有效地去除Android应用中的广告并修改游戏内数据。实际应用中可能需要根据具体情况调整方法。