0x1 前言
1、 打开样本app,看到某些功能是需要付费的,而我们的目的就是绕过收费,实现零支付奔放体验。
在练习中,拥有灵活创新的变通思路无疑对学习的过程有着很大的帮助。本文提及的样本远不止此方法,其它如内购法、直装法等,均可以达到目的... 个人觉得过程>结果,能够经常在过程中发现/找出问题/思路,然后思考/选择方式去解决它,即使最后不成功,你的收获也是很大很有意义的... ps:文章若有解释错误等弊处,还请留言告知。
样本app名为乐*秀*录屏大师, 感兴趣的朋友可以举一反三去试一下。 最新版3.5.3没来得及打包,和上版没啥区别。 这里发下ciapp的国内外版本的合集链接:
有空的话,下篇出个直装的教程(安装即VIP)。 原创不易,胜于搬砖。希望多多支持!谢谢!
本篇文章所涉及的应用程序仅作为本次逆向过程的练习样本,文章的逆向思路为个人原创,性质为新手入门级,难度较低,仅作为交流分享帖子,大神们请绕道。
感兴趣的朋友可以参考我之前发过的同类型帖子:
[Andorid 原创] 自己动手,爆破你的第一款软件
原创教程,转载请注明出处;
禁止用于个人学习外一切用途!
0x2 过程1、 打开样本app,看到某些功能是需要付费的,而我们的目的就是绕过收费,实现零支付奔放体验。
本文第一种思路则是以关键词(恢复购买)入手。
2、 arsc资源中搜索该关键词,得出其英文名为: restore_vip_success(恢复购买成功) 然后dex全局搜索该字符串代码,定位到主类位置:Lcom/enjoyglobal/cnpay/VipPayActivity;
在类中继续搜索,定位到:
sget v0, Lcom/enjoyglobal/cnpay/R$string;->restore_vip_success:I
3、
查阅该处上下代码,初步断定可以挂钩了,附上此处部分代码:
.line 1050 iget v2, v1, Lcom/enjoyglobal/cnpay/network/entity/PayRestoreEntity;->failStatus:I if-nez v2, :cond_13e if-eqz v0, :cond_13e .line 1051 sget v0, Lcom/enjoyglobal/cnpay/R$string;->restore_vip_success:I invoke-virtual {v4, v0}, Lcom/enjoyglobal/cnpay/VipPayActivity;->getString(I)Ljava/lang/String; move-result-object v0 invoke-static {v4, v0}, Lcom/enjoyglobal/cnpay/VipPayActivity;->a(Landroid/content/Context;Ljava/lang/String;)V goto :goto_155 .line 1052 :cond_13e iget v0, v1, Lcom/enjoyglobal/cnpay/network/entity/PayRestoreEntity;->failStatus:I if-ne v0, v3, :cond_14c .line 1053 sget v0, Lcom/enjoyglobal/cnpay/R$string;->account_status_freeze:I invoke-virtual {v4, v0}, Lcom/enjoyglobal/cnpay/VipPayActivity;->getString(I)Ljava/lang/String; move-result-object v0 invoke-static {v4, v0}, Lcom/enjoyglobal/cnpay/VipPayActivity;->a(Landroid/content/Context;Ljava/lang/String;)V goto :goto_155 .line 1055 :cond_14c sget v0, Lcom/enjoyglobal/cnpay/R$string;->restore_vip_failed:I invoke-virtual {v4, v0}, Lcom/enjoyglobal/cnpay/VipPayActivity;->getString(I)Ljava/lang/String; move-result-object v0 invoke-static {v4, v0}, Lcom/enjoyglobal/cnpay/VipPayActivity;->a(Landroid/content/Context;Ljava/lang/String;)V :goto_155 return-void
这里转换下java形式查阅,转换后代码如下:
int i3 = i1; org.greenrobot.eventbus.c.a().c(new com.enjoyglobal.cnpay.b.a()); if ((paramPayRestoreEntity.failStatus == 0) && (i3 != 0)) { a(localVipPayActivity, localVipPayActivity.getString(R.string.restore_vip_success)); } else if (paramPayRestoreEntity.failStatus == 2) { a(localVipPayActivity, localVipPayActivity.getString(R.string.account_status_freeze)); } else { a(localVipPayActivity, localVipPayActivity.getString(R.string.restore_vip_failed)); }
通过java形式展现,有if语句判断,大概意思为:定义i变量,通过其值与failStatus值进行比较判断,最后输出结果。可以看下图理解:
简单翻一下:
如果failStatus=0与i3≠0时,输出restore_vip_success结果,即恢复购买成功; 如果failStatus=2时,即帐号为冻结状态; 否则都不满足的话即输出结果:恢复购买失败。 4、 上述理解大意之后,返回smail界面,对关键词所在进行寄存赋值(即下方代码第三行添加const/4 v2, 0x0),修改后代码如下: .line 1050 iget v2, v1, Lcom/enjoyglobal/cnpay/network/entity/PayRestoreEntity;->failStatus:I const/4 v2, 0x0 if-nez v2, :cond_13e if-eqz v0, :cond_13e .line 1051 sget v0, Lcom/enjoyglobal/cnpay/R$string;->restore_vip_success:I
加完后,解决了failStatus这里,再往上修改i3变量值,让其值不为0即可(即对寄存v0的值均赋值1)。修改后代码如下:
.line 1033 iget-object v5, v1, Lcom/enjoyglobal/cnpay/network/entity/PayRestoreEntity;->pay_date_1112:Ljava/lang/String; invoke-static {v4, v5}, Lcom/enjoyglobal/cnpay/aq;->d(Landroid/content/Context;Ljava/lang/String;)V :cond_ea if-nez v10, :cond_f5 if-nez v13, :cond_f5 if-nez v14, :cond_f5 if-eqz v0, :cond_f3 goto :goto_f5 :cond_f3 const/4 v0, 0x1 goto :goto_f6 :cond_f5 :goto_f5 const/4 v0, 0x1 :goto_f6 if-eqz v0, :cond_106 const/4 v5, 0x0 .line 1039 :goto_f9 array-length v6, v15 if-ge v5, v6, :cond_122 .line 1040 sget-object v6, Lcom/enjoyglobal/cnpay/network/entity/ProductIdConstant;->keys:[Ljava/lang/String; aget-object v6, v6, v5 invoke-static {v4, v6, v2}, Lcom/enjoyglobal/cnpay/aq;->a(Landroid/content/Context;Ljava/lang/String;Z)V add-int/lit8 v5, v5, 0x1 goto :goto_f9 :cond_106 move v5, v0 const/4 v0, 0x1
5、
修改完保存返回,签名app,测试app。
PS:既然是通过恢复购买方法进行的爆破,那进入app后我们得手动点一下恢复购买即可实现。
6、
测试效果图
7、
到这里我们的目的便实现了。
0x3 总结
在练习中,拥有灵活创新的变通思路无疑对学习的过程有着很大的帮助。本文提及的样本远不止此方法,其它如内购法、直装法等,均可以达到目的... 个人觉得过程>结果,能够经常在过程中发现/找出问题/思路,然后思考/选择方式去解决它,即使最后不成功,你的收获也是很大很有意义的... ps:文章若有解释错误等弊处,还请留言告知。
0x4 下载
样本app名为乐*秀*录屏大师, 感兴趣的朋友可以举一反三去试一下。 最新版3.5.3没来得及打包,和上版没啥区别。 这里发下ciapp的国内外版本的合集链接:
https://www.lanzous.com/b0mi3csd
0x5 尾言有空的话,下篇出个直装的教程(安装即VIP)。 原创不易,胜于搬砖。希望多多支持!谢谢!