逆向学习记录一:破解熊大农场
本人小白,最近才开始学逆向,记录下自己的学习记录,过程比较简单,具体破解步骤如下该app是我找来练手的一个弱联网游戏,首先运行原APK进入游戏,完成新手教程后确定其充值方式为话费支付,且充值失败后有弹窗提示,这就很简单了。
卸载原版程序,’将安装包丢入Androidkiller中进行反编译,直接打包运行,在不联网的情况下可以正常进游戏。接着搜索“支付失败”的Unicode码,发现结果并不多,且都在joym目录下,逐个查看。(程序的入口:com.joym.PaymentSdkV2.SplashActivity)
第一个是抛出支付失败异常,不管,继续往下看,来到下面一个搜索结果,发现在一个OnResult的函数中,查看其java代码如下。
为了让APK支付成功,找到支付成功对应的smali语句:
:pswitch_0
iget-object v0, p0, Lcom/joym/PaymentSdkV2/model/PlatformCM$6$1;->val$callback:Lcom/joym/PaymentSdkV2/Logic/PaymentCallback;
const/16 v1, 0x64
const-string v2, "\u652f\u4ed8\u6210\u529f"
invoke-virtual {v0, v1, v2, v4}, Lcom/joym/PaymentSdkV2/Logic/PaymentCallback;->onCallback(ILjava/lang/String;Ljava/lang/String;)V
goto :goto_0
然后找到switch(parmInt)对应的smali语句,在其之前插入goto语句,直接无条件跳转到执行充值成功的语句。
goto :pswitch_0
packed-switch p1, :pswitch_data_0
这里的更改就算成功了,为了一步到位,继续看其他地方,来到下面的代码,发现在一个payFailed函数里面,显然的支付失败,查看其java代码。这里为了省事,就不去查哪里调用他们了,直接把支付取消和支付失败函数里的内容都改为支付成功函数里面的语句。
修改完成,继续往下看,略过无关结果,来到一个类似的地方,同上, 代码替换掉。继续往下,来到一个payresult函数,支付成功语句代码
:pswitch_0
iget-object v1, p0, Lcom/joym/PaymentSdkV2/model/PlatformCU$10;->val$callback:Lcom/joym/PaymentSdkV2/Logic/PaymentCallback;
const/16 v2, 0x64
.line 457
const-string v3, "\u652f\u4ed8\u6210\u529f"
……
将下列的因此将紧跟在下面的跳转代码都改为支付成功的跳转pwitch_0
.packed-switch 0x1
:pswitch_0
:pswitch_1
:pswitch_2
继续往下碰到的代码都类似上面,也类似的改就行了。碰到一个判断跳转的地方:
if (((String)localObject1).equals("1"))
{
this.this$0.uploadcuinfo();
this.val$callback.onCallback(100, "支付成功", paramString);
this.this$0.setSharedPreferences("1", "支付成功");
}
意思是调用String的equal函数,与1比较,相等的话执行支付成功回调,这里在对应的smali语句中把判断注释掉,无条件执行支付成功代码就行了:
#if-eqz v3, :cond_0
下面碰到的其他判断跳转也类似的改,if语句中包含的是支付成功的代码就注释掉if语句,否则就将if语句改为goto语句无条件跳转到支付成功代码语句即可。
终于改完了,删除敏感的发短信权限,打包签名,安装到模拟器上运行,点击支付,发现支付成功。
,
然后问题来了,一联网就闪退,请问大佬这是网络签名验证吗,是的话不应该不联网能打开啊,不是的话为啥打开就闪退,该怎么解决啊,自己搞了一个星期,也分析了so层,尽力而为了还是没弄好,求大佬顺便解惑。
注:才刚刚学,知识掌握不多,请大佬解答详细点,万分感谢!
最后,附上网盘地址原版APK
链接: https://pan.baidu.com/s/1NdrEmD5R4nfuRPvUx5lnXQ 提取码: 33yv
破解不联网正常运行APK
链接: https://pan.baidu.com/s/1hlZBEnRszbu5h66wdr8xsw 提取码: z94b
这个游戏去年3月份我破解过,当时在手机和模拟器上均能正常使用,可能当时的版本没有第三方签名验证吧。可以比较下META-INF文件夹的内容。
附破解版本
链接:https://pan.baidu.com/s/1CSACpECfe1PiJon-hRyRQg
提取码:qza8 肯定服务器上面有你的金币之类的信息,一联网就发送封包验证,返回数据对比不对就退出,封包拦截看看。封包肯定也是加密的,看看有没有退出的函数直接干掉 支持原创 ,谢谢分享思路。与楼主一起学习 把步骤很详细,可以参考试试 一同学习。。 大佬牛逼 看来有安全加密啊 顶顶更健康 支持继续创作{:301_998:} 看你是11月19注册的,怎么注册的,不是不开放注册吗 2Burhero 发表于 2019-11-20 15:38
看你是11月19注册的,怎么注册的,不是不开放注册吗
申请专区可以发帖申请的