Android 逆向工程,反编译心得

这篇具有很好参考价值的文章主要介绍了Android 逆向工程,反编译心得。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

apk的反编译是我们在Android开发中绕不开的一个坎,对于反编译这门技术,我们应该抱着学习的态度,学的越多,也越能防备别人反编译我们,这就是所谓的知己知彼吧,哈哈

需要准备的工具

  • Apktool,解包和重新打包都需要它
  • dex-tools,可以直接把apk中的classes.dex文件反编译为.jar文件
  • jd-gui,直接查看.jar文件中的java文件
  • JEB,同时满足dex-tools和jd-gui的功能,但反编译出来的代码不太一样,可以互相对照
  • Notepad++,非常强大的文档编辑器,用来查看各种文件,修改.smali我用的就是它
  • Android SDK target版本的build-tools中的apksigner,用于给打包好的apk签名

具体实现

apktool

Apktool - A tool for reverse engineering 3rd party, closed, binary Android apps.

用来解包和重新打包apk的工具,命令最多只用得到几行,可以反编译出AndroidManifest.xml和各种资源文件。

解包

这句命令是指在D:\tools\apk_tool_2.7.0文件夹中有一个test.apk文件,这个test.apk文件反编译到同路径下的test文件夹中,该操作会反编译AndroidManifest.xml和res的资源文件

apktool d D:\tools\apk_tool_2.7.0\test.apk -o D:\tools\apk_tool_2.7.0\test

但需要注意的是,重新打包时不能用反编译过res和AndroidManifest.xml的文件夹打包,不然会报错,不会反编译AndroidManifest.xml和res的命令如下:

apktool -r d test.apk

这句命令省略了当前文件路径和输出文件夹路径,和上面的命令相差只是在d前面多加了一个-r

该操作不会反编译AndroidManifest.xml和res的资源文件,可以被重新打包

重新打包

把apktool相同路径下的test文件夹重新打包为test.apk

apktool b test

 dex-tools

github地址:

GitHub - pxb1988/dex2jar: Tools to work with android .dex and java .class files

 我们把需要反编译的apk准备好,例如我这里准备了一个test.apk,现在我们需要获取这个apk中的classes.dex文件。

有两种办法:

方法一是右键用xx压缩软件打开

Android 逆向工程,反编译心得

Android 逆向工程,反编译心得

 直接解压这两个文件出来即可。

方法二是把.apk文件的后缀名改为.rar或是.zip,然后再用压缩软件打开,剩下的步骤是一样的。

注:一定要解压所有名为classes.dex和classes[n].dex的文件,n是数字

 这个时候,我们就可以把下好的dex-tools解压出来,并且把我们刚刚解压出来的classes.dex文件丢进来,如图所示:

Android 逆向工程,反编译心得

使用起来非常简单,在未配置环境变量时(默认不配置),打开命令行进入到当前目录(快捷方法是按住shift键,在当前目录右键空白处

Android 逆向工程,反编译心得

输入命令:d2j-dex2jar.bat [文件名]

d2j-dex2jar.bat classes.dex

如果提示如下信息:

Android 逆向工程,反编译心得

 则在命令前面加上".\"即可

.\d2j-dex2jar.bat classes.dex

这条命令仅仅只是反编译1个classes.dex文件,如果有多个classes.dex文件,我们需要依次反编译

Android 逆向工程,反编译心得

因为这里我有两个classes.dex文件,所以最后我能反编译出两个.jar文件

Android 逆向工程,反编译心得

jd-gui 

下载地址:

Java Decompiler

想要阅读.jar文件我们就需要jd-gui,下载完成后解压出来如图所示,我们双击运行jd-gui.exe即可

Android 逆向工程,反编译心得

 Android 逆向工程,反编译心得

打开刚刚我们反编译出来的两个.jar文件 ,就可以阅读源码!此时的源码一般都是被混淆过的

Android 逆向工程,反编译心得

 JEB

官网文档地址:

下载地址和激活教材在参考博客中,但可能并不存在时效性

JEB Decompiler

JEB是一个非常强大的逆向工程工具,我仅仅只会粗略的使用,更加进阶的使用请查阅官方文档或其他博客,本文仅做浅显的使用

JEB下载好之后直接双击运行jeb_wincon.bat即可

Android 逆向工程,反编译心得

 语言设置

我们可以在Edit->Language->中文(中文)把JEB设置为中文界面,设置完后需要重启才能生效

在JEB中,我们可以直接打开.apk文件,会自动帮我们反编译,既可以查看java源码也可以对照查看smali

打开.apk时,会弹出以下界面,我们可以进行一些反编译的设置,但默认就足够用了,我们直接点击确定即可 。等待一会

Android 逆向工程,反编译心得

Android 逆向工程,反编译心得

Android 逆向工程,反编译心得

 点击转换后,可以看java代码和smali对照Android 逆向工程,反编译心得

注:JEB的横向查看代码需要按住shift+鼠标滚轮,就可以横向滑动了 

 JEB的debug调试

JEB还有一个非常实用的功能,就是把一个apk重新打包为可调式的包,并且可以在JEB中打断点进行调试,具体步骤如下:

如果你的apk文件是可调式的安装包,则可以直接进行第3步

  1. 重新打包为可调试的apk
  2. 为apk重新签名
  3. 打断点,使用JEB进行debug调试

 重新打包为可调试的apk

jeb自带一个makeapkdebug的命令可以帮助我们直接重新打包出可以调试的apk

在有jeb_wincon.bat的文件夹下,打开cmd或power shell窗口,test.apk中的test是apk名称

命令如下:

jeb_wincon.bat -c --makeapkdebug -- test.apk

为apk重新签名 

 重新打包出来的apk需要重新签名才能够安装和调试,所以找到我们安装Android SDK的目录,找到build-tools文件夹,目前我的最新安装版本为13,因此我使用的是33.0.0的构建工具,找到文件夹中存在apksigner.bat即可

Android 逆向工程,反编译心得

 然后我们随意准备一个签名文件,我这里使用的是Android Studio新建一个签名,步骤如图所示:

随意打开一个工程,点击Build-> Generate Signed Bundle / APK

 Android 逆向工程,反编译心得

选啥都行,点next 

Android 逆向工程,反编译心得

点击create new 

Android 逆向工程,反编译心得

key store path 是保存签名文件的路径

第二行Password 是签名文件的密码

然后来到Key标签页

第一行 Alias 是秘钥的名称

第二行 Password 是秘钥的密码

Validity是签名有效期

Certificate标签页是提供你的个人信息证明

第一行是名称

第二行是组织单位名称

第三行是组织名称

第四行是所在城市或区域

第五行是所在州或省份

第六行是所在的国家代码

 Android 逆向工程,反编译心得

 填写完之后就在刚刚填写路径的地方生成好了一个.jks的签名文件

这里为了方便省事,我把这个签名文件和重新打包后可以调试的apk文件,直接复制到apksigner.bat所在的文件夹,同样的,在这个文件夹打开命令行(方法同上),运行命令进行签名

Android 逆向工程,反编译心得

--ks后跟的是签名文件的名称,test_debuggable.apk是我们重新打包可以调试的apk文件,运行命令之后,我们还需要输入签名文件的密码别忘了!这里输入密码是看不到的,输完直接回车即可

apksigner sign --ks 123456.jks test_debuggable.apk

Android 逆向工程,反编译心得

更多命令详见官方文档  

 apksigner  |  Android 开发者  |  Android Developers

签名好之后,我们就可以用这个apk在JEB上进行断点调试了! 

打断点,使用JEB进行debug调试

手机或模拟器连接好之后,我们把刚刚签名好的apk重新打开,打好断点,点击开始调试

断点只能打在smali文件中,快捷键为ctrl+B

官方调试文档说明:Debugging - JEB Decompiler

Android 逆向工程,反编译心得

 点击开始后,会让你选择需要调试的设备和需要调试的包,选中设备和包之后点击attach/附上就可以开始调试了

Android 逆向工程,反编译心得

至此,我们进行到了最后一步,找到关键代码后,我们需要进行修改并重新打包为可以我们自己使用的apk

在第一步中,想要重新打包,就必须得使用apktool的这个解包命令,然后修改对应的.smali文件

apktool -r d test.apk

修改完.smali文件后,记得保存!然后使用apktools重新打包,最后再去签名,签名完就可以使用我们修改后的apk了! 

参考博客

JEB动态调试Smali-真机/模拟器(详细,新手必看) - 『移动安全区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn文章来源地址https://www.toymoban.com/news/detail-464159.html

到了这里,关于Android 逆向工程,反编译心得的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis的逆向工程

    正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: Java实体类 Mapper接口 Mapper映射文件 添加依赖和插件 创建MyBatis的核心配置文件 创建逆向工程的配置文件

    2024年02月09日
    浏览(24)
  • 解决xorm逆向工程问题

    问题 xorm : 无法将“xorm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 今天在用xorm做逆向工程的时候碰到了一个普遍问题,xorm : 无法将“xorm”项识别为 cmdlet、函数、脚本文件或可运行程序的名

    2024年02月05日
    浏览(34)
  • ARM软件逆向工程入门 00

    ARM指令集是一种低功耗、小尺寸和低成本的指令集,它具有以下特点: ARM指令集具有良好的可移植性,可以在不同的架构上运行; ARM指令集支持32位和64位,减少指令的数量,提高运行效率; ARM指令集支持硬件加速,可以更有效的利用处理器的资源; ARM指令集可以节省系统

    2024年02月07日
    浏览(33)
  • NO.08 MyBatis创建逆向工程

    目录 1、前言 2、添加依赖和插件  3、创建MyBatis的核心配置文件  4、创建逆向工程的配置文件  5、执行MBG插件的generate目标 工程的创建有正向工程和逆向工程之分。正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表,如Hibernate是支持正向工程的。 逆向工程:

    2024年02月11日
    浏览(28)
  • MyBatis --- 缓存、逆向工程、分页插件

    一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问 使一级缓存失效的四种情况: 1、不同的SqlSession对应不同的一级缓存 2、同一个SqlSession但是查询条件不同 3、同一个SqlSession两次查询期

    2023年04月09日
    浏览(28)
  • SpringBoot项目中使用mybatis逆向工程

    mybatis逆向工程,即利用现有的数据表结构,生成对应的model实体类、dao层接口,以及对应的mapper.xml映射文件。借助mybatis逆向工程,我们无需手动去创建这些文件。 下面是使用Java代码的方式来实现逆向工程,生成文件(也可以使用插件来生成): 首先,导入需要的依赖包:

    2024年02月08日
    浏览(36)
  • AIGC:Prompt逆向工程简介及使用

    很多同学都会写爬虫。但如果想把爬虫写得好,那一定要掌握一些逆向技术,对网页的JavaScript和安卓App进行逆向,从而突破签名或者绕过反爬虫限制。最近半年,大语言模型异军突起,越来越多的公司基于GPT3.5、GPT-4或者其他大语言模型实现了各种高级功能。在使用大语言模

    2024年02月11日
    浏览(29)
  • 小程序逆向工程:这个开源的小程序逆向工具真不错,2023年亲测成功

    安全部门的大哥又双叒叕报了一个小程序的高危漏洞,他使用逆向工程破解了加密信心,用抓包修改了请求参数。又是头疼的一天… 想成为一名微信小程序的开发者,前端思路的学习和安全意识是非常有必要的,故务必掌握小程序反编译技能。 这里用到了2个工具《解密》与

    2023年04月19日
    浏览(41)
  • 【MyBatis】五、MyBatis的缓存机制与逆向工程

    MyBatis的一级缓存是默认开启的,是基于SqlSession级别的缓存,也就是说,只要是同一个sqlSession,只要执行的语句相同,则不会去数据库中进行查找,而是会从缓存中找到对应的结果。 使用了不同的sqlsession对象 同一个sqlsession对象,但查询条件不同 两次查询之间进行了增删改

    2024年02月09日
    浏览(27)
  • 【Spring】SpringBoot整合MybatisPlusGernerator,MybatisPlus逆向工程

       📝个人主页:哈__ 期待您的关注  在我们写项目的时候,我们时常会因为需要创建很多的项目结构而头疼。项目中的表很多的时候,我们连实体类都创建不完,这时候就需要我们的逆向工程来帮助我们生成我们的框架结构。这些结构都差不多,实体类,表现层,业务层和

    2024年04月15日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包