安卓逆向十一

admin 2024年8月6日13:15:35评论6 views字数 2743阅读9分8秒阅读模式

安卓脱壳加固相关的暂时先过去了,最近在学习安卓NDK相关的东西

NDK是什么?NDK与.so关系?JNI是什么?直接具体看这篇文章

https://juejin.cn/post/6844903981383172110

如果更有时间可以看看这篇文章,可以了解到ABI相关的知识

https://www.imooc.com/article/72564

JNI用途?

  • Java程序中的函数调用Native程序中的函数。Native一般指使用C/C++编写的函数。

  • Native程序中的函数调用Java程序中的函数。

相关这份文档,里面详细说明了。JAVA|JNI|Native相关的说明

https://www.cnblogs.com/naray/p/15185558.html

创建第一个Native

在android studio中选中,直接选中“Native C++”,剩下一路默认

安卓逆向十一

然后进行开发,还是将原来的SDK进行修改到30,不然还是会报错。这里贴下我的配置文件

plugins {    id 'com.android.application'}android {    compileSdkVersion 30    buildToolsVersion '30.0.0'    defaultConfig {        applicationId "包名"        minSdkVersion 16        targetSdkVersion 30        versionCode 1        versionName "1.0"        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"        ndk {            abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"        }        externalNativeBuild {            cmake {                cppFlags ""            }        }    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'        }    }    externalNativeBuild {        cmake {            path "src/main/cpp/CMakeLists.txt"            version "3.10.2"        }    }    compileOptions {        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8    }}dependencies {    implementation 'androidx.appcompat:appcompat:1.3.0'    implementation 'com.google.android.material:material:1.4.0'    implementation 'androidx.annotation:annotation:1.1.0'    implementation 'androidx.constraintlayout:constraintlayout:2.1.0'//    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0'//    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'    testImplementation 'junit:junit:4.+'    androidTestImplementation 'androidx.test.ext:junit:1.1.3'    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.1'}

进去以后会发现主文件是一个Native函数

安卓逆向十一

切换到project进行查看StringFromJNI的函数构造

安卓逆向十一

对相关源码进行注释解析:// 指定使用C链接方式,防止C++编译器对函数名进行名称重整extern "C" JNIEXPORT jstring JNICALL// 定义一个JNI函数,Java_com_XXX_myapplication6_MainActivity_stringFromJNI// 这个函数名由包名、类名和方法名组合而成Java_com_XXX_myapplication6_MainActivity_stringFromJNI(// JNIEnv是JNI的接口指针,通过它可以访问JNI提供的所有功能JNIEnv* env,// jobject是调用这个本地方法的Java对象引用jobject /* this */) {// 定义一个C++标准字符串,并赋值为 "Hello from C++ by myself"std::string hello = "Hello from C++ by myself";// 使用JNIEnv指针的NewStringUTF方法将C++字符串转换为JNI的jstring类型并返回// hello.c_str() 返回一个C字符串(以null结尾的字符数组)的指针return env->NewStringUTF(hello.c_str());}

体验frida hook字符串

hook libart

刚才的文章已经介绍过libart.so相关的知识点了,开始使用一些工具进行Hook打印查看JNI的堆栈信息,在安卓机中frida-server启动。因为是hook的就是字符串就是在入口函数里面,所以直接只能是先hook这个,等待APP启动,查看内容。

这次我用的是python3.8.12,frida14.2.8,frida-server同理。

https://github.com/lasting-yang/frida_hook_libart

安卓逆向十一

如果想使用这个工具通过打印堆栈调用得到字符串信息,就可以详细看看这篇文章:

https://kevinspider.github.io/frida/frida-hook-so/

jnitrace,直接把字符串打印出来了。

安卓逆向十一

补充知识:

https://blog.csdn.net/freeking101/article/details/129645787

ps:如果想一块讨论渗透&代码审计&APP逆向可以添加下面的微信号相互交流

安卓逆向十一

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号不为此承担任何责任

欢迎关注公众号“呼啦啦安全”,原创技术文章第一时间推送

原文始发于微信公众号(呼啦啦安全):安卓逆向十一

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月6日13:15:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   安卓逆向十一https://cn-sec.com/archives/3038697.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息