首页
论坛
课程
招聘
[原创]android逆向入门练习---滑雪大冒险支付分析
2018-3-21 20:15 5726

[原创]android逆向入门练习---滑雪大冒险支付分析

2018-3-21 20:15
5726

         使用的游戏版本:滑雪大冒险-冬季版;

          工具: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文件。

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

    修改onCanceled函数:

    修改onFailed函数:

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

    最后使用签名工具signapk制作签名。

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



恭喜ID[飞翔的猫咪]获看雪安卓应用安全能力认证高级安全工程师!!

收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 8356
活跃值: 活跃值 (1077)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
Sam.com 活跃值 2018-3-22 00:50
2
0
既然用了AndroidKiller,直接在里面改了重打包不就行了?为什么还要用后面的步骤??
雪    币: 742
活跃值: 活跃值 (747)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
茅山小僧 活跃值 2018-3-22 11:00
3
0
这是某个教程里面的吧
雪    币: 203
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sanbaideng 活跃值 2019-5-5 17:04
4
0
茅山小僧 这是某个教程里面的吧
哪个教程呀
雪    币:
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
北方的季风 活跃值 2019-5-8 15:07
5
0
这个可以直接编写java的类编译成smali文件,替换之前的就可以
游客
登录 | 注册 方可回帖
返回