Android逆向入门练习——滑雪大冒险支付分析
2019-11-04 18:59:00 Author: mp.weixin.qq.com(查看原文) 阅读量:87 收藏


本文为看雪论坛优秀文章

看雪论坛作者ID:okCryingFish

使用的游戏版本:滑雪大冒险-冬季版。
工具:AndroidKiller、夜神模拟器、baksmali、Smali、signapk。
一、信息收集
使用AndroidKiller反编译滑雪大冒险APK包,在Android模拟器安装滑雪大冒险并运行,Androidkiller中选择设备后点击查看日志。

这时在滑雪大冒险的商店点击购买。在弹出的确认对话框选择取消。
这时还会弹出一个确认取消支付的对话框,选择确认。

这时日志窗口已经有很多信息,其中有一条为支付失败的信息。
“Message: PayCallback: result=PayFailed”。

二、分析源码
在工程中搜索字符串"PayCallback"。发现搜到到了一条信息,直接查看源码。
我们在源码窗口可以看见许多关键信息,可以得到关键的类名和smali文件的路径。UnitySupportSmsPay类中有三个关键函数,应该是支付时不同状态来调用不同函数。
这三个函数都调用了setWhat函数,但是传递的参数不同,可以猜想这个参数就是支付后有不同结果的关键。

三、修改Smali汇编重新打包
将滑雪大冒险的APK包解压。
使用baksmali工具将classes.dex文件反编译为Smali汇编。
默认生成的out目录就是反编译的Smali代码。删除原本的class.dex。在out目录下根据之前得到的UnituySupportSmsPay类的路径找到相应的Smali文件。


使用记事本打开相应的文件。onCanceledonFailedonSuccess函数在调用setWhat函数时传递了不同参数,我们找到onCanceledonFailed函数,在其调用setWhat函数时将其参数修改成和onSuccess一样的0。
修改onCanceled函数:

修改onFailed函数:

保存修改。之后使用smali工具将out目录重新编译成classes.dex文件。删除out目录和签名文件META-INF。然后重新将整个目录中的文件打包成APK。
最后使用签名工具signapk制作签名。

在Android模拟器安装修改过后的APK。运行起来,在商店购买东西,虽然我们点击取消,但仍然能购买成功。

- End -

看雪ID:okCryingFish

https://bbs.pediy.com/user-780653.htm 

*本文由看雪论坛  okCryingFish  原创,转载请注明来自看雪社区

推荐文章++++

AS 3.0.1 编写 Xposed 插件入门记录

* ECC椭圆曲线加密学习笔记

Dalvik解释器源码到VMP分析

CVE-2017-13258 Android 蓝牙BNEP漏洞分析

Java Socket抓包的一个实现方式

进阶安全圈,不得不读的一本书

“阅读原文”一起来充电吧!

文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458300468&idx=1&sn=aa04e8ec73ae0f55e35890b7cc371bc2&chksm=b18180be86f609a82f28359fffec7a0306a4075e2ee3c35b4bca22cba7806751b68d86e269a6#rd
如有侵权请联系:admin#unsafe.sh