文章目录
一些小知识小游戏实践一些小知识
反编译一个APK,找到他的源码所在地,即smali(原本是dex文件)温馨提示,一个dex就反编译一个smali文件,当dex内的方法超过65535个,就会出现2个dex文件夹,即反编译会出现2个smali文件夹这里一般“ com ”文件夹是作者自己写的代码,其他的是系统代码。
小游戏实践
随便打开一个smali文件,第一行是“包名”+“类名”其中的“Lcom”中的“L”是指“java”的意思。第十行的“<init>”是初始化,先不用管;第十行是开始方法,十六行结束方法,十五行这个方法返回一个“空”,之后就没了。总的从10~16行就是一个方法开始后,初始化之后返回空就结束了。
一般情况下,P0没有被定义为参数,默认就是this。往下看,第33行,意思是将P0的值传给V1,即把thisc传给了V1.
像44行的“:goto_1“与47行的“:cond_0”都是“半标签”,即不会自己运行,就能被别的地方调用,才会执行。第48行,定义一个类“V2”,是java类型的。内容(59行),如果V1不等于V2的话,就跳转到“ :cond_1 ”。
我们可以弹出图标,弹出java的源码对比一下。
我们来继续破解,之前研究过,直接在“工程搜索”处搜索“支付失败”,直接输入中文搜不到,就编码一下在搜索,看到第90行的代码,定义一个V2,对应的值为“支付失败”。
92行,初始化V1与V2(别的先不管),这里我们只看V2。94行,是调用拼接,96行,拼接后返回V1,98行,调用了一个“tostring”方法,将V1传进去,100行,将结果返回到V1,102行,将V2定义为0.0就是falsed的意思。104行,将V0,V1,V2全部传进makeText方法,106行,将结果返回到V0108行,将V0传入“show” 方法。 这里从字面意思也可以猜出,是将结果V0打印输出。
在之后也没有什么逻辑,在128行,直接调用“BuyFailed”方法。在114行,返回空。115行,整个逻辑结束。
上述整个过程转化为Java代码就是框内的这些,
其中,从Java的代码就可以很容易得知破解的逻辑,即无论支付成功与失败都调用“BuySccess”方法即可,
或者直接将支付成功的那两行代码直接覆盖上述失败的两处。复制“支付成功”的两行代码,将上述替换之后直接回编译这两种都可以。
在之后,安装回编译后的软件即可实现内购
如果觉得《安卓逆向009实战分析smali代码破解小游戏(贪吃蛇)》对你有帮助,请点赞、收藏,并留下你的观点哦!