跟着肉师傅学习逆向已经来到了第二个月,这个月只要是Native开发相关的内容,分享下,记录下自己学会的姿势。这是一篇小小小白白白白白白文,希望各位爱看不看。
不同的 Android 设备使用不同的 CPU,而不同的 CPU 支持不同的指令集。CPU 与指令集的每种组合都有专属的应用二进制接口 (ABI)。
那么我们自己手上的设备支持什么ABI呢?
ABI官方文档
uname -a 或者 getprop ro.product.cpu.abi
AArch64是ARMv8 架构的一种执行状态。这说明我手机架构是arm64-v8a
查看Android API官方文档可知,SUPPORTED_ABIS包含了我们想要的信息
An ordered list of ABIs supported by this device. The most preferred ABI is the first element in the list.
此设备支持的abi的有序列表。最常用的ABI是列表中的第一个元素。
从官方文档中得知 我们想要的信息存在类Build的域中
可以看到该设备支持3类ABI,其中最常用的是arm64-v8a
我们已经知道了自己的手机的CPU架构、所能支持的ABI。那么如何让我们创建的Android项目编译出指定架构的.so文件呢?
从ABI官方文档中可以看到,可以通过以下方式,指定abi构建
我添加上所有的系统架构
将手机与studio断开,构建项目。
将生成的APP解包。在lib目录下发现了4个文件夹,每个文件夹下都有一个libnative-lib.so文件
查看arm64-v8a/libnative-lib.so
将该APP安装到设备上后,并进入到该APP目录下的lib文件夹下,发现有一个叫arm64的文件夹,里面有个libnative-lib.so的文件
那么问题来了,这个so文件会是原本项目中编译出来那4个中的那一呢?
通过MD5计算,发现该文件的结果等于源项目中arm64-v8a/libnative-lib.so文件。 这也正验证官方文档上面说的,最常用的是arm64-v8a
解包发现只生产了3种架构的so文件
将APP安装并查看设备上的so文件
发现,此so文件就是armeabi-v7a下面的so文件
将apk解包,依旧看到对应的生产的so文件
但是这个APP是安装不到我的手机上的
项目默认生成了所有类型的so
那么如果安装到设备生后,肯定是对应的arm64-v8a
首先感谢您能看到这里!
您要是问我看了这篇文章,您能干什么,其实,您不能多干些什么惊天地泣鬼神的事情。只是您可能会明白怎样让您开发的NDK项目去适配不同架构的设备。
MacBook
-
Pro
-
3
ॐ ~:
4329
◯ adb shell
walleye:
/
$ uname
-
a
Linux localhost
4.4
.
88
-
g3acf2d53921d
walleye:
/
$ adb shell getprop ro.product.cpu.abi
/
system
/
bin
/
sh: adb:
not
found
127
|walleye:
/
$ getprop ro.product.cpu.abi
arm64
-
v8a
walleye:
/
$
MacBook
-
Pro
-
3
ॐ ~:
4329
◯ adb shell
walleye:
/
$ uname
-
a
Linux localhost
4.4
.
88
-
g3acf2d53921d
walleye:
/
$ adb shell getprop ro.product.cpu.abi
/
system
/
bin
/
sh: adb:
not
found
127
|walleye:
/
$ getprop ro.product.cpu.abi
arm64
-
v8a
walleye:
/
$
Log.d(
"abi"
, Arrays.toString(Build.SUPPORTED_ABIS));
/
/
显示出支持的指令集类型
Log.d(
"abi"
, Arrays.toString(Build.SUPPORTED_ABIS));
/
/
显示出支持的指令集类型
┌──(rootkali)
-
[~]
└─
Using USB device `Google Pixel
2
`
Agent injected
and
responds ok!
_ _ _ _
___| |_|_|___ ___| |_|_|___ ___
| . | . | |
-
_| _| _| | . | |
|___|___| |___|___|_| |_|___|_|_|
|___|(
object
)inject(ion) v1.
8.4
Runtime Mobile Exploration
by: @leonjza
from
@sensepost
[tab]
for
command suggestions
com.example.myeasymd5 on (google:
8.1
.
0
) [usb]
Loaded plugin: wallbreaker
com.example.myeasymd5 on (google:
8.1
.
0
) [usb]
package android.os
class
Build {
/
*
static fields
*
/
static String BOARD;
=
> walleye
static String BOOTLOADER;
=
> mw8998
-
002.0069
.
00
static String BRAND;
=
> google
static String CPU_ABI;
=
> arm64
-
v8a
static String CPU_ABI2;
=
>
static String DEVICE;
=
> walleye
static String DISPLAY;
=
> OPM4.
171019.021
.Q1
static String FINGERPRINT;
=
> google
/
walleye
/
walleye:
8.1
.
0
/
OPM4.
171019.021
.Q1
/
4820346
:user
/
release
-
keys
static String HARDWARE;
=
> walleye
static String HOST;
=
> abfarm087
static String
ID
;
=
> OPM4.
171019.021
.Q1
.
.
.
static String[] SUPPORTED_32_BIT_ABIS;
=
> armeabi
-
v7a,armeabi
static String[] SUPPORTED_64_BIT_ABIS;
=
> arm64
-
v8a
static String[] SUPPORTED_ABIS;
=
> arm64
-
v8a,armeabi
-
v7a,armeabi
.
.
.
}
┌──(rootkali)
-
[~]
└─
Using USB device `Google Pixel
2
`
Agent injected
and
responds ok!
_ _ _ _
___| |_|_|___ ___| |_|_|___ ___
| . | . | |
-
_| _| _| | . | |
|___|___| |___|___|_| |_|___|_|_|
|___|(
object
)inject(ion) v1.
8.4
Runtime Mobile Exploration
by: @leonjza
from
@sensepost
[tab]
for
command suggestions
com.example.myeasymd5 on (google:
8.1
.
0
) [usb]
Loaded plugin: wallbreaker
com.example.myeasymd5 on (google:
8.1
.
0
) [usb]
package android.os
class
Build {
/
*
static fields
*
/
static String BOARD;
=
> walleye
static String BOOTLOADER;
=
> mw8998
-
002.0069
.
00
static String BRAND;
=
> google
static String CPU_ABI;
=
> arm64
-
v8a
static String CPU_ABI2;
=
>
static String DEVICE;
=
> walleye
static String DISPLAY;
=
> OPM4.
171019.021
.Q1
static String FINGERPRINT;
=
> google
/
walleye
/
walleye:
8.1
.
0
/
OPM4.
171019.021
.Q1
/
4820346
:user
/
release
-
keys
static String HARDWARE;
=
> walleye
static String HOST;
=
> abfarm087
static String
ID
;
=
> OPM4.
171019.021
.Q1
.
.
.
static String[] SUPPORTED_32_BIT_ABIS;
=
> armeabi
-
v7a,armeabi
static String[] SUPPORTED_64_BIT_ABIS;
=
> arm64
-
v8a
static String[] SUPPORTED_ABIS;
=
> arm64
-
v8a,armeabi
-
v7a,armeabi
.
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2021-4-27 11:03
被网虫Spider编辑
,原因: 修改图片,修改语句