多语言展示
当前在线:615今日阅读:113今日分享:31

《同声翻译超级版》图文教程

前言:由于繁华大大丢了个apk出来给大伙练手,所以一时兴起就想自己写一篇破文。首先,必须膜拜一下繁华大大的脱壳技能,这个脱壳大难题我真的是搞不定了。其次,希望一些思路可以给大家带来一点启发,并且能够帮助大家举一反三。最后,这是我第一次分析整理破解思路,如有瑕疵之处还请大家见谅。
工具/原料
1

AndroidKiller v1.2 (或其他反编译分析工具,如:ApkIDE v3.2、Apkdb v1.92等)

2

Droid4X v0.8.4 (即海马玩安卓模拟器,或其他类似模拟器,如:天天、夜神、文卓爷等)

方法/步骤
1

Level-1:购买时取消之后支付成功先把apk丢进AndroidKiller进行反编译就不在此多说了,接下来通过查阅支付宝钱包支付接口开发文档,我们知道了支付状态或结果的返回代码,这个类似于网页上的404、500等。

2

如上图,当返回9000时表示支付成功,而返回4000则是支付失败,同时看到当用户中途取消时会返回6001错误代码。那么,我们就可以在取消支付时跳转到支付成功来实现内购的破解了。将9000转化为16进制得到0x2328,然后对整个项目进行搜索,从得到的搜索结果来看,我们打开第一个smali文件:

3

显然,我们只要把0x1771 -> :sswitch_1修改为0x1771 -> :sswitch_0即可实现破解。保存修改结果并编译成apk,安装到模拟器运行测试一下:恭喜,您已成为会员!

4

Level-2:点击立即升级即购买成功如果想点击立即升级即实现支付成功,就应该要跳过支付购买这个步骤,我们运行程序看一下流程是怎样的:首先提示“正在获取会员信息”,接着弹出快捷支付窗口,取消返回后提示“支付失败”。

5

现在我们来搜索一下“正在获取会员信息”,记得要先转换成Unicode编码,结果显示这个字符串在PayActivity.smali文件,接着我们查看一下当前文件的Java源码:

6

从以上源码中,我们发现当点击立即升级时,程序执行到了do...while函数,并且利用start()方法启动了co线程。同时,我们还看到上面有个if判断函数,当条件不满足时才会执行下面的do...while等。所以,我们可以修改if判断语句,即if-nez v2, :cond_1改为if-eqz v2, :cond_1,让其直接执行函数内的方法,这样就可以跳过支付流程了。运行测试:升级成功!

7

Level-3:打开应用就已经是注册版通过上面的步骤应用就已经升级为会员了,利用RE管理器查看/data/data/android.translate.xuedianba/shared_prefs目录下的存档文件,我们可以发现就是会员的记录标志,当vip_grade为1表示已升级会员,否则为0就表示非会员。那么,我们可以在应用启动时,就将vip_grade赋值为1,并写入存档文件中,这样就能实现打开程序即已成为会员了。

8

我们搜索一下“vip_grade”这个字符串,结果搜索出来了很多文件,但很明显我们需要的是MainActivity.smali文件,查看一下Java源码,找到onCreate()方法,里面有一句代码:this.mVipgrade = this.L.getInt('vip_grade', 0); 其表示先读取存档文件中vip_grade的值,然后赋值给mVipgrade变量。

9

我们在读取vip_grade的值之前,先把vip_grade赋值为1,并写入存档文件中,其修改代码如下:

10

最后,我们编译测试一下,结果就是完美破解!

注意事项
1

购买时取消之后支付成功

2

点击立即升级即购买成功

3

打开应用就已经是注册版

推荐信息