当前位置:首页 » 《随便一记》 » 正文

020 Android之so文件动态调试_鬼手的博客

8 人参与  2022年02月25日 13:08  分类 : 《随便一记》  评论

点击全文阅读


文章目录

    • ELF文件格式查看工具
    • so文件加载时的函数执行顺序
    • so文件动态调试
    • so文件调试技巧
    • 使用ida动态调试的那些坑
      • 进程显示不全
      • illegal segment bitness
      • more than one special register present
      • adb安装强制应用App以32位运行

ELF文件格式查看工具

和PE文件类似,比PE文件简单,我们可以用NDK中提供的一个工具readelf去查看ELF文件主要表信息

目录:

D:\Android\sdk\ndk-bundle\toolchains\x86-4.9\prebuilt\windows-x86_64\bin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1s7iWskx-1633180160882)(020 Android之so文件动态调试.assets/1632204382649.png)]

常见命令:

-h 查看头文件
-S 查看Section header Table
-l 查看程序头表Program Header Table
-s 查看符号表
-d 查看动态加载信息

在这里插入图片描述

查看头信息

在这里插入图片描述

查看区段信息

so文件加载时的函数执行顺序

想要调试so文件,首先需要弄清楚so文件加载时的函数执行顺序,先看下面的代码

extern "C" void _init(void){
    __android_log_print(ANDROID_LOG_DEBUG,"init","_init");
}

void __attribute__((constructor)) init1(void){
    __android_log_print(ANDROID_LOG_DEBUG,"init","init1");
}


void __attribute__((constructor)) init2(void){
    __android_log_print(ANDROID_LOG_DEBUG,"init","init2");
}


void __attribute__((constructor)) init3(void){
    __android_log_print(ANDROID_LOG_DEBUG,"init","init3");
}

extern "C"
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm,void *reseverd){

    __android_log_print(ANDROID_LOG_DEBUG,"init","JNI_Onload");
    JNIEnv* env;
    jint ret=vm->GetEnv((void **)&env,JNI_VERSION_1_6);
    if (ret!=JNI_OK){
        return 0;
    }

    return JNI_VERSION_1_6;
}

接着执行代码

在这里插入图片描述

so文件第一个执行的函数是**_init函数,接着执行的是init数组中的函数,分别是init1,init2和init3,这个数组中的函数可以自定义,只需要符合对应的格式即可,最后再执行JNI_OnLoad**

**so文件分析流程:**当我们分析so文件时,首先需要分析_init函数,接着分析init_array数组,最后分析JNI_OnLoad函数

在这里插入图片描述

接着我们用readelf工具查看动态加载信息,可以看到init和init_array的地址

在这里插入图片描述

接着用IDA跳转到init_arrray的地址,可以找到三个init函数。

so文件动态调试

  1. 上传IDA调试服务端

在这里插入图片描述

将IDA目录下的android_server上传到android机器中(注意android_server需要和目标系统架构和位数一致)

adb push .\android_server /data/local/tmp/ands

在这里插入图片描述

修改文件权限

在这里插入图片描述

接着测试运行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CzT5wPlV-1633180160896)(020 Android之so文件动态调试.assets/1632212563278.png)]

这里提示当前正在监听23946端口,这个是IDA服务默认监听的端口

在这里插入图片描述

-p参数可以指定端口

  1. 以调试方式启动apk
adb shell am start -D -n 包名/入口类名

在这里插入图片描述

以调试方式启动进程后

在这里插入图片描述

在monitor可以看到一个红色的小虫

  1. 设置端口转发
adb forward tcp:23456 tcp:23456

端口号要和启动service时监听的端口一致

  1. 启动ida附加,如果是arm架构选择ARMLinux/Android debugger,如果是夜神模拟器,选择linux debugger

在这里插入图片描述

最后启动ida附加调试端口

在这里插入图片描述

输入hostname和port

在这里插入图片描述

选择需要调试的进程

在这里插入图片描述

接着就可以愉快的开始debug了

如果需要让java层代码跑起来则需要执行下面一条命令:

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700

so文件调试技巧

在这里插入图片描述

在Debugger Option中将模块加载和线程加载时断下的复选框勾上

在这里插入图片描述

打开模块窗口,找到需要调试的so文件,双击进入

在这里插入图片描述

这里可以看到模块的导出函数

在这里插入图片描述

接着找到需要调试的函数,比如_init

在这里插入图片描述

F2进行下断即可。

使用ida动态调试的那些坑

so文件动态调试,看起来简单,实际操作过程中总会遇到各种问题,这里记录一下遇到的各种坑和解决方案

进程显示不全

在这里插入图片描述

当我用真机接入adb进行so文件调试时,发现在IDA中的进程显示不全。

在这里插入图片描述

解决方案:这个是因为没有用管理员权限启动idaserver,如果在命令行中使用su没反应,需要使用Magisk对手机进行root获取管理员权限后,再用管理员权限启动idaserver,问题即可解决

illegal segment bitness

在这里插入图片描述

64位的系统 默认安装app是64的,出现这个错误是因为android_server与需要调试的app位数不一样,例如64位的手机使用32位的android_server。

我调试的手机是64位的,使用的是android_server进行调试。后来换成了android_server64就解决了。

more than one special register present

接着我又遇到了第三个问题

在这里插入图片描述

这个问题出现的原因是由于IDA版本不匹配导致的,我使用的是64位的手机,需要启动64位的idaserver,然后用ida x64。如果使用x86版本的ida就会出现上面的问题

adb安装强制应用App以32位运行

之前的流程终于跑通了,但是运行的是64位的程序,需要看64位的arm汇编,对新手来说太不友好了。想要调试32位的汇编需要强制应用以32位运行,并且使用32位的idaserver,然后使用32位的ida进行附加。

直接上命令格式

adb install --abi armeabi-v7a <path to apk>

调用这条命令应用以32位在64位终端环境下运行。然后就可以愉快的调试32位arm汇编了。

流程终于跑通了,但是运行的是64位的程序,需要看64位的arm汇编,对新手来说太不友好了。想要调试32位的汇编需要强制应用以32位运行,并且使用32位的idaserver,然后使用32位的ida进行附加。


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/35347.html

调试  文件  函数  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 相国独子的丫鬟砸坏我的玉佩后,我当场拒婚阅读_玉佩陈郡谢氏全新_小说后续在线阅读_无删减免费完结_
  • 手术时,我看着病人惨死最新试读_淼淼陆知衍姜颜全本完结_小说后续在线阅读_无删减免费完结_
  • 男友霸道给我开黑卡,转头却骂我是捞女最新章节_肖年顾客黑卡热文_小说后续在线阅读_无删减免费完结_
  • 他在回忆尽头全集_贺南舟许清梨叶絮完结txt_小说后续在线阅读_无删减免费完结_
  • 旅游结婚那天未婚夫另娶女秘书,我让他们一无所有连载_老公迎宾超长版_小说后续在线阅读_无删减免费完结_
  • 完结文异界修仙我的直播间能打赏核弹列表_完结文异界修仙我的直播间能打赏核弹(江流年沈红菱)
  • 全书浏览陪弟弟混骑行圈,离婚你哭什么?(韩星河柳千雪)_陪弟弟混骑行圈,离婚你哭什么?(韩星河柳千雪)全书结局
  • 老公出轨我助攻虐心反转_秦绍卿卿阿溪后续加长_小说后续在线阅读_无删减免费完结_
  • 替老婆坐牢出狱那天,我被送去斗兽场精校文本_许言沈宇郑子番茄热门_小说后续在线阅读_无删减免费完结_
  • 沐巍澜温溪:结局+番外(爱如一刹花火)电子书畅享阅读无广告
  • 傅凌川林柚续集(傅凌川林柚)章节前文+全书阅读(替嫁燃婚:小祖宗嘴硬腰软)最新连载
  • 资助生把导盲犬做成火锅后,我家杀疯了!列表_资助生把导盲犬做成火锅后,我家杀疯了!(陈米雪波波)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1