xiaoeryu
搜索

xiaoeryu

CTF004
发表于2023-07-09|Android逆向
1. 脱壳用jadx打开之后发现有加壳那先脱壳再分析 看名字是一个_qihoo_的壳,这个呢我们使用反射大师去脱壳,反射大师需要运行在安卓7.1以下的系统上在root过的手机上安装一个_VMOS Pro_模拟一个安卓7.1的系统安装上反射大师和CTF004,注意:反射大师需要重启才能启用然后打开反射大师,选择我们的CTF004并打开 然后点击这个芒星点击 当前ACTIVITY 然后点击写出DEX->修复Magic->确定之后去提示的路径处将文件拷贝到物理机,再使用_adb pull_命令拉取下来对脱壳后的文件开始分析。 2. 开始分析分析代码逻辑 进来_MainActivity_之后发现_onCreate_函数都在native层去实现了,那再看看其它的类点进Flag类 进来之后发现这里面有些需要我们注意的点: 1. 有两个key 2....
CTF005
发表于2023-07-08|Android逆向
PS:这个题目比较简单,尝试采用多种不同的方式去获取flag 第一种方式:静态分析用jadx打开进入口点看代码逻辑 看入口点的代码非常简单明了进入case vip分支就算是通过了验证,那我们跟进去看一下它里面有没有校验的函数 进来之后发现它只是用_setContenView_方法加载了一个新的布局,那去看一眼这个布局的xml文件资源文件在res->layout文件夹里面:进来之后发现flag是一个明文存储的字符串 这个比较简单,再使用改跳转重打包的方式获取flag试一下 第二种方式:重打包使用_AndroidKiller_重打包改一下apk的执行流程:先来分析一下代码看修改哪里才能让我们获取到flag 首先我们点击首页的“点我获取FLAG”按钮之后会进入第一个case,之后会校验a的值大于30才能跳转往else分支充钱,这里可以把跳转改为(a >...
CTF006
发表于2023-07-07|Android逆向
本节主要内容是通过分析题目中的so文件加密,去写出反解脚本计算flag 1. 用jadx查看入口点在AndroidManifest.xml里面找到入口函数 1.1. 看这段代码我们需要关注两个方法: 1. getSecret()是一个native层的函数,这个函数对编辑框的内容进行了一定的处理之后返回了ans 2. check()方法校验,通过校验才能得到正确的Flag 先分析下chek()是怎么实现的,等下再去看native层。 2. 查看check()方法 这段代码的主要作用是从数据库中取出secret值(用hello的MD5值作为name对应的secret值)与我们输入的值(经过getSecret()方法处理)进行比较相等就返回true。 分析完check()方法之后,现在我们可知: 输入编辑框的值经过getSecret()的运算之后 = ‘kEvKc|roAkNADgGExUeq’就可以通过校验 那接下来我们去分析一下getSecret()这个方法。 3. 分析getSecret()3.1....
平坦模型
发表于2022-12-11|X86汇编:实模式到保护模式
01. 为什么要引入平坦模型及平坦模型的特点传统的分段模型:未开启分页机制 传统的分段模型:开启分页机制 不分段的管理模型,平坦模型(Flat Model) 就是将全部的4G字节内存整体上作为一个大段来处理。每个段都指向4G字节的段,段基地址都是0、段界限都是0xFFFFF、段的粒度是4K字节。 02. 在主引导程序中创建平坦模型下的段本章程序:引导程序:c32_mbe.asm,具体看代码注释。内核程序:c32_core.asm用户程序0:c32_app0.asm用户程序1:c32_app1.asm 03. 平坦模型对内核程序分段的影响内核程序中需要将段的定义注释掉,此后对内核代码的访问要通过指向4G字节的段。这样做是让内核程序中的标号统一编制,即具有连续的汇编地址。 内核加载到0x00040000地址处、将内核重定位到内存高端之后,地址变为0x80040000。程序中可以使用org...
分页和动态页面分配
发表于2022-12-11|X86汇编:实模式到保护模式
01. 保护模式下的段式虚拟内存管理 任务的划分实际上是内存空间的划分 内存空间的访问时依靠分段机制进行的,是通过将内存划分为段来进行的。现在描述符表中定义每个段的描述符,然后通过描述符来访问其对应的内存段。 程序中先将段选择子送入段寄存器sreg中,再使用jmp、call指令进行跳转。其中段选择子的TI = 0表示描述符再GDT中,TI = 1表示在LDT中。 每个任务的描述符索引是13位,最多2^13 = 8192个,段内偏移是32位的,段的最大长度是2^32 = 4GB,则任务的全局部分为2^13 * 2^32 = 2^45 = 32TB,任务的私有部分为2^13 * 2^32 = 2^45 =...
中断和异常的处理与抢占式多任务
发表于2022-12-11|X86汇编:实模式到保护模式
1. 中断和异常概述协同式任务切换不一定要通过一个专门的接口例程进行,也可以用一般的例程进行。 用户任务通过调用门切换到内核的put_string例程执行,在内核任务返回用户任务之前可以进行任务切换,之后再通过retf返回用户任务执行。 硬件中断信号,NMI是不可屏蔽中断、INTR是来自硬件中断引脚的可屏蔽中断。随机产生,与处理器是异步的。 软件中断,INT...
协同式任务切换
发表于2022-12-11|X86汇编:实模式到保护模式
01....
特权级和特权级保护
发表于2022-12-11|X86汇编:实模式到保护模式
1. 特权级保护的必要性和特权保护机制用描述符实施段与段之间的隔离和保护,建立在程序之间分工协作的基础上,首先用户程序需要在内核的支持下运行而不能独立运行。 内核需要加载和重定位用户程序,为用户程序每个段创建描述符,将段选择子回填到用户程序的头部中,因为这个原因用户程序只能访问自己的代码段、数据段和栈段。 当然这样并不能有效地阻止用户程序访问GDT,如下代码: mov eax, 0x28 ;00101_0_00 mov ds, eax mov dword[0],012345678 用户程序虽然不知道5号描述符指向哪个段,但是仍然可以破坏段中的数据,甚至用户可以重新定义一个新的GDT来替换内核建立的GDT,从而达到破坏的目的。 用户程序只要知道内核中历程的段选择子和段内偏移就可以调用例程执行,这样会很容易的破坏内核。 系统的多任务如下: 使用特权级来划分内核和用户程序,任务的共有部分和私有部分之间的隔离特权级从0~3。 特权指令:只有0特权级的程序能够执行 02....
任务和任务的创建
发表于2022-12-11|X86汇编:实模式到保护模式
01. 任务:概念和组成内核时对整个计算机系统进行管理,管理软件和硬件。内核可以加载用户程序,对用户程序进行重定位,用户程序终止后还可以回收用户程序的资源,在编程时位用户程序提供API。 将内核和用户程序可以看作一个整体:任务 在一个系统中只有一个内核,但可以有多个用户程序,即多任务系统。 GDT存放内核中的描述符,LDT存放每个任务中用户程序的描述符: 每个任务还需要一个任务状态段:TSS(Task Status Segment)。 02. 使用任务控制块保存任务的基本信息本节主要介绍了本章程序的结构,主要结构如下,本章程序有三个 用户程序:c13_app1.asm 用户头部段 用户数据段 用户栈段 用户代码段 用户尾部段 内核程序:c14_core.asm 定义常量存放选择子 内核程序头部段 内核公共例程段,就是一些例程和以前一样 内核数据段,一些文本信息、SALT等 内核代码段,有内核入口点start、创建任务控制块TCB(Task Control...
用户程序编程接口及其实现
发表于2022-12-11|X86汇编:实模式到保护模式
01.内核与用户程序之间的栈切换问题从内核进入用户程序时,使用的是call far指令,这是一个过程调用指令,是需要使用retf指令返回的。过程调用需要隐式的栈操作,使用栈来保存返回地址,因此当call far指令执行时需要将下一条指令的地址压入当前正在使用的栈中保存,也就是内核的栈中。 用户程序: start: mov eax,ds ;此时DS指向用户程序头部段 mov fs,eax ;但是我们不能失去对DS的追踪,所以使用其他FS段寄存器重新设置DS mov ss, [fs:stack_seg] mov esp,stack_end ;mov eax,[data_seg] ;mov ds,eax ;用户程序要做的事情(省略) retf...
保护模式程序的动态加载和执行
发表于2022-12-11|X86汇编:实模式到保护模式
01. 本章的目标和内容提要引入保护模式、描述符、描述符表等并没有对用户程序的编写增加什么负担 因为对于系统来说这些是必须的,对于运行在系统上的程序来说不需要关心这些 02. 内核的结构和加载前的准备工作内核的加载包含c13_mbr.asm全部和c13_core....
存储器的保护
发表于2022-12-11|X86汇编:实模式到保护模式
01. MOV DS, AX和 MOV DS, EAX这两条指令计算GDT的逻辑段地址,使用64位除法指令: eax(商)保存段地址, edx(余数)保存偏移div r/m32 mov ds, ax在16位操作尺寸下机器码是8ED8, 在32位操作尺寸下应该是668ED8, 但是Intel的官方文档对这种指令做了优化: 但是有些编译器在编译这条指令的时候仍然会加上66前缀所以官方文档建议使用mov ds, eax, 不过在NASM编译器下编译的结果不管是mov ds, eax还是mov ds, ax在16还是32操作尺寸下都不会有前缀66.编译之后查看lst列表文件:使用16位操作尺寸时: 使用32位操作尺寸时: 可以看到NASM编译器将指令译码成了8ED8.处理器不允许在任何时候使用索引字段为0的选择子去访问0号描述符, 任何时候的访问都会引发异常中断 此节程序设置了GDT逻辑地址, 安装了描述符, 加载初始化了GDTR, 打开A20地址线, 清除中断, 设置CR0寄存器的PE位进入保护模式, jmpf进入保护模式执行. 02....
1…678…10
avatar
xiaoeryu
文章
114
标签
92
分类
14
Follow Me
公告
同于道者,希言自然
最新文章
绕过某邦企业壳root、frida检测2025-06-05
某麦购票Xposed脚本(一)2025-05-28
某麦APP购票接口分析2025-05-05
微信小程序-某某牛仔城2024-09-16
编译Android13-AOSP2024-08-10
分类
  • ARM汇编1
  • Android逆向61
    • 加密解密6
  • NDK开发8
  • Win逆向9
  • X86汇编:实模式到保护模式11
  • ios逆向1
  • 加密解密2
标签
JNI函数注册原理与追踪 AOSP源码编译 windows木马 环境配置 Windows脱壳 AES Android源码分析 Android脱壳 加解密算法分析 脱壳 Android刷机 学习笔记 RSA x86协同式任务切换 Frida Hook 加壳和运行时的机制 OceanLotus 重打包 Android加壳 暴力解密 NDK简介 X86寄存器指令格式 x86中断和异常 JavaVM与JNIEnv NDK性能 处理各种参数的方法 DES 微信小程序逆向 分组密码 x86内核任务系统 App抓包 RPC 环境搭建 抢茅台 Frida反调试 Andromeda木马 X86描述符表 加密解密 -Cobalt Strike 函数抽取壳
归档
  • 六月 2025 1
  • 五月 2025 2
  • 九月 2024 1
  • 八月 2024 3
  • 七月 2024 7
  • 六月 2024 5
  • 五月 2024 1
  • 四月 2024 1
网站信息
文章数目 :
114
本站总字数 :
185.4k
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2019 - 2025 By xiaoeryu
框架 Hexo 6.3.0|主题 Butterfly 5.3.5
搜索
数据加载中