Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
71df366
Frida 反汇编
CYRUS-STUDIO Feb 1, 2025
b279cfd
Merge branch 'main' of https://github.com/CYRUS-STUDIO/AndroidExample
CYRUS-STUDIO Feb 2, 2025
0f20cae
Unicorn 示例
CYRUS-STUDIO Feb 4, 2025
d2a035b
Update README.md
CYRUS-STUDIO Feb 8, 2025
33443d6
Update README.md
CYRUS-STUDIO Feb 8, 2025
7628b69
Unicorn Test
CYRUS-STUDIO Feb 25, 2025
cf15a16
unidbg 加载 so 并调用 so 中函数
CYRUS-STUDIO Feb 26, 2025
3687291
unidbg 加载 so 并调用 so 中函数
CYRUS-STUDIO Feb 27, 2025
01d607b
unidbg 模拟与 java 交互
CYRUS-STUDIO Feb 28, 2025
94fbf8e
Merge branch 'main' of https://github.com/CYRUS-STUDIO/AndroidExample
CYRUS-STUDIO Feb 28, 2025
6330c16
Update README.md
CYRUS-STUDIO Mar 3, 2025
7a55b89
标准 Base64 编码和解码实现(Java 和 C++)
CYRUS-STUDIO Mar 8, 2025
3b249a5
Merge branch 'main' of https://github.com/CYRUS-STUDIO/AndroidExample
CYRUS-STUDIO Mar 8, 2025
dc081ca
自定义 Base64 码表
CYRUS-STUDIO Mar 9, 2025
ca71d65
Base64 动态码表编码解码实现
CYRUS-STUDIO Mar 9, 2025
5aabd86
生成不同长度的随机字符串
CYRUS-STUDIO Mar 9, 2025
c1d8399
密钥信息 & 打包release包
CYRUS-STUDIO Mar 9, 2025
db0e619
安卓实现魔改版 Base64 算法
CYRUS-STUDIO Mar 12, 2025
6819728
Update README.md
CYRUS-STUDIO Mar 12, 2025
616e430
Update README.md
CYRUS-STUDIO Mar 13, 2025
b309b53
安卓实现魔改版 CRC32 算法
CYRUS-STUDIO Mar 13, 2025
3874241
Merge branch 'main' of https://github.com/CYRUS-STUDIO/AndroidExample
CYRUS-STUDIO Mar 13, 2025
f75dcb1
Update README.md
CYRUS-STUDIO Mar 13, 2025
fb49f6a
Update README.md
CYRUS-STUDIO Mar 13, 2025
dd95475
Android 自定义变形 MD5 算法
CYRUS-STUDIO Mar 21, 2025
7e93df1
OLLVM MD5
CYRUS-STUDIO Mar 21, 2025
ad32c9e
Update README.md
CYRUS-STUDIO Mar 22, 2025
1248c65
Android 自定义变形 SHA1 算法
CYRUS-STUDIO Mar 24, 2025
cfb09a0
Merge branch 'main' of https://github.com/CYRUS-STUDIO/AndroidExample
CYRUS-STUDIO Mar 24, 2025
ebbc484
Update README.md
CYRUS-STUDIO Mar 24, 2025
a541112
启用 C/C++ 字符串加密功能
CYRUS-STUDIO Mar 25, 2025
b763236
Update README.md
CYRUS-STUDIO Mar 25, 2025
805564d
sha256 算法 C++ 实现
CYRUS-STUDIO Mar 26, 2025
56bf073
HMAC MD5 和 HMAC SHA256 实现
CYRUS-STUDIO Mar 26, 2025
5f66369
Merge branch 'main' of https://github.com/CYRUS-STUDIO/AndroidExample
CYRUS-STUDIO Mar 26, 2025
6df8652
Update README.md
CYRUS-STUDIO Mar 26, 2025
636560c
控制流平坦化(fla)
CYRUS-STUDIO Mar 26, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@
.externalNativeBuild
.cxx
local.properties
app/release
6 changes: 6 additions & 0 deletions .idea/AndroidProjectSystem.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/runConfigurations.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 22 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,31 @@
# AndroidExample

目前主要包含以下内容:
- [反调试检测](https://cyrus-studio.github.io/blog/posts/android%E4%B8%8B%E5%8F%8D%E8%B0%83%E8%AF%95%E4%B8%8E%E5%8F%8D%E5%8F%8D%E8%B0%83%E8%AF%95/)
- JNI调用示例
- [Android下反调试与反反调试](https://cyrus-studio.github.io/blog/posts/android%E4%B8%8B%E5%8F%8D%E8%B0%83%E8%AF%95%E4%B8%8E%E5%8F%8D%E5%8F%8D%E8%B0%83%E8%AF%95/)
- [Android 下通过触发 SIGTRAP 信号实现反调试](https://cyrus-studio.github.io/blog/posts/android-%E4%B8%8B%E9%80%9A%E8%BF%87%E8%A7%A6%E5%8F%91-sigtrap-%E4%BF%A1%E5%8F%B7%E5%AE%9E%E7%8E%B0%E5%8F%8D%E8%B0%83%E8%AF%95/)
- [Android 下内联汇编,Android Studio 汇编开发](https://cyrus-studio.github.io/blog/posts/android-%E4%B8%8B%E5%86%85%E8%81%94%E6%B1%87%E7%BC%96android-studio-%E6%B1%87%E7%BC%96%E5%BC%80%E5%8F%91/)
- [Android下的系统调用 (syscall),内联汇编syscall](https://cyrus-studio.github.io/blog/posts/android%E4%B8%8B%E7%9A%84%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8-syscall%E5%86%85%E8%81%94%E6%B1%87%E7%BC%96syscall/)
- [移植 OLLVM 到 Android NDK,Android Studio 中使用 OLLVM](https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-android-ndkandroid-studio-%E4%B8%AD%E4%BD%BF%E7%94%A8-ollvm/)
- [OLLVM 增加 C&C++ 字符串加密功能](https://cyrus-studio.github.io/blog/posts/ollvm-%E5%A2%9E%E5%8A%A0-cc++-%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8A%A0%E5%AF%86%E5%8A%9F%E8%83%BD/)
- [详解如何自定义 Android Dex VMP 保护壳](https://cyrus-studio.github.io/blog/posts/%E8%AF%A6%E8%A7%A3%E5%A6%82%E4%BD%95%E8%87%AA%E5%AE%9A%E4%B9%89-android-dex-vmp-%E4%BF%9D%E6%8A%A4%E5%A3%B3/)
- [Android Dex VMP 动态加载加密指令流](https://cyrus-studio.github.io/blog/posts/android-dex-vmp-%E5%8A%A8%E6%80%81%E5%8A%A0%E8%BD%BD%E5%8A%A0%E5%AF%86%E6%8C%87%E4%BB%A4%E6%B5%81-/)
- [Frida 实现 JNI 方法地址跟踪、反汇编、Patch](https://cyrus-studio.github.io/blog/posts/frida-%E5%AE%9E%E7%8E%B0-jni-%E6%96%B9%E6%B3%95%E5%9C%B0%E5%9D%80%E8%B7%9F%E8%B8%AA%E5%8F%8D%E6%B1%87%E7%BC%96patch/)
- [unidbg 加载 so 并调用 so 中函数](https://cyrus-studio.github.io/blog/posts/unidbg-%E5%8A%A0%E8%BD%BD-so-%E5%B9%B6%E8%B0%83%E7%94%A8-so-%E4%B8%AD%E5%87%BD%E6%95%B0/)
- [unidbg 实现 JNI 与 Java 交互](https://cyrus-studio.github.io/blog/posts/unidbg-%E5%AE%9E%E7%8E%B0-jni-%E4%B8%8E-java-%E4%BA%A4%E4%BA%92/)
- [安卓实现魔改版 Base64 算法](https://cyrus-studio.github.io/blog/posts/%E5%AE%89%E5%8D%93%E5%AE%9E%E7%8E%B0%E9%AD%94%E6%94%B9%E7%89%88-base64-%E7%AE%97%E6%B3%95/)
- [安卓逆向魔改版 Base64 算法还原](https://cyrus-studio.github.io/blog/posts/%E5%AE%89%E5%8D%93%E9%80%86%E5%90%91%E9%AD%94%E6%94%B9%E7%89%88-base64-%E7%AE%97%E6%B3%95%E8%BF%98%E5%8E%9F/)
- [安卓实现魔改版 CRC32 算法](https://cyrus-studio.github.io/blog/posts/%E5%AE%89%E5%8D%93%E5%AE%9E%E7%8E%B0%E9%AD%94%E6%94%B9%E7%89%88-crc32-%E7%AE%97%E6%B3%95/)
- [Android 自定义变形 MD5 算法](https://cyrus-studio.github.io/blog/posts/android-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8F%98%E5%BD%A2-md5-%E7%AE%97%E6%B3%95/)
- [Android 自定义变形 SHA1 算法](https://cyrus-studio.github.io/blog/posts/android-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8F%98%E5%BD%A2-sha1-%E7%AE%97%E6%B3%95/)
- [Android 自定义变形 HMAC 算法](https://cyrus-studio.github.io/blog/posts/android-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8F%98%E5%BD%A2-hmac-%E7%AE%97%E6%B3%95/)


# [cyrus.jks](cyrus.jks)

密钥 [cyrus.jks](cyrus.jks) 密码 cyrus_studio

# 公众号

公众号:CYRUS STUDIO

<img src="https://cyrus-studio.github.io/blog/gongzhonghao.jpg" width="240">
10 changes: 5 additions & 5 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ android {
}

ndk {
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
// abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
// abiFilters += "armeabi-v7a"
// abiFilters += "arm64-v8a"
abiFilters += "arm64-v8a"
}
}

Expand All @@ -47,11 +47,11 @@ android {
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "1.8"
jvmTarget = "11"
}
buildFeatures {
compose = true
Expand Down
24 changes: 24 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,30 @@
android:theme="@style/Theme.AndroidExample"
tools:ignore="HardcodedDebugMode"
tools:targetApi="31">
<activity
android:name=".hmac.HMACActivity"
android:exported="false" />
<activity
android:name=".sha1.SHA1Activity"
android:exported="false" />
<activity
android:name=".md5.MD5Activity"
android:exported="false" />
<activity
android:name=".crc32.CRC32Activity"
android:exported="false" />
<activity
android:name=".base64.Base64Activity"
android:exported="false" />
<activity
android:name=".unidbg.UnidbgActivity"
android:exported="false" />
<activity
android:name=".unicorn.UnicornActivity"
android:exported="false" />
<activity
android:name=".frida.disassemble.FridaDisassembleActivity"
android:exported="false" />
<activity
android:name=".vmp.VMPActivity"
android:exported="false" />
Expand Down
156 changes: 154 additions & 2 deletions app/src/main/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ find_library( # Sets the name of the path variable.
# Specifies the NDK library that you want CMake to locate.
log)

# 全局启用指令替换
add_definitions("-mllvm -sub")
# 全局启用指令替换、字符串加密
add_definitions("-mllvm -sub -mllvm -sobf")

## JNI示例 ##########################################################################################

Expand Down Expand Up @@ -142,3 +142,155 @@ add_library( # 设置库的名称
target_link_libraries( # 将 log 库链接到目标库
vmp-lib
${log-lib})

## Frida 反汇编 ##########################################################################################

add_library( # 设置库的名称
frida_disassemble

# 设置库的类型
SHARED

# 设置源文件路径
frida_disassemble.cpp)

target_link_libraries( # 将 log 库链接到目标库
frida_disassemble
${log-lib})


## Unicorn ##########################################################################################

add_library( # 设置库的名称
unicorn

# 设置库的类型
SHARED

# 设置源文件路径
unicorn.cpp)

target_link_libraries( # 将 log 库链接到目标库
unicorn
${log-lib})

## Unidbg ##########################################################################################

add_library( # 设置库的名称
unidbg

# 设置库的类型
SHARED

# 设置源文件路径
unidbg.cpp)

target_link_libraries( # 将 log 库链接到目标库
unidbg
${log-lib})

## Base64 ##########################################################################################

add_library( # 设置库的名称
base64

# 设置库的类型
SHARED

# 设置源文件路径
base64.cpp
custom_base64_alphabet.cpp
dynamic_base64_alphabet.cpp)

target_link_libraries( # 将 log 库链接到目标库
base64
${log-lib})


## CRC32 ##########################################################################################

add_library( # 设置库的名称
crc32

# 设置库的类型
SHARED

# 设置源文件路径
crc32.cpp
custom_crc32_table.cpp
modified_crc32.cpp)

target_link_libraries( # 将 log 库链接到目标库
crc32
${log-lib})

## MD5 ##########################################################################################

add_library( # 设置库的名称
md5

# 设置库的类型
SHARED

# 设置源文件路径
md5.cpp
md5_change_constant.cpp)

target_link_libraries( # 将 log 库链接到目标库
md5
${log-lib})

## SHA1 ##########################################################################################

add_library( # 设置库的名称
sha1

# 设置库的类型
SHARED

# 设置源文件路径
sha1.cpp
sha1_jni.cpp
sha1_change_constant.cpp)

target_link_libraries( # 将 log 库链接到目标库
sha1
${log-lib})

## SHA256 ##########################################################################################

add_library( # 设置库的名称
sha256

# 设置库的类型
SHARED

# 设置源文件路径
sha256.cpp)

target_link_libraries( # 将 log 库链接到目标库
sha256
${log-lib})


## HMAC ##########################################################################################

add_library( # 设置库的名称
hmac

# 设置库的类型
SHARED

# 设置源文件路径
hmac_md5.cpp
hmac_sha256.cpp
)

target_link_libraries(
hmac
# 链接 log 库
${log-lib}
# 链接 md5 库
md5
# 链接 sha256 库
sha256)
5 changes: 4 additions & 1 deletion app/src/main/cpp/assembly-lib.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@ Java_com_cyrus_example_assembly_AssemblyActivity_encryptString(JNIEnv *env, jobj
for (jsize i = 0; i < length; i++) {
jchar c = inputChars[i];

#if defined(__arm__)
// 使用内联汇编对每个 Unicode 字符的值加 3,实现加密
asm volatile (
"add %0, %1, #3\n" // 每个字符的 Unicode 值加 3
: "=r"(c) // 输出到 c
: "r"(c) // 输入 c
);
#endif
encryptedChars[i] = c;
}

Expand Down Expand Up @@ -56,13 +58,14 @@ Java_com_cyrus_example_assembly_AssemblyActivity_decryptString(JNIEnv *env, jobj
jchar *decryptedChars = new jchar[length];
for (jsize i = 0; i < length; i++) {
jchar c = inputChars[i];

#if defined(__arm__)
// 使用内联汇编对每个 Unicode 字符的值减 3,实现解密
asm volatile (
"sub %0, %1, #3\n" // 每个字符的 Unicode 值减 3
: "=r"(c) // 输出到 c
: "r"(c) // 输入 c
);
#endif
decryptedChars[i] = c;
}

Expand Down
Loading