APK 反编译失败 是为啥

APK 反编译失败 是为啥,第1张

1、反编译=回编译后分别是

smali目录 回编译为 classes.dex 文件

res目录 回编译为 resources.arsc 文件

2、回编译顺序

在回编译时,会先检查“源”即resources

当你汉化文件,修改出错了(缺少一个符号也不行),

那么回编译会自动跳过编译res文件夹,直接回编译smali 。

所以,如果没有对smali(classes.dex)汉化,那么建议大家删掉这个悉大文件夹,

这要会大大加快回编译速度。

3、出错问题1

在汉化时,往往会不小心删掉一些符号,如 "<" ">"空如符号等等。

<string name="app_name">File Manager</string>

<string name="app_name">文件管理器/string>

<string name="app_name"文件管理器</string>

这些小小的错误都会导致回编时译检查出错。

所以汉化时,注意对校,然后再回编译。

建议使用一些高级的文本编辑器,支持语法高亮视图的。

4、出错问题2

最近发现有些APK文件 反编译后,就算不汉化直接回编译,都会出错。

有可能的原因1,反编译后XML文件语法中@符号 前面多了"\" (\@ ),

用文本编辑工具 直接替换【\@】为【@】,应该可以解决。

建议斗陆启使用最新版本的反编译工具。

5、建议大家使用新版本的APKTool工具,

当然如果新的有问题也可以试试旧的一、系统文件汉化再次强调

1、汉化Settings.apk(系统设置)、MMS.apk(信息)、Phone.apk(电话)、

等等系统文件,一定要先 安装构架,具体看另个文件

<关于APKTool工具反编译Settings.apk问题>。

2、系统文件汉化完后不需要签名,直接替换汉化后的文件,就可以了。

主要是,系统文件放在系统目录,无需再次读取签名获得权限,已经是高级了。

二、打包说明

1、通常汉化完回编译后,会自动生成所有APK内的文件,或者自动生成*.APK文件。

但是建议大家不要直接使用该文件,进了使用替换法,替换掉你汉化后的文件,

如:resources.arsc,如果修改过的图片,等等…

2、很多人对于APK文件 解压缩或压缩 都用“WinRAR”或“好压”,这里不推荐。

  希望大家安装7-Zip这个压缩工具,对于zip格式的支持是最好的。而且很方便,

不需要重新关联apk 直接右键打开就行了。替换直接拖拉进去,就OK了一、回编译出错问题

(1.提示 strings.xml 最后一行错误,检查是否</string>符号错误;

在汉化时,往往会不小心删掉一些符号,如 "<" ">"符号等等。

<string name="app_name">File Manager</string>

<string name="app_name">文件管理器/string>

<string name="app_name"文件管理器</string>

(2.提示 strings.xml 最顶部含中文代码首行错误,编码格式不对,转换成 UTF-8;

(3.提示 public.xml 出错,检查改动过的 arrays.xml 是否代码有错误的地方;

二、一切能正常但无法回编译

还有一种情况,apktool最新版本能正常反编译一个apk文件,在未做任何修改的情况下,无法回编译。

这是就要注意了,可以尝试一下用低版本的apktool进行【反编译】,然后在用高版本的apktoo工具【回编译】。

这里向大家推荐用 【APKDB】 这个工具,很方便,反编译时可以选择apktool的版本。

虽然不提倡逆向工程别人的劳动成果搏渗

但是万一一个feature你想做,却始终搞不懂,怎么办?参考一下别人怎么实现的吧!

可是Android用的Dalvik压根不是标准的Java

VM的Jar,而是DEX格式的,怎么办?

附件是dxe2jar和JD,两个工具都是open

source的,我已经全部放在一个压缩包了。

别着急,有办法:

1. 假设你要反汇编的是app.apk,那么先改名成app.zip

2.

解压

3. 在解压出来的里面找到classes.dex,这个就是目标的程序的二进制文件

4. 用附件基老脊的dex2jar,在Windows命令行下运行

dex2jar classes.dex

5. 生成classes.dex.dex2jar.jar,这个就是转含段换后的JAR文件了

6.

执行jd-gui,找到刚才生成的JAR文件,打开之。

7. 偷偷乐吧,90%以上的Java源代码跃然眼前。

一: All register args must fit in 4 bits

提示出错的行数缺戚的代码是:

[java] view plain copy 在CODE上查看代迟漏码片派生到我的代码片

<pre name="code" class="java"> invoke-virtual {v0,p0, v1}, Lcom/Jt/ST/uti/JManager->startService(Landroid/content/ContextI)V

在http://stackoverflow.com/questions/18446954/smaliall-register-args-must-fit-in-4-bits-error这里找到了解决方案。

原因是超出了寄存器的允许范围。只允许使用v0-v15. 知道了出错的原因,那码扮烂么修改起来就好办了,只需要把超出的寄存器move下就可以了,在该代码前面添加

[java] view plain copy 在CODE上查看代码片派生到我的代码片

move-object/from16 v2, p0

然后该句修改为:

invoke-virtual {v0,v2, v1}, Lcom/Jt/ST/uti/JManager->startService(Landroid/content/ContextI)V

就ok了

二:Failure [INSTALL_FAILED_INVALID_INSTALL_LOCATION]

在使用adb install 向手机安装软件时提示的错误,原因是签名错了,签名使用的是系统签名,改为其他的就可以了。

系统签名命令:

[java] view plain copy 在CODE上查看代码片派生到我的代码片

java -jar signapk.jar platform.x509.pem platform.pk8 d.apk dd.apk

普通签名的命令:

[java] view plain copy 在CODE上查看代码片派生到我的代码片

java -jar signapk.jar testkey.x509.pem testkey.pk8 d.apk dd.apk


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12496629.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-25
下一篇2025-08-25

发表评论

登录后才能评论

评论列表(0条)

    保存