• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

插入Log的反编译

武飞扬头像
lulalei
帮助1

逆向,反编译插入log

学习背景

在平时的正经工作过程中,自家的产品总会不可避免的被拿来和各种竞品做比较. 然后和对比出的差异结果一起来的还有对竞品是如何实现的疑问, 而通过阅读反编译以后的代码往往是一种解决疑问的办法.但是阅读返编译以后的代码不可能总是顺畅,所以在深陷竞品的各种逻辑跳转中而渐渐丢失方向以后,我们或许希望能够在某些关键位置插入log,来帮助我们或是确认头脑中的"科学假象"或是梳理竞品逻辑,于是便有了"插入log的反编译需求".

反编译需要的准备

实现一次"插入log的反编译"可以有多种方式, 但本篇博客只会呈现一种博主常用的反编译流程:

1. 获取竞品apk

1.1 获取竞品包名. 在测试设备上打开并停留在竞品页面, 在命令窗口输入命令: adb shell dumpsys window | findstr mCurrentFocus
1.2 获取竞品apk在设备上的存储位置. 在命令窗口输入命令: adb shell pm path “apk包名”
1.3 获取apk. 在命令窗口输入命令: adb pull “存储位置”

完成上面的步骤, 那你的Windows上便得到了一个竞品的apk.

2. apktool 获取smali文件

2.1 命令窗口中先进入apktool的安装目录, 再在命令窗口输入命令: apktool d “竞品.apk” , 执行完成会看到这样一个目录结构:

学新通
学新通
图中的dist文件夹是完成下文5. 回编译步骤以后才生成的文件夹; smali文件夹下存放的是反编译出来的所有代码, 其中的smali文件使用的是Android虚拟机所使用的寄存器语言. 我们要插入log就要手动修改smali中的代码.

3. 借助jadx查找到想要插入log的位置

这部分只能各凭本事查找了. 为了让这次学习能够更顺畅, 大不了可以把应用首页的生命周期方法作为目标方法. 但是博主在这里以最近的一次反编译举例, 博主想确认竞品创建EGLConfig使用的版本号, 于是希望借助log信息来证明"竞品是使用3.0版本"的"科学假设"能够成立. 定位到的smali代码如图所示:

学新通

4. 插入log信息

Log.i(“EglTest”, “init egl version 3”) 对应的寄存器语言:
const-string v7, “EglTest”
const-string v8, “init egl version 3”
invoke-static {v7, v8}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

Log.i(“EglTest”, “init egl version 3 succeed”) 对应的寄存器语言:
const-string v7, “EglTest”
const-string v8, “init egl version 3 succeed”
invoke-static {v7, v8}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

学新通

5. 回编译

在控制窗口中进入apktool 的安装目录, 执行命令: apktool b “竞品文件夹名称”. 本篇博客中显然竞品文件夹名称是: Competitor2 ,命令执行结束会得到上文图2中的dist目录, 此时dist目录中存在一个未签名的apk.

6. apk签名

通过apksigner给apk签名.
Eclipse或Android Studio在Debug时, 对App签名都会使用一个默认的密钥库:

默认在C:\Users\用户名.android\debug.keystore
密钥库名: debug.keystore
密钥别名: androiddebugkey
密钥库密码: android

所以在控制窗口进入Android SDK/build-tools/SDK版本目录, 执行命令: apksigner sign --ks debug.keystore “未签名的竞品.apk”

学新通

命令正确执行完成以后,dist目录下便会生成一个签名过的apk. 如果能够正常安装, 那么一次完整成功的反编译, 插入log, 回编译至此已经完成. 但是本博主在通过adb install安装过程中遇到报错: Failure [-124: Failed parse during installPackageLI: Targeting R (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary]

7. zipalign对齐

通过Sdk\build-tools下的zipalign工具做对齐操作进行. 在控制窗口进入Android SDK/build-tools/SDK版本目录, 执行命令: zipalign -p -f -v 4 “步骤6中得到的签名apk” output_unsigned.apk, 再将得到的apk重新执行一遍步骤6, 最后得到一个可安装的apk.

参考博客:
[1]: https://cloud.tencent.com/developer/article/1661891
[2]: https://cloud.tencent.com/developer/article/1743269
[3]: https://blog.csdn.net/chenrunhua/article/details/41250613
[4]: https://blog.csdn.net/fitaotao/article/details/119458071?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-2.highlightwordscore&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-2.highlightwordscore

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhhahiee
系列文章
更多 icon
同类精品
更多 icon
继续加载