插入Log的反编译
逆向,反编译插入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
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13