android 逆向ARM 分析入门【Ⅰ】IDA 使用

ⅰ.相关快捷键

		1.text展示跳转和逻辑展示切换:空格
		2.返回上一级:Esc
		3.跳转到指定地址:G,然后输入地址
		4.对符号重命名:N,然后输入名字
		5.加注释:Control+:然后输入注释
		6.添加标签:Alt+M ;查看标签:Control+M
		7.查看段 : control+S
		8.查看引用 : control+X
		9.搜索文本 : Alt+ T
		10.搜索十六进制 : Alt+ B
		11.重命名类型和名字:Y
		12.伪代码汇编切换:TAB
		13.导入结构体:I
		14.查看结构体:T (先要导入结构体和编译伪代码)
		15.P.未识别的情况下使用;D.识别成地址;A.识别成字符串

ⅱ.静态调试流程

找到 IDA 目录下的 dbgsrv/android_server,push 到手机

  1. ㈠静态模式
	①获取命令输出:adb shell
	②给最高权限:su 
	③进入指定目录:cd data/loca/tmp
	④另起命令窗口,复制文件到该目录:adb push android_server绝对路径 /data/local/tmp
	⑤给该文件最高权限:chmod 777 android_server
	⑥查看该目录下所有文件的属性:ls -l 
	⑦root权限下运行该文件:./android_server  
	(端口被占用的情况下需要手动定义端口 :./android_server -p端口号)
	⑧另起命令窗口进行端口转发:adb forward tcp:目标端口(android_server 运行对应的窗口) tcp:目标端口(android_server 运行对应的窗口)
	⑨IDA绑定 debug: 工具栏debugger->attach->Remote ARM Linux/Android debuger
	⑩程序绑定 hostname和端口号:debugger->Process options..->输入本地主机和端口号
	⑪附加当前程序:Attach Process..->选择要调试的程序
	注意:步骤④ ⑥不一定需要
  1. ㈡调试模式
	①获取命令输出:adb shell
	②给最高权限:su 
	③进入指定目录:cd data/loca/tmp
	④另起命令窗口,复制文件到该目录:adb push android_server绝对路径 /data/local/tmp
	⑤给该文件最高权限:chmod 777 android_server
	⑥查看该目录下所有文件的属性:ls -l 
	⑦root权限下运行该文件:./android_server  
	(端口被占用的情况下需要手动定义端口 :./android_server -p(端口号)
	⑧另起命令窗口进行端口转发:adb forward tcp:目标端口(android_server 运行对应的窗口) tcp:目标端口(android_server 运行对应的窗口)
	
	⑨挂起程序:adb shell am start -D -n 应用程序报名/.类名
	⑩IDA绑定 debug: 工具栏debugger->attach->Remote ARM Linux/Android debuger
	⑪程序绑定 hostname和端口号:debugger->Process options..->输入本地主机和端口号
	⑫附加当前程序:Attach Process..->选择要调试的程序
	⑬选择调试项:debugger->debugger options..->勾选(1.entry point 2.thread star/exit 3.library load/unload)
	⑭挂载程序:jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=端口号(可以通过 monitor 查看)
	⑮继续应用程序:IDA->debugger->Continue process
	⑯在 modules-list选择要调试的 so:ALT+T输入你要调试的库,然后双击
注意:步骤④ ⑥不一定需要;⑦不一定需要端口号,被占用的情况下需要

ⅲ.ARM基础知识点以及分析总结

	1.R0-R3 一般是参数寄存器,寄存器不够放栈里面;栈顺序 先进后出
	2.参数从 R0 开始填充
	3.如果跳转函数涉及到参数寄存器,可直观查看参数的个数(BLX R3->>参数为R0-R2)
	4.从跳转函数往上找,按照 R0-Rx
	5.返回值参数一般用 R0存储
	6.上一个函数段里面没有给参数寄存器赋值的地方,那么该参数寄存器就存放的上一个函数的返回值
	7.碰到 FFFFFFFF,代表程序崩了

碰到的异常情况
1.Could not connect to localhost
解决:未在 root 模式下启动 android_server

2.so 库列表中没有想要调试的 so 库
解决:运行有该 so 库的程序

提供常用ARM指令链接:ARM常用指令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值