导航:首页 > 源码编译 > 反编译关键参数

反编译关键参数

发布时间:2024-12-18 11:42:57

‘壹’ android编译(三)— 手动编译

PS: 最近没工作,没工作就没需求,没需求就没什么技术总结的灵感,那就没更新什么。但是两个月不更新了,要是三个月不更新就会出大事,所以这次打算做一件有意思又不难的事。
之前有发文章写过反编译,今天就来试试反编译之正编译,开玩笑的,就是试试手动编译的过程, 平时我们在项目中编译出包都是使用Gradle直接执行assemble任务就能解决,我打算试试手动模拟整个过程。当然我也是第一次这样搞,所以如果有写得不对的地方,还望指出。

众所周知,apk实质上就是一个压缩包。复习一下,我们写个最简单的Demo,然后打包,然解压,注意是解压,不是反编译,意义是不同的。

注意我这个Demo很简单,什么都不引入

然后我们看看整个出包的过程,随便从网上拿张图

然后这里我们用Android SDK给我们提供的工具来完成整个流程,工具在sdk文件夹下的build-tools文件夹下,有什么aapt.exe、dx.bat,用的就是这些

这步应该是整个流程最简单的吧,我感觉,所以从最简单的开始。
我们先看看生成的dex有什么

对比项目,我是一开始最基本的项目,什么都没动,所以只有一个MainActivity.clas,所以这里肯定是要先想办法得到BuildConfig.class和R.class。

输入命令
aapt p -f -m -J <输出路径> -S <res路径> -I <android.jar路径> -M <Manifest路径>

下一步,我们需要BuildConfig.class
这个BuildConfig.java是由gradle在我们配置好gradle之后自己帮我们生成的,所以我们直接拿来用,然后再javac就得到class文件了

然后我们再编译我们的MainActivity.java并将它们放到同一个文件夹下, MainActivity因为引用了Android.jar和R文件,所以编译时注意点,我为此被动好好的复习了一遍javac,都是泪

最后一步,我们用dx工具就能打出dex文件了

然后执行命令就得到一个Dex文件,看看这个文件里面和上面直接打出的apk中的Dex文件有什么不同:

看图,我们上一步已经生成.dex了,那么我们需要和compiled Resource 还有 Other Resource 一起生成APK。

我们先来生成compiled Resource,也就是resources.arsc
发现之前使用aapt生成R文件的时候没写完整,当时可以加一个-F参数直接生成arsc和Manifest

导出的abc.zip里面就有resources.arsc和AndroidManifest.xml。
因为之前写漏了,所以肯定要重新编一次MainActivity.java和Dex

我们把刚才的dex文件和aapt生成的resources.arsc、AndroidManifest.xml和res放到一个文件夹里面。
PS:res文件夹也是上面aapt的命令生成的
然后我们对比这个文件夹和之前apk解压的文件夹

最后运行

看来是成功了。

再说说遇到的还有两个问题,并说下我解决问题的思路
(1)我把它们都放到一个文件夹之后,我压缩成压缩包,然后改后缀成.apk,然后发现安装不了,我就直接反编译,发现发编译失败,提示包有问题,以我多点玩包的经验,我感觉就是压缩工具出了问题,然后我去下个“好压”(这不是广告啊),然后就能正常反编译了。
(2)但是还是安装不了,再根据我多年的玩包经验,我感觉是签名问题,然后我随便给这个包上一个签名,就能正常安装得到上图的结果了。

总体来说,还真挺好玩的,这整个过程,就是翻车了几次。做完之后感觉非常牛逼,为什么这样说,因为我知道这整个过程,我就可以做到,我不经过gradle来打包,我自己写个python脚本来调用aapt和dx来打包也是能做到的。
当然上面纯属异想天开,因为这是个什么都没有的Demo所以觉得简单,要是一个真实的项目,我感觉肯定要有很多坑,别的先不说,一个项目那么多依赖关系,我这javac要搞死人。
最后如果有不对的地方,希望有大佬能够指出,毕竟能运行也不能证明完全没问题。然后我使用的build-tools是28的,不敢保证其它版本包括以后版本的玩法都一样。

‘贰’ python生成exe文件与exe文件的反编译

一、Python生成exe文件

1.使用Anaconda Prompt

通过打开Anaconda Prompt,切换到项目使用的环境,运行pyinstaller命令,生成的exe文件会自动存放于默认路径下的dist文件夹内。

2.使用命令行窗口cmd

设置好三个环境变量,特别是pyinstaller文件夹路径,打开cmd后,直接输入pyinstaller命令,生成的exe文件将会被放置在cmd路径下的dist文件夹中。

二、exe文件反编译成py文件

1.从exe文件转pyc文件

下载pyinstxtractor工具,使用在Prompt或cmd中运行,生成的文件夹main.exe_extracted中可以找到main.pyc文件。

2.从pyc文件转回exe

安装反编译工具uncompyle6,运行在Prompt或cmd中,生成main.py文件。

三、pyinstaller参数总结

-F, –onefile: 打包为单个文件,适用于单个.py文件的代码。

-D, –onedir: 打包多个文件,适用于框架形式的工具代码,便于维护。

-K, –tk: 包含TCL/TK。

-a, –ascii: 不包含编码,默认在支持Unicode的版本上包含所有编码。

-d, –debug: 生成调试版本的可执行文件。

-w, –windowed, –noconsole: 窗口模式执行,不开启命令行窗口(仅适用于Windows)。

-c, –nowindowed, –console: 控制台模式执行。

-s, –strip: 通过strip压缩可执行文件和共享库,注意Cygwin的strip可能影响普通Win32 DLL。

-X, –upx: 使用UPX压缩执行文件及Windows中的DLL。

-o DIR, –out=DIR: 指定输出目录。

-p DIR, –path=DIR: 设置导入路径。

-i ICO_PATH, –icon=ICO_PATH: 添加图标至可执行文件。

-v VERFILE, –version=VERFILE: 添加版本信息。

-n NAME, –name=NAME: 指定项目名称。

四、参考资料

详细参考资料包括但不限于官方文档和社区教程,用于深入理解使用方法和参数细节。

阅读全文

与反编译关键参数相关的资料

热点内容
单片机单灯左移05 浏览:148
买服务器练手什么配置 浏览:783
服务器被毁该怎么办 浏览:937
python私有库 浏览:512
Python有中文吗 浏览:736
麦块的服务器为什么都进不去 浏览:474
新买的服务器如何打开 浏览:35
安卓软件游戏怎么开发 浏览:319
用扑克摆爱心解压神器怎么摆 浏览:70
松下制冷压缩机 浏览:275
pdf里怎么修改文字 浏览:686
已保存文档加密如何设置 浏览:413
怎样判断加密货币是牛是熊 浏览:948
初二多项式乘法速算法 浏览:455
android多个布局文件 浏览:629
奔跑程序员 浏览:468
服务器如何搭建类似github 浏览:292
明日之后安卓太卡怎么办 浏览:503
如何使用命令方块找到村庄 浏览:767
泛函压缩映像原理 浏览:522