快速定位关键代码
1、 分析流程
搜索特征字符串
搜索关键api
通过方法名来判断方法的功能
2、 快速定位关键代码
反编译APK程序
Android Manifest.xml => 报名/系统版本/组件
程序的主activity(程序入口界面)
每个Android程序有且仅有一个主activity
分析程序的执行流程
需重点关注的application(APK)
Application执行时间
授权验证
3、 定位关键代码的技巧
实例分析
~Jadx分析
Jadx可以在这下载:
https://github.com/skylot/jadx/releases
使用jadx打开,搜索“9000”,
打开对应的代码处,
22行,在比较a是不是等于9000,
23~29行,逻辑判断,等于2、等于7、等于30分别做对应的操作。
这里一个小问题是这里的“ 2、7、30 ”分别对应的什么,
安装软件,先看看界面,或许可以找到一些关键信息。
这里可以判断
23、25、27行的“ 2、7、30 ”对应的是天数。
24、26、28行的“ 2、6、20 ” 对应的就是金额。
简单总结支付的逻辑就是,当我们先选择对应的“套餐”,调转支付宝支付,
支付宝将结果返回,支付成功返回9000,否则为8000。
假设支付成功,则获取你刚刚选择的是哪个“套餐”,发放相对应的记牌器天数。
~AndroidKiller分析
查找“9000”,跳转到对应的位置,
49行,定义一个V1,值为9000
51行,把V0与V1比较,
53行,将结束保存到V1内
55行,假设V1=0,跳转到“:cond_4”
先说说常见的判断条件语句:
我们可以跟着到“:cond_4”处,看看代码是什么意思。
198行,给V1赋值“8000”,这里就是支付失败的含义了。
200行,把V0与V1进行比较,
202行,将结果保存到V0中,
204行,假设V0=0,跳转到“ :cond_1”,
206行,直接跳转到“:goto_1”,
跟踪到“ :cond_1”,发现下边就是结束本次流程,返回空。
总结这个“:cond_4”处,就是支付失败了的逻辑,
关键点分析
这里的思路就和明确了,即不让他跳转到“ 支付失败 ”的“:cond_4”,
而是让代码继续向下执行“ 支付成功 ”的代码,
比如直接注释掉” If-eqz v1, :cond_4 ”
或者将上述语句改为“ If-nez v1, :cond_4 ”,
这样付款成功就失去了效果,但是付款失败反而得到记牌器。
当然除了上述,还有很多其他的方法,这里就抛砖引玉一下。
修改完毕,CTRL + S保存之后直接回编译即可完成破解。
附带常见方法名:
和游戏方法名onResult,onchinabilling,resulton,Paycenter,Callback
爱游戏方法名:paySuccess(成功)payFailed(失败)payCancel(成功)
沃游戏方法名:OnPayResult,PyaResulton,Activity,result,callback
4399游戏方法名:notifydelivergoods
支付宝和银行卡方法名:handle,message
移动MM方法名:onBillingFinish,Billing,CallBack
360支付:onfinished onActiv ityresult
支付宝搜索字符串:9000
咪咕游戏搜索常量:onresult
发送短信权:android.permission.SEND_SMS
锁定支付模式关键字符串:CHINA_TELECOM
支付上限:carrier_pay_out_limit, no_propriate_pay_method
谷歌广告:Missing internet permission in AndroidManifest.xml