目录
希望和各位大佬一起学习,如果文章内容有错请多多指正,谢谢!
0x00 相关工具及环境
1、安卓模拟器(最好root的真机)
2、Magisk&XP&LSP框架 HOOK环境
安装参考:https://blog.csdn.net/danran550/article/details/132256027
3、Jadx-Gui 反编译Java代码查看器
4、ApkScan-PKID 查壳工具
5、MT管理器&NP管理器 打包签名综合类
6、开发组手&开发者组手 信息获取综合类
7、算法组手&XP&LSP框架模块 常见HOOK
8、Smali语法查询 Smali逻辑修改辅助
9、脱壳相关:https://mp.weixin.qq.com/s/poQPuvaQPadQxRu_WGvy1A**资源下载地址:https://pan.baidu.com/s/1IGPNSt0U973Pki7tiOZw5A?pwd=8888
0x01 APP逆向 - 数据修改
wuaipojie第一关:根据关卡要求尝试替换App中的文字
使用MT管理器提取wuaipojie安装包,搜索"hello 52pojie"
xml后缀是APK的应用清单信息,它描述了应用的名字、版本、权限、引用的库文件等等信息。反编译Jf.xml后继续搜索"hello 52pojie",替换文字。
保存退出,选择自动签名,安装新打包的wuaipojie,可以看到文字已被替换。
如果想要替换下面的俄语,需要用到开发者助手,点击开始,这样便可以复制App中的俄语
同样MT管理器搜索定位到resources.arsc,是编译后的二进制资源文件(一个映射表),映射着资源和id,通过id可以定位到对应资源位置。
使用Arsc编辑器打开继续搜索俄语,替换文字,保存退出并签名打包安装,可以看到文字已被替换
0x02 APP逆向 - 逻辑修改
wuaipojie第二关:考虑绕过限制做到不需要硬币也可以三连
MT管理器搜索"请先获取10个硬币哦"定位到classes.dex,这是Java源码编译后生成的Java字节码文件,是APK运行的主要逻辑。
使用Dex编辑器++继续搜索定位到具体Smali代码,如下:
Smali代码我看着比较困难,所以使用NP管理器将其转换为Java代码查看(MT的要收费)。
整个Java代码逻辑大致为长按会判断intRef值是否大于10,大于则执行三连操作,否则弹窗提示。
于是来到MT这边的Smali代码,搜索定位0xa(也就是16进制的10) ,得知寄存器v0值为0xa。
搜索v0出现的位置,即下面的if判断:if-ge p0, v0, :cond_15
也就是说,如果p0大于等于v0,那么就跳到cond_15,猜测cond_15就是执行三连,于是我们可以考虑将判断条件-ge改为-le,也就是硬币小于等于10才执行三连即可。
保存退出,重新加签打包安装,可以看到硬币数为0也可以执行三连操作了。
0x03 APP逆向 - 视图修改
wuaipojie第三关:点开后过一会儿就会弹窗广告,按返回键无效,只能选择前往论坛或退出软件,考虑屏蔽广告。
需要用到MT或NP的Activity记录功能,抓取并复制广告的类名com.zj.wuaipojie.ui.AdActivity
在classes.dex搜索类名com.zj.wuaipojie.ui.AdActivity
NP管理器将Smali转为Java代码,发现loadAd方法设置弹窗延迟为3000ms
在MT这边Smali代码定位0xbb8(16进制的3000),这里Smali代码将0xbb8赋值给寄存器v2,然后将v2传入调用sendEmptyMessageDelayed方法,猜测就是延迟的毫秒数3000ms。考虑将v2赋值0x0,是不是就不会弹窗了呢?
保存编译退出,加签安装,发现不再弹窗广告。
屏蔽广告的操作还可以通过hook脚本操作,使用Magisk Delta、LSPosed、算法助手
可以看到广告同样也是不弹的