Notes-Android-II
NDK汇编(开发)
基础配置
https://www.jianshu.com/p/c546783ad284
idea安装cmake和NDK
1、ubuntu自动加进环境变量
2、windows要自己添加
source ~/.bashrc
1 | ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk |
IDA远程调试:
1 | 1、把 IDA dbgsrv目录下的文件在手机执行 android_server |
elf文件
arm 模式:定长指令集,四个字节
thumb 模式:不定长
T标志位
clang 开发
https://developer.android.com/ndk/guides/other_build_systems?hl=zh-cn
https://www.cnblogs.com/burner/p/clang-fen-si-bu-bian-yimainc.html
clang路径在SDK/NDK下
1 | C:\Users\admin\AppData\Local\Android\Sdk\ndk\28.0.12674087\toolchains\llvm\prebuilt\windows-x86_64\bin |
GDB
安装GEF
GDB multiarch 远程调试,原理同IDA远程调试,需上传服务端文件
1 | Sdk/ndk/23.1.7779620/prebuilt/android-arm/gdbserver |
ARM 案例
案例一
在 .o文件里用汇编代替原有函数(print、getchar)
1 | #printf |
案例二
根据汇编还原为C代码
1、IDA打开v7a的 SO文件
2、找到导出 check
3、修改第一个默认参数为 JNIEnv,这样就能关联到内置的函数
4、算法还原
这些R0 、R1指代第一第二个参数吗
1 | TestDec ; CODE XREF: j_TestDec+8↑j |
1 |
|
可引入IDA 提供的 defs.h 后直接运行伪代码
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1584115&highlight=ida
IDA快捷键&常用方法
- 汇编 & 伪代码的跳转(空格、Tab)
- 强制当做代码/数据(C、D)
- 数据 convert
- 重命名
- 查找调用链,Xref graph to
- 插件使用
https://blog.csdn.net/qq_41028985/article/details/119407917
熟悉算法
用于识别魔改算法或分析算法
输入信息/输出信息要hex编码
md5算法
SHA1算法
SHA2/256/512等后续一堆
HMAC(salt)
- 自行根据字符串计算hmac对照
https://space.bilibili.com/253413704
1 | message:加密消息 |
DES
1 | https://www.bilibili.com/video/BV1134y1Y71j |
https://www.cnblogs.com/jikexianfeng/p/10192024.html
CLion
分组加密
https://blog.csdn.net/a745233700/article/details/102311776
https://segmentfault.com/a/1190000040964999
https://www.bilibili.com/video/BV1U8411f74f/
AES
https://www.bilibili.com/video/BV1824y1y7gc
12345678,8个字节,64个位
APK未抹去符号表,MD5算法是否魔改分析
1、提取 so,用IDA分析
2、根据原MD5的几个关键步骤,分析汇编。搜索固定的表内容,没被魔改可以搜到
3、Hook SO地址
MD5常见魔改点:
1、明文加盐或填充
2、初始魔数的修改
3、常量表K
4、左移次数
5、F,G,H,I四个非线性变换函数等的逻辑
unidbg
IDA快捷键:H、Y、Tab
IDA 动态调试之反调试
遗留问题:虚拟机debuggable=1
1、getprop ro.debuggable = 0 的话 IDA 动态调试看不到进程名,部分功能被屏蔽
真机用:agiskHide Props Config 修改成功
虚拟机暂未成功
2、查看线程名要用新版的IDA,实测7.0的看不到,7.7的就看得到
1 | 1.Attach模式 附加 so动态调试。过掉反调试的方法 |
IDA调试tips:
1 | 1、真机无网络通过USB调试,需配置端口转发才能IDA远程调试 |
步骤:
1 | 1、进入IDA动态调试,点击运行崩溃 |
1 | var ByPassTracerPid = function () { |
参考文章:
1 | Android修改ro.debuggable 的四种方法 |
APP过ROOT检测
安装面具:
https://www.bilibili.com/video/BV1UN4y137Z5/?vd_source=43c2c404de6d798650d44c856ee1e992
https://bbs.kanxue.com/thread-263203.htm
修改固有面具
root检测:
1.在代码中检测 -> hook/修改重打包(代码固有API检测是否root?)
2.检测系统属性(检测app安装的系统环境参数)
3.查找字符串(查找root关键词,比如su)
对抗方法:
1.hook
2.最新版magisk + shamiko(可有可无)+随机magisk
3.编译面具 改su名称(这个有点麻烦)
1 | 小米6重装最新版Magisk就可以了,直接过三个(新版的gs只开还是过不了) |
1 | https://www.jianshu.com/p/c546783ad284 |