冬令营Day4:CTF移动安全解题与出题

您所在的位置:网站首页 ctf逆向出题 冬令营Day4:CTF移动安全解题与出题

冬令营Day4:CTF移动安全解题与出题

2024-06-05 12:41| 来源: 网络整理| 查看: 265

CTF中的移动安全 平台 安卓 iOS 类型 逆向 PWN(组件漏洞、WebView漏洞、Native漏洞) Misc(流量包取证、抓包)

总体以逆向为主、考察一些安卓基本知识

一些移动安全的CTF 腾讯游戏安全技术竞赛(多以逆向为主) OGeek(OPPO的) Trend Micro CTF(比较切合实际) DEFCON、Google CTF、XCTF、强网杯等等 CTF逆向基础 CTF简介

主流的两种形式 -> 对抗赛和解题赛

WEB 涉及常见的Web漏洞、诸如诸如、XSS、文件包括、代码执行、上传等漏洞 Crypto密码学 考察各种加解密技术、现代加密技术或出题者自创的加密技术、主要考察密码学等技术 Misc安全杂项 涉及流量分析、电子取证、数据分析、隐写等等,覆盖面比较广,主要考察选手的各种基础知识 Reverse逆向工程 涉及到软件逆向、破解技术等等,要求有较强的反汇编扎实功底(但是现在基本不用学习汇编了,当然要功夫到家还是得学习),主要考察参赛选手的逆向分析功能 PWN漏洞利用 攻破、取得权限,主要考察选手对漏洞的挖掘和利用能力,其中常见漏洞类型有栈溢出、堆溢出、格式化字符串等 逆向基础 即通过静态分析和动态调试等方法,理解程序逻辑从而达到修改程序行为,获取程序代码等目的 现实中一般用于软件破解,功能开发等方面 CTF中就是getFlag啦 逆向

主要就是反编译反汇编

反逆向

混淆与加壳

逆向学习

基础编程知识、汇编语言

操作系统

常见算法

常见密码学算法

image-20200116131047726

更多

更多架构 MIPS、WASM、PPC、RISC、Arduino 其他平台 IOT、固件逆向 其他语言 Go、Haskell、Esolang 常见的出题方式 Flag checker 比如直接检查Flag啊 或者密文检测啊等等 注册机 给定用户名、获取其对应的注册码 小游戏 扫雷、迷宫等等,通过通关或者触发特殊事件拿到Flag 逆向解题的一般流程 查看文件格式/架构(File命令) 用响应的反编译器/反汇编器打开 检查程序保护方法并去除(加壳、混淆等) 寻找程序关键逻辑(搜索关键字符串和函数调用等) 静态分析/动态分析,理解程序逻辑 逆向程序算法,实现脚本得到flag CTF学习 阅读优质Writeup 以赛代练 知识基础+做题经验 CTF网站 CTF Wiki CTFtime whitzard OJ CTF工具

stracerace

IDA

常用功能: 切换反编译、反汇编 -> tab / f5 字符串 -> shift + F12 切换控制流图 -> space 重命名(变量、函数、标签等)-> N 查找引用 -> X 修改类型 -> Y 切换十进制十六进制 -> H 切换数据/字符串 -> R 汇编窗口中: 切换代码为数据 -> D(data) 切换数据为代码 -> C(code) 定义函数 -> P 取消定义函数 -> U Ascii?反正有个 -> A arm/thumb切换 -> alt+G 0x0(arm)和0x1(thumb)

常用插件

LazyIDA

Keypatch

逆向注意

指针类型

大小端

函数调用约定

X64: rdi, rsi, rdx, rcx, r8, r9 + stack X86: stack ARM: r0,r1,r2,r3+ stack

常见数据类型

char, _BYTE _WORD _DWORD, int _QWORD, _int64 指针(长度根据架构决定)

结构体的恢复 如JNIEnv*

调试器:IDA、GDB

16进制编辑器:010Editor

这里通过了一道简单逆向题,晚上补一下和一些IDA的常用操作image-20200116105034079

https://zhidao.baidu.com/question/155072477.html

LSB与MSB编码

静态分析和动态分析 静态分析从可执行程序出发 , 逆向分析可执行程序的源代码或反汇编的伪汇 编代码,运用程序理解等技术手段,还原出目标程序的源代码,利 用对代码的分析理解程序的运行逻辑。动态分析利用调试器等工具跟踪软件的运行来理解程序。一般是通过观察程 序在运行过程中的状态,如寄存器内容,函数执行结果,内存使用 情况等等,分析函数功能,明确代码逻辑,理解程序行为。 静态分析是依靠程序的,动态分析是依靠输入的 静态分析是完全的可以依据这个来获取代码逻辑,但是在复杂系统里不易判断。动态分析是不完全的,即能够判断但是不能具体解析逻辑 静态分析 先猜代码,可以通过修改程序输入进行验证,猜不出来再进去详细逆向 在复杂程序中快速定位核心代码 关键字符串,寻找引用 函数大小排序 在已确认的函数的附近寻找其他有意义的函数 修改程序 修改程序逻辑 去除反调试 绕过check 修改函数的参数等以测试函数功能 patch的一些方法 keyPatch IDA自带patch lazyIDA的功能

最后要应用patch

这里再用它进行一个简单的例子

反patch技术 自校验 检查程序的校验和,防止程序被patch或调试 安卓程序也可以通过检查apk签名 绕过自校验 识别自校验行为,在不影响程序逻辑的程序下跳过检验 修正错误的校验和 动态调试 获取某些关键值,如flag 跟踪一些变量的变化 绕过程序的某些限制 修改寄存器的值或者程序的运行流程,观察和测试代码行为等 安卓调试 Java层 ADB DDMS AS Native层 IDA ptrace 安卓反调试 安卓签名校验

APP签名校验在用于反调试之外,也是一种常用的APP安全保护方式

常见的校验方式

运行时对签名进行检查 将签名信息发送到远程服务器检查

注意:无论采用哪种签名校验方式,都依然可以通过hook、patch等方式绕过

检查Debuggable 可以通过我们可以通过ApplicationInfo.FLAG_DEBUGGABLE来检查应用是否可被调试

page65image59829840.png

或者adb shell dumpsys package $包名 检查调试状态

代码中android.os.Debug.isDebuggerConnected()检查是否被调试

或者jeb连接

jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

反ptrace

对于native层的调试,可以从ptrace的原理入手进行反调试

ptrace自身

检查TracerPid

如果进程被debug,则TracePid为debug进程的Pid

如果TracePid非0,则代表处于被调试状态

page68image59884144.png page68image59885184.png

检查特定的调试器

IDA:23946

Drozer:31415等等

基于时间的反调试(用的不多) Dump内存 逆向中的加解密算法 逆向中常常会考察密码学算法 编码 通过解码编码信息得到原始信息 加密 加密传输信息,保证信息的安全性,通过密钥和密文可以还原原始信息 哈希 验证信息的唯一性,不是一种对称算法,是单向的 逆向常用编码 16进制 识别 码表 一对二的对应关系 hex解码 ’-48‘ ’-55‘, Base64/32 类似于64进制 每3个转化为4个 码表 识别 3->4 4


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3