热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android入口函数,关于so注入不能读取到入口函数地址的问题

之前在so注入的时候,能够得到入口函数的地址,使用的代码时Qever大牛的,后来在测试了代码的时候,出现了如下的问题

之前在so注入的时候,能够得到入口函数的地址,使用的代码时Qever大牛的,后来在测试了代码的时候,出现了如下的问题:

root@android:/data/local/tmp # ll

-rwxrwxrwx root     root       506668 2016-03-18 03:01 aapt

-rwxrwxrwx root     root        13716 2016-03-18 03:01 box

-rwxrwxrwx root     root        13572 2017-02-15 05:37 inject

-rwxrwxrwx root     root        13452 2017-02-15 05:37 libqever.so

-rwxrwxrwx root     root         8708 2016-03-18 03:01 mtools

root@android:/data/local/tmp # chmod 777 inject

root@android:/data/local/tmp # ./inject

Usage:

./inject [lib] [entry] [target]

lib        the lib(*.so) to be injected

default is "/data/local/tmp/libqever.so"

entry    the entry of lib

default is "entry"

target    the target process to be injected, pid or name

default is "com.crackme"

root@android:/data/local/tmp # ./inject  com.crackme

[E]Can't find the process com.crackme

255|root@android:/data/local/tmp # ./inject  com.crackme

library path = com.crackme

以上是启动注入模块。在启动之前,我先启动了apk,之后调用了./inject 但是得到了如下的提示

130|root@android:/ # logcat  |grep "INJECT"

D/INJECT  (  940): [+] Injecting process: 922

D/INJECT  (  940): [+] get_remote_addr: local[40020000], remote[40020000]

D/INJECT  (  940): [+] Remote mmap address: 4003bf43

D/INJECT  (  940): [+] Calling mmap in target process.

D/INJECT  (  940): [+] Target process returned from mmap, return value=5230c000, pc=0

D/INJECT  (  940): [+] get_remote_addr: local[40000000], remote[40000000]

D/INJECT  (  940): [+] get_remote_addr: local[40000000], remote[40000000]

D/INJECT  (  940): [+] get_remote_addr: local[40000000], remote[40000000]

D/INJECT  (  940): [+] get_remote_addr: local[40000000], remote[40000000]

D/INJECT  (  940): [+] Get imports: dlopen: 400050ad, dlsym: 40005019, dlclose: 40004f59, dlerror: 40004f49

D/INJECT  (  940): [+] Calling dlopen in target process.

D/INJECT  (  940): [+] Target process returned from dlopen, return value=0, pc=0

D/INJECT  (  940): [+] Calling dlsym in target process.

D/INJECT  (  940): [+] Target process returned from dlsym, return value=0, pc=0

D/INJECT  (  940): hook_entry_addr = 0x0

D/INJECT  (  940): [+] Calling hook_entry in target process.

D/INJECT  (  940): [+] Target process returned from hook_entry, return value=5230c200, pc=0

D/INJECT  (  940): [+] Calling dlclose in target process.

D/INJECT  (  940): [+] Target process returned from dlclose, return value=0, pc=0

这里的hook_entry_addr =0x0,也就是说,虽然注入了,但是没拿到对应的入口函数,注入程序如下:

#define DEFAULT_LIBS "/data/local/tmp/libqever.so"

#define DEFAULT_ENTRY "entry" 这里是加载的libqever.so中的入口函数名称,

#define DEFAULT_TARGET "com.crackme"

void Usage(char * prog)

{

printf("Usage:\n");

printf("    %s [lib] [entry] [target]\n", prog);

printf("        lib        the lib(*.so) to be injected\n");

printf("                default is \"%s\"\n", DEFAULT_LIBS);

printf("        entry    the entry of lib\n");

printf("                default is \"%s\"\n", DEFAULT_ENTRY);

printf("        target    the target process to be injected, pid or name\n");

printf("                default is \"%s\"\n", DEFAULT_TARGET);

}

int main(int argc, char** argv) {

char * libs = DEFAULT_LIBS;

char * entry = DEFAULT_ENTRY;

char * target = DEFAULT_TARGET;

pid_t target_pid = 0;

switch(argc){

case 1:

Usage(argv[0]);

return 0;

case 4:

target_pid = atoi(argv[3]);

if(target_pid == 0){

target = argv[3];

}

case 3:

entry = argv[2];

case 2:

libs = argv[1];

}

if(target_pid == 0){

target_pid = find_pid_of(target);

}

if (-1 == target_pid) {

printf("[E]Can't find the process %s\n", target);

return -1;

}

//这里是主要注入的方法

inject_remote_process(target_pid, libs, entry,  "I'm parameter!", strlen("I'm parameter!"));

return 0;

}

试了好几次,还是不能拿到入口函数的地址,希望得到指点一下,谢谢~



推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
author-avatar
ShenTing止想念
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有