滑雪大冒险2.0.5破解之道
昨天下载了一个游戏滑雪大冒险,挺好玩的,可惜玩了3把以后,蹦的弹出一个框,要收费,实在是扫我的兴,尼玛,刚好想找个安卓程序练练手,就那你开刀了....
破解安卓程序比Windows程序容易多了,掌握了方法,傻瓜都可以破解,哈哈...下面偶就记录下我破解的过程,算是一个总结吧,有兴趣的朋友可以试试这种方法的效果,算是抛砖引玉吧~
破解环境:apktools+华为G525+Total Command 8.0.
第一步:先把安装包com.DefiantDev.SkiSafari_1005.apk下载下来,包有点大。我下的版本是2.0.5。将后缀改成zip,如果可以成功解压的话,则下载的文件是完整的。其实apk文件用的压缩算法就是zip。
第二步:反编译apk文件。命令如下:
Apktool d com.DefiantDev.SkiSafari_1005.apk outputfile
我的目录是hxdmx.
第三步:查找支付成功调用的函数。用TotalCommander查找提示字符串——“支付成功”,查找到有两个文件包含该字符串。
好家伙,中国通信运营商三巨头都在里头。我选择了Unicom,打开看看.
发现里面有个标签:
顺蔓摸瓜,再搜successMessage。找到了5个文件:
一个一个看,发现YgSmsPayAdapterBase里面有一个函数:
.method public static getBillingSuccessMessageKey()Ljava/lang/String;
.locals 1
.prologue
.line 177
const-string v0, "successMessage"
return-object v0
.end method
返回值就是successMessage。好的再搜getBillingSuccessMessageKey。找到了2个文件:
打开Yodo14GameSmsPay$2,发现了宝藏:
.line 178
:cond_0
invoke-static {}, Lcom/yodo1/sdk/game/smspay/YgSmsPayAdapterBase;->getBillingSuccessMessageKey()Ljava/lang/String;
这里调用了getBillingSuccessMessageKey()函数,调用者为.method public onSuccess()V。既然有成功,那就有失败,网上搜寻,发现了与之配对的函数:
.method public onFailed()V。
按理来说,只要把.method public onSuccess()V里面的内容覆盖.method public onFailed()V函数里的内容,则失败后也会调用成功后的代码,从而进行购买成功后的操作。但是这样的话还要进行打包,再复制签名,挺麻烦的。这里直接使用谷歌的工具dalvik字节码编辑工具。该工具可以浏览安卓系统的目录,并能直接打开apk文件并修改。省去了后续很多繁琐的步骤。但是该工具是一个安卓平台工具。
第四步:将文件拷贝到手机上,并在手机里安装dalvik,然后用dalvik找到apk文件并打开。打开xxx\hxdmx\smali\com\yodo1\sdk\game\Yodo14GameSmsPay$,如下图所示:
点开Methiod,发现有几个函数,如图所示:
打开onSuccess,并将里面的文字复制到onFailed里面。
用dalvik将onSuccess()V的内容复制到onFailed()V里面。
第五步:点击安卓返回键,系统会提示你是否需要保存,点击保存即可。
第六步:测试是否破解成功。
笔者经过上述步骤后在AVD里可以无限制地玩了,说明破解成功。还等什么,赶紧体验一把吧!
爱心提示:在手机上面玩时,记得把飞行模式打开,否则会扣费哦。
参考文献:
《Android软件安全与逆向分析》 丰生强著
《破解中国移动android游戏收费》 看雪论坛
破解文件下载:只破解了联通版本。
无奈,被河蟹了...