两年前编过一阵安卓,那时候还没有接触安全,只是单纯地想向程序猿发展…

之后照猫画虎,马马虎虎许久,也就丢了…

近期刚接触安卓逆向,实战从最简单的破解内购开始,只做分析;

磨刀

使用的 Jermic 师傅的 Android-Crack-Tool For Mac,可以说是MAC下的Android Killer或者ApkIDE吧,工具该有的都有,我只将其中反编译的apktool升级到了2.3.0;

596406481.png

僵尸榨汁机

版本:v1.3.0

运营:?

Pay:中国联通(沃商店)&&中国移动(咪咕游戏cmgame)&&中国电信(爱游戏egame)&&腾讯….

Smali:UnicomSDKHelper && TeleSDKHelper? –> ThreeNetSDKHelper.smali

思路:

虽然取消支付&&支付失败&&支付成功并没有弹窗,但返回消息仍然是支付成功【\u652f\u4ed8\u5931\u8d25】、支付失败【\u652f\u4ed8\u53d6\u6d88】这类的,直接全局搜索发现两处,分别为联通和电信的支付API:

/smali/fi/twomenandadog/zombiecatchers/basegameutils/UnicomSDKHelper$1.smali
/smali/fi/twomenandadog/zombiecatchers/basegameutils/TeleSDKHelper$1.smali

两种支付方式分别来看下;

联通沃商店

1、在UnicomSDKHelper$1.smali中存在:

.packed-switch 0x1
	:pswitch_0
	:pswitch_1
	:pswitch_2
.end packed-switch

这是使用了switch来判断跳转,根据返回内容“支付成功!由于网络原因,道具发放可能存在延迟,请耐心等待”发现.pswitch_0为支付成功,所以破解可以直接将所有跳转指向pswitch_0;

即不管支付取消还是支付失败都跳转到.pswitch_0;

.packed-switch 0x1
	:pswitch_0
	:pswitch_0
	:pswitch_0
.end packed-switch

2、之后搜索调用UnicomSDKHelper类的文件,存在一个特殊smali:

/smali/fi/twomenandadog/zombiecatchers/basegameutils/ThreeNetSDKHelper.smali

发现其通过区分不同支付方式来调用各自的类,共有四种支付方式,文末附出;

这里有两种修改方式:

①、这里将调用的支付类名全部修改为UnicomSDKHelper,即全部使用【沃商店】来支付;

②、由于不同调用使用的也是switch语句,所以也可以直接修改packed-switch跳转语句,使其全部跳转到UnicomSDKHelper;

pswitch_1为UnicomSDKHelper,所以均改为1,共两处;

:pswitch_data_0
.packed-switch 0x1
    :pswitch_1
    :pswitch_1
    :pswitch_1
.end packed-switch

两种方式不同:

①、不论是短信支付还是平台支付【腾讯】都跳转到联通沃商店支付,完全无顾忌;

②、平台支付【腾讯】仍然是平台支付【腾讯】;

相同的是取消,购买都是可以内购成功;

电信爱游戏

1、在TeleSDKHelper$1.smali中存在:payCancel、payFailed、paySuccess三个函数;

这里直接将【支付取消】函数内容全部使用【支付成功】函数内容替代;

由于payFailed与paySuccess需要参数不同,没有深究;

2、同联通方法,搜索调用在TeleSDKHelper类的文件,存在:

/smali/fi/twomenandadog/zombiecatchers/basegameutils/ThreeNetSDKHelper.smali

这里将调用的支付类全部修改为TeleSDKHelper,即全部使用【中国电信】来支付;

崩溃

TeleSDKHelper使用的跳转.pswitch_2,将其中两段跳转全部改到pswitch_2:

:pswitch_data_0
.packed-switch 0x1
	:pswitch_2
	:pswitch_2
	:pswitch_2
.end packed-switch

莫名退出,还是崩溃

怀疑是中国电信支付接口出现了问题???也怀疑是虚拟机环境问题???

为此又用室友的电信卡手机试了一下到没有崩溃,但点短信支付直接提示支付失败…

随便购了几个套餐:

3343163252.png

四种支付?

str = “TX”; ThirdSdkHelper.getInstance().initSDK(paramZCActivity); 腾讯游戏 tencent

str = “YD”; MiguSdkHelper.getInstance().initSDK(paramZCActivity); 移动咪咕游戏 cmgame

str = “UN”; UnicomSDKHelper.getInstance().initSDK(paramZCActivity); 联通沃商店 unicom

str = “DX”; TeleSDKHelper.getInstance().initSDK(paramZCActivity); 电信爱游戏 egame