美文网首页
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-基础调试步骤

    工作准备 ida7.0jdk8android6手机-小米4(请用真机模拟器会有你想不到的问题) so的加载过程 ....

  • idea dubbo在debug(调试)模式下,启动很慢的问题解

    调试步骤一   打开hosts文件,在host文件中加入 调试步骤二   idea 在debug模式下启动dubb...

  • codeblocks调试步骤

    以此程序为例: 需要注意的点: 1,路径名需为英文名。 2,打开需打开工程,即打开.cbp文件,不能只打开.c文件...

  • 硬件调试步骤

    1. 目检 检查BOM的器件是否焊接完成,是否焊接正确。焊接质量如何,有无连锡,虚焊等情况 2. 初始上电 用万用...

  • ida 调试步骤

    启动安装android_server 记得注意改名: 很多app 会检测android_server 我改成and...

  • Mac安装Tomcat

    Mac自带Apache 自我调试 调试apache(扩展) 此步骤可以跳过 开启apache 关闭apache 修...

  • iOS逆向过程步骤汇总

    经过这段时间的实践,总结了一下逆向开发调试的大体步骤,准备分篇幅记录的详细点,避免之后会忘掉。 基础阶段 远程登录...

  • 自定义 Lint 检查实践指南

    本文在官方文档的基础上,详细讲解了自定义 Lint 检查代码的步骤,并给出了调试代码的方法和发布流程,方便团队进行...

  • Reveal调试神器:在 xcode上使用 Reveal 进行

    Reveal调试神器:在 xcode上使用 Reveal 进行 UI 调试 1. 安装步骤 1.1 在 podfi...

  • X-Code9 iOS11 无线调试问题解决方案 简书

    无线部署调试 无线调试的步骤如下: 1、第一次部署调试还是需要连线,连接好之后,选择Window->Devices...

网友评论

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

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