工具
IDA工具
链接:https://pan.baidu.com/s/1Zgzpws6l2M5j1wkCZHrffw 提取码:ruyu
里面有安装密码:
PassWord:qY2jts9hEJGy
里面分析32位和64位启动快捷方式
打开IDA工具,拖入so文件
ARM AND THUMB MODE SWITCH INSTRUCTIONS
This processor has two instruction encodings: ARM and THUMB.
IDA allows to specify the encoding mode for every single instruction.
For this IDA uses a virtual register T. If its value is zero, then
the ARM mode is used, otherwise the THUMB mode is used.
You can change the value of the register T using
the ‘change segment register value’ command
(the canonical hotkey is Alt-G)
该处理器有两种指令编码:ARM 和 THUMB。IDA 允许为每条指令指定编码模式。 为此,IDA 使用虚拟寄存器 T。如果其值为零,则 使用 ARM 模式,否则使用 THUMB 模式。 您可以使用以下命令更改寄存器 T 的值 “更改段寄存器值”命令 (规范热键是 Alt-G)
The technical support period of the Hex-Rays decompiler
has expired. You have 3 month grace period to update your license.
The grace period is counted from the expiration date.
For more information please visit https://www.hex-rays.com
Hex-Rays反编译器的技术支持期
已过期。 您有 3 个月的宽限期来更新您的许可证。
宽限期从到期日开始计算。
欲了解更多信息,请访问 https://www.hex-rays.com
第一次打开软件
搜索要找的函数
双击可以进入
窗口
左边窗口所有的函数
Exports 导出函数窗口
自己写的函数,就是导出函数
系统的库函数,就是导入函数
IDA View-A
反汇编窗口
Hex View-1
二进制窗口
Structures 结构体窗口
导入结构体窗口
Enums
枚举窗口
Imports
使用快捷键
F5直接生成伪代码
IDA调试的基本步骤
弄一个demo,并运行到手机上
找到客户端需要的程序
放入手机的/data/local/tmp目录下并root
直接运行
在电脑上转发端口
IDA Pro attch
attach 相应的进程(也就是包名)
成功加载(时间比较漫长)
找到模块列表
找到对应的so
搜索要调试的函数
双击进入
添加断点
运行这个代码
在指定位置(应该是函数开头)添加注释
IDA调试分析so文件
另一种方法: 先找到进程的pid, 然后通过pid进行查找
ps -A | grep “ndkdemo”
cat /proc/16766/maps | grep .so
开启手机的调试开关
bdopen xposed框架,打开调试
p 快捷键-识别为一个函数
a 键识别字符串
u 键不识别字符画
IDA调试分析实例
SUB SP,SP, #0x130
STR x28, [SP, #0x120+var_10] @ 将x28的值存储到内存中的指定位置
STP x29, x30 [SP, #0x120+var_s0] @ 将x29和x30的值存储到内存中的指定位置
ADD x29, SP, #0x120
MRS x8, #3, c13, c0, #2 @ 将协处理器寄存器的值读取到通用寄存器 x8 中
LDR x8, [x20, #var_18] @ 将内存中指定位置的值加载到通用寄存器 x8 中
STUR x8, [x20, #var_18]
STUR x0, [x29, #var_18]
STUR x1, [x29, #var_40]
LDUR x0, [x29, #var_38] @ 将栈内存中指定位置的值加载到通用寄存器 x0 中
BL unk_7D2C98D00LDR 使用基址寻址方式,而 LDUR 使用未特权基址寻址方式。
LDUR 是 ARMv8.0 架构中新增的指令,用于在非特权模式下加载数据。
重置窗口
IDA调试问题总结
打开安卓系统调试
每次重启手机都要修改
adb push C:\Users\Administrator\Desktop\software\mprop\arm64-v8a\mprop /data/local/tmp
chmod 777 mprop
su
./mprop ro.debuggable 1
内嵌汇编代码
#include <stdio.h>
#include <string.h>int my_thumb(int dummy)
{__asm__("mov r0,#1 \t\n""mov r1,#2 \t\n""add r0,r0,r1 \t\n""bx lr");
}int main()
{int n = my_thumb(12);printf("result :%08x\n",n);return 0;
}
可执行程序加载so库
#include <unistd.h>
#include <stdio.h>
#include <dlfcn.h>typedef void (*pfnfoo)(void);int main()
{void *handler = dlopen("/data/local/tmp/libTargetLibrary.so", RTLD_NOW);if(NULL == handler){printf("[-] dlopen fail");return -1;}pfnfoo foo = (pfnfoo)dlsym(handler, "foo");foo();return 0;
}
windows快捷打开
@ECHO OFF
color 2f
IF EXIST tmp DEL tmp
ECHO ==============================
SET batpath=%cd%
SET idapath="D:\Program Files\IDA 7.0"
CD /d "%idapath%"
adb push "%cd%\dbgsrv\android_server" /data/local/tmp
adb shell rename /data/local/tmp/android_server /data/local/tmp/as7.0
cd /d "%batpath%"
ECHO su >>tmp
ECHO cd /data/local/tmp >>tmp
ECHO chmod 777 as7.0 >>tmp
ECHO ./as7.0 >>tmp
adb forward tcp:23946 tcp:23946
adb shell am start -D -n de.fraunhofer.sit.premiumapp/de.fraunhofer.sit.premiumapp.LauncherActivity
cd /d "%idapath%"
start ida.exe
cd /d "%batpath%"
adb shell <tmp
ECHO ==============================
IF EXIST tmp DEL tmp
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8603
idapython
IDA调试android so文件的10个技巧
关闭SELinux.png
打开系统的调试总开关
Nexus5x开启系统调试
密码学应用
附录:
查看cpu架构
adb shell getprop | grep ‘abi’