问题标签 [smali]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
42730 浏览

java - 将 .Java 文件转换为 .Smali 文件

我使用 APKTool 对 Android 应用程序进行了逆向工程,并获得了 .Smali 文件作为源代码输出。我将带有应用程序的 .Smali 文件转换为 .Java 文件。我能够成功编辑 .Java 文件,但现在我想将它们转换回 .Smali,以便我可以使用新的 .Smali 文件重新编译应用程序。当我将 .Java 文件留在那里时,它不会重新编译它并给出一些错误。我在 Internet 上找不到任何关于将 .Java 编译为 .Smali 的信息,所以希望你们能帮助我。

先感谢您。

0 投票
2 回答
181 浏览

android - Android dex 中的冗余操作码

我目前正在研究一些 Android 性能问题,并注意到 dex 代码中的一些次优模式。我只是想知道是否有人知道这是否可以预期,以及其背后的基本原理是什么。

例如,考虑以下 Java 代码:

当它被构建然后通过 baksmali 运行时,它看起来如下所示:

与我有关的部分是将实例字段的值读入寄存器 v1 的 iget 操作码。相同的字段是从前面操作码中相同的 v1 寄存器写入的,因此操作码看起来完全是多余的。

我唯一能想到的就是这样做是为了使这更加线程安全。但肯定这应该是程序员的责任(通过使用同步块)而不是编译器的责任。尽管我不能 100% 确定,但我认为上述行为与大多数 C/C++ 编译器的行为完全不同。

我应该说,使用 ProGuard 时产生的 dex 基本相同。我还应该提到我正在使用最新的 Android 工具和最新型号的 JDK。

0 投票
1 回答
2427 浏览

android - 编辑smali。问题:低 16 位必须清零。十六进制的id错了吗?

早上好/下午/晚上好,我是 smali 语言的新手,在编译时,有一个我无法解决的问题。我希望这个问题以前没有被问过,但我检查了谷歌和 stackoverflow 上的一些线程,找不到任何解决方案,所以我认为它没有。那么,会发生什么:

我正在尝试修改我的应用程序的 C1.smali 文件,我只想更改错误的数组 id。所以我只是更换了id,我没有碰其他任何东西。

修改后的smali文件

当然,我通过检查public.xml 文件(在 res\values 中)验证了 id 是否正确。我让你自己看看:

现在,当我想重新编译时,apktool会抛出一个我无法理解的问题: C:\apktool>apktool b CC I: Using Apktool 2.0.0-RC4 I: Checking whether sources has changed... I: Smaling smali folder into classes.dex... CC\smali\com\one\aplication\C1.smali[58,4] Invalid literal value: 2131099649. Low 16 bits must be zeroed out. Exception in thread "main" brut.androlib.AndrolibException: Could not smali file : com/one/aplication/C1.smali at brut.androlib.src.SmaliBuilder.buildFile(SmaliBuilder.java:71) at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:55) at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:41) at brut.androlib.Androlib.buildSourcesSmali(Androlib.java:354) at brut.androlib.Androlib.buildSources(Androlib.java:294) at brut.androlib.Androlib.build(Androlib.java:280) at brut.androlib.Androlib.build(Androlib.java:255) at brut.apktool.Main.cmdBuild(Main.java:225) at brut.apktool.Main.main(Main.java:84)

有人知道这个问题的原因吗?apktool 问题指向我修改的行 [58]。我真的不知道会发生什么!感谢任何愿意帮助我的人,请原谅我糟糕的英语。祝你有美好的一天!:)

0 投票
1 回答
680 浏览

android - 使用 apktools 编译 snapchat 安装失败

好的,所以我在使用 apktools 反编译 apk 时遇到了问题。我目前正在尝试编辑当前版本的 snapchat,这样我就可以在没有 root 的情况下拥有无限的字幕长度。为此,我使用 apktools 反编译了 apk,编辑了所需的 smali 文件,然后重新编译它,但由于某种原因它不会安装在手机上。

然后我尝试在没有任何编辑的情况下反编译和重新编译 apk,它也没有工作。

是否需要进行一些特殊的签名才能正确构建和安装应用程序?或者也许是我在 apktools 中缺少的东西?我已经反编译了许多其他 apk,它们运行良好,但 snapchat 没有。任何帮助表示赞赏,谢谢。

0 投票
2 回答
1094 浏览

android - 如何更改 android 应用程序的完整包名称?

我已经用 Apktool 反编译了一个 voip 调用 apk 文件,我试图更改它的包名称,但我收到一个错误unfortunately app stopped...

我所做的是在所有文件中搜索包名(root dir)replace every occurrence使用新的包名搜索notepad ++

这是应用程序使用communicate their server与包名称相同的问题,因此会导致错误"unfortunately stoped!!!

我怎样才能replace only that package name不影响具有相同包名称的其他名称。

提前致谢。

0 投票
1 回答
430 浏览

android - 如何让应用程序自动重命名文件夹

我有一个应用程序...我想为该应用程序添加一个功能。功能是自动重命名 sdcard 中的文件夹。

它这样做。下载一个文件。然后它会自动提取到sd卡。那么有没有让它自动重命名呢?有smali的代码吗?

0 投票
1 回答
361 浏览

java - Android smali 版:设置 jpeg 质量?

你好这里的开发者。

最近我修改了 ColorOS Camera 的一个端口,使其可以在我的设备(小米 Mi4)上运行。实际上,这个应用程序仅适用于 XML 版本。但要解决的是这个应用程序使用默认的android jpeg压缩(在我的例子中jpegquality = 85%)

我刚决定修改 smali 文件来改变这一点。我已经修改了突发模式以捕获 100% 质量的 jpeg(将值 0x4B 更改为 0x64 以获得 100% 质量,而不是在突发模式下为 75% 并且它有效)当我尝试编辑其他行以获得 jpeg 质量 = 100% 时出现问题使用普通拍摄模式。

有人可以帮我解释一下吗?(请不要忘记我是一个初学者,我花了很多时间来尝试编辑)

这是 smali 代码(来自 CameraProcessManager.smali)

这是相应的 java 代码(我知道我无法编辑由 smali 制作的 java 代码,遗憾的是,这会更容易)来自 dex2jar :

这是德十工作室的另一个观点:

我想保留 jpegorentation 设置,但将 jpegquality 更改为始终为 100%

如果有人能够帮助我并给出一些解释,请提前非常感谢=)

0 投票
2 回答
47310 浏览

android - 什么是 Smali Code Android

我将学习一点关于 Dalvik VM、dex 和 Smali 的知识。

我读过关于 smali 的文章,但仍然无法清楚地理解它在编译器链中的位置。以及它的目的是什么。
这里有一些问题:

  1. 据我所知,dalvik 作为其他虚拟机运行字节码,在 Android 的情况下它是 dex 字节码。
  2. 什么是smali?Android OS 或 Dalvik Vm 是否直接使用它,或者它只是相同的 dex 字节码但对人类来说更具可读性?
  3. 它是否类似于 Windows 的反汇编程序(如 OllyDbg)程序可执行文件由不同的机器代码(例如 D3、5F)组成,并且每个机器代码都有适当的汇编命令,但 Dalvik Vm 也是软件,所以 smali 是字节码的可读表示
  4. 有新的艺术环境。它仍然使用字节码还是直接执行本机代码?

先感谢您。

0 投票
1 回答
1996 浏览

android - Smali 注入代码的最佳场所

我正在制作一个 python 脚本来为每个方法添加跟踪,以便能够在 logcat 中获取运行时方法调用。

我的应用程序总是崩溃,不要让我复制错误日志,因为这不是我的问题的重点。实际上,我尝试在注册声明之后立即注入我的代码:.locals

我第一次使用.registers指令但由于本地和参数寄存器的别名而出错。

我当时认为我可以使用该.locals指令,但它完全相同。

我进行的不同测试如下:

  • 如果本地寄存器和参数寄存器之间的差异大于 2,我使用v0v1.
  • 否则,我将.locals指令增加 2 并使用v0and v1

但我不断收到 VFY 错误。

为什么有时.locals等于 0 但有参数p0,例如。 p0应该被别名v0.locals为 0,那么为什么如果我将其更改为.locals2 并且只使用v0并且v1我仍然得到 VFY?

我正在考虑在返回指令之前添加我的代码,至少我是否更改局部变量并不重要,只要它不是返回变量

编辑:@JesusFreke 感谢您的好评。

我目前正在尝试根据您的建议改进我的 python 脚本。所以我创建了一个CustomClass,我在根文件夹中复制,但事实是我循环遍历根文件夹中的所有方法,我得到存储到变量中的类和方法名称,然后我更改了这个参数的值函数,我在每个方法中调用它。

但事实是它不能工作,因为每次我输入一个新方法时静态函数的参数值都会改变,最后它只会保留我输入的最后一个方法的值。

在这种情况下,我需要生成与 smali 文件夹中的方法一样多的静态函数,大约 40.000...

这是我的代码的一部分:

还有我的 CustomClass 内容:

0 投票
1 回答
2193 浏览

android - smali中添加trace的方法

到目前为止,我做了一个只有一种方法的 smali 类,以便logcat为任何方法添加跟踪。我可以编译并启动应用程序,但该方法什么也没打印。

我有一个本地参数,tag对于logcat这个本地参数来说很简单v0,我从要添加跟踪的方法中得到它。还有一个参数p0。我相信有问题,但 dalvik 调试器没有打印任何错误,因此我不知道我的错误在哪里。

下面是我的代码。

这是我如何调用该方法的示例:

更进一步,我想知道是否有任何方法可以打印出方法的返回寄存器的值。

我知道 Java 中的每种类型的变量都继承自 Object 并且 Object 有一个方法toString(),因此理论上应该可以自定义我的方法add_trace()以在运行时获取返回的寄存器的值。有人可以帮我吗?

谢谢。