APK文件结构分析:
实际上可以算作一个zip压缩包 解压后会得到
AndroidMainifest.xml : 配置清单(二进制格式)
assets : 是资源目录,一般存放图片什么的
lib :是动态库目录 一般存放so文件
res :资源库目录 一般存放xml布局文件和图标
classes.dex: 安卓系统上的可执行文件,也是我们逆向的主要的文件,源码都被编译在里面,如有多个是因为每个dex里最多存放65535个方法,而项目的方法数超出了这个数量,所以被分成多个保存
META-INF:签名文件目录
resources.arsc :资源索引文件,包含语言包,汉化的话一般是反编译这个文件
结构大概我们清楚了,接下来就是还有知道一些分析安卓程序代码的相关关键词
内购关键词:
和游戏搜索方法名
onResult,onchinabilling,resulton,Paycenter,Callback
联通游戏搜索方法名
OnPayResult,PyaResulton,Activity,result,callback
电信爱游戏搜索方法名
paySuccess成功,payCancel取消,payFailed失败
移动mm搜索方法名
onBillingFinish,Billing,CallBack
支付宝和银行卡方法名
handle,message
支付宝搜索字符:9000
360支付
onfinishedon,Activityresult
发送短信上限:android.permission.SEND_SMS
发送短信锁定支付式关建字符串
运营商网络特征码备注
中国移动46000、46002、46007、46020return 0 getMobileType
中国联通46001、46006、46010return 2 getOperatorType
中国电信46003、46005、46011return 1 getSimType
举例分析:
if-eqz v6 :label_104 意思是判断v6是否等于0 如果等于0就跳转到 label_104
所以当label_104对应为失败代码时 直接删除该跳转语句也就是if-eqz v6 :label_104
if-nez v3 :label_86 意思是如果v3不等于0就跳转到label_86 而他的代码是
label_86:
return_void
所以是正确代码 必须让他直接跳转到这里来 所以将if-nez v3 :label_86改为goto :label_86
如果有取消支付选项 可以将该选项加入最后的*switch中
move v1 v6意思是将v1的值传给v6
const/4 v1 1意思是将v1设置为1
新手必读背部分语法的意思(必背):
“if-”条件判定
“goto :label_”直接跳转到:label
“label:“用于跳转的,就是执行它下面的一串代码
“if-eq vA, vB, :label“ 如果vA等于vB则跳转到:label_
“if-ne vA, vB, :label**” 如果vA不等于vB则跳转到:label
“if-lt vA, vB, :label_“ 如果vA小于vB则跳转到:label**
“if-ge vA, vB, :label“ 如果vA大于等于vB则跳转到:label_
“if-gt vA, vB, :label**” 如果vA大于vB则跳转到:label
“if-le vA, vB, :label_“ 如果vA小于等于vB则跳转到:label**
“if-eqz vA, :label“ 如果vA等于0则跳转到:label_
“if-nez vA, :label**” 如果vA不等于0则跳转到:label
“if-ltz vA, :label_“ 如果vA小于0则跳转到:label**
“if-gez vA, :label“ 如果vA大于等于0则跳转到:label_
“if-gtz vA, :label**” 如果vA大于0则跳转到:label
“if-lez vA, :label_“ 如果vA小于等于0则转到:label_
A,B指数字,也是指数字
分析一些常用的代码:
弹窗的关键词: oncreate
成功代码:invoke-interface {v3,v2} Lcn/egame/terminal/paysdk/EgamePayListener;->paySuccess(Ljava/util/Map;)V
return-void
支付上限用到的代码:carrier_pay_out_limit
这个是在文件里面搜索的代码:no_propriate_pay_method
破解盗版验证用到的代码:dialog_initconfig_msg