捕鱼达人3> 刚出来不久,就被鬼哥Dump出来dex,随之破解也就轻而易举。一开始我用ZjDroid神器试验过,但是没Dump成功一直耿耿于怀,终于有一天逆袭 不仅提取出来了smali文件,继而修复 更是在破解的时候 另辟蹊径,不弹支付界面亦可破解了还支持离线模式。就记录一下。
程序是从移动MM商城下载的。
一、脱壳。
这个壳的关键词是 chaosvmp ,据说是看雪一位版主所在的公司开发的。在手机上安装好程序并运行,依据教程,脱壳的步骤是:
1、打开命令行 输入查看 LogCat
adb shell logcat -s zjdroid-shell-org.cocos2d.fishingjoy3
如下图所示:
记下hook的pid=13108
2、再打开一个命令行 用来向手机发送执行命令。首先要在 adb shell 获取APK当前加载DEX文件的信息 输入命令:
am broadcast -a com.zjdroid.invoke --ei target 13108 --es cmd '{"action":"dump_dexinfo"}'
如图,会出现两个路径,第一次Dump可能不知道应该用哪一个,我用的是apk后缀的。我的看法是如果路径中有 **.classes.dex 路径,则优先选择;否则可以试试apk后缀的路径。那我们开始dump dex:
am broadcast -a com.zjdroid.invoke --ei target 13108 --es cmd '{"action":"backsmali","dexpath":"/data/app/org.cocos2d.fishingjoy3-1.apk"}'
到指定的文件夹查看dex文件,大小却为0字节是不是就说明我们dump失败了呢?其实 /file/smali 是可以提出来完全可以用的。
二、修复。
上面已经提取出来smali文件了 用IDE反编译原程序,将smali文件替换为dump出来的 看能否编译成功。果然出错如下图,
将这两行删除,同样修复接下来的报错提示。然后就能编译成功了。
安装试试能不能正常打开,果然秒退o(╯□╰)o
咦 这到底是为什么尼?我们是把壳脱了 猜想,是不是程序运行时 仍然调用了与壳有关的代码 导致了闪退?终于不负有心人在AndroidManifest.xml文件中 看到了:
果断将 Application 的 name 属性删除。然后完美修复完成。
三、破解。
按照以前的陈旧思路 移动MM商城的短信支付几乎可以说是秒破,但是今天换一种思路 探索更完美的破解手段——不让其弹支付界面直接购买成功。(还是天哥的教程给了我动力 膜拜..)怎么个思路呢?还是得先分析关键.Method onBillingFinish,定位到短信发送成功调用的代码:
(其实,这段代码出现支付界面只不过显示“发送成功”),结合下面代码很容易识别,交易成功与否的关键词为:“didCompleteTransaction”“didCancelledTransaction”
那就直接搜索关键词呗 找到;类org/cocos2dx/IAP/IAPWrapper,里面的方法有:
根据方法名猜测 addpayment ,有添加支付弹窗的嫌疑,那我们就试着 将.method didCompleteTransaction 里的代码全部复制到.method addPayment。安装试验。结果却出现了:
一定是方法 didCompleteTransaction 另有判断,查看代码 只有一个判断,修改即可。