好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 jokers 于 2015-12-16 19:41 编辑
在论坛里潜伏了很久,第一次发帖,内容比较简单,希望可以跟大家一起交流讨论,也希望有大神看看有什么可以改善的地方,指点一二。
0x0
工具:androidkiller
样本:火柴人联盟V1.4.1
0x1
首先,将样本拖入androidkiller中,看一下样本的大概结构。然后运行样本,用androidkiller看运行时的log信息,如果软件的开发者有留下什么关键信息的话可以帮助我们更快破解软件。因为我们现在主要是破解软件的内购,所以我们先看看购买东西时有什么log信息
游戏进行消费时的界面:
游戏购买金币和钻石的界面
取消支付:
取消支付时的log信息:
进行内购时的log信息
最主要的应该就是这几行了,尤其是test rechager failure 这一行
在代码中搜索rechager failure这个这个字符串,可以搜到两个结果,
根据搜到的结果看过去,可以看到这样的代码
有个if-ne p1, v0, :cond_0这样的判断语句,即p1与v0不相等则跳转到cond_0,看看cond_0
其中\u8ba1\u8d39\u5931\u8d25\u3002\u3002转化为文本就是 计费失败。。也就是说只要不跳转到cond_0就行了,所以将上面的if-ne p1, v0, :cond_0这一行语句去掉就行了。重打包安装运行试试
0x2
ok,可以购买成功了,第一个目标完成了,但是这个软件有检验是否被篡改过的功能,所以在不断网的情况下打开会弹出下面的窗口
这个问题也不难解决,弹出的窗口有两个按钮,确定和退出,在代码中搜索“确定”这个字符串的unicode,可以得到两个结果
都在popKuangInfo这个方法里面,并且这个方法中还有“有侵权”这个字符串,所以基本可以确定是通过调用这个方法检测的,
原本的代码是
invoke-virtual {v3}, Landroid/app/Activity;->isFinishing()Z
move-result v3
if-nez v3, :cond_0
就是用isFinishing()Z函数检测样本是否完整,若完整则返回1,若不完整则返回0,将返回值赋给v3,判断v3是否等于0,若不等于0则跳转到cond_0,然后退出函数,所以这里只要将if-nez v3, :cond_0改成goto :cond_0,无论返回值是什么都跳转到cond_0退出函数就可以了。
所以第二步完成了,最后一步,让程序消费时不弹出支付弹窗直接完成支付
0x3
这个软件是用easymobi进行支付的,进行支付时需要先初始化EMPayManager才行,我们可以从这里下手,我们可以看到有这样一个类Lcn/easymobi/android/pay/common/EMPayManager;里面有这些方法
其中initMerge(Landroid/content/Context;II)V是判断用户手机运营商并选择支付方式的,也就是在弹出支付窗口时会先调用这个方法,只要阻止这个方法被调用就可以完成目标,
一共有两个地方调用了这个方法,第一个是注释语句可以无视,直接跳到第二处
发现有这样一行
invoke-static {p0, v3, v4}, Lcn/easymobi/android/pay/common/EMPayManager;->initMerge(Landroid/content/Context;II)V
把这一行去掉就可以了,去掉这一行后会造成选择支付方式失败而无法完成支付,但是由于我们第一步里已经修改了逻辑,所以无论支付的结果怎么样都会跳到支付成功。
第一次发帖,很多地方表达得不是很好,也有很多地方可能有更好的方法去改动,希望大家可以一起讨论。
最后附上样本与完成品
链接: http://pan.baidu.com/s/1eRnageQ 密码: ycmc
这里再附上修改了图标,加载界面,加了有米广告的版本,在点击购买物品时就会弹出广告,对有兴趣的童鞋可以拆包看看,
链接: http://pan.baidu.com/s/1dEd8MA1 密码: t5ph |
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|