当前位置:   article > 正文

逆向工程_什么是逆向工程,逆向一般会用到哪些工具,这些工具分别是用来做什么的。

什么是逆向工程,逆向一般会用到哪些工具,这些工具分别是用来做什么的。

文字

本文的合集已经编著成书,高级Android开发强化实战,欢迎各位读友的建议和指导。在京东即可购买:https://item.jd.com/12385680.html

Book

逆向工程(Reverse Engineering)解析apk, 验证特性, 替换资源. 在批量生成应用时, 通过服务器脚本修改apk, 节约人力和时间. 我来讲述一下, 逆向工程的常用工具和方法.

1. apk

apk表示Application PacKage, 是zip文件, 修改后缀名.apk.zip, 解压获得apk信息.

apk

应用信息:
AndroidManifest.xml: 二进制清单文件.
classes.dex: Dex格式编译文件.
resources.arsc: 二进制预编译资源文件.
res: 不需编译的资源文件, 一般都是系统的资源文件.
assets: AssetManager检索应用特性.
META-INF: Jar包元数据, 也包含应用签名.

安装应用

adb install -r ~/Desktop/Pedometer.apk
  • 1

-r表示强制安装, 会覆盖当前版本.

查看手机中的所有应用信息

adb shell pm list packages -f
  • 1

导出手机中的apk

adb pull -p /data/app/me.chunyu.Pedometer-1/base.apk ~/Desktop/base.apk
  • 1

apk位置

aar类型和apk相似, 在aar中, AndroidManifest是可显示的XML文件, 资源都在res文件夹中, 作为项目的库使用.

2. aapt

aapt表示Android Assets Packaging Tool, 即Android属性打包工具, 导入命令行.

在Android SDK的build-tools文件夹中, 如

ANDROID_SDK_HOME/build-tools/23.0.2
  • 1

Android项目的Gradle中, 通过buildToolsVersion设置版本, 参考, 主要负责apk的编译.

获取apk信息

aapt list base.apk // 内容
aapt dump badging base.apk // 属性
aapt dump permissions base.apk // 权限
aapt dump resources base.apk // 资源
  • 1
  • 2
  • 3
  • 4

获取二进制xml信息

aapt dump xmltree base.apk AndroidManifest.xml
  • 1

3. dex2jar

dex2jar是dex转换jar的工具, 导入命令行, 还需要使用Java包解析工具JD-GUI. 可以分析Apk的崩溃信息, 参考.

配置d2j-dex2jar.sh命令行:
改变d2j-dex2jar.shd2j_invoke.sh的权限, 即chmod 777 xx.sh.
软链接: ln -s /.../Installations/dex2jar-2.0/d2j-dex2jar.sh d2j-dex2jar.sh.

转换apk为jar包

d2j-dex2jar.sh -f -o classes.jar base.apk
  • 1

转换过程中, 如果发生内存不够, 修改d2j_invoke.sh的虚拟机配置.
java -Xms512m -Xmx1024m -classpath "${_classpath}" "$@"

使用JD-GUI打开jar包, 资源都被替换为数字.

JD-GUI

转换jar包为dex

d2j-jar2dex.sh -f -o classes.dex classes.jar
  • 1

压缩dex为apk

zip -r my.apk classes.dex
  • 1

注意现在的apk是无法安装入手机的, 因为没有签名.
即使签名也会报错. 通过apktool替代打包.

4. apktool

解析apk的第三方工具, 安装方式参考.

Mac OS X:
1. Download Mac wrapper script (Right click, Save Link As apktool)
2. Download apktool-2 (find newest here)
3. Rename downloaded jar to apktool.jar
4. Move both files (apktool.jar & apktool) to /usr/local/bin (root needed)
5. Make sure both files are executable (chmod +x)
6. Try running apktool via cli
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

配置成功
完成

示例rgb_tool.apk下载, 源码.

4.1 操作

解析apk

apktool d rgb_tool.apk
  • 1

rgb_tool文件夹, 内容:
apktool.yml: apk属性.
AndroidManifest.xml: 清单文件, 非二进制.
original: 原始数据, 应用的二进制清单和签名.
res: 资源文件.
smali: dex解析的代码.

smali是dex虚拟机的解析格式, 参考. 在dex2jar中, 也包含smali格式的转换.

构建apk. 在rgb_tool/rgb_tool/dist中生成apk文件.

apktool b rgb_tool
  • 1

安装时, 会显示未签名.

Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
  • 1

添加apk签名

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -signedjar rgb_tool.apk rgb_tool.apk androiddebugkey
zipalign -v -f 4 rgb_tool.apk rgb_tool_align.apk
  • 1
  • 2

使用系统默认签名, 或者添加自己的签名, zipalign用于对齐应用, 建议使用. 参考.

4.2修改

颜色

接着, 我们来解析包, 修改一些颜色, 再生成包.
找到系统颜色, 修改rgb_tool/res/values/colors.xml, 主题粉色.

<color name="primary">#ffff1493</color>
  • 1

图标

替换应用图标, AndroidAssetStudio创建图标. 替换mipmapic_launcher.png.

图标修改

图片

替换资源, 把背景图片换了. 替换drawable-xxxhdpi-v4中的robot.png.

图片修改

修改资源

替换字符串, 在strings.xml创建新的字符串,

<string name="action_common_skip_wcl">CLWang</string>
  • 1

res/values/public.xml中替换action_common_skipaction_common_skip_wcl.

<public type="string" name="action_common_skip_wcl" id="0x7f070017" />
  • 1

文字

public.xml是资源映射, smali文件使用, 类似R.java.

apktool是非常强大的逆向工程工具, 一定要熟练掌握.

5. androguard

源码, 下载.

这个是一个命令行处理库, 开发时间很早了, 就不做深入讲解了.

OK, 逆向工程的工具基本就包含这些, aapt, dex2jar, apktool, androguard熟练使用就可以了. Enjoy It.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/90635
推荐阅读