NativeCode中通过JNI反射调用Java层的代码,以获取IMEI为例
简单说,就是在NativeCode中做一些正常情况下可以在Java code中做的事儿,比如获取IMEI。
这种做法会使得静态分析Java层代码的方法失效。
JNIEXPORT jstring JNICALL Java_com_xxx_yyy_MainActivity_GetIMEI
(JNIEnv* env, jobject mContext){ if(mContext == 0){
return env->NewStringUTF("[+] Error: Context is 0");
}
jclass cls_context = env->FindClass("android/content/Context");
if(cls_context == 0){
return env->NewStringUTF("[+] Error: FindClass <android/content/Context> Error");
} jmethodID getSystemService = (env)->GetMethodID(cls_context, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;");
if(getSystemService == 0){
return env->NewStringUTF("[+] Error: GetMethodID failed");
} jfieldID TELEPHONY_SERVICE = (env)->GetStaticFieldID(cls_context, "TELEPHONY_SERVICE", "Ljava/lang/String;");
if(TELEPHONY_SERVICE == 0){
return env->NewStringUTF("[+] Error: GetStaticFieldID Failed");
} jstring str = (jstring)(env)->GetStaticObjectField(cls_context, TELEPHONY_SERVICE);
jobject telephonymanager = ((env)->CallObjectMethod(mContext, getSystemService, str));
if(telephonymanager == 0){
return env->NewStringUTF("[+] Error: CallObjectMethod failed");
} jclass cls_TelephoneManager = (env)->FindClass( "android/telephony/TelephonyManager");
if(cls_TelephoneManager == 0){
return env->NewStringUTF("[+] Error: FindClass TelephoneManager failed");
} jmethodID getDeviceId = ((env)->GetMethodID(cls_TelephoneManager, "getDeviceId", "()Ljava/lang/String;"));
if(getDeviceId == 0){
return env->NewStringUTF("[+] Error: GetMethodID getDeviceID failed");
} jobject DeviceID = (env)->CallObjectMethod(telephonymanager,
getDeviceId); //char DP_IMIE[128]={0}; //DP_IMIE = (env)->GetStringUTFChars( DeviceID, 0);
return (jstring)DeviceID;
参考:
http://www.cnblogs.com/luxiaofeng54/archive/2011/03/01/1968063.html
http://www.cnblogs.com/273809717/archive/2013/02/21/2921058.html
NativeCode中通过JNI反射调用Java层的代码,以获取IMEI为例的更多相关文章
- cocos2d-x中使用JNI的调用JAVA方法
用cocos2d-x公布Android项目时.都应该知道要用JAVA与C/C++进行交互时会涉及到JNI的操作(Java Native Interface).JNI是JAVA的一个通用接口.旨在本地化 ...
- cocos2d 中使用jni C++ 调用 Java 方法
1.简单数据类型样例 如果我们Java中有这么一个open的静态方法,它没有參数,有一个int的返回值.怎么在C++中调用它呢? package cb.CbCCBLE; public class Cb ...
- JNI C反射调用java方法
前面记录了调用C的学习笔记,现在来记录一下C反射调用Java的笔记.JNI开发学习之调用C方法 Android开发中调用一个类中没有公开的方法,可以进行反射调用,而JNI开发中C调用java的方法也是 ...
- C通过JNI反向调用JAVA程序方法
JNI反向调用JAVA程序 引述:上文讲过java线程---OS线程的关系,然后C怎样反向调用JAVA程序方法是我们这篇讲的重点 1.ThreadTest中添加run()方法 2.编译ThreadTe ...
- Jsp中如何通过Jsp调用Java类中的方法
Jsp中如何通过Jsp调用Java类中的方法 1.新建一个项目,在src文件夹下添加一个包:如:cn.tianaoweb.com; 2.再在包中添加一个类:如 package com; public ...
- Cocos2d-x3.3RC0通过JNI调用Android的Java层URI代码发送短信
1.Jni不在赘述.翻看前面博客 2.直接上代码 1)Java层,直接加在AppActivity.java中 public class AppActivity extends Cocos2dxActi ...
- [Android Webkit]JNI基础及Java层与C++层的交互
1. JNI 注册 1.1. JNI的基础结构 JAVA == JNI == Native Code JNI(Java Native Interface)是Java与Native ...
- Android NDK开发之C调用Java及原生代码断点调试(二)
上一篇中,我们主要学习了Java调用本地方法,并列举了两大特殊实例来例证我们的论据,还没学习的伙伴必须先去阅读下,本次的学习是直接在上一篇的基础上进行了.点击:Android NDK开发之从Java与 ...
- 反射调用 java bean的set和get方法
一.使用java.beans.PropertyDescriptor import java.beans.IntrospectionException; import java.beans.Proper ...
随机推荐
- Springboot+Redis序列化坑
今天在测试springboot整合redis的时候遇到下面这个坑,百度来百度去发现提示都是ajax的问题,真的是醉了,错误提示如下所示,不信大家可以直接复制百度一下答案是什么(流泪中....),错误如 ...
- HDU 3389 Game (阶梯博弈)
Game Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Status D ...
- 杭电oj2072
因为一直不能ac先发这里,希望有看到的大佬能指点一二. 先讲一下我的基本思路,首先将一整行数据保存在数组中,接着遍历数组,根据空格将每个单词存入二维数组中,最后遍历二维数组,找出其中不同的单词并计数. ...
- 第2章 掌握C++
参考: https://blog.csdn.net/u014162133/article/details/46573873 1.C++主要特点: 封装性(Encapsulation):把数据与操作数据 ...
- (二十三)深入了解epoll (转)
一. 介绍Epoll 是一种高效的管理socket的模型,相对于select和poll来说具有更高的效率和易用性.传统的select以及poll的效率会因为 socket数量的线形递增而导致呈二次乃至 ...
- 7.0不通过FileProvider解决调用相机给uri问题异常
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//严格模式 StrictMode.VmPolicy.Builder builder = ...
- Xdebug安装对应版本与配置
Xdebug安装地址https://xdebug.org/download.php,进入下载页面后点击custom installation instructions,可以找到适合的Xdebug版本. ...
- python cProfile分析程序性能
转自:http://xianglong.me/article/analysis-python-application-performance-using-cProfile/?utm_source=tu ...
- hdu 5138(水题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5138 反着来. #include<iostream> #include<cstdi ...
- Codeforces 897 A.Scarborough Fair-字符替换
A. Scarborough Fair time limit per test 2 seconds memory limit per test 256 megabytes input stan ...