【五一创作】【Android逆向】某python环境app的PREMIUM内容展示分析

目录

前言

一、分析步骤

1.查壳

2.查找Activity

3、使用JADX打开apk

4、反编译apk,得到smali:

5、保存,回编译,签名

6、卸载原版本apk,重新安装修改后apk

总结



前言

某python环境app提供了在Android运行python环境的功能,但其中有三个库必须PREMIUM权限才能使用。

f1ec170040d44390b5f49e4c64fead9a.png

这次先把这三个按钮的展示机制研究一下,并设法改成INSTALL,让它们能正常点击,然后看一下是否真的可用了。

声明:本文讲述的内容仅用于学习和研究,禁止用于商业用途。


一、分析步骤

1.查壳

先使用MT管理器的安装包提取功能,查看这个apk的安装包信息,看一下有没有加壳,加的哪种壳:

57983420c5104c6cb315d90c7a62a633.png

 可以看到一个好消息,这个app是没有加壳的(加固状态是未加固),那就省去了脱壳的步骤,直接下一步了。

2.查找Activity

apk的逆向分析,一般先从界面、日志等能够直接看到的线索入手,根据这些线索,在反编译的代码中去寻找突破口。直接通读代码是很困难的,就像大海捞针。因为apk一般是做了代码混淆,反编译出来的java代码,虽然能还原出基本的逻辑,但是和真实代码还是有很大差异的,可读性还是很差,要完全读懂,太困难了。这里因为就是想要修改界面,所以根据界面关键字,Pip、PREMIUM等关键字去寻找入口,仅分析相关的一点代码,缩小范围。这里还是使用MT管理器,这次要使用的是Activity记录的功能,在记录下的Activity中,找到了Pip的Activity,推测需要修改的界面很可能就在这个Activity中:

9da985a2dc1845e69c93baf422214c56.png

3、使用JADX打开apk

确定了Activity之后,现在要做的事情就是打开PipActivity的代码来看一下,寻找premium相关线索。

这个步骤我比较喜欢用JADX,因为可以在spilt模式下,分屏查看java和smali,而且java代码里面的注释很有用,下文一些地方就可以体现出来。

分析java代码,搜索premium关键字,找到了is_premium,推测这个就是是否为premium的一个标志位,这是一个关键信息。进一步发现is_premium是由mo289C赋值的:

458b0a24a565430da66184a865a7b7cd.png

然后追踪mo289C,发现又是由f14356E赋值,类型是boolean,也就是true或false,那很可能是这样的:true就是premium,false就不是premium。由此推测,只要把f14356E的值强制写成true,就可以让mo289C的值为true,也就是is_premium的值为true:

fd2cea46201f44318f2d3ff9c7f7ca09.png

追踪f14356E,发现初始值是false。从java的注释中可以看到,这个f14356E,也就是smali中的E,也就是刚才说的JADX一个很好用的地方:

8205b4fcce2f4a7984458a700dba832f.png

然后就可以使用"->E"关键字,到smali中去查找了。

7ba87ec6a18846948c52e63cfb730995.png

然后找对应的smali文件:查看对应smali代码的首行,可以发现对应的smali文件名是qwe.qweqwe.texteditor.g0。找这个的目的就是因为JADX不能直接编辑smali,只能用其他工具直接把apk反编译出来,找到对应的smali文件,才能去改,而JADX提供的是精准定位:

a3c8d3fb9d184a9691c3730e6ee2eb39.png

4、反编译apk,得到smali:

这个是标准操作,这里就不详细说明了,大家可以自行百度。我这里使用的是apktool。

在反编译出来的smali中找到qwe.qweqwe.texteditor.g0,并在这个文件中搜索“->E”,限定大小写敏感,可以搜索出4个结果,其中iput(赋值)的有3处。我直接对这种赋值的3个地方,都修改了smali,强制写成0x1,也就是true: 

a7a04db3534a4b0994ce090d0894e551.png

d62161203d934e6fa921a444092ac599.png

89dacec6ead4423ea088b44ac4db370c.png

5、保存,回编译,签名

这些也是标准操作,这里就不详细说明了,大家可以自行百度。方法很多,我这里也是使用的apktool,可能用Android Studio或许更方便一些,或许可以一键生成,这个我就没有去深入尝试了。

6、卸载原版本apk,重新安装修改后的apk

原来的版本建议是先卸载掉,因为回编译的apk和原来的apk的签名是不一样的,直接安装会有签名不一致问题。特别是对于系统应用,还有权限问题。

完成之后看一下效果:原来premium only的三个按钮已经变成INSTALL了,说明界面判断的修改成功了,已经生效:

b95a2a2d94764366bc8b2e5ce1adc51d.png


  

总结

经过分析和修改,原来premium only的三个按钮已经变成INSTALL了,第一步算是走通了。但这个应该只是表面上的完成,要能真实运行成功才算真的成功。可以尝试一下点击INSTALL,去安装这些库:

a4bd3d5e8b934cf5ac7d300b3c2bcf36.png

是不成功的,apk做了包校验,库不能安装成功,提示了一大堆,说包有问题,建议卸载后安装google play版本。确实没那么容易。

下一步研究一下包校验的逻辑, 完成之后,应该就成功了,但是粗略看了一下反编译出来的代码,难度看起来很大。但是如果分析有成果,我会再次把后面的分析分享出来,希望对大家有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值