android 防内存注入,android如何防止注入呢?

本文介绍了如何防止Android应用程序被注入,重点讲述了通过检测并卸载第三方SO库来防止注入的方法。通过分析进程的映射文件,找出非应用本身的SO库,并使用JNI调用dlopen卸载它们,以降低被注入的风险。此方法涉及到Android的安全防护和程序调试技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博客前面写有注入方法,学会注入的朋友可能就想保护好自己的程序不被其它程序注入、修改。在此,说说android如何防止注入。要防注入,肯定是要先防ptrace,注入是通过它完成的,如果把它干掉的话那么就不存在注入啦。那么总结有以下三种方法1.ptrace附加失败。

2.修改linker中的dlopen函数,防止第三方so加载。

3.定时检测应用加载的第三方so库,如果发现是被注入的so,卸载加载的so。这里主要分析第三种情况。

java关键函数如下://该函数搜索进程PID被注入的第三方so。

public static HashSetgetSoList(int pid, String pkg)

{

HashSettemp = new HashSet();

File file = new File("/proc/" + pid + "/maps");

if (!file.exists())

{

return temp;

}

try

{

BufferedReader bufferedReader = new BufferedReader(

new InputStreamReader(new FileInputStream(file)));

String lineString = null;

while ((lineString = bufferedReader.readLine()) != null)

{

String tempString = lineString.trim();

if (tempString.contains("/data/data")

&& !tempString.contains("/data/data/" + pkg))

{

int index = tempString.indexOf("/data/data");

temp.add(tempString.substring(index));

}

}

bufferedReader.close();

}

catch (FileNotFoundException e)

{

//TODO Auto-generated catch block

e.printStackTrace();

}

catch (IOException e)

{

//TODO Auto-generated catch block

e.printStackTrace();

}

return temp;

}

//卸载加载的so库

public static native void uninstall(String soPath);jni实现关键代码如下://该方法主要根据so路径,调用dlopen卸载加载的so,需要调用多次,分析linker的dlclose可知,只有so的引用计数为0时,才会完全卸载。

static void com_hook_util_UninstallSo_uninstall(JNIEnv *env, jclass,

jstring path)

{

const char* chars = env->GetStringUTFChars(env, path);

void* handle = dlopen(chars, RTLD_NOW);

int count = 4;

int i = 0;

for (i = 0; i < count; i++)

{

if (NULL != handle)

{

dlclose(handle);

}

}

}本文参考神乎博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值