美文网首页
ida-3-基础调试步骤

ida-3-基础调试步骤

作者: 牵手生活 | 来源:发表于2020-03-04 18:09 被阅读0次
    工作准备
    • ida7.0
    • jdk8
    • android6手机-小米4(请用真机模拟器会有你想不到的问题)
    so的加载过程

    .init->->.init array->->JNI_Onload->->java_com_XXX;
    脱壳的过程中会在一些系统级的.so中下断点比如:fopen,fget,dvmdexfileopen,等等

    而.init以及.init_array一般会作为壳的入口地方,那我们索性叫它外壳级的.so文件

    godbolt 在线查看汇编
    https://godbolt.org/
    
    

    Unicorn是一个轻量级的多平台,多体系结构的CPU仿真器框架。官网:http://www.unicorn-engine.org/

    Capstone是一个轻量级的多平台,多体系结构的反汇编框架。官网:http://www.capstone-engine.org/

    参考:https://bbs.pediy.com/thread-224330.htm

    1.IDA目录下的android_server 服务传入设备,给权限,启动服务。

    IDA 7.0\dbgsrv 目录存放的是不同平台转发服务的二进制可执行程序

    android_server.png
    • android_server:arm指令的安卓手机调试服务
    • android_server64 :arm64指令的安卓手机调试服务
    • android_x64_server :x64指令的安卓手机调试服务

    push服务到手机

    adb push android_server /data/local/tmp
    
    image.png

    用su权限启动服务(特别注意su权限,否则不能attach到app上哦)

    #电脑终端执行
    adb shell
    su
    
    #重命名
    mv /data/local/tmp/android_server /data/local/tmp/androidStr
    #设置可执行权限
     chmod 777 /data/local/tmp/androidStr
    #Android5以上要多做这一步
    setenforce 0
    #启动服务默认端口23946-这里指定好端口,可避开简单的检测
    /data/local/tmp/androidStr -p88888
    #看运行可以看到启动后会监听88888端口
    #查看android进程
    adb shell ps |findstr android
    #杀死进程
    kill -9 8260
    
    push并启动服务 查看android进程
    特别注意Android5.0之后默认启用了 SELinux/SEAndroid (如果找不到要调试的进程)
    解决办法:
    
    setenforce 0
    或者
    echo 0 > /sys/fs/selinux/enforce
    
    2:端口转发--(另外打开一个终端)

    另外打开一个终端,进行端口转发,签名那个窗口不要关闭

    #把android上的8888端口转发到电脑的23946端口
    #特别注意的是第一个端口是pc的端口,第二个端口才是手机的端口
    adb forward tcp:23946 tcp:88888
    
    
    端口转发
    3.按debug方式启动一个app
    #am start -D -n (apk包名)/(启动类名)
    #比如启动微信
    #adb shell am start -D -n com.tencent.mm/.ui.LauncherUI
    #本案例采用apk是:https://pan.baidu.com/s/1CQwBF7rNVSaIK9MR0eRuZA提取码:2gh1
    adb shell am start -D -n com.green.weihelper/.ui.startup.StartupActivity
    
    4.进入ida开始配置 attach进程

    ida/Debugger/Attach/Remote ARMLinux/android debugger


    image.png

    设置好端口


    image.png
    • Suspend on process entry point:挂起进程入口;
    • Suspend on thread start/exit:挂起线程入口;
    • Suspend on library load/unload: 挂起so加载和释放入口


      image.png
    5选择要调试的应用包名

    找到要调试的应用包名的进程


    image.png

    确定后可以看到ida已经连接上andriod_server


    image.png

    等待ida加载后可以看到加载的模块等之类的信息

    image.png
    6再次勾选Debugger 选择(其实第一次:设置Debugger option选项,主要是设置在loadlibrary函数的时候开始挂起操作

    设置好了,以后开始执行f9 ,开始调试操作。)

    image.png
    7、在hex view 中右键同步R0寄存器
    image.png
    ARM/THUMB汇编(补丁开发类)基础教程
    IDA调试android so的.init_array数组--详细介绍do_dlopen逻辑
    动态方式破解apk进阶篇(IDA调试so源码)-libcrackme.so过反调试
    android调试系列--使用ida pro调试so-阿里安全挑战

    ARM模式:
    一般通用寄存器:R0~R12
    R7:栈帧指针(Frame Pointer)和链接寄存器(link register, lr)在栈上的地址。
     堆栈指针:R13
     链接寄存器:R14
     程序计数器:R15
    THUMB模式:
    一般通用寄存器:R0~R7
    堆栈指针:SP
    链接寄存器:LR(一般push 到寄存器,等函数返回时,在取出)
    程序计数器:PC

    比如:STRID s=STR(“你好”);
    R0存的是“你好”,汇编要转成Unicode。R1存的是0,R2存的是0xFFFF

    7、把手机中的/system/bin/linker 文件pull到电脑,并新打开一个ida打开该问题

    把手机中的/system/bin/linker 文件pull到电脑

    adb pull /system/bin/linker d:\temp\
    
    image.png

    新打开一个ida窗口,并大概刚才pull处理的文件

    image.png

    shfit+f12查找dlopen,ctrl+x查看引用


    image.png
    image.png

    记住这个便宜地址:00001CD0

    8、设置断点

    设置断点1
    在modules视窗搜索选择/system/lib/libart.so,双击
    在Module:libart.so中搜索某个函数比如opendex,然后双击,并设置断点

    image.png

    设置断点2:
    在modules视窗搜索选择/system/bin/linker,双击


    image.png

    记住 linker的基地址:B6F26000
    基地址+便宜地址=B6F26000+00001CD0 =B6F27CD0


    image.png

    按g键跳转到:基地址+偏移地址
    发现全部是DCB形式的代码(代码没有解析出来), 这个时候我们需要对linker进行分析, 操作如下: 右键->Analyze Module


    image.png
    image.png

    分析linker模块


    Analyze module

    让ida获取linker模块快照


    ida获取linker模块快照
    ida获取快照后可以看到正常的汇编代码,此时我们给它下个断点
    image.png
    9、然后按F9运行

    然后按F9,注意观察寄存器窗口, 当有显示调试的是你想要断的so的时候开始注意

    10、jdb方式启动

    用ddsm查看一下app的端口


    image.png

    jdb方式通知apk继续执行。

    #(jdb指令为jdk目录bin下的exe,没有环境变量要到该目录执行)
    #其中8609就是你在ddsm上看到的端口号
    jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8609
    
    image.png

    测试app跳过刚才卡在debug状态的界面

    ida中继续运行
    image.png image.png

    说明:the execution will be resumed after the exception


    其他 查看app的内存映射
    ####查app对应的进程id
    adb shell ps |findstr weih
    查看app的内存映射
    #cat /proc/[pid]/maps
    cat /proc/19339/maps
    
    image.png

    hook_dlopen时需要注意,去看看linker里或libc里面的函数名字,否则方法hook不到

    每个手机会不一样


    image.png

    jni.h 的实现在哪里

    arm/runtime/去找jni_inter xxx.cc

    相关文章

      网友评论

          本文标题:ida-3-基础调试步骤

          本文链接:https://www.haomeiwen.com/subject/xcvklhtx.html