返回列表 发新帖

【逆向教程】《安卓逆向这档事》十二、大佬帮我分析一下

  [复制链接]

91

主题

3807

回帖

2万

积分

博士后

萌新

Rank: 8Rank: 8

金币
10363
好评
335
信誉
278

考神MT论坛帅哥MT论坛最佳新人MT论坛活跃会员

QQ
发表于 2023-7-18 12:30:02 | 显示全部楼层 | 阅读模式  来自 福建
本帖最后由 正己 于 2023-7-18 12:44 编辑



一、课程目标

1.了解汇编寄存器知识、so加载流程
2.了解常见so防护手段,以ollvm为例
3.学习动态调试技巧以及常见反调试

二、工具

1.教程Demo(更新)
2.MT管理器/NP管理器
3.IDA PRO
4.Android Studio
5.010 Editor

三、课程内容

1.so加载流程
---
作用:反调试、脱壳、注入等

流程图:


函数的基本介绍:

下断点时机:
应用级别的:java_com_XXX;
外壳级别的:JNI_Onload,.init,.init_array(反调试);
系统级别的:fopen,fget,dvmdexfileopen(脱壳);

安卓在线源码查看
AOSPXRef

2.IDA动态调试
1.前置操作:
1.在IDA目录下的dbgsrv,选择跟手机架构一致的server
2.adb push as /data/local/tmp/
3.进入手机端命令:adb shell
4.切换获取手机的root权限:su
5.跳到对应路径:cd /data/local/tmp/
6.提权:chmod 777 as
7.XappDebug hook

---
2.调试步骤
分为两种模式,一种是以debug模式启动,第二种则以普通模式启动,二者的区别在于使用场景,有时候要动态调试的参数在app一启动的时候就产生了,时机较早,所以需要以debug模式去挂起app

  1. adb shell am start -D -n com.zj.wuaipojie/.ui.ChallengeEight (去掉-D 则表示不以debug模式启动app)
  2. adb forward tcp:23946 tcp:23946 (端口转发)
  3. adb forward tcp:8700 jdwp:PID (pid监听)
  4. jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700 (jdb挂起)
复制代码

PS:若不是以debug启动则不需要输入后两条命令
其他的步骤具体看视频

佚名大佬:[[超级详细]实战分析一个Crackme的过程](https://www.52pojie.cn/thread-1315444-1-7.html)

3.常见寄存器知识
在进行动态调试,以下是一些常用的寄存器介绍:


5.可能遇到的问题


  1. 1.'jdb' 不是内部或外部命令,也不是可运行的程序或批处理文件。
复制代码

http://t.csdn.cn/paKAt

  1. 2.java.io.IOException: handshake failed - connection prematurally closed
  2.         at com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:136)
  3.         at com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:232)
  4.         at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116)
  5.         at com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:90)
  6.         at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519)
  7.         at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328)
  8.         at com.sun.tools.example.debug.tty.Env.init(Env.java:63)
  9.         at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1066)
  10. 致命错误:
  11. 无法附加到目标 VM。
  12. 解决方法:有可能是手机问题,建议低版本真机,不要用模拟器!切命令顺序不要乱!另外也有可能软件有反调试!
复制代码

  1. 3.动态调试中找不到so文件
  2. 解决方法:可以尝试手动复制一份对应的so文件放到data/app/包名/lib目录下
复制代码

  1. 4.device offline
  2. 解决方法:重新插拔usb,再不行就重启机子
复制代码

  1. 5.0.0.0.0:23946: bind: Address already in use
  2. 解决方案:
  3. adb shell "su -c 'lsof | grep 23946'" //获取pid
  4. adb shell "su -c 'kill -9 PID'" //这里的pid要根据上一步获取的填写
复制代码

6.常见反调试
1.调试端口检测
检测常见的23946端口,所以在运行时可以加 -p 指定一个另外的端口来过掉这个检测
2.调试进程名检测
固定的进程名 android_server gdb_server等等,所以要改个名字,例如as64
3.ptrace检测
每个进程同时刻只能被1个调试进程ptrace ,主动ptrace本进程可以使得其他调试器无法调试
实现代码:
  1. c++
  2. int ptrace_protect()//ptrace附加自身线程 会导致此进程TracerPid 变为父进程的TracerPid 即zygote
  3. {
  4.     return ptrace(PTRACE_TRACEME,0,0,0);;//返回-1即为已经被调试
  5. }
复制代码


3.SO防护手段

常见防护手段:


1.ollvm简介
LLVM(Obfuscator-LLVM)是瑞士西北应用科技大学安全实验室于2010年6月份发起的一个项目,该项目旨在提供一套开源的针对LLVM的代码混淆工具,以增加对逆向工程的难度,只不过仅更新到llvm的4.0,2017年开始就没在更新。
项目地址

  1. 源代码(c/c++)经过clang--> 中间代码(经过一系列的优化,优化用的是Pass)--> 机器码
复制代码

感受一下被ollvm支配的恐惧









2.ollvm的分类


#1.2.1 指令替换(Sub)
指令替换,将一条运算指令,替换为多条等价的运算指令。例如:`y=x+1`变为`y=x+1+1-1`

#1.2.2 虚假控制流(bcf)
虚假控制流混淆主要通过加入包含不透明谓词(相邻数字相乘恒为偶数)的条件跳转和不可达的基本块,来干扰IDA的控制流分析和F5反汇编
常见特征:不透明谓词-->例如`y > 10 || x * (x + 1) % 2 != 0`

#1.2.3 控制流平坦化(Fla)
控制流平坦化,主要通过一个主分发器来控制程序基本块的执行流程。该方法将所有基本代码放到控制流最底部,然后删除原理基本块之间跳转关系,添加次分发器来控制分发逻辑,然后过新的复杂分发逻辑还原原来程序块之间的逻辑关系。
常见的特征:一大堆分支函数


#1.2.4 字符串加密
字符串加密的原理很简单,编写一个pass将其中的字符串信息使用一些加密算法进行加密,然后特定的时间进行还原。一般含有字符串混淆、函数名混淆、不在init_array解密等
常见的特征:datadiv_decoded

3.ollvm对抗
1.简单ollvm可以通过交叉引用分析
2.angr去除不透明谓词
3.Unicorn/Unidbg/AndroidNativeEmu模拟执行
4.IDA Trace
5.binary ninja
6.后端编译优化
7.frida辅助分析
4.IDA Trace 实战分析ollvm
1.在要trace的函数前后下断,触发断点
2.配置trace的log输出路径,并选择trace模式
- Instruction tracing 调试器将为每条指令保存所有修改后的寄存器值。
- Basic block tracing 调试器将保存到达临时基本块断点的所有地址。
- Function tracing 调试器将保存发生函数调用或函数返回的所有地址。
3.run并触发trace

感谢SharkFall大佬帮忙编译的样本

遇到ollvm平坦化怎么办?没事!chatGpt爸爸帮你解决
记一次基于unidbg模拟执行的去除ollvm混淆
Unicorn反ollvm控制流平坦化之bb
ARM64 OLLVM反混淆
[OLLVM 与去平坦化 & [RoarCTF2019] polyre 详细WP](https://www.52pojie.cn/forum.php?mod=viewthread&tid=1601573)
移除ollvm中的控制流平坦化、不透明谓词
【reverse】虚假控制流入门:Ubuntu20.04安装ollvm4.0踩坑记+用IDApython去除BCF
基于IDA Python的OLLVM反混淆(一) 手动去混淆
你所需要的对抗ollvm的知识都在这里
ollvm反混淆学习
记使用Trace还原ollvm混淆的函数
frida辅助分析ollvm


四、课后小作业
待更新
五、答疑
---
待更新

六、视频及课件地址
---

百度云
阿里云
哔哩哔哩
PS:解压密码都是52pj,阿里云由于不能分享压缩包,所以下载exe文件,双击自解压

七、其他章节
---
《安卓逆向这档事》一、模拟器环境搭建
《安卓逆向这档事》二、初识APK文件结构、双开、汉化、基础修改
《安卓逆向这档事》三、初识smail,vip终结者  
《安卓逆向这档事》四、恭喜你获得广告&弹窗静默卡
《安卓逆向这档事》五、1000-7=?&动态调试&Log插桩
《安卓逆向这档事》六、校验的N次方-签名校验对抗、PM代{过}{滤}理、IO重定向
《安卓逆向这档事》七、Sorry,会Hook真的可以为所欲为-Xposed快速上手(上)模块编写,常用Api
《安卓逆向这档事》八、Sorry,会Hook真的可以为所欲为-xposed快速上手(下)快速hook
《安卓逆向这档事》九、密码学基础、算法自吐、非标准加密对抗
《安卓逆向这档事》十、不是我说,有了IDA还要什么女朋友?
八、参考文档

---
IDA Pro 使用技巧、动态调式 so、monitor.bat
【第贰期 REVERSE 分享会】二十余种反调试源码讲解 & IDA插件介绍
记一次基于unidbg模拟执行的去除ollvm混淆
Android APP漏洞之战(14)——Ollvm混淆与反混淆

超级详细实战分析一个Crackme的过程
《IDA Pro7.0使用技巧总结》
《使用IDA进行动态调试与过反调试(上)(三)》
对安卓反调试和校验检测的一些实践与结论


已有4人评分好评 金币 理由
mxr + 1 + 1 赞一个!
DreamFly + 1 + 1 很给力!
肖博坤 + 1
dayeve + 1 + 1 赞一个!

查看全部评分 总评分:好评 +3  金币 +4 

回复

使用道具 举报

91

主题

3807

回帖

2万

积分

博士后

萌新

Rank: 8Rank: 8

金币
10363
好评
335
信誉
278

考神MT论坛帅哥MT论坛最佳新人MT论坛活跃会员

QQ
发表于 2023-7-18 12:30:35 | 显示全部楼层  来自 福建
不支持md表格,只能截图了
回复

使用道具 举报

128

主题

2542

回帖

1万

积分

博士生

q1592131045

Rank: 7Rank: 7Rank: 7

金币
1395
好评
66
信誉
102

考神MT论坛最佳新人MT论坛活跃会员MT论坛灌水老大MT论坛新人MT论坛侠客MT论坛帅哥

QQ
发表于 2023-7-18 12:39:47 | 显示全部楼层  来自 广东
看看大佬
回复

使用道具 举报

0

主题

7274

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
2247
好评
8
信誉
124

考神

发表于 2023-7-18 12:47:14 来自手机  | 显示全部楼层  来自 广东
看看大佬
回复

使用道具 举报

12

主题

749

回帖

2396

积分

大学生

Rank: 5Rank: 5

金币
1417
好评
1
信誉
100
发表于 2023-7-18 12:48:29 来自手机  | 显示全部楼层  来自 广东
看看大佬
回复

使用道具 举报

6

主题

6282

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
1201
好评
5
信誉
102
发表于 2023-7-18 12:59:56 来自手机  | 显示全部楼层  来自 江苏
看看隐藏
回复

使用道具 举报

21

主题

4069

回帖

7762

积分

硕士生

Rank: 6Rank: 6

金币
662
好评
2
信誉
84
发表于 2023-7-18 13:08:01 来自手机  | 显示全部楼层  来自 河南
这两张图看着好麻烦的样子。
回复

使用道具 举报

56

主题

3619

回帖

8852

积分

硕士生

6

Rank: 6Rank: 6

金币
657
好评
43
信誉
145

考神MT论坛新人MT论坛帅哥

QQ
发表于 2023-7-18 13:10:23 来自手机  | 显示全部楼层  来自 河南
看看隐藏
回复

使用道具 举报

18

主题

9045

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
4987
好评
3
信誉
202

考神

发表于 2023-7-18 13:17:21 来自手机  | 显示全部楼层  来自 广东
看看隐藏
回复

使用道具 举报

152

主题

7921

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
11462
好评
10
信誉
104

MT论坛最佳新人考神MT论坛新人MT论坛帅哥

发表于 2023-7-18 13:21:42 来自手机  | 显示全部楼层  来自 云南
看看隐藏
回复

使用道具 举报

64

主题

3259

回帖

9177

积分

硕士生

Rank: 6Rank: 6

金币
2194
好评
21
信誉
104

MT论坛帅哥MT论坛新人考神MT论坛最佳新人

发表于 2023-7-18 13:23:30 来自手机  | 显示全部楼层  来自 江苏
看看隐藏
回复

使用道具 举报

16

主题

7688

回帖

1万

积分

博士生

:)))))

Rank: 7Rank: 7Rank: 7

金币
5763
好评
12
信誉
107

MT论坛帅哥考神MT论坛新人MT论坛活跃会员

发表于 2023-7-18 13:24:13 来自手机  | 显示全部楼层  来自 河南
看看隐藏
回复

使用道具 举报

2

主题

1097

回帖

2931

积分

大学生

Rank: 5Rank: 5

金币
2697
好评
1
信誉
95
发表于 2023-7-18 13:25:16 来自手机  | 显示全部楼层  来自 上海
好牛逼的样子
回复

使用道具 举报

11

主题

470

回帖

2195

积分

大学生

Rank: 5Rank: 5

金币
53
好评
5
信誉
101
发表于 2023-7-18 13:34:02 来自手机  | 显示全部楼层  来自 山东
看看隐藏
回复

使用道具 举报

25

主题

4636

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
1803
好评
2
信誉
121

考神MT论坛新人

发表于 2023-7-18 13:36:14 来自手机  | 显示全部楼层  来自 陕西
感谢分享。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表