首页
社区
课程
招聘
[已解决] 仿造linker加载so后无法捕获异常 80.00雪花
发表于: 2023-5-24 09:52 10288

[已解决] 仿造linker加载so后无法捕获异常 80.00雪花

2023-5-24 09:52
10288

仿造linker加载了android so,在init函数里做了重定向,soinfo的替换等操作,加载器可以调用被加载so的jni函数,但是如果有异常的话,无法捕获会导致崩溃,还有哪里需要处理呢?

详情:

替换了soinfo后只能使用被加载so的方法,在被加载的so导出了匹配loader包名的StringFromJni函数,不做其他操作,返回一个jstring字符串是可以正常运行的,屏幕显示的也是被加载so中返回的字符串。但是有两个问题。

问题一:

在这个函数里抛异常是接不住的会导致崩溃,被加载so单独运行只会打印一下"error eeeeee"这条信息,这个问题不知道怎么解决

extern "C" void test2(){
    try {
        throw " error eeeee";
    }catch (const char* msg){
        __android_log_print(6,"sss","%s",msg);
    }
}
extern "C" JNIEXPORT jstring JNICALL
Java_com_lyq_selfloader_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {

    test2();

    std::string hello = "woshibeijiazaideso";
    return env->NewStringUTF(hello.c_str());
}

报错如下:

问题二:

无法在 StringFromJni中使用dlopen自己,dlopen的时候报错:

A/libc: bionic/linker/linker_phdr.cpp:172: Load CHECK 'did_read_' failed

这个我正在查。

已解决!flags里面把is_linked标志位替换掉了。大佬们关注下问题一


处理的重定位项:

R_AARCH64_RELATIVE,R_AARCH64_IRELATIVE
R_AARCH64_ABS64,R_AARCH64_ABS32,R_AARCH64_ABS16,R_AARCH64_GLOB_DAT,R_AARCH64_JUMP_SLOT
R_AARCH64_PREL64,R_AARCH64_PREL32,R_AARCH64_PREL16

soinfo替换的内容

重定位前:

st_dev,st_ino,file_offset_

重定位后:

load_size_,load_base_,load_bias_
phdr_table_,phdr_num_
nbucket_,nchain_,bucket_,chain_
strtab_,sym_table_,strtab_size_
rela_,rela_count_
init_func_,fini_func_,init_array_,init_array_count_,fini_array_,fini_array_count_,preinit_array_,preinit_array_count_
versym_,verdef_ptr_,verneed_ptr_,verneed_cnt_

偏移是从把当前手机的linker拉出来自己在IDA里面对的。

大佬们,带带我!


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2023-5-26 13:59 被Circ1e编辑 ,原因: 解决了问题二
收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 60
活跃值: (170)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
cflag rtti和exceptions开了吗,可参考 github.com/sanfengAndroid/fake-linker
2023-6-2 22:37
1
雪    币: 33
活跃值: (1476)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢,我去研究研究
2023-6-6 17:54
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
大佬  能加个qq请教下unidb 死循环问题吗
2024-3-18 08:48
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
无法捕获异常的问题解决了吗,我也遇到了同样的问题
2024-5-30 11:47
0
雪    币: 5
活跃值: (506)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
想问下flags里面把is_linked标志位这个什么。。。我怎么搜索不到这个东西
2024-6-15 00:43
0
游客
登录 | 注册 方可回帖
返回
//