发布网友 发布时间:2022-04-21 18:57
共2个回答
热心网友 时间:2022-05-16 15:38
学习 android 逆向分析过程中,需要学习 Arm 指令,不可避免要编写一些 test code 并分析其指令,这是这篇文档的背景。
在目前 android 提供的开发环境里,如果要编写 c / cpp code, 一般是通过 ndk 开发套件,基本方法就是在
windows 或 linux 发行版上下载 ndk 环境,然后编写 c / cpp code 然后编写 Android.mk 文件,最后用
ndk-build 等工具进行编译,编译出来的可执行文件再通过 adb push 的方式提交到 devices 或 emulator
运行,如果要分析其指令,需要下载 android 提供的 prebuilts binutils 工具集(如android 源码的
prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/arm-linux-androideabi/bin/
目录),如果你在linux上用file命令查看一下这些工具,会发现 :
root@ubuntu:bin# file objmp
objmp: ELF -bit LSB executable, x86-, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
它们是x86架构的,这样,你要分析devices或emulator里的elf文件,需要adb pull 下来,放在本地的linux环境或者windows里,用上述prebuilt工具分析。
稍微思考一下就会发现上述 ndk
的方式,对我们的需求来说有点太复杂了,我们真正希望的是像在标准linux发行版上那样,可以用vi/vim等编辑工具写 c/cpp
code,然后用 gcc /g++ 等编译工具编译,然后能直接运行或者用gdb调试,
或者用readelf/objmp等命令查看elf结果和汇编码。问题变成了:如何在android上实现这一切?
下面的方式是经过本人收集和实际测试证明可行的,我的环境是:
目标机:小米2手机, android4.4.4, miui 6.3.5
本地机: win7
效果:在本地机adb目标机的shell, 然后用vi写 c/cpp code, 直接在shell上用gcc编译,用objmp分析指令
实现步骤如下:
1. 首先安装 busybox apk . 这个app提供了后续需要的 busy vi, busy tar 等工具
2. 下载 adb putty , http://yunpan.cn/cZ5x9UrDFUDdK (提取码:e70e)
这个工具用来做终端,这里为什么不用win7自带的cmd或者其他增强版如 powerCmd 呢? 因为用 windows 的 cmd 终端,adb shell 连接上手机后,执行 busybox vi 等命令,会出现乱码,参考 http://www.hu.com/question/20624475 , 用这款 adb putty 终端则可以正常使用。
3. 下载 gcc arm, http://yunpan.cn/cZ5YVZzbvJqq4 (提取码:80b8)
这个包是我自己打的,其来源是一款app 叫 c4droid.apk 。将这个包 adb push 到目标机的 /data/local ,然后解压,你也可以解压到其他目录,之后要用这个目录来修改 android shell 的 PATH 环境变量。 参考 android终端下安装和使用gcc进行c语言编程 , 解压后如下:
为了方便使用,将上述可执行文件都改名,改名后就是 nm, gcc 这样的,这时候其实可以使用这些工具来编译了
4. 下载 binutils Arm, http://yunpan.cn/cZ5Y9t6WA48Q6 (提取码:7fea)
这个包也是我自己打的,参考 http://regnartstranger.blogspot.com/2014/12/binutils-on-android.html , 将这个包 adb push 到目标机的 /data/local 并解压,这个包里的 objmp 等可执行文件是静态链接的,所以比较大,但是好处是不依赖任何库文件
5. 修改目标机的配置,这一步需要使用 adb putty 和 busybox 了,用 adb putty 连接到目标机,先 mount
-o remount rw /system 把 /system 分区变成可写, 然后运行 busybox vi
/system/etc/mkshrc ,在文件底部增加:
PATH=$PATH:/data/local/gcc/bin:/data/local/gcc/arm-linux-androideabi/bin:/data/local/gcc/libexec/gcc/arm-linux-androideabi/4.8.2
PATH=$PATH:/data/local/sysroot/bin
6. 退出 adb putty 重新连上,让上述配置生效,然后就可以使用 gcc , objmp 等工具了。 最后 mount -o remount ro /system 将属性改回来
热心网友 时间:2022-05-16 15:38
赘述。Eclipse+ADTplugin+AndroidSDK下载地址:ApacheANT的下载及配置请参阅:检查本地mac是否已有JDK以及ANT打开终端输入Java-version与ant-version命令,如果如图1显示,则证明已有: