目录
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
反编译成功,如下:
打开反编译后生成的文件夹,在里面找到smali文件夹这里面就是可以用来修改的了。
3.修改smali文件
由于这个应用没有加固所以实践起来比较友好,很容易便找到了日志打印类:.class public Lio/dcloud/common/adapter/util/Logger;
然后习惯性搜索i(Ljava/lang/String; 查到了如下内容,根据smali代码发现是使用了一个static修饰的boolean类型的字段isOpen来作为日志打印的开关。
那么下一步就比较好办了只要把这个值修改为true即可或者是直接删掉这个判断,这里采用修改值的方法。文件类查询isOpen字段,找到了一个setOpen的方法。然后对其修改,如下:
这里一面应该也是和C语言一样非0为true ,所以我这里给寄存器v0的值为0x1,因为多了一个v0寄存器,所以 .locals的值修改成1
4.打包签名
使用apktool对改好的文件进行打包,编译命令 java -jar apktool_2.5.0 b 要编译的项目的文件夹
编译成功后进入该文件下的dist目录看到已经编译成功的apk文件
然后对APK签名之后就可以安装了,这里使用乐固提供的工具一键运行。
5.安装运行
将签名后的文件安装到手机,使用AS查看logcat发现日志开关已经被成功打开了。
6.总结
6.1 一般逆向实践可能优先一些不可描述的app入手会方便点,因为这类app可能团队不是很大,所以有时候没那么严谨。很容易找到容易入门的apk,如果找到一个加固了的,那就只能望洋兴叹了。
6.2 没有加固的apk结合jadx-gui查看代码逻辑会快捷非常之多。
6.3 添加寄存器之后一定要修改.locals的值。否则会出现一些奇奇怪怪的问题。