初学安卓逆向(课是关卡+1)
本文最后更新于 2026年7月3日 下午
初学安卓逆向(课是关卡+1)
[TOC]
新手初学安卓逆向,有一点点pwn的二进制基础,直接从b站正己的教程上跟着做,先看一遍视频,然后再实操一下,忘了的再回头看(本来是跟着做的,结果发现那样子效率不高,容易忘)
b站教程地址:吾爱破解安卓逆向入门教程《安卓逆向这档事》
所储存显示字符串的地方
- arsc
- xml
- dex
对于应用程序,先进行安装包提取

- np管理器里的通用编辑直接继承好了如何修改app名字和图表,本质是在xml文件内有配置信息,(但是修改了之后没有显示?)
- xml中mt管理器修改activity更稳定,activitiy的主页面修改可以选择跳转窗口。
第一关重现
改包名双开,直接在NP或MT管理器中,选择APK共存,修改包名,就能同时安装两个相同的文件了。

字符串的修改替换与汉化
原本:

逐个修改:定位选择后,找到对应的文件,然后修改。(比如将hello world修改为hello xyyr)

寻找的方法是在这里搜索,然后找到对应的文件,进行修改(arsc文件在mt需要会员,这里用np)

如图搜索到这里,进行更改即可(一般字符串都在这里,可以批量对这儿进行汉化)

替换后如图
3. 图片更改以及图标
用开发助手的布局查看,点击查看表项(长按可以复制)

然后要用MT管理器的搜索,xml搜索,用资源id搜(np没有找到这个功能)

搜索后找到jf.xml

srcCompat是对应的路径,但是认不出来,把它复制下来,在mt管理器,打开arsc文件,选择arsc编辑器(只有这个不需要会员),id定位资源

定位后就可以找到它了,把cf.jpg删了,把想要的图片名字改成cf.jpg,就可以替换过去了。

最终效果:

第二关重现
搜索大会员找到相应的位置

修改判断

根据名字找到这个方法,如果p0>=v0,就跳转到了cond_15,否则继续走到.line34,unicode编码解码后的中文对应的是请先获得10个硬币哦
将ge改为le,往下翻,点住跳转的isvip(),将返回值改为1,注意这里函数返回的是寄存器,所以把寄存器的复制改为1

成功,还是比较简单的。

强制跳转
修改寄存器的值
两种方法一起实践了,这里改值,0硬币就可以投币,并将到vip判断的强制跳转更改到line37的大会员投币成功


重新安装签名后,成功。(后来看到,这不算是强制跳转,强制跳转是将if语句改为goto(区别不大,不再来一遍了,继续往下)

第三关重现
启动时的3s广告(这属于activity类的广子)
(1)不推荐的用法:
用算法助手辨析到对应的一整串名字后,搜索xml文件,将主activity直接修改到第三关的activity,这样一打开就会直接进入

(2)修改停留时长
这是开屏广告的activity

搜索AdActivity

找到对应的方法
把代码扒下来
1 | |
大致解释一下逻辑:
由于 onCreate 是 Android 活动生命周期的一部分,它并不需要在代码中手动调用。Android 框架会自动调用 onCreate 方法来初始化活动。–来自gpt
调用oncreat先调用父类的初始化方法,然后布置布局文件,再调用loadAd方法,这个方法创建的控制器(可能是这个名字?,没学过Java,暂时这么认为),3000ms后调用下一个名字怪怪的方法,再走到jump方法,开启新的活动,终结当前活动。
把3000改为0即可。(要在smail语言中改)
现在一进去就是这个了,看不到3s的过屏广告。

另:突然想起activity记录可以用mt管理器直接获取,比用开发者助手拼手速强。
清除后续弹窗
算法助手傻瓜式操作,且需要在环境中一直开着,迁移性低且简单,不再赘述。
资源定位找到这里

后续忘记了,再去看一眼视频。。。
回头补第一个,可以直接根据程序内部的选择选项来跳转到thirdacitivty:
去class.dex里搜索!!!!(看了一遍又忘了去哪儿搜索了,又回头看的)搜索类名(别复制成main了,问就是复制错了一次,发现找不到重改的)
从adactivity里复制最后一条(类的smail路径代码)

复制下来以后选择搜索代码,由于要选择调用它的,所以排除上面那俩多的,最终只剩一个结果(转成java需要vip,含泪换np,留下贫穷的泪水:cry:

转成java后看的很明确,就是这一堆选择,改到third就好。

根据跳转逻辑找到这里,把名字改了就

改成ChallengeThird,测试一下,确实没有ad的那个广告了(而不是0ms看不到顺闪)

好奇后续的广告弹窗都叫dialog,查了查
弹窗又称为对话框,是App与用户进行交互的常见方式之一。弹窗分为模态弹窗和非模态弹窗两种,两者的区别在于需不需要用户对其进行回应。 模态弹窗会打断用户的正常操作,要求用户必须对其进行回应,否则不能继续其它操作行为;非模态弹窗则不会影响用户的操作,用户可以不对其进行回应,非模态弹窗通常都有时间限制,出现一段时间后就会自动消失。
非模态弹窗一般被设计成用来告诉用户信息内容,而模态弹窗除了告诉用户信息内容外还需要用户对其进行功能操作。
来自Android 四个对话框区别(Toast、Dialog、Actionbar 和 Snackbar) - 一朵小红花儿 - 博客园 (cnblogs.com)
这里的就被设计为模态弹窗,不允许干别的。。
从算法助手里找到对应的调用堆栈,查看相应的内容进行分析,下面都是各种方法,要用方法查询。

根据方法名搜寻到后,一下是java代码,根据java去看smail代码,

将这两个dialog的show函数去掉


点进去检验,已经去掉。
去除挡着的横幅(这里也就是一个置于最顶层的图片)
用开发助手的布局查看,复制其id

资源定位找到名字?(原视频没有这一步,但是我寻思之前查图片,使用这里的资源定位),嘶记混了,图片就是查xml,这里是改文字的。。。。。

资源id搜索到这个xml

下面这行代码可以让图片/文字隐藏,用这个,或者将图片宽高改为0dp。
1 | |
成功

第四关重现(太长了,跟着做的)
给安装包赋予debug权限
1 | |
密钥错误的提示找到这里

找到对应的判断。
debug得到密钥
debug的启动方式:
1 | |
adb shell am start -D -n
adb shell am start -D -n 包名/类名
am start -n 表示启动一个activity
am start -D 表示将应用设置为可调试模式
包名:

启动类名:

启动debug模式后

点调试后找不到对应的进程,可能安装包不一致,尝试一下
还是不行,看评论区,自行安装一个adb。。。

安装了一个新的,还是不行(原来不是最新的),官网下载了一个最新的,然后重启jeb,显示出来了。
调试步入后在这里找到,按理说它应该是返回的v0,在函数的外面就能看到,但是这里显示不出来,去里面看的结果。(说是虚拟机与真机的区别。。)(虚拟机会有些奇奇怪怪的bug)

密钥正确(v)

log插桩。感觉不难,先写写作业,有时间再试一次。
1 | |
先根据文字找到对应的判断,然后判断知道是ChallengFourth这个类,找到check方法,跳转过去,找到执行结果,插桩。

那个一直报错,一细看,插错位置了。。。改到正确的位置,还是报错

改成两个v0,可以保存,但是进去会闪退;
再回去改,弄成一个v0,这次没事了???(怀疑是classes2没有正常载入)

注意,算法助手需要联网才能正常捕获日志。。。(怪不得重试了好几次都没有日志)
成功。

