Smali介绍Smali是一种用于Android应用程序的反汇编语言,它将Android应用程序的Dalvik字节码转换为易于阅读和编辑的文本格式。使用Smali,开发人员可以查看和修改Android应用程序的内部工作方式,进行调试和分析。Smali代码通常用于定位和修复应用程序中的问题,或者进行逆向工程。Smali数据类型在Smali语言中,数据类型包括以下几种:基本数据类型:包括整型、浮点型、布尔型和字符型。例如,整型可以是int、long、short、byte等;浮点型可以是float、double;布尔型是boolean;字符型是char。引用数据类型:包括类类型、接口类型、数组类型。
表示invoke-virtual是调用虚方法,而invoke-direct是直接方法。但是我不清楚什么是“虚方法”,什么是“直接方法”?也就是说,什么样的方法调用是invoke-virtual,什么样的方法调用是invoke-direct?谁能举个具体的例子? 最佳答案 来自http://source.android.com/devices/tech/dalvik/dex-format.html,直接方法是“任何静态、私有(private)或构造函数”。但是,静态方法有自己的invoke-static操作码,因此invoke-dir
我对一些androidapk进行了逆向工程,以添加一些用于功能测试的工具。我想知道给定一个smali,如下所示,我该如何添加类似的内容Log.e(TAG,"somedescritpion",e);.smali文件中的每个方法。.classpublicLd;.superLandroid/view/View;.source"SourceFile"#instancefields.fielda:Z.fieldb:Lcom/rovio/ka3d/App;#directmethods.methodpublicconstructor(Lcom/rovio/ka3d/App;)V.locals2.pa
我使用APKTool对Android应用程序进行了逆向工程,并获得了.Smali文件作为源代码输出。我将带有应用程序的.Smali文件转换为.Java文件。我能够成功编辑.Java文件,但现在我想将它们转换回.Smali,以便我可以使用新的.Smali文件重新编译应用程序。当我将.Java文件留在那里时,它不会重新编译它并给出一些错误。我在Internet上找不到有关将.Java编译为.Smali的任何信息,所以我希望你们能帮助我。提前谢谢你。 最佳答案 您可以使用普通的java编译器编译java类,然后使用Android的“dx”
1.使用androidkiller反汇编apk,生成smali文件夹2.Androidstudio安装smalidea-0.06插件,点击File->Settings->plugins->instalpluginsfromdisk,选择下载的zip包就行,不要解压。安装完成后,AS提示重启生效,重启即可. 注意:Androidstudio4.0以上版本安装smalidea-0.06,4.0以下版本安装smalidea-0.0.5版本。3.找到apk包名及启动界面,在AS的终端以调试模式启动应用adbshellamstart-D-ncn.com.cvsource/.modules
我注意到当java代码中有finally子句时,总是会生成.catchall来识别finallyblock或使用.catchall标签内联它,但我没有找到任何关于是否是这种情况或更多解释的在线信息,有人知道吗? 最佳答案 是的,finallyblock是可能生成.catchall的一种情况。但是,它也可以用于其他用途。例如,也可以在同步方法的情况下生成,以确保释放锁。捕获所有处理程序记录在dex-format中规范。具体来说,在code_item中包含的encoded_catch_handler项中。还相关的是classfilesp
smali代码有语法规范吗?我正在尝试使用smali代码,而我缺少的一件事是smali中的某些方法具有.prologue部分,而有些则没有。不幸的是wiki似乎没有关于smali语法的信息。以前有没有人遇到过这种情况?任何建议/解决方案将不胜感激。EDIT1:我的目标是将日志消息添加到应用程序所有Activity的onResume方法的开头。EDIT2:我正在使用ANTLRv4.1解析器来解析我的smali文件,并且我从smaliLexer获得了一个CommonTree(解析树)和一个TokenStream。现在是为日志指令创建token并更改解析树,然后生成classes.dex文件
我刚刚在看android逆向工程教程,我发现其中大部分都是在反编译apk后修改smali代码而不是实际的java源代码,这是什么原因吗?感谢任何帮助。谢谢 最佳答案 大多数时候,您从反编译中得到的不是完整/正确/可编译的Java源代码。这只是一个hard从字节码推断(Java)源代码的问题。此外,源代码中的某些信息可能只是在编译后的形式中丢失,例如局部变量或参数的名称,因此无法通过反编译恢复它们。相比之下,将字节码转换为低级(smali)指令(反之亦然)是微不足道的。 关于java-对A
这个问题在这里已经有了答案:Whatisthis:[Ljava.lang.Object;?(2个答案)关闭9年前。我正在努力深入了解smali语言。我在网上找到了一个讲操作码的页面,但是它从来没有讲过这些特殊符号,即L,;和[,例如invoke-static{v2,v3},Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;那么,这些符号在这里意味着什么?例如[Ljava/lang/Object;和Ljava/lang/String;
我使用apktool反汇编了一个简单的android应用程序,它生成了一些smali代码。其他事情是可以理解的,但我不明白smali代码中.prologue的含义。请帮助我这里其他变量是self理解的linkeinvoke和locals但这个.prologue是做什么的?#directmethods.methodpublicconstructor()V.locals0.prologue#Whatdoesthisdo?.line17invoke-direct{p0},Landroid/app/Activity;->()Vreturn-void.endmethod