目录
1.准备工作
1.1下载好apktool的jar这里使用apktool-2.5.0.jar (PS: 执行命令为 java -jar apktool_2.5.0.jar d lsp.apk 与 java -jar apktool_2.5.0.jar b lsp)
1.2 手机或者模拟器
1.3 安装好JaDex方便自己看看大概写出来的东西是个什么样子,用其它工具也行,不过这个很方便。
1.4 自己的keystore文件以及签名工具
2.反编译APK
执行命令 java -jar apktool_2.5.0.jar d xxx.apk
编译成功后会生成一个与apk同名的目录里面就是反编译后的文件了,如图:
3.修改smali文件
3.1打开日志打印
这里我的习惯是先打开日志打印,在代码中经过搜索发现app的日志打印是由 com/reader/vmnovel/utils/MLog 类来完成,和大多数开发人员使用的方法一样这里也是使用一个boolean开控制日志的打印。
这里直接写死isShowLog为true,当然也可以去掉if判断,这样日志就可以打开了。接下来是打包APK查看修改结果以及日志:
签名(签名可以自行百度或者查看前面章节)运行后查看控制台,发现在打开小说之后有一个会定时打印一个日志 “是否显示广告”,因此可以推断这里是在XsApp类中使用的计时器,当到了指定时间显示广告弹窗。
那么我们关掉这个计时器或者关掉弹窗显示就可以阻止弹窗了。直接在代码中搜索 是否显示广告 结果没查到!在XsApp类找了一圈之后发现原来是中文转换成了unicode
根据上面的:cond_5我们可以看看是什么情况下会跳转:cond_5,只要一直跳转:cond_5那么就不会显示广告弹窗了。经过查找发现有两处地方会跳转,那么只要在第一处进行跳转就可以满足了,这一处的值是l()Z返回的,
这个l()方法就是我们的关键,当然这里直接设置v0也是可以的,但是为了增加熟练度,我决定还是多写点代码修改l()Z方法,找到后直接删除里面逻辑直接返回false,然后加了个日志打印。
再次打包签名后查看控制台。可以看到修改已经生效了。
3.2 去除权限申请失败弹窗
代码中查询看看有没有Permission相关的类以及关键字符串,很便在smali_classes2\com\reader\vmnovel\utils里面找到了Permission类以及它的一些内部类,将"权限申请失败"转unicode代码里面查了下发现弹窗业务在一个PermissionUtil$requestRuntimePermissions$2.smali文件里面,顺藤摸瓜找到Dialog的show方法,注释后添加一个日志打印。
打包后查看修改结果,果然没再展示弹窗,日志打印结果如下:
4.总结
刚开始学习Android逆向开发,还是得找一些没有没有加固的app进行练习,这可能是最容易让自己坚持下去的办法,不然真坚持不下来!