安卓逆向009实战分析smali代码破解小游戏(贪吃蛇)

一些小知识


反编译一个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行,将结果返回到V0
	
	108行,将V0传入“show” 方法。 	这里从字面意思也可以猜出,是将结果V0打印输出。

在这里插入图片描述


在之后也没有什么逻辑,在128行,直接调用“BuyFailed”方法。

在114行,返回空。

115行,整个逻辑结束。

在这里插入图片描述

上述整个过程转化为Java代码就是框内的这些,

在这里插入图片描述

扫描二维码关注公众号,回复: 13506435 查看本文章

其中,从Java的代码就可以很容易得知破解的逻辑,

即无论支付成功与失败都调用“BuySccess”方法即可,

在这里插入图片描述


或者直接将支付成功的那两行代码直接覆盖上述失败的两处。

复制“支付成功”的两行代码,将上述替换之后直接回编译这两种都可以。

在这里插入图片描述

在之后,安装回编译后的软件即可实现内购

猜你喜欢

转载自blog.csdn.net/weixin_43970718/article/details/119514461