皮皮网

【学习vue源码提高水平】【selector源码解析】【大鱼溯源码】android 无源码调试_如何调试android源码

2024-12-25 14:29:04 来源:春节12响 源码

1.10款优秀的源码源码Android逆向工程工具
2.安卓不开源会怎样安卓不开源
3.Android Adb 源码分析(一)
4.如何调试Android Framework
5.android开发如何调试

android 无源码调试_如何调试android源码

10款优秀的Android逆向工程工具

       在探索Android逆向工程的世界里,众多工具为开发者和安全专家提供了强大的调试支持。这里有款值得一提的何调工具,它们各具特色,源码源码帮助我们深入理解APK文件和Dalvik虚拟机的调试工作原理:

       1SMALI/BAKSMALI:作为Dalvik虚拟机的得力助手,它能反编译和回编译classes.dex,何调学习vue源码提高水平语法类似于Jasmin/dedexer,源码源码且支持注解和调试信息等。调试

       ANDBUG:基于jdwp协议的何调Andbug,作为安卓安全神器,源码源码无需源代码即可进行调试,调试其Python封装和脚本断点机制使其极具灵活性。何调

       ANDROGUARD:专为Android逆向工程设计,源码源码selector源码解析提供恶意软件分析功能,调试使用DAD反编译器,何调支持DEX、ODEX和APK等文件处理。

       APKTOOL:Google官方提供的APK编译工具,可反编译与重构APK,便于资源修改和调试。

       AFE:用于安全漏洞检测和恶意软件创建的AFE项目,包含AFE和AFEServer两部分,支持自动化操作和命令行界面。

       Dedexer:开源的dex文件反编译工具,方便查看Java源代码结构。大鱼溯源码

       ANDROID OPENDEBUG:通过Cydia Substrate进行设备监控,但仅限测试设备。

       Dare:提供apk反编译为JavaClass文件的功能,适用于Linux和Mac OS X。

       FINO:Android动态分析工具,适用于动态分析场景。

       Enjarify:Google出品的Enjarify,将Dalvik字节码转为Java字节码,兼容性与效率出色。

       尽管现在java层更多使用ak和apktool等工具,而对于底层分析,IDA和Winhex则是游戏源码优势不二之选。对于Android逆向工程需求,可以根据具体任务选择合适的工具。

安卓不开源会怎样安卓不开源

       Android操作系统是开源的吗?

       是。

       Android是一种基于Linux的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由Google(谷歌)公司和开放手机联盟领导及开发。

       尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由AndyRubin开发,主要支持手机。年8月由Google收购注资。海安麻将源码

       年月,Google与家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。

       Android开源吗?

       Android是开源的。

       安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。

       Android操作系统最初由AndyRubin开发,主要支持手机。年8月由Google收购注资。年月,Google与家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。

Android Adb 源码分析(一)

       面对Android项目的调试困境,我们的团队在项目临近量产阶段,将userdebug版本切换为了user版本,并对selinux权限进行了调整。然而,这一转变却带来了大量的bug,日志文件在/data/logs/目录下,因为权限问题无法正常pull出来,导致问题定位变得异常困难。面对这一挑战,我们尝试了两种解决方案。

       首先,我们尝试修改data目录的权限,使之成为system用户,以期绕过权限限制,然而数据目录下的logs文件仍保留了root权限,因此获取日志依然需要root权限,这并未解决问题。随后,我们找到了一个相对安全的解决办法——通过adb命令的后门机制,将获取root权限的命令修改为adb aaa.bbb.ccc.root。这一做法在一定程度上增加了后门的隐蔽性,避免了被窃取,同时对日常开发的影响也降至最低。

       在解决这一问题的过程中,我们对Android ADB的相关知识有了更深入的理解。ADB是Android系统中用于调试的工具,它主要由三部分构成:adb client、adb service和adb daemon。其中,adb client运行于主机端,提供了命令接口;adb service作为一个后台进程,位于主机端;adb daemon则是运行于设备端(实际机器或模拟器)的守护进程。这三个组件共同构成了ADB工具的完整框架,且它们的代码主要来源于system/core/adb目录,用户可以在此目录下找到adb及adbd的源代码。

       为了实现解决方案二,我们对adb的代码进行了修改,并通过Android SDK进行编译。具体步骤包括在Windows环境下编译生成adb.exe,以及在设备端编译adbd服务。需要注意的是,在进行编译前,需要先建立Android的编译环境。经过对ADB各部分关系及源代码结构的梳理,我们对ADB有了更深入的理解。

       在后续的开发过程中,我们将继续深入研究ADB代码,尤其是关于如何实现root权限的功能。如果大家觉得我们的分享有价值,欢迎关注我们的微信公众号“嵌入式Linux”,一起探索更多关于Android调试的技巧与知识。

如何调试Android Framework

       ç”¨Android Studio进行源码调试

       å¦‚上文所述,如果需要实现源码调试,必须知道足够的调试信息;在native调试中就是所谓的「调试符号」。但是release版本的动态链接库或者可执行文件一般并不会包含我们需要的调试信息,在Android系统中, /system/lib/* 目录下的那些系统so并没有足够的调试信息,因此如果要进行源码调试,必须自己编译Android源代码,才能获取调试信息,进而让调试器协助我们调试。

       Android源码编译是个麻烦事儿,我写过一篇文章介绍 如何使用Docker调试 ;但是,Android版本众多,如果真的需要调试各个版本,在本地进行编译几乎是不可能的——一个版本约占G空间,如果每个版本都编译,你的Mac还有空间可用吗?因此比较推荐使用云服务进行源码编译;比如使用阿里云的ECS,M的网速分钟就能下载完源码;编译速度还勉强,4æ ¸8G两个半小时。扯远了 :) 如果你没有精力编译Android源码,我这个 Demo工程 可以让你尝尝鲜,里面包含一些调试的必要文件,可以体会一下Native调试的感觉。

       å¦‚果我们已经拥有了调试符号,那么还需要保证你的符号文件和设备上真正运行的动态链接库或者可执行文件是对应的,不然就是鸡同鸭讲了。最简单的办法就是使用模拟器。我们编译完源码之后,一个主要的编译产物就是 system.img ,这个 system.img 会在启动之后挂载到设备的 /system 分区,而system分区包含了Android系统运行时的绝大部分可执行文件和动态链接库,而这些文件就是我们的编译输出,正好可以与编译得到的调试符号进行配合调试。模拟器有一个 -system 选项用来指定模拟器使用的 system.img文件;于是这个问题也解决了。

       æœ€åŽä¸€ä¸ªé—®é¢˜å°±æ˜¯ï¼Œæ—¢ç„¶æ˜¯æºç è°ƒè¯•ï¼Œå½“然需要源码了;我们可以在 AOSP 上下载需要的源码即可;需要注意的是,在check分支的时候,必须保证你的分支和编译源码时候的分支是一致的。

android开发如何调试

       èƒ½å¤Ÿåœ¨eclipse上运行调试应用程序之前,你必须为它创建一个启动项。启动项指定哪个工程将被启动,哪个activity开始工作,以及使用哪些模拟器选项等。

       æŒ‰ç…§ä»¥ä¸‹æ­¥éª¤ä¸ºEclipse版本的应用程序创建合适的启动项:

       æ‰“开启动项管理工具。

       åœ¨Eclipse 3.3 (Europa)的版本中,酌情选择 Run > Open RunDialog... or Run > Open Debug Dialog... 。

       åœ¨Eclipse3.4 (Ganymede)版本中,酌情选择 Run > Run Configurations...or Run > Debug Configurations... 。

       åœ¨å·¦è¾¹çš„工程类型列表选择Android Application选择,双击(或者点击右键选择new),创建一个新的启动项。

       è¾“入启动项名称。

       åœ¨Android标签中,浏览要开始的工程和Activity 。

       åœ¨Target标签中,设置想要显示的屏幕及网络属性,以及其他任何模拟器启动选项。

       ä½ å¯ä»¥åœ¨Common标签中设置更多的选项.

       æŒ‰ä¸‹Apply保存启动配置,或者按下Run或Debug()。

       è¿è¡Œå’Œè°ƒè¯•åº”用程序

       ä¸€æ—¦ä½ è®¾å®šäº†å·¥ç¨‹å’Œå·¥ç¨‹å¯åŠ¨é…ç½®ï¼Œä½ å°±å¯ä»¥æŒ‰ç…§ä»¥ä¸‹çš„说明运行和调试应用程序了。

       ä»Žeclipse主菜单,根据情况选择Run>Run 或者 Run>Debug,开始运行或者调试活动启动项。

       æ³¨æ„ï¼Œè¿™é‡Œæ´»åŠ¨å¯åŠ¨é¡¹æ˜¯åœ¨è¿è¡Œé…ç½®ç®¡ç†ä¸­æœ€æœ€è¿‘一次选中的那个。它不一定就是在Eclipse Navigation 面板中选择的程序(如果有的话)

       è®¾ç½®å’Œä¿®æ”¹æ´»åŠ¨å¯åŠ¨é¡¹ï¼Œå¯ä»¥ä½¿ç”¨å¯åŠ¨é¡¹ç®¡ç†å·¥å…·ã€‚如何获得启动项管理工具可以参考创建一个启动项

       è¿è¡Œæˆ–调试应用程序将触发以下动作:

       å¯åŠ¨æ¨¡æ‹Ÿå™¨ï¼Œå¦‚果他还没有开始运行。

       ç¼–译工程, 如果在上次编译的基础上修改过代码,将重新编译。在模拟器上安装应用程序。

       Run选项,开始运行程序。

       Debug 在"Wait for debugger "模式下启动程序,然后打开调试窗口并将Eclipse Java调试器和程序关联。

       åˆ©ç”¨å…¶ä»–IDEs和工具开发Android应用程序

       é€šå¸¸æˆ‘们使用安装有ADT插件的eclipse Eclipse with the ADT plugin.来开发Android程序,这个插件将编辑,build和调试功能集成到IDE上。

       ç„¶è€Œï¼Œå¦‚果你想在其他的IDE上开发程序,例如IntelliJ,或者使用没有ADT插件的eclipse也可以。SDK提供了安装,编译,调试应用程序所需要的工具。

       åˆ›å»ºä¸€ä¸ªandroid工程

       Android SDK包含一个activityCreator的程序,它将为工程产生多个stub文件和一个build文件。你可以用这个程序创建一个新的 Android工程或者在现有代码上创建工程,如SDK中包含的例子。对于Linux 和Mac系统,SDK提供activityCreator.py,一个 Python脚本,Windows上则是activityCreator.bat一个批处理脚本。无论是哪种平台,用法是一样的。

       æŒ‰ä»¥ä¸‹æ­¥éª¤è¿è¡ŒactivityCreator创建Android工程:

       åœ¨å‘½ä»¤è¡Œä¸‹ï¼Œåˆ‡æ¢åˆ°SDK下的tools/目录下,为你的工程文件新建一个目录。如果你是在现有代码上创建工程,切换到程序的根目录下。

       è¿è¡ŒactivityCreator。在命令行下,你必须指定完全合格的类名作为参数。如果你是创建一个全新的工程,这个类代表的与它同名的stub类和脚本文件。如果是在现有代码上创建工程,必须指定软件包中其中一个Activity类的名称。命令选项的脚本包括:

       --out <folder> 设定输出目录。默认情况下输出目录为当前目录。如果你想为工程文件创建一个新的目录,可以使用这个选项来指向它。

       --ide intellij, 在一个新的项目中生成IntelliJIDEA 工程文件。

       è¿™é‡Œæœ‰ä¸ªä¾‹å­ï¼š

       ~/android_linux_sdk/tools $ ./activityCreator.py --out myprojectyour.package.name.ActivityName

       package: your.package.name

       out_dir: myproject

       activity_name: ActivityName

       ~/android_linux_sdk/tools $

       activityCreator脚本生成以下文件和目录(但是不能重写已有文件):

       AndroidManifest.xml 程序的清单文件,同时为工程指定Activity类。

       build.xml 一个Ant文件,用来编译/打包应用程序。

       src/your/package/name/ActivityName.java 你指定的输入Activity类。

       your_activity.iml, your_activity.ipr, your_activity.iws [only with the-ide intelliJ flag] intelliJ工程文件

       res/ 资源目录.

       src/ 源代码目录.

       bin/ build脚本的输出目录.

       çŽ°åœ¨ä½ å¯ä»¥å°†å¼€å‘文件夹移到任何地方,但是记住,必须使用tool/文件夹下的adb程序将文件发送到模拟器上。因此你需要在你工作环境和tools/文件夹之间活动。

       å½“然你需要避免移动SDK目录,因为它将打断编译脚本。(再重新build之前需要手动更新SDK的映射路径)

       ç¼–译 android应用程序

       ä½¿ç”¨activityCreator生成的Ant文件build.xml来编译程序

       å¦‚果你没有,你可以通过Apache Ant home page得到Ant文件。安装它,并确定它在你的可执行文件路径下。

       å‘¼å«Ant之前,你需声明JAVA_HOME环境变量,并将它设置为JDK的安装路径。

       æ³¨ 意:在windows上,JDK默认的安装路径为"ProgramFiles",这个路径将会引起Ant失败,因为路径中间有空格。解决这个问题,你可以像这样指定环境变量 JAVA_HOME:JAVA_HOME=c:\Prora~1\Java\ 然而简单的解决方法是将JDK安装在没有空格的目录下。例如:c:\java\jdk1.6.0_. 

       å¦‚果你还没有这么准备好,按照上面创建一个新的工程的介绍建立一个工程。

       çŽ°åœ¨ä½ å¯ä»¥ä¸ºä½ çš„工程运行Ant编译文件,只需在build.xml同文件夹下输入ant即可。每次修改原文件或是资源,都需要重新运行ant,它将把最新版的应用程序打包以便deploy.

       è¿è¡ŒAndroid程序

       è¿è¡Œä¸€ä¸ªç¼–译好的程序,你需要用adb工具将.apk文件加载到模拟器的/data/app/目录下,用法如下面介绍。

       å¯åŠ¨æ¨¡æ‹Ÿå™¨ï¼ˆå‘½ä»¤è¡Œä¸‹è¿è¡Œsdk目录下的/tools/emulator)。

       æ¨¡æ‹Ÿå™¨åˆ‡æ¢åˆ°ä¸»ç”»é¢ï¼ˆæœ€å¥½ä¸è¦åœ¨ç¨‹åºè¿è¡Œçš„时候向模拟器安装程序,可以按home键离开应用程序)。

       è¿ 行adb,安装myproject/bin./<appname>.apk文件。例如,安装Lunar Lander 示例,命令行下,切换到SDK目录下的/sample/LunarLander子目录下,输入../../tools/adbinstall bin/LunarLander.apk

       åœ¨æ¨¡æ‹Ÿå™¨ä¸­ï¼Œæ‰“开可执行程序列表,卷动屏幕,选中并启动你的应用程序。

       æ³¨æ„ï¼šå½“你第一次安装一个Activity时,你可能需要在启动项显示之前,或者其它程序调用它之前重新启动模拟器。因为软件包管理工具通常只有在模拟器启动时才能完全的审查manifests。

       ä¸ºç¨‹åºé™„加调试器

       è¿™ä¸€èŠ‚我们介绍如何在屏幕上显示调试信息(例如CPU使用率),以及如何将IDE和模拟器上运行的程序关联起来。

       ä½¿ç”¨eclipse插件可以自动的生成调试器。但你也可以通过配置IDES来监听调试端口得到调试信息。

       å¯åŠ¨Dalvik Debug Monitor Server (DDMS) 工具 ,它在IDE和模拟器之间扮演着端口转换服务的角色。?

       è®¾ç½®æ¨¡æ‹Ÿå™¨è°ƒè¯•é…ç½®é€‰é¡¹ã€‚例如,等到调试信息被加载后才启动应用程序。注意,很多调试选项无需DDMS也可以使用,例如模拟器上显示CPU的使用效率,或者屏幕的刷新频率。

       é…ç½®IDE,使得调试时IDE与端口关联 .how to set up Eclipse to debug your project. 包含以下信息。

       é…ç½®IDE附加调试端口

       DDMS将为每一个虚拟机分配一个特殊的调试端口,这个端口在模拟器上可以找到。你必须将你的IDE与此端口(虚拟机上信息栏中有列出这些端口)关联或者是默认的端口。这样可以使IDE 连接到模拟器上程序列表中的任一个程序。

       ä½ çš„IDE需要能够关联模拟器上正在运行的程序,显示它的线程,并允许你挂起它,检查它的状态,设置断点。如果你在开发设置面板选择了“等待调试”,应用程序将等到Eclipse连接后才运行,所以你需要在连接之前设置断点。

       ä¿®æ”¹æ­£åœ¨è°ƒè¯•çš„程序,或者在当前程序运行时选择“等待调试”将引起系统杀死这个应用程序。如果你的程序处于一种坏的状态,你可以使用方式杀死它,方法很简单,只需要设置和钩掉复选框。