自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(398)
  • 资源 (4)
  • 收藏
  • 关注

原创 VS如何调试C运行时库

这些代码是可以随着VC工具集一起安装到我们本地的。看一下这个情况, 就是VS调试器没找到对应的crt源码的情况, 调用堆栈是空的。C运行时库(简称crt)是C标准库等组件的基础, 其会在进入main函数之前运行一些代码, 包括但不限于初始化堆栈, 内存分配等操作。

2024-02-17 03:33:33 390

原创 CMake进行C/C++与汇编混合编程

要非常注意名称粉碎的问题, 函数在C++编译后的名称, 与C编译后的名称是完全不同的, 为了确保能够找到对应的名称, 如果你要使用C++特性必须加上extern "C"让C++函数以C的名称粉碎的方式进行汇编语言和C的名称粉碎结果是一样的, 但是调用约定会影响名称粉碎的结果。默认情况下C/C++都用的是C调用约定, 所以你的汇编代码也要用C调用约定, 这也是为啥我用的是.model flat, C了(完)

2024-02-16 23:10:36 1469

原创 VS Code添加环境变量

有时候你会发现即使添加了环境变量, 打开VS Code的命令行终端也找不到对应的环境变量。

2024-02-16 06:21:43 967

原创 Idea中web项目一些配置问题

我从github上clone项目下来后发现idea的一些配置没有带下来需要自己配, 这花了我很多时间, 所以这里总结一下。

2024-01-11 11:22:25 870

原创 Java生成Jar包方法

Java生成Jar包的方法

2023-10-27 11:02:10 319

原创 Intel汇编语言程序设计(第7版)第八章编程练习题答案

【代码】Intel汇编语言程序设计(第7版)第八章编程练习题答案。

2023-10-21 19:14:58 260

原创 无管道后门(Backdoor)编写

如果主控端发来命令, 后门程序从socket收到了命令将其重定向到了stdin中, 由于标准句柄已被cmd.exe继承, 所以cmd.exe收到命令并执行后, 从标准输出和标准错误把结果重定向回了socket, 并通过其传回主控端。这是基于异步套接字的后门, 利用windows提供的WSASocket API函数, 这个API和socket的区别是, 其无需等待收发完成就可以继续执行, 也就是异步的。后门创建子进程并让子进程继承自己的3个标准句柄, 并将这3个句柄全部重定向到socket上。

2023-10-18 13:39:07 240

原创 PE文件之导入表

【代码】PE文件之导入表。

2023-10-03 18:40:20 238

原创 Intel汇编语言程序设计(第7版)第七章编程练习题答案

【代码】Intel汇编语言程序设计(第7版)第七章编程练习题答案。

2023-10-03 09:26:58 210

原创 PE格式之PE头部

【代码】PE格式之PE头部。

2023-10-02 18:53:29 187

原创 C/C++与汇编混合编程

这个原因已经很明显了, 因为C语言默认使用C调用约定, 编译后生成的是_name格式的函数名, 当汇编使用STDCALL调用约定时, 生成的是_name@n格式的函数名, 当链接时自然就无法找到名称了。可以发现经过C++编译器编译后, C调用约定下Add函数生成了一种非常奇怪的形式, 这主要是为了实现重载而做的。C++源码生成obj, 放入winhex内便可发现, C++使用了C的名称修饰方式, 不管是什么调用约定, extern "C"都会让C++使用C的调用约定。因为如果你要用C++调用C代码。

2023-10-01 15:36:32 1018

原创 MASM32配置问题

由于我是把masm32 SDK装在D盘, 如果你不是装D盘, 那把D:\masm32换成你的安装目录就行了, 需要注意的是, 不要在脚本的后面多空格或者其他的字符, 这样会导致找不到, 因为bat脚本会把那些字符也包含进去。实际上这种方式和添加环境变量是一样的, 只是使用了批处理bat来自动化处理。直接把需要的inc头文件或者lib库文件的绝对路径包含进去, 问题就解决了。为了能够直接在终端运行, 也要将该目录添加到环境变量的PATH下。执行了这个批处理后, 就可以进汇编的汇编链接了。

2023-10-01 11:20:45 666

原创 Intel汇编语言程序设计(第7版)第六章编程练习题答案

【代码】Intel汇编语言程序设计(第7版)第六章编程练习题答案。

2023-09-23 11:39:55 152

原创 Intel汇编语言程序设计(第7版)第六章编程学习过程中写的小例子

如果选择分支过多可以构造一张表专门指向对应的地址。

2023-09-23 08:01:50 234

原创 Intel汇编在VS下开发的环境配置

masm32开发包下载地址(完)

2023-09-21 21:56:40 265

原创 Intel汇编语言程序设计(第7版)第五章编程练习题答案

【代码】Intel汇编语言程序设计(第7版)第五章编程练习题答案。

2023-09-21 18:46:03 338

原创 Intel汇编语言程序设计(第7版)第四章编程练习题答案

【代码】Intel汇编语言程序设计(第7版)第四章编程练习题答案。

2023-09-16 01:08:16 363

原创 [CrackMe]Cabeca.exe的逆向及注册机编写

又是Delphi的程序, 有了上次的经验这次顺利了很多。差不多花了70分钟的样子, 把这个东西逆出来了。先运行一下, 看看基本的功能, 这个作者一直用dumb或者idiot来称呼破解者(无奈), 着实有点皮填充不完全会出现如下对话框:如果serial不对, 会出现如下对话框:这个crackme会通过Name来计算出Serial1和Serial2两个值, 如果满足要求过了。直接定位到Button的处理函数。下断点, 输入一些值后F9运行, 断到Button的处理函数。

2023-08-07 16:20:13 963

原创 [CrackMe]BuLLeT.exe的逆向及注册机编写

Delphi写的, 其实这个crackme很弱鸡, 但我还是花了好几个小时逆向, 一来是因为我第一次逆向delphi程序, 二来里面有很多转换函数, 我以为是加密函数, 结果一个个分析花了很多时间。而且Delphi的库函数也很多, 每次遇到了会被困住, 然后到IDA里面去看看有没有解析出来, 在里面也转了很久。CalcInputWrapper里面最核心的是这段代码, 首先减去0x30是为了把字符串数字战场转成真正对应的数字, 然后判断是否大于9, 如果大于9或者已经到了末尾就返回并弹框。

2023-08-06 21:23:23 914

原创 逆向时如何找到MingGW(GNU)编译程序的main函数

为了探究里面究竟怎么回事, 我找到了wrk-v1.2的源码, 其中包含了ZwContinue的实现, 首先先看一下注释, API界面包含了2个参数, 其中让人感兴趣的是PCONTEXT, 这是一个线程上下文环境, 其中包含了线程的执行环境, 也许main函数主线程就是位于这个上下文环境中。方便让线程继续运行。编译器是MingGW生成的可执行文件的显著特点是, 最终运行ZwContinue后程序就莫名其妙启动了, 也找不到main函数。先忘了原本的目的, 既然都来了, 看一下这个API的实现。

2023-08-04 18:09:44 975

原创 NsPack3.x脱壳手记

完成后就可以Fix dump了, 这样就完成了对IAT表的修复, 注意这里Fix Dump后会要你选择一个exe文件, 你要选择之前通过LordPE转储下来的exe, 因为Scylla是修复转储, 那肯定是在dump文件的基础上。发现了IAT表中有0存在, 了解过PE结构的可能会知道一般IAT表中0代表结束, 也就是说NsPack3.x把IAT表给中断了, 下面进行修复。将IAT表的大小设置成一个非常大的值, 这样就会搜索很大范围内的IAT内容而忽略了IAT表中存在0造成截断的影响。接着把无效的部分删除。

2023-08-04 16:32:00 279

原创 [CTF Re] easyxor.exe

这是adword的一道题目。

2023-08-01 14:37:59 362

原创 [CrackMe]Cruehead.2.exe的逆向及注册机编写

这个版本连一个注册界面也没有进去一看, 他打开了一个CRACKME32.KEY, 估计里面就是放key的, 于是我随便写了一些数字进去从CRACKME32.KEY中读取18个字节, 然后确认读取是否成功, 可见密码是18字节, 回去把密码长度改成18在重新调试接着把key值输入CalcHash函数内计算一个FinalHash值, 在将其与0x12345678进行异或。

2023-07-31 12:23:20 1049

原创 [CrackMe]Cruehead.1.exe的逆向及注册机编写

作者弄了很多个对话框来迷惑破解者, 然后真正有用的对话框只有这个这个窗口过程函数处理的是父窗口其他的不关心, 只关心WM_COMMAND消息里面有3个分支, 其中最重要的是按下register按钮的那个整个逻辑非常清晰, 其算法是把name的每个字符转成大写字母进行相加然后与0x5678进行异或算出hash这里通过对每个字减去0x20来达到大小写转换的目的, 然后相加最终的hash值和0x5678进行异或操作。

2023-07-30 15:55:42 963

原创 [CrackMe]damn.exe的逆向及注册机编写

这个crackme有2个文件发现加了壳先来脱壳, 使用ESP守恒, pushad后立马下硬件访问断点F9直接运行, 立马到popad处接着走几步就到了OEP下面使用LordPE来转储映像, 为了防止别人修改PE中的ImageSize, 先尝试修正下ImageSize, 然后dump full即可接着用x64dbg调试器重新打开dump后的文件, 准备修复入口点和IAT表, 在这之前往内存里瞄了一眼, 发现主模块的PE头部被设置了只读属性, 首先先将其改成可读写这样就舒服多了。

2023-07-29 16:04:01 1116

原创 [CrackMe]Chafe.2.exe的逆向及注册机编写

先上手把玩一下, 从外观上看感觉和Chafe.1.exe差不了多少, 还是那个界面找到RegisterClassEx从而找到其对应的窗口过程找到对应的WM_COMMAND分支首先其修改了代码中的4个字节, 将其修改成0x00584554, 然后通过GetDlgItemInt获取了serial值这里其实原本就是这个值, 只不过作者为了确保是0x00584554, 再次写入。

2023-07-28 15:17:03 975

原创 代码重定位技术

本来每个进程都各自的进程地址空间, 但如果使用了比如注入技术后, 自身的那段代码就会进入到别人的进程地址空间内, 这将导致内部使用的API地址和变量地址发生变化, 因为注入到的位置和自身在自己进程地址空间种的基址很可能会不一样。

2023-07-27 14:28:01 310

原创 [CrackMe]Chafe.1.exe的逆向及注册机编写

这个crackme使用的思路是切换栈帧, 他自己构造了一个栈帧, 该构造的栈帧上有4个例程, 其通过挪动ESP指针来切换每个例程, 每次切换栈帧并调用对应例程如果成功都会有4的累计, 那最终会有4 * 4 = 0x10, 如果满足这个值那就说明serial key是正确的。接下来进入第2次, 由于第一次成功了, 即获得了符合条件的serial key, JmpEspOffset目前是4, 这个值代表了新构造的栈的偏移, 所以新栈顶要挪动4个字节。上来就直接发现关键跳转, 难道这题这么简单吗?

2023-07-27 01:18:42 990

原创 [CrackMe]Brad Soblesky.1.exe和Brad Soblesky.2.exe的逆向及注册机编写

CrackMe小程序Brad Soblesky.1.exe和Brad Soblesky.2.exe分析。

2023-07-26 13:09:38 1123

原创 一个恶意下载器的逆向分析

如果这里调用MoveFileEx失败改名失败则会进入无限循环不断改名, 直到改名成功为止, 改名成功后会调用ShellExecute将该进程打开,并以隐藏方式执行。并且其还使用了LoadLibrary和GetProcAddress这两个API, 很可能有动态获取API的函数地址来达到规避杀软查杀的目的。Die查壳, 发现没有加壳, 是使用VC++编写的64位程序。查看其PE节区发现其包含了资源节, 内部可能藏有隐藏模块。查看一下这个程序导入的dll中发现了如下特别的地方。发现改名失败, 因为不存在该文件。

2023-04-27 20:06:11 964 1

原创 [Windows内核源码分析6] 引导过程(执行体管理器初始化在Phase1部分的分析)

查看内部具体做了什么, 首先它根据是否是NT系统以及系统的大小来决定要创建的工作线程数量。接下来对这个工作线程队列数组进行初始化, 其中的。查看一下其内部做了什么, 其内部主要做了2件事。看一下这个结构体的内容, 其中最重要的就是。是指代数组中各项的队列类型的数组下标枚举。是3,即这个数组的总数, 其他的。为每个工作线程队列创建工作线程。阶段1的执行体初始化主要调用了。这个字段是一个双向循环队列。初始化工作线程队列数组。看一下这个数组的类型是。

2022-10-12 17:41:03 630

原创 [Windows内核源码分析5] 引导过程(对象管理器初始化在Phase1部分的分析)

其内部执行的操作很简单,一个是创建一个目录对象, 接着将该目录对象插入到全局名字空间中。**目录对象并创建了3个指向它的符号链接。如果存在但是并非是我们需要定位的对象类型,就不能重复插入,确认具体的原因后返回。如果定位到了该对象, 并且是我们需要插入的对象类型,首先需要做一些安全方面的工作。所以其内部创建了对应类型的对象后,返回指代该对象的句柄。成功创建了该对象后, 为其制定DACL并再其中加入了ACE规则。来通过句柄引用了这个对象, 获取指向该对象的指针。为该对象在进程中创建句柄表项,并获取该句柄。

2022-10-11 18:46:50 670

原创 [Windows内核源码分析4] 引导过程(Phase1部分分析)

后查看当前处理器的线程链表中是否有需要运行的线程,如果没有就让当前处理器运行Idle线程。接着就返回准备执行阶段1的初始化工作线程。后首先调用HalAllProcessorsStarted通过HAL硬件抽象层所有处理器已经初始化完,接着就对对象管理器, 执行体管理器, 调试器管理器, 安全管理器的阶段1的初始化以及调用。下面来继续分析,首先来看看现在的调用栈, 当我们从Phase0的初始化返回时的调用栈如下。由于阶段1的初始化内容比较多,这里仅做对整体的流程分析,其中的细节之后会写文章继续分析。

2022-10-10 19:08:27 820

原创 哈希表的C++实现

【代码】哈希表的C++实现。

2022-10-10 17:02:33 1381

原创 Intel汇编语言程序设计第四章答案

【代码】Intel汇编语言程序设计第四章答案。

2022-10-08 17:20:26 229

原创 [Windows内核源码分析2] 引导过程(进程线程管理器初始化在Phase0部分的分析)

的整个流程, 刚开始都是一些初始化工作, 这些工作中需要提一嘴的是对进程线程以及模块加载卸载监控的回调的初始化,熟悉反游戏外挂的人肯定对这几个接口非常熟悉。来创造一个进程句柄表, 即CID句柄表。由于这个函数会使得该表位于之前创建的全局内核句柄表链表上, 而这个CID表示属于进程拥有的。本文章记录分析进程线程管理器在windows系统引导的阶段0中的初始化工作。主要是PsInitSystem函数。接下去初始化了一个工作队列中PsReaperWorkItem类型的回调函数。把该表从全局内核句柄表链表上摘除。

2022-10-07 14:46:33 457

原创 [Windows内核源码分析3] 引导过程(安全管理器初始化在Phase0部分的分析)

本文章记录分析安全管理器在windows系统引导的阶段0中的初始化工作。主要是SeInitSystem函数。进入后内部调用的实际上是。

2022-10-07 14:06:40 551

原创 平衡二叉搜索树的C++实现

该模板类实现了平衡二叉搜索树的操作,其搜索的效率高达log2。

2022-10-05 22:08:31 280

原创 双向循环链表的C++实现

【代码】双向循环链表的C++实现。

2022-10-05 22:05:25 551

原创 动态字符串的实现

【代码】动态字符串的实现。

2022-10-05 22:03:48 193

一个在用户层的调试器设计书

一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书一个在用户层的调试器设计书

2020-10-09

dd for windows

dd工具dd工具

2018-04-07

BZ二进制查看工具

二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具二进制工具

2018-04-07

30天自制操作系统光盘文件

30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统30天自制操作系统

2018-04-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除