反编译技术完全解析

1.前言

作为一个Android 程序猿,如果没有反编译过别人的apk,那有可能你是个假的程序猿~我们反编译别人apk可能是想看看别人优美的界面是怎么写的,或者是去获取别人的资源文件,又或者是看看某个功能是怎么实现的。记得在大学里,参加一个软件创新大赛,当时缺少图片素材,只好无奈去反编译apk获取。

2.反编译工具

3.准备工作

我们准备一个反编译所需要的apk文件,这里我自己写了一个

这里写图片描述
登录功能一般是应用的入口,如果我们没有用户名和密码就进不去。

看到这里,大家可能想笔者肯定是想通过反编译来实现绕过登录功能。

错了,笔者今天重点要介绍的是如何通过反编译在这个登录页面添加一个View并实现相应的功能。附带内容:

  • 反编译实现更换应用图标
  • 反编译实现添加资源文件
  • 反编译实现添加View并实现点击事件
  • 反编译实现修改功能
  • 用ApkTool工具重新打包应用

一.反编译实现替换应用图标

1.通过apkTool工具将apk反编译生成一个文件夹。

进入cmd下切换到apktool目录下,输入apktool.bat d D:\apkTool\test.apk,会在apktool目录下生成一个test文件夹,如下是test文件夹的内容:(res:资源文件、smali:跟汇编类似的机器代码,如果需要添加四大组件,则需在AndroidManifest.xml下添加声明)

这里写图片描述

2.在生成的这个目录里找到res文件夹,进去后你会发现跟我们eclipse或as工程下的res文件夹结构一样,然后在对应目录下将应用图标换掉即可。(注意:图片格式一定要和原图片格式一样,不然会有莫名的错误)

二.反编译实现添加资源文件

比如我们想在strings.xml下添加一个字符串并在代码中引用,大家可能就说这个简单呐,在strings.xml里加上一个字符串声明,然后在smali文件中引用就好了,然后编译成smali文件时候,啪,报错了,打包成apk不成功,那么正确的做法是什么呢?

1.在res/values/strings.xml里添加一个字符串,如下:(笔者添加了一个注册)

这里写图片描述

2.在res/values目录下找到一个public.xml文件打开,找到最后一个String类型的一条,如下图一所示,它的id为0x7f060024,这些id是系统自动生成的,那么我们添加一个字符串就需要在这里手动生成一个id并且这个要唯一,默认在最后一个string的id加1就行,如下图二所示:(注意:name要和strings.xml声明的name一致)

图一:
这里写图片描述

图二:
这里写图片描述

3.在smali文件夹下根据包名去找到R文件,如下图一,其中R$string.smali的美元符号 表示内部类的意思。在string.smali文件里添加一条,如图二。

图一:
这里写图片描述

图二:
这里写图片描述

三.反编译实现添加View并实现点击事件

如我们想在登录界面添加一个注册按钮,那该怎么添加呢?

1.在res/layout/activity_main.xml里添加一个按钮,如下:

这里写图片描述

2.在res/values/ids.xml里添加声明,如下:

这里写图片描述

3.在res/values/public.xml里找到最后一条id的条目,添加一条记录,并且id要唯一,如下:

这里写图片描述

4.在smali文件夹里根据包名找到R文件,在R的id.smali文件下添加声明,如下图,到此所有的准备都做完了,下面就是修改smali文件添加这个注册按钮的点击事件。

这里写图片描述

5.在smali文件夹里根据包名找到MainActivity.smali文件,打开它,然后搜索onCreate,如下图一,我们可以看到findViewById这个字眼,我们可以跟着写,对新加的按钮设置文字,如下图二,在这里,一定要注意寄存器的使用,一不小心就出错了,如果不懂smali语法的,可以回头看一下smali语法整理

图一:
这里写图片描述

图二:
这里写图片描述

设置完文字后,接着就可以开始设置注册按钮的功能了,如下图,这里点击事件是直接跳转另外一个页面,MainActivity$1是一个内部类,onclicklistener的实现类。

这里写图片描述

4.反编译实现修改功能

如果我们想绕过登录直接进入应用,那么此时我们肯定想到去改登录逻辑,打开MainActivity.smali文件,搜索setOnclickListener,可以看到就是登录按钮设置的点击事件,但是登录的逻辑呢?在MainActivity$1.smali文件中,找到onClick方法中关键部分,笔者加上了注释,如下图:

这里写图片描述

那么我只要把跳转的逻辑搬到cond_0那里不就ok了嘛,我们试试:

这里写图片描述

5.用ApkTool工具重新打包应用

上面都是在修改资源文件,修改smali文件,我们改完怎么看效果呢?这个时候,就需要用强大的ApkTool工具重新打包应用了,在cmd下进入ApkTool目录,输入:apktool.bat b -f D:\apkTool\test(D:\apkTool\test这个目录是之前反编译生成的目录),如果我们修改没问题的话,就会在test目录下生成一个文件夹dist,在该文件夹里就是反编译后生成的apk文件。

这里写图片描述

此时,你肯定长叹一口气,我滴神呐!终于反编译完成了!

老铁,且慢,这时生成的apk还是不能用的,因为这是裸包,还没签名,系统是不会让你装的。

那么我们开始签名吧,怎么签名呢?同样还是用ApkTool工具,在cmd下进入ApkTool目录,输入:jarsigner -verbose -keystore 签名文件路径 -signedjar 签名后apk的路径 未签名apk的路径 签名别名,如下图:

这里写图片描述

这里写图片描述

签名完成后,我们安装已签名的apk,看看运行结果,是不是达到了自己想要的效果。

这里写图片描述

到此,smali反编译方法就讲完了,相信大家会有一点点的收获!如果大家觉得这篇博客对你有用的话,麻烦给笔者点个赞!谢谢大家的支持!

若大家有不懂的,欢迎留言讨论,笔者会在第一时间回复!

  • 12
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
摘录自dnspy官网 如果您以软件开发人员身份工作,您可能会明白,有时您可能需要反编译某些程序集以更有效地了解其功能。 但是,如果没有适当的工具,这样做通常是不可能的。幸运的是,有各种各样的软件解决方案,如dnSpy,可以帮助您实现快速,令人满意的结果。 无需安装 由于它是一个便携式工具,因此它不要求您将其安装在目标计算机上,只需将其归档文件解压缩并启动可执行文件即可授予您完全访问其功能的权限。 您也可以从可移动存储介质(如USB闪存驱动器或外部硬盘驱动器)运行它。此外,它不会修改系统中的注册表项,也不会在未经您明确许可的情况下在您的PC上生成其他文件或文件夹。 全面的界面 dnSpy提供了一个时尚,全面的用户界面,它包含了广泛的有用功能,它们在主窗口的标准菜单中整齐排列。 此外,它还具有一个标准配置窗口,您可以在其中调整各种组件的设置,例如反编译器,调试器或十六进制编辑器,但也可以修改显示或其他参数。 .NET拆装器 如果你需要一个高效的工具来帮助你反编译.NET程序集,你可以转向dnSpy,它提供了各种有用的工具。它带有一个反编译器,一个调试器,一个十六进制编辑器以及一个汇编编辑器,让您可以高效地处理程序集。 主窗口附带一个Assembly Explorer窗格,您可以在其中访问所需程序集的树视图。您可以通过从计算机指定适当的文件或使用“从GAC打开”选项打开程序集,该选项为您提供了全局程序集缓存中可用条目的列表。 .NET程序集的可靠逆向工程工具 所有事情都考虑到了,dnSpy是一个方便的应用程序,它使您能够以有效的方式反向设计.NET程序集,为您提供各种有用的工具,包括反编译器,程序集编辑器和调试器。它不需要安装,具有全面,流畅的用户界面,并为您提供了一个标准配置窗口,您可以在其中调整各种组件的设置。
### 回答1: VC反编译软件,也称为Visual C++反编译软件,是一种可以将已经编译成机器代码的程序重新转换回可读的源代码的工具。VC反编译软件主要用于逆向工程、代码审查、软件安全分析等领域。 VC反编译软件能够将机器代码进行逆向转换,还原出编写该程序时所使用的高级语言源代码。通过使用VC反编译软件,我们可以更加容易地理解程序的逻辑结构和运行过程,对程序进行修改和优化。 VC反编译软件一般支持多种编程语言,主要包括C++、C#等。通过将编译生成的可执行文件或动态链接库加载到VC反编译软件中,软件会尝试还原原始的源代码,包括变量名、函数名、类名等。 但是需要注意的是,VC反编译软件并不是完美的,它无法还原出源代码中的注释、宏定义等细节。此外,当程序使用了加密、压缩、混淆等保护措施时,VC反编译软件的效果会大打折扣。 由于VC反编译软件的存在,一些开发者可能担心自己的代码会被不法分子通过反编译获取。因此,在进行软件开发时,我们应该注意代码的安全性,采取一些措施来防止代码被反编译,例如使用代码混淆技术、加密关键部分等。 总而言之,VC反编译软件是一种能够将机器代码还原为可读源代码的工具,它在逆向工程、代码审查、软件安全分析等领域发挥着重要的作用。然而,如何保护好自己的代码,避免被反编译,也是我们需要思考和解决的问题。 ### 回答2: VC反编译软件是一种能够将已经编译后的VC程序反向解析为可读的源代码的工具。VC指的是Visual C++,它是一种用于开发Windows操作系统上的应用程序的集成开发环境。反编译软件可以通过分析程序的二进制文件,还原出程序的源代码结构和逻辑。 反编译软件的作用主要有两方面。首先,对于一些没有提供源代码的软件,我们可以使用反编译软件将其反编译,从而了解软件的实现原理和逻辑。这对于研究学习和逆向工程都非常有用。其次,对于一些已经编译的程序,在需要修改或者调试的时候,我们可以使用反编译软件将其反编译为源代码,方便我们进行修改和调试。 然而,需要注意的是,反编译软件并不是万能的,它所还原出的源代码并不一定完全和原始的源代码相同。反编译只是通过解析二进制文件还原出源代码的一种技术手段,并且在这个过程中可能会存在误差。因此,反编译出的源代码可能会比原始的源代码缺失一些细节和结构。 另外,需要强调的是,反编译软件的使用需要严格遵守法律法规,不得用于侵犯他人的知识产权和商业利益。在使用反编译软件时,应该遵循合法合规的原则,尊重程序作者的权益,并仅限于学习、研究和技术交流等合法目的。 总之,VC反编译软件是一种能够将已经编译后的VC程序反向解析为可读的源代码的工具。它在研究学习和逆向工程中有一定的作用,在使用时需要遵守法律法规并保持合法合规的原则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值