愤怒的小鸟内购分析
刚开始学习安卓逆向的我也来破解一下简单的小鸟 用到的工具:ddms,AndroidKiller
1.首先打开支付页面,再打开ddms。选择akp的进程

2.此时关闭页面查看ddms输出。

3.AndroidKiller 中搜索方法名,notifyDeliverGoods,搜索到了8条结果,根据名称,我选择了 Game Manager 这个字面意思游戏管理器,进去后查看就是ddms输出的地方。

4.简单了看了一下分析如下
.line 118
if-eqz p1, :cond_1 //跳转到支付失败的代码,那我们就注释掉这一行不让他跳过去
.line 119
sput-boolean v0, Lcom/talkweb/twOfflineSdk/GameManager;->isCallback:Z
.line 120
invoke-static {}, Lcom/talkweb/twOfflineSdk/GameManager;->access$1()Landroid/app/ProgressDialog;
move-result-object v1
if-eqz v1, :cond_0 //跳转到支付成功的代码。那我们就不用它判断直接goto 过去,相当于 x86上面的 jmp
.line 121
invoke-static {}, Lcom/talkweb/twOfflineSdk/GameManager;->access$1()Landroid/app/ProgressDialog;
move-result-object v1
invoke-virtual {v1}, Landroid/app/ProgressDialog;->dismiss()V
.line 123
:cond_0
const-string v1, "\u652f\u4ed8\u6210\u529f!" //翻译过来就是支付成功
5.修改后编译,安装模拟器上后尝试购买发现还是不行,再次关闭页面查看ddms输出的信息。可以看到之前的已经提示支付成功了,但是上面还有一个支付失败,还是继续搜索该方法名 onRechargeFinished,

6.分析 onRechargeFinished
if-eqz p1, :cond_0 //跳转到支付失败的地方。上面的代码就是一些拼接字符串操作直到下面这个跳转
.line 69
new-instance v0, Ljava/lang/Thread;
new-instance v1, Lcom/talkweb/twOfflineSdk/GameManager$1$1;
iget-object v2, p0, Lcom/talkweb/twOfflineSdk/GameManager$1;->val$mContext:Landroid/app/Activity;
invoke-direct {v1, p0, v2}, Lcom/talkweb/twOfflineSdk/GameManager$1$1;-><init>(Lcom/talkweb/twOfflineSdk/GameManager$1;Landroid/app/Activity;)V
invoke-direct {v0, v1}, Ljava/lang/Thread;-><init>(Ljava/lang/Runnable;)V
.line 105
invoke-virtual {v0}, Ljava/lang/Thread;->start()V //启动一个线程主要目的就是执行加载动画,经尝试发现如果启动这个线程基本就会一直卡在这个页面一直加载。可能是没收到什么什么请求吧。
.line 112
:goto_0
return-void //直接返回了也没执行什么成功的方法,只有执行失败的方法,
7.经过分析以后我是直接在这个函数口 直接 return-void 不执行任何代码。



浙公网安备 33010602011771号