本帖最后由 aiwanqq 于 2017-6-24 16:59 编辑
小白最近看到有大神发三笨贼2 的破文,于是想拿他来练练手 下面是个人练习过程,请大家多多指教。最终效果如下:
目标
1. 破解
2. 去掉购买框
3.去掉不需要的权限
4.添加自己的签名
1.之前有大神已经分析过如何破解了,就不再赘述。
http://www.52pojie.cn/thread-607019-1-2.html
2.经过跟踪发现,在购买道具的时候,过程如下:
addAdvertisement()->handler.sendMessage()->this.order()->购买过程->billingSucceed() 或者->billingFailed();
其中billingSucceed() 为购买成功,billingFailed()为购买失败。
那么我们是不是可以跳过购买过程,直接在this.order()里面调用billingSucceed()呢?说干就干。
billingSucceed()是sbz2类中的一个函数,参数为String,那么我们调用的时候传一个任意字符串进去即可(分析billingSucceed()可知)。
修改前:
[AppleScript] 纯文本查看 复制代码 .method public order(Landroid/content/Context;Lmm/purchasesdk/OnPurchaseListener;)V
.locals 4
.param p1, "context" # Landroid/content/Context;
.param p2, "listener" # Lmm/purchasesdk/OnPurchaseListener;
.prologue
.line 192
:try_start_0
sget-object v1, Lcom/caimeng/sbz2/sbz2;->purchase:Lmm/purchasesdk/Purchase;
iget-object v2, p0, Lcom/caimeng/sbz2/sbz2;->goodInfos:[Ljava/lang/String;
sget v3, Lcom/caimeng/sbz2/sbz2;->sbillingIndex:I
aget-object v2, v2, v3
invoke-virtual {v2}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object v2
.line 193
iget-object v3, p0, Lcom/caimeng/sbz2/sbz2;->mListener:Lcom/caimeng/sbz2/IAPListener;
.line 192
invoke-virtual {v1, p1, v2, v3}, Lmm/purchasesdk/Purchase;->order(Landroid/content/Context;Ljava/lang/String;Lmm/purchasesdk/OnPurchaseListener;)Ljava/lang/String;
:try_end_0
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
.line 199
:goto_0
return-void
.line 195
:catch_0
move-exception v0
.line 197
.local v0, "e":Ljava/lang/Exception;
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
goto :goto_0
.end method
修改后:
[AppleScript] 纯文本查看 复制代码 .method public order(Landroid/content/Context;Lmm/purchasesdk/OnPurchaseListener;)V
.locals 2
const-string v0, "\u8d2d\u4e70\u6210\u529f"
invoke-virtual {p0, v0}, Lcom/caimeng/sbz2/sbz2;->billingSucceed(Ljava/lang/String;)V
const/4 v1, 0x0
invoke-static {p1, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V
return-void
.end method
编译签名之后,测试OK
3.在安装时发现有两个我不喜欢的权限,打算去掉。发送短信和开机启动。
打开AndroidManifest.xml删除如下两条即可。
<uses-permissionandroid:name="android.permission.SEND_SMS"/>
<uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
4.sbz2的onCreate()函数中用Toast显示一个字符串即可。 到此,练习完成。
重新编译,签名,下载到模拟器或者手机中即可开心玩耍了。
最后附上成品。http://pan.stnts.com/s/1tim8aA 解压码 52pojie.cn
|