Android逆向系列1:滑雪大冒险
2017-08-22 本文已影响55人
Henry3II
声明:本文内容只用作学习交流使用,若有人利用本文内容进行任何商业目的和非法牟利,带来的任何法律责任将由操作者本人承担,和本文作者没有任何关系。
这次要破解的软件原始版本和破解后的版本在这里:http://pan.baidu.com/s/1nv7Mpnz,密码:zhuk
首先打开软件,分析软件的行为:
![](https://img.haomeiwen.com/i5894979/bb900629c2300355.png)
![](http://upload-images.jianshu.io/upload_images/5894979-d9af0b9b46866e75.png)
看到购买道具那里需要支付,打开monitor监视该程序行为,在点击商店购买前将logcat信息清空,然后点击购买:
![](http://upload-images.jianshu.io/upload_images/5894979-029db4b0314f52d7.png)
![](http://upload-images.jianshu.io/upload_images/5894979-505a2a36bf43f526.png)
发现一些有用的东西:Yodo14GameSmsPay_SetPayCallback,YgSmsPayAdapterBase。
使用Androidkiller反编译apk文件,搜索下这几个敏感的字符串。
![](http://upload-images.jianshu.io/upload_images/5894979-2fd530f01a303979.png)
右键查看这部分的java源码,发现敏感的地方:
![](http://upload-images.jianshu.io/upload_images/5894979-f958896f4c886406.png)
这里是返回支付结果是否成功的地方:
![](http://upload-images.jianshu.io/upload_images/5894979-c4386089a222c815.png)
可以看到listener接口的方法作为参数传入了startPay()。
我们再回过头在AndroidKiller中看看startPay的反编译代码:
![](http://upload-images.jianshu.io/upload_images/5894979-d1767c7736e47853.png)
可以看到传入的第三个参数为listener,破解的思路就是在调用startPay() 函数时直接传入onSuccess。即在函数开始位置插入如下代码:
invoke-interface {p3}, Lcom/yodo1/sdk/game/Yodo14GameSmsPayListener;->onSuccess()V #调用listener接口的onSuccess()方法
return-void #返回出去
如图:
![](http://upload-images.jianshu.io/upload_images/5894979-fa1cac4e8ae29168.png)
然后编译,安装。此时可以看到,已经可以直接购买了:
![](http://upload-images.jianshu.io/upload_images/5894979-671321920a51000a.png)