编辑:
当我从APK中提取所有内容时,我得到了一些SMALI文件(我尝试使用JD-GUI,但字符串包含随机名称。可能使用Proguard进行了混淆。 ),lib目录中的一些资源文件和一个“ .so”文件。如何分析“ .so”文件。我知道SO文件是Linux世界中的一种DLL,但是可以用来分析SO文件的工具是什么。视频的任何链接都将非常有帮助。 :)
此外,如果APK中有JAR文件而不是SO文件,我该如何解决?
#1 楼
.so文件是一个编译的库,大多数情况下是从C或C ++源代码获取的。 .so代表Shared Object,它与混淆无关,仅表示某人使用C编写了应用程序的某些部分。在某些情况下,存在现有的C代码,而仅仅是程序员更容易构建JNI接口以从Java调用库;在其他情况下,程序员希望编译的C具有比Java更快的速度。当然,如果我想隐藏应用程序的某些部分是如何工作的,可以用C编写并将其编译为.so,这样就很难进行反向操作了。 .so,这些是您可以选择的选项:
购买IDA pro的商业版本。演示版本将无法执行,因为它们无法反汇编ARM代码。这很昂贵,但是到目前为止是与未知目标代码一起使用的最佳工具。
如果该应用程序包括针对不同硬件的.so版本,并且在x86上具有针对Android的库,则可以免费使用可以使用IDA 5.1版本进行反汇编。
如果您可以访问Linux系统,请获取包含objdump的ARM gcc工具链,并使用objdump --disassemble获得包含反汇编代码的巨大文本文件。然后,使用该文本文件。也许还有用于Windows上运行的ARM目标的gcc工具链,但我从未尝试过。
如果不这样做,您也可以将.so文件上传到http://onlinedisassembler.com/以获得反汇编文件不想安装gcc工具链。
请注意,在所有这些情况下,您都需要对ARM处理器体系结构,汇编语言,JNI约定和编译器ABI有透彻的了解才能使拆卸感。如果您没有经验,请准备许多漫长的夜晚。
评论
Android具有x86版本,因此我认为OP可以从x86映像中获取相同的.so文件并进行反编译
–phuclv
2014年6月19日下午4:14
不幸的是,onlinedisassembler.com具有局限性。上载大小上限为256KB。
–.jacky博士
15年6月22日在11:04
Bokken也支持ARM,对吗?
–dcow
16年1月8日,0:52
〜“然后,请使用该文本文件。”你什么意思?明智地检查此文本文件的最佳方法是什么。
– IgorGanapolsky
16年11月1日在15:32
实际上,IDA的演示版确实支持ARM(免费软件不支持)。
–伊戈尔·斯科钦斯基♦
16年11月2日,9:25
#2 楼
除了Guntram的建议外,请查看可重新定向的反编译器aka retdec。它可以将二进制文件反编译为Python或C代码。至少对我来说,它比纯汇编容易阅读(并且对ARM二进制文件有效)。它非常适合勾勒共享对象的粗略工作。
存在用于特定IDA版本的插件,但是主要限制是它不支持64位代码。
评论
这不是很好。 Hexrays反编译器赢得胜利。
– K
16年1月7日在7:53
@K为什么〜“不是很好”?
– IgorGanapolsky
16年11月1日在15:37
Hexrays反编译器可与IDA Pro配合使用。 IDA是目前最好的反向工具。这种组合的意义不仅仅在于反编译器。
– K
16年2月2日,下午3:36
#3 楼
您还可以通过挂钩API并观察参数和返回值来尝试动态方法。这将使您查看进入加密API的数据,这在处理网络协议时可能会很有帮助。请查看Frida工具工具包,以获取开源跨平台解决方案(Android,iOS,Windows,Mac和Linux)。有一个教程展示了如何在几分钟内构建一个交互式的检测工具,该工具将代码注入iOS上的“ Yo”应用中,并使用Google Maps绘制网络连接。评论
Frida会反汇编.so文件?
– IgorGanapolsky
16年5月11日在22:11
Frida截取了对本机库的调用,因此您可以查看其中的内容和结果。
–山姆
19年1月1日在23:42
#4 楼
使用android-ndk,https://developer.android.com/ndk/downloads/index.html。您可以使用ndk中的工具链来执行所需的拆卸类型。例如如果我反编译apk并获得一个.so库,我会这样做:
./android-ndk-r15b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-objdump -T "SAMPLE.so | less
得到
objdump
。 #5 楼
您也可以尝试使用Snowman工具:https://derevenets.com/。Snowman是C / C ++反编译器的本机代码。 >它支持在其网站上指定的ARM,x86和x86-64体系结构。
评论
雪人可能存在内存泄漏。在反编译一个小的.so文件时花费了6+ Gb RAM
– VMaleev
18年3月3日在17:06
同意。它确实使我的8 GB RAM的机器挂了。
–Parth Jani
18年6月15日在6:52
确实!看起来,使用少量基本代码会更好。
– Adrian Paul
18年7月7日在9:43
为什么不给作者一个机会并通知他/她这些问题?软件缺陷不是天生的,因此可以修复。但是用户需要报告他们,这样才能发生。
– 0xC0000022L♦
18年8月10日在20:24
#6 楼
您还可以直接在Android设备上对APK文件进行反向工程。Java部分:显示Java
.so文件:Android反汇编程序。
(免责声明:我是开发人员)
版本1.4.2发行。
Android-Disassembler
反汇编任何文件,包括android共享库(又名.so文件)(NDK,JNI),Windows PE文件(EXE,DLL,SYS等),Linux可执行文件,目标文件,任何您想要的图片,音频等文件(出于娱乐目的)完全在Android上。 Android上基于Capstone的反汇编程序。
显示elf文件的详细信息。
显示符号表(函数或对象的...精灵文件。
反汇编代码段。
具有反汇编的各种导出选项。 (可重载的原始文件,可编译的txt文件,分析文本文件,json和可重载的数据库)
支持项目。
支持直接从文件浏览器启动。
支持许多ABI(arm,x86,x64 ,MIPS,PowerPC,...)
通过符号名称或十六进制地址跳转到地址。
语法着色。
支持PE和其他bin格式。
对符号进行排序
无需按
Disassemble
按钮!为PUSH / POP指令着色。
更好地为ARM拱形指令着色。
可以覆盖自动解析设置
新功能
您可以将指令复制到剪贴板。
现在可以解析IAT,EAT的PE标头。
修复的错误。 Wiki
开源
此应用已使用
-Capstone
-Storage-Chooser
-Colorpickerview
-Java-binutils
-PECOFF4J。
感谢
https://reverseengineering.stackexchange.com/a/20124/23870
XRefs
https: //reverseengineering.stackexchange.com/a/18203/23870
相关链接(RE线程)
评论
为什么我要在Android设备上执行此操作?
–山姆
19年1月1日23:50
@Sam嗯,为什么不呢?您甚至可以在android上开发应用程序! (我愿意):)(一个可能的优点,它不需要将文件复制到PC)
– KYHSGeekCode
19年1月2日,1:50
#7 楼
根据此博客文章,GikDbg似乎是一个用于调试本机Android库的Ollydbg mod。不幸的是,GikDbg的网站不再存在。
#8 楼
您可以尝试使用ghidra,Ghidra是由国家安全局研究局创建和维护的软件逆向工程(SRE)框架。该框架包括一套功能齐全的高端软件分析工具,使用户能够在各种平台(包括Windows,macOS和Linux)上分析编译的代码。功能包括反汇编,汇编,反编译,制图和脚本编写,以及数百种其他功能。 Ghidra支持多种处理器指令集和可执行格式,并且可以在用户交互和自动模式下运行。用户还可以使用Java或Python开发自己的Ghidra插件组件和/或脚本。链接:https://github.com/NationalSecurityAgency/ghidra
评论
这是一个不好的问题,因为混淆的主题很大。尝试缩小范围。我应该怎么做才能缩小范围?
尝试将其设为“ googlaleble”问题。例如:当我打开PE时,我缺少导入表?怎么会这样?还是我发现我的APK包含了dexprotector,什么是最好的方法?
@Stolas-请查看我的编辑。会缩小范围吗?
完善!我已提名它重新开放。重新打开后,我会为您解答。