两年前编过一阵安卓,那时候还没有接触安全,只是单纯地想向程序猿发展…
之后照猫画虎,马马虎虎许久,也就丢了…
近期刚接触安卓逆向,实战从最简单的破解内购开始,只做分析;
磨刀
使用的 Jermic 师傅的 Android-Crack-Tool For Mac,可以说是MAC下的Android Killer或者ApkIDE吧,工具该有的都有,我只将其中反编译的apktool升级到了2.3.0;
僵尸榨汁机
版本: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
莫名退出,还是崩溃
怀疑是中国电信支付接口出现了问题???也怀疑是虚拟机环境问题???
为此又用室友的电信卡手机试了一下到没有崩溃,但点短信支付直接提示支付失败…
秀
随便购了几个套餐:
四种支付?
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