首页
社区
课程
招聘
[原创] NDK加载 LLVM Pass方案
发表于: 2023-5-23 21:29 12392

[原创] NDK加载 LLVM Pass方案

2023-5-23 21:29
12392

本文基于 ndk r25c (25.2.9519653)
仅测试 LinuxmacOS

点只因下载:332K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8q4)9J5k6h3N6G2L8$3N6D9k6g2)9J5k6h3y4G2L8g2)9J5c8X3q4F1k6s2u0G2K9h3c8Q4x3V1k6J5k6i4m8G2M7$3W2@1L8%4u0&6i4K6u0r3j5h3&6V1M7X3!0A6k6q4)9J5k6r3&6V1K9#2)9J5k6s2t1J5y4h3y4Q4x3X3c8D9K9h3&6#2P5q4)9J5k6i4A6A6M7l9`.`.

坑:archlinux 需要 sudo archlinux-java set java-8-openjdk

内容:

Untitled

然后去Google的 prebuilt clang仓库找到 r450784d1 相关的分支并打开:

573K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0W2k6$3!0G2k6$3I4W2M7$3!0#2M7X3y4W2i4K6u0W2j5$3!0E0i4K6u0r3M7r3I4S2N6r3k6G2M7X3#2Q4x3V1k6H3M7X3g2T1N6h3W2D9N6s2y4Q4x3V1k6U0L8r3q4F1k6#2)9J5c8X3S2G2M7%4c8Q4x3V1k6D9K9h3&6#2P5q4)9J5k6s2R3^5y4W2)9J5c8W2)9J5b7X3I4G2k6#2)9J5c8Y4u0W2k6Y4y4Q4x3V1k6Z5k6h3q4V1M7#2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8X3y4D9j5h3&6Y4i4K6u0V1M7U0b7#2x3o6M7^5y4r3b7`.

Untitled

点开最新的一个commit,进入

ba5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0W2k6$3!0G2k6$3I4W2M7$3!0#2M7X3y4W2i4K6u0W2j5$3!0E0i4K6u0r3M7r3I4S2N6r3k6G2M7X3#2Q4x3V1k6H3M7X3g2T1N6h3W2D9N6s2y4Q4x3V1k6U0L8r3q4F1k6#2)9J5c8X3S2G2M7%4c8Q4x3V1k6D9K9h3&6#2P5q4)9J5k6s2R3^5y4W2)9J5c8W2)9J5b7W2)9J5c8U0c8V1y4e0t1H3y4U0R3%4x3e0S2X3j5U0M7&6y4o6m8T1x3e0l9K6j5$3x3@1z5e0f1H3y4X3j5%4y4$3f1#2k6o6t1J5k6U0t1#2k6r3k6Q4x3V1k6U0L8r3q4F1k6#2)9J5k6s2t1@1y4e0l9%4z5o6c8V1x3g2)9J5c8R3`.`.

然后点击tgz下载这一份clang

Untitled

然后基于这一份clang直接编译llvm动态库插件就可以直接用ndk加载了

解压

这个时候cmake ..会报错

这个时候去注释掉clang/lib64/cmake/llvm/LLVMExports.cmake 下面这一段代码

Untitled

然后

Untitled

测试代码来自 4bdK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6T1L8s2g2W2M7$3q4V1K9g2)9J5c8W2m8D9N6i4c8G2i4K6u0V1e0$3u0X3N6i4y4U0j5i4c8G2M7W2)9J5c8Y4c8J5k6h3g2Q4x3V1k6E0j5h3W2F1i4K6u0r3N6r3g2K6N6q4)9J5c8X3q4W2M7H3`.`.

build.sh:

编译后:

Untitled

差不多鸟~

由于Google编译macOS工具链的系统版本太低,加载so的时候会报错

解决办法:

使用下载的clang替换掉ndk里面的clang

找不到头文件是macOS的问题,修改 build.sh

后重新编译,成功混淆

Untitled

1f9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2D9k6h3q4V1M7X3!0&6j5h3I4Q4x3X3g2U0L8W2)9J5c8Y4m8Q4x3V1j5I4x3o6l9^5i4K6u0r3

在我的博客中查看:
129K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6^5N6s2g2D9P5g2)9J5k6h3y4F1i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5c8X3&6V1K9#2)9J5k6r3I4G2j5h3c8Q4x3X3c8D9L8s2k6E0i4K6u0V1M7r3q4K6M7#2)9J5k6s2m8D9N6h3N6A6L8R3`.`.

$ANDROID_HOME/tools/bin/sdkmanager --install "ndk;25.2.9519653"
$ANDROID_HOME/tools/bin/sdkmanager --install "ndk;25.2.9519653"
cat $ANDROID_HOME/ndk/25.2.9519653/toolchains/llvm/prebuilt/linux-x86_64/AndroidVersion.txt
cat $ANDROID_HOME/ndk/25.2.9519653/toolchains/llvm/prebuilt/linux-x86_64/AndroidVersion.txt
14.0.7
based on r450784d1
for additional information on LLVM revision and cherry-picks, see clang_source_info.md
14.0.7
based on r450784d1
for additional information on LLVM revision and cherry-picks, see clang_source_info.md
 
 
 
 
 
 
 
 
 
mkdir clang
tar xzvf clang-r450784d1.tar.gz -C clang
mkdir clang
tar xzvf clang-r450784d1.tar.gz -C clang
git clone https://github.com/LeadroyaL/llvm-pass-tutorial
git clone https://github.com/LeadroyaL/llvm-pass-tutorial
set(CMAKE_C_COMPILER /home/ylarod/ndk-r25c/clang/bin/clang)
set(CMAKE_CXX_COMPILER /home/ylarod/ndk-r25c/clang/bin/clang)
set(ENV{LLVM_HOME} /home/ylarod/ndk-r25c/clang)
set(CMAKE_C_COMPILER /home/ylarod/ndk-r25c/clang/bin/clang)
set(CMAKE_CXX_COMPILER /home/ylarod/ndk-r25c/clang/bin/clang)
set(ENV{LLVM_HOME} /home/ylarod/ndk-r25c/clang)
CMake Error at /home/ylarod/ndk-r25c/clang/lib64/cmake/llvm/LLVMExports.cmake:1036 (message):
  The imported target "LLVMDemangle" references the file
 
     "/home/ylarod/ndk-r25c/clang/lib64/libLLVMDemangle.a"
 
  but this file does not exist.  Possible reasons include:
 
  * The file was deleted, renamed, or moved to another location.
 
  * An install or uninstall procedure did not complete successfully.
 
  * The installation package was faulty and contained
 
     "/home/ylarod/ndk-r25c/clang/lib64/cmake/llvm/LLVMExports.cmake"
 
  but not all the files it references.
 
Call Stack (most recent call first):
  /home/ylarod/ndk-r25c/clang/lib64/cmake/llvm/LLVMConfig.cmake:251 (include)
  CMakeLists.txt:14 (find_package)
CMake Error at /home/ylarod/ndk-r25c/clang/lib64/cmake/llvm/LLVMExports.cmake:1036 (message):
  The imported target "LLVMDemangle" references the file
 
     "/home/ylarod/ndk-r25c/clang/lib64/libLLVMDemangle.a"
 
  but this file does not exist.  Possible reasons include:
 
  * The file was deleted, renamed, or moved to another location.
 
  * An install or uninstall procedure did not complete successfully.
 
  * The installation package was faulty and contained
 
     "/home/ylarod/ndk-r25c/clang/lib64/cmake/llvm/LLVMExports.cmake"
 
  but not all the files it references.
 
Call Stack (most recent call first):

[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

最后于 2023-5-23 21:29 被Ylarod编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (9)
雪    币: 5308
活跃值: (5544)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
大佬 666
2023-5-24 09:41
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
windows不支持, 其他系统简单
2023-5-24 10:34
0
雪    币: 2486
活跃值: (3276)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
mb_foyotena windows不支持, 其他系统简单
实在要用Windows的话可以WSL用linux版本的NDK
2023-5-24 11:16
0
雪    币: 4599
活跃值: (4080)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
666
2023-5-24 11:16
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
请问大佬 能不能用来作为rust编译器
2023-10-2 11:53
0
雪    币: 21
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
这个混淆强度怎么样
2023-11-1 15:50
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
Rust的字符串是字符的结构体不是C字符串。不能混淆字符串 需要另外修改Pass实现的代码. 大佬有兴趣研究下不哇 
2024-3-19 20:48
0
雪    币: 1867
活跃值: (4098)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
看起来安全sdk开始衍化为rust语言实现了
2024-3-20 09:01
0
雪    币: 4044
活跃值: (31156)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
感谢分享
2024-3-20 09:22
1
游客
登录 | 注册 方可回帖
返回