不定期日记
d63249868da0047ca7fcf131586698630004b164f2900b81711547bd16aa28b2070b054576563b191630216e51df598bb6e96d65469a3878c7d263618d17b3c26710c0c40ae5ed46a5af8d6110870b92e17bbaf2af44401998c90747328196359ebb52f16bb2b51fcd135d023cec70e9f2006bc11773c02122d554128332841470cbd81bb74aacf69efb7b27331ada4fac7115b8bfc4bbd7de7a731adb541c90d0fe9e7e6bc45c886070e9c9552ea160bb3178c326b3e3e09ef9996276279cca68d06ebce421cf72efb115425ebcc48e874c324f9b76628c554202cbb2ad3fc413b264ce67afeb2137ecb898ceed51b5bb72332b62c566eb1 ...
vt技术学习
@[TOC]
介绍VT,就是虚拟化技术(Virtualization Technology)的缩写。Intel VT就是指Intel的虚拟化技术。这种技术简单来说就是可以让一个CPU工作起来就像多个CPU并行运行,从而使得在一台电脑内可以同时运行多个操作系统。只有部分Intel的CPU才支持这种技术。vt是一个嵌套的过程,先启用vt技术的exe能获得更多的权限Intel VT技术,主要由三部分技术组成:VTx、VTd和VTc。VTx是处理器技术,提供内存以及虚拟机的硬件隔离,所涉及的技术有页表管理以及地址空间的保护。VTd是处理有关芯片组的技术,VTc是针对网络提供的管理.这里学习的是VTx技术(中间代码见github)
环境配置还是和之前windows内核的配置环境一样,在加上虚拟机里勾选上vt选项,并在虚拟机里安装好debugview和instdrv工具,方便驱动的加载和查看安装wdk7600,下载后是个iso文件直接安装即可,安装好后可以在菜单栏看见命令框http://www.microsoft.com/en-us/download/confirmation.aspx?id=11 ...
windows内核_2
@[TOC]
中断现场1.esp在进入内核前后的变化修改代码保存int 0x20前后两个esp的值,可以发现3环是一个小地址,0环是一个大地址
12345678910111213141516171819202122232425262728293031#include<stdio.h>#include<stdlib.h>#include<windows.h>DWORD g_esp[2];void __declspec(naked) IdtEntry() { __asm { mov [g_esp+4],esp iretd }}void go() { __asm { mov [g_esp],esp int 0x20; }}// eq 8003f500 0040ee00`00081040int main() { if ((DWORD)IdtEntry != 0x401040) { printf("wrong addr: %p", ...
windows内核_1
@[TOC]
环境搭建1.需要:vs2019+wdk选择对应得wdk版本,成功安装后可以在vs上看到此模块
wdk链接
2.接下来找到windbg位置,在桌面创建一个快捷方式,在目标后加上
1-b -k com:pipe,port=\\.\pipe\com_2,resets=0
3.虚拟机打开xp,添加一个串行端口,填上
1\\.\pipe\com_2
4.打开系统环境变量设置,添加如下环境变量
1_NT_SYMBOL_PATH SRV*D:\Myself_Software\Windows_soft\symbols* http://msdl.microsoft.com/download/symbols
5.打开设置好的xp虚拟机,首先在文件夹选项里把隐藏受保护得文件这个选项关闭,你就可以在c盘得跟目录下看到boot.ini文件在boot.ini文件最后添加代码
1multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=opti ...
cable management
@TOC 比赛:DiceCTF 2022 题目:cable management 介绍:Check out this VM I made! Wait… something doesn’t feel right…Note: The Dockerfile is provided on purpose…
简单的逆向分析 存在两个函数 sub_1200 输入函数 sub_1540 验证函数其中反编译sub_1540会报错栈太大,尝试了一下修复,没有成功后用ghidra反编译,可以看到清晰的逻辑,由于我不太擅长ghidra的操作,用它辅助ida完成全部的逆向工作尝试输入,如果长度不够不会有字符串提示,从而确定长度为29位
分析验证函数验证函数依次调用了输入函数,加密函数等。类似虚拟机一样,根据data段的数据,一个一个的改变输入函数:逐字节输入,把输入的字符拆分为二进制数据,参与到加密中加密函数:判断这个数据的上下左右0xec是不是为1个或者2个,是则返回1
分析完后发现这是一个2324*2324的地图,即使理解了全部的代码,但是到现在依然没有任何的头绪
VM的出题思路Wireworld
可以了 ...
可信执行环境TEE(rwctf)
@TOC只有一个re题,属于查文档现学现卖的类型,我发现国外题都喜欢这么考,不像平常做的硬在文件里搞个加密算法,当然这种题的难度还是很大的,比如这次在前期做题的时候就出现目标不明确的情况,不知道要干什么,ida都派不上用场,到后来hint出来的时候,才开始去搞tee,虽然说前面也关注到这个了,但方向还是走错了,浪费了大部分的时间
TEE背景随着移动设备的发展,移动设备的功能越来越强大,移动设备会存储用户的资产,处理支付等操作。目前移动端的系统运行环境叫做REE(Rich Execution Environment),在其中运行的系统叫做Rich OS(Operating System),包含Android、IOS和Linux,Rich OS的特点是功能强大,开放和扩展性好,可以给上层应用提供设备的所有功能,比如摄像头,触摸屏等,这样才有了我们现在看到的各种各样的应用。但Rich OS存在很多的安全隐患,比如经常会发现bug,OS可以获得应用所有的数据,很难验证OS是否被篡改,这些对于用户资产有很大的安全隐患,那如何解决这些问题呢?这时候就需要TEE帮忙了。TEE的全称trusted e ...
异常处理
@TOC阅读加密解密的异常处理章节,总结。
异常处理的基本概念当有程序发生异常的时候,CPU通过IDT(中断描述符)来寻找处理函数。IDT是存在于物理内存的线性表,32位下每项长8字节,64位下每项长64字节IDTR是用来描述IDT位置和长度的寄存器,一共48位,高32位是表的基质,低16位是表的长度。可以通过SIDT和LIDT指令来读取该寄存器,LIDT只能在ring0下运行发生异常的时候,通过类型号执行相应的函数(kiTrapxx),同时还会将异常处理信息进行封装,包括两部分:异常记录和陷阱帧
异常记录execeptioncode定义了异常产生的原因
陷阱帧描述了异常时线程的状态,记录了每个寄存器的情况此结构只在内核时使用,用户使用时会把陷阱帧复制一份命名为context来使用
处理过程封装好后,会调用nt!KiDispatchException来继续处理异常在内核状态下和用户状态下有着不同的处理过程,在有调试器或者没有调试器也有着不同的处理过程
内核下产生异常&&没有调试器:1调用nt!DispatchException,根据seh来处理异常2处理不了的话,调用K ...
寒假打卡
@TOC寒假打卡地
Easy Crack拼接flag得Ea5yR3versing
Easy Unpackod单步调试 可以找到oep
Easy Keygen异或
123456789101112#include<stdio.h>int data[100]={0x5B,0x13,0x49,0x77,0x13,0x5E,0x7D,0x13};int key[10]={0x10,0x20,0x30};int main(){ for(int i=0;i<8;i++){ data[i]^=key[i%3]; printf("%c",data[i]); } return 0;}
Easy ELF简单异或0x78^0x340x310x7C^0x320xDD^0x880x58
CSHOPc#程序有乱码先去混淆修改按钮大小
HateIntel4轮大循环,每次做特定操作,每位直接没有联系,可以爆破
1234567891011121314151617181920212223242 ...
反调试
@TOC核心原理的最后一章是反调试,闲的无聊,在宿舍又读了一遍反调试,做了个总结。
静态反调试PEBPEB被广泛运用于反调试手段这里一共有四个标志
12340x2 BeingDebugged0xc Ldr0x1b ProcessHeap0x68 NtGlobaFlag
首先说第一个BeingDebugged这个标志对应的api就是我们最常见的IsDebuggerPresent,当其值为1的时候代表程序被调试,破解方法就是在内存中把1修改为0即可。
第二个Ldr标志,这个只适用于xp操作系统PEB.Ldr指向PEB_LDR_DATA结构体,这个结构体实在堆内存创建的,而在调试的时候,未使用的堆内存会被填充为0xfeeefeee,只要我们把其修改为null,既可绕过反调试
第三个标志ProcessHeap,同样只使用于xp系统ProcessHeap可以通过GetProcessHeap()这个api来获取它指向HEAP结构体的指针第三个flags成员和第四个ForceFlags成员被用作反调试正常情况下flags的值为2 ForceFlags的值为0
第四个标志就是NtGlobaFlag这个 ...
SCTF
@TOC
这次比赛还是发现了自己的很多不足,第一个是内核类的题目比较陌生,导致有几个内核题我帮不上什么忙,再一个就是开发水平太菜了,推箱子那个游戏硬是卡了好长时间,最后差一点点但是放弃了比赛后,也是打算好好的把这次题目复现一下,虽然题目难,但也不至于像看雪那么难~
被师傅们带飞
godness dance这个应该是签到re题里面的签到题,赛后也是看了一下别的wp,直接动态调试,测试几组数据就可以理解程序的逻辑,我当时是动调到一半发现了规律,后面那一大串代码并没有什么阻碍后,把正向算法直接列了出来。
输入长度28位 a~z各一个 再加个i和u正向算法 一共三个循环
123456789101112131415161718192021222324252627282930313233#include<stdio.h>char a[100]={ 0x00000002, 0x0000001A, 0x00000011, 0x0000001C, 0x00000018, 0x0000000B, 0x00000015, 0x0000000A, 0x00000010, ...