Crack小实验
0x01 实验环境: 操作系统 windows10 编译器 visual C++6.0 编译选项 默认编译选项 build版本 release版本 release和debug都可以 0x02 release 用vc++6.0编译出来一个release版本; 改变可执行文件得执行流程,使输入任何字符都可以进入正确的执行流程; code /***************************************************************************** To be the apostrophe which changed "Impossible" into "I'm possible"! POC code of chapter 3.7 in book "Vulnerability Exploit and Analysis Technique" file name : crack_me.c author : failwest date : 2006.9.20 description : used as a simple demo to show how to crack a PE file Noticed : should be complied with VC6.0 and build into release version version : 1.0 E-mail : failwest@gmail.com Only for educational purposes enjoy the fun from exploiting :) *****************************…
thumbnail
遗憾:比赛失利后的低迷
是无知还是盲目自信,是闭门自乐还是造就闹剧…… 当所有人都希望你赢,并且报有很高的期待时,你却输了、还是那么戏剧性的输。这种把期待高高举起、又狠狠摔下带来的冲击,让人怒意十足。  但对本人来说,打击更是持续性。自己都觉得能赢,但上场后竟以那种方式输。不甘、愤怒,委屈,后悔、悲痛、低迷,一种接一种的情绪袭扰上头,让人沦陷。近距离观看开幕式,运动员代表迈着坚实步伐上台宣誓。我的思绪随着他慷慨激昂的言辞拉回了曾经:黑云压城,狂风肆掠,四校巅峰对决不容推迟。于是,在图书馆一层大厅,一场场巅峰对决悄然而至:我作为运动员代表上台宣誓,紧张又激动,颤颤巍巍高声喧读。我是开场,却将比赛拉向低迷。一上场,肌肉紧绷了,缺少了灵活,大脑就像死机了一般,卡顿、空白、停滞。本能停滞,呆愣麻木。忘记了散打动作、忘记了防守、忘记了平常学的一切。很快,鼻子被打了一下,流血不止!喊停后,一群人上来帮忙,送水、毛巾,血止住了…开始…又流了,止血、开始、又流了……一遍又一遍。这不是比赛,这是玩儿……比赛继续进行着,但大家的心已不在是激动,取而代之的是失望、无奈……我无颜呆在现场,独自一人悄然离开,默默反思,静静等待。时间过得很慢很慢,自责、不甘、愤怒的情绪反复环绕,久久不能平静。比赛结束了,大家准备离场,我瞅准机会,带着不甘,证明,怒意请求再打一场,一遍又一遍。裁判终于绷不住了,大吼到,“我和你打!”原先施展不开的拳脚,此时竟如此灵话,只是可怜了我们的裁判。在把所有的劲力使完之后,一个人悄然离开了赛场,在一个隐蔽脚落坐了下来:难受、委屈、不甘、悔恨…一系列情绪涌上心头,久久不能平复。最让我难以接受的是,辜负了所有人的期望,这让我无颜面对。夜晚、组织了庆功宴。而我,给大家极大失望,没有功、只有辱,又怎好赴约?本能的想逃避、不想前往。但…
【OS】06 – 突破512字节的限制(上)
参考: 【OS】06 - 突破512字节的限制(上)   0x01 定义栈空间 sp寄存器的值 为什么要用0x7c00用作栈的起始地址? 程序执行从0x7c00从低地址到高地址执行;栈的增长方向是高地址到低地址(和程序执行方向相反); 用0x7c00作为栈的起始地址是可以的,函数调用的操作(栈增长)不会影响程序的执行;   0x02 读取数据 需要的文件 bochsrc ############################################################### # Configuration file for Bochs ############################################################### # how much memory the emulated machine will have megs: 32 # filename of ROM images romimage: file=/usr/local/share/bochs/BIOS-bochs-latest vgaromimage: file=/usr/share/vgabios/vgabios.bin # what disk images will be used floppya: 1_44=data.img, status=inserted # choose the boot disk. boot: a # where do we send log messages? # log: bochsout.txt # disable the mouse mouse: enabled=0 # enable key mapping, …
实现驱动加载器并且和驱动通讯(提示:内容稍长)
    目标: 用户一键使用: 驱动加载(将驱动的安装、启动、停止、卸载的服务放到R3程序中来实现,作为可发布程序使用) 通过驱动的control回调函数和控制码来实现通讯       0x01 项目管理 环境整理: 创建一个空白项目,主要是为了用空白项目的解决方案 把Ring3和驱动加入到解决方案,环境里删掉刚创建的空白项目即可,就不用频繁的切换环境 把Ring3和驱动的输出都放到bin目录下(两个都需要设置),便于实验   整理后的效果   0x02 实验验证: 创建服务 2.1 验证过程 Ring3.cpp #include <stdio.h> #include <windows.h> /* 如果没有R3得程序怎么加载呢? 微软有个inf文件,这个东西可以安装,在微软的官方文档中有说明inf内容怎么写; OS会解析inf这个配置文件,帮助动态加载驱动 例: 如果硬件需要开机启动加载,微软再开机时会自动加载inf文件 驱动加载的方式: 1. inf文件来加载 2. 动态加载(服务) 创建服务就是安装驱动(很多软件都可以使用打印机,那么就可调用打印机的驱动,驱动的角色是服务),也就是需要4个api就可以完成这些工作; 创建服务 启动服务 停止服务 卸载服务 */ void showErr(const char *name) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastE…
软件工程师需要关注的一手资料信息(持续更新…)
在线编译:支持31中语言 OnlineGDB beta ISA 【官】 Intel 手册 【官】 ARM A64 ISA 【官】 ARM A32 ISA x86 vs ARM Intel 指令集表格版   汇编语言 【官】 AS Manual X86 Assembly(Intel) X86 Assembly(AT&T)   Linux 【官】 源码下载 【官】 man page 【官】 GNU software 在线查看 Linux Base   C 【官】 GNU C Manual   ELF 【官】ELF_Format 带书签的 ELF wiki 这里有张图很好 System V Application Binary Interface-1 System V Application Binary Interface-2   gcc 【官】官方文档   glibc 【官】源码下载 【官】手册 手册在线 pdf 在线查看   工程化 make 【官】手册 跟我一起写 Makefile makefiletutorial   autoconf 【官】手册   Java 语言 【官】Java Language and Virtual Machine Specifications 【官】JEP 【官】JSR   OpenJDK 通用网站 著名源码在线看 Linux Assembly cppreference RFC gnu binutils gnu coreutils   优质资源或教程 eater ELF for armv8 造轮子 LFS arch linux 电脑博物馆 在线观察 …
R3和R0的交互(NT框架的使用)
  验证环境/使用工具: visual studio 2019、Windows XP、winobj、Dbjview 验证目标: 让R3和R0能通过读写交换数据,也就是驱动和R3做交互过程(NT框架包含了这个交互)   内核API(极简进化史): 系统 => 抽象驱动 => 硬件 抽象驱动是什么? 1). 简明:驱动框架 => 读、写操作 => 硬件 2).详细(进一步思考:文件的抽象,操作文件):驱动框架 => 文件(打开、读取、写入、控制、查询信息、关闭) 下发配置: 应用程序 => ReadFile => 系统 => 驱动::读取 => 厂家驱动 => 硬件 获取信息: 应用程序 <= ReadFile <= 系统 <= 驱动::读取 <= 厂家驱动 <= 硬件   糟糕,出师不利,出现了一点点点的问题: 整理代码之后,不知道为什么,vs2019中driverentry 的结构体死活打不开,要看里面的成员啊。 解决方案: 经过一番设置之后,还是不行,重新创建个项目试下,果然还得是重新创建项目,项目正常了。果然还得是老话:“重装系统能够解决99.9%的问题”   两步走计划: 注册派遣函数 驱动绑定到 "设备",来调用驱动 完成R3和R0的数据交互   0x01 注册派遣函数 sample.h #pragma once #include <ntddk.h> VOID Unload(__in struct _DRIVER_OBJECT* DriverObject); extern "C" NTSTATUS …
【OS】01&02 – Hello,DTOD!
【OS】01 :进阶操作系统 【OS】02 - Hello,DTOD!   2024/07/17 更新     目的: 编写一个主引导程序(汇编语言) 可独立运行x86架构的主机(无操作系统) 运行后屏幕上打印字符串;     思路: 引导程序 (类比C语言) 入口: | 0x7c00 | (main) 主题: | 汇编语言 | (C/C++) 底层: | bios中断 | (OS系统调用) 1、关键寄存器设置为 => mov ax,0 2、定义要打印的数据 => db "hello DTOS!" 3、打印预定义好的字符数据 => int 0x10   代码:   boot.asm org 0x7c00 start: mov ax, cs mov ss, ax ;初始化堆栈段,使其与代码段相同。 mov ds, ax ;初始化数据段,使其与代码段相同。 mov es, ax ;初始化附加段,使其与代码段相同。 mov si, msg ;si 通常用于字符串操作或指向数据的地址 print: mov al, [si] add si, 1 cmp al, 0x00 je last mov ah, 0x0e ;设置中断调用的功能号,这里0x0e代表的是在文本模式下输出字符的功能,表示 BIOS 的 teletype 输出功能 mov bx, 0x0f ;表示字符颜色(白色) int 0x10 jmp print last: hlt jmp last msg: ;定义输出数据 db 0x0a, 0x0a ; db => define byte, db的定义了两个数据,0a换行符 db &qu…
【OS】03 – bochs环境搭建
引用:【OS】03 - bochs环境搭建-理论详情 开发环境搭建 bochs安装、配置和测试 bochs调试环境搭建和测试 bochs常用调试命令 0x01 Bochs安装和配置 1.1 ./configure --enable-debugger --enable-disasm ./configure --enable-debugger --enable-disasm 有报错,无法继续后面操作 1.2 sudo apt-get install libgtk2.0-dev 参考网友的做法 sudo apt-get install libgtk2.0-dev 1.3 ./configure --enable-debugger --enable-disasm 再重新解压: ./configure --enable-debugger --enable-disasm 1.4 make 执行: make 1.5 sudo make install 安装: sudo make install 1.6 测试是否安装成功 执行: bochs 运行崩溃,但这是安装成功了 0x02 实验验证:Bochs的验证 2.1 启动文件模板 文件放到虚拟机里,把值填进去; Bochsrc ############################################################### # Configuration file for Bochs ############################################################### # how much memory the emulated machine will have megs: 32 # fil…
【OS】04 – 主引导程序的拓展(上)【了解Fat12】
【OS】04 - 主引导程序的拓展(上) ,理论详情 实验: 把文件写入虚拟软盘 0x01 创建虚拟软盘 1.1 创建虚拟软盘和文件,文件写入虚拟软盘 需要的工具: bochsrc freedos.img bochsrc ############################################################### # Configuration file for Bochs ############################################################### # how much memory the emulated machine will have megs: 32 # filename of ROM images romimage: file=/usr/local/share/bochs/BIOS-bochs-latest vgaromimage: file=/usr/share/vgabios/vgabios.bin # what disk images will be used floppya: 1_44=freedos.img, status=inserted # choose the boot disk. boot: a # where do we send log messages? # log: bochsout.txt # disable the mouse mouse: enabled=0 # enable key mapping, using US layout as default. keyboard_mapping: enabled=1, map=/usr/local/share/bochs…
深入浅出的处理器
深入浅出的处理器(上) 深入浅出的处理器(中) 深入浅出的处理器(下) 深入浅出的处理器(续) tip: 点击链接的时候按下键盘的 CTRL 就会另外新打开一个页面
gcc的编译选项-详细
嵌入式C语言编译器,文章的理论部分 注意: 下文验证的内容,使用的是这里的func.h、test.c func.h #include <stdio.h> void func() { #ifdef TEST printf("TEST = %s\n", TEST); #endif return; } test.c #include <stdio.h> #include "func.h" int g_global = 0; int g_test = 1; int main(int argc, char *argv[]) { func(); printf("&g_global = %p\n", &g_global); printf("&g_test = %p\n", &g_test); printf("&func = %p\n", &func); printf("&main = %p\n", &main); return 0; } 0x01 预处理指令: gcc -E test.c -o test.i test.i # 1 "test.c" // 1 :表示后文部分是test.c的第一行展开内容 # 1 "<built-in>" # 1 "<command-line>" # 1 "test.c" # 1 "/usr/include/stdio.h" 1 3 4 // .....…