自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 问答 (1)
  • 收藏
  • 关注

原创 xp的viostor驱动无法获取磁盘序列号的分析

深信服的viostor驱动在获取序列号的时候,多了一个IDE处理的代码,位置在+1128处。它会在刚开机加载viostor.sys时机被调用,然后去读取注册表HKLM\\SYSTEM\CurrentControlSet\Services\viostor\Parameters的IDESNCompat,若为1则有此功能,若未0则不会得到正确的磁盘序列号。若采用深信服的viostor.sys,则可查询到outputbuffer+0x24处是正确的磁盘序列号文字。调用时机也是发生在刚开机viostor刚载入时。

2023-12-24 21:54:19 385

原创 7B蓝屏INACCESSABLE BOOT DEVICE

在p2v的开发阶段,经常出现这个蓝屏,常见的原因有:1. 分区表错误潜在原因:p2v的qemu-img resize --shrink砍减qcow2空间时,实际是对磁盘尾部直接砍减,会使得分区表在尾部的数据丢失。修复方法:启动pe系统,附加qcow2磁盘,用diskgenius修复分区表错误。或转为mbr(gpt)再转回gpt(mbr)。2. 存储控制器驱动未设置正确潜在原因:virtio-scsi驱动安装失败或tci的bios里没开启ahci修复方法:更换存储控制器看看是否能解

2023-12-24 21:18:39 400

原创 windbg通过qemu的gdbserver调试虚机windows的方法

通过此gdbserver,可以查看虚机的cpu寄存器,虚拟地址内存等。另一台机的windbg可以连接上这个tcpserver,进而调试虚机。为例,猜测这段地址处于nt模块中,而nt模块的载入地址一般是0x100000的整数倍。dh来解析这个pe头,挨个输入700000,600000,500000……前四位是0如此字样则表明暂停在用户态,此时可g再暂停或~1s切换一个cpu线程,直到rip走到内核态。,随后能看到新的cmd窗口和windbg preview的窗口出现。无法显示pdb文件名,原因未知。

2023-12-24 21:14:45 974

原创 给qemu虚机更换(Windows PE)光盘

如果遇到虚机windows启动故障,甚至连安全模式也故障时,可以尝试更换另一个光驱里的光盘为pe光盘。并未看到原先c,d盘,因为他们所属的硬盘挂载在scsi控制器之下。打开devmgmt.msc,对scsi设备更新驱动,驱动源选择gt光盘的根目录。若为legacy启动,则上传legacy类的pe.iso到云主机。重启后马上连按esc,可进入bios界面,届时可选择从光驱启动。若为uefi启动,则上传uefi类的pe.iso到云主机。,如果有则说明是uefi启动,否则是legacy启动。

2023-12-24 21:12:36 956

原创 windows应用程序堆损坏的调试

一种方法是自动弹出调试器(事先在Windbg(x86)里执行Windbg.exe -I大写的i)最近遇到iexplore.exe的崩溃,windbg查看崩溃原因是堆损坏,参见《软件调试》,给出分析方法。一启动1.exe,可以看到数字刷到8000多的时候才会崩溃。我们打开windbg(x86)的文件夹,将gflag.exe拖曳到cmd命令框中,执行。再去执行1.exe,可以看到,当数字在16的时候,就会崩溃(或弹出调试器)。再去执行ie,当ie触发堆损坏的时候,自然就会崩溃或弹出调试器。

2023-12-24 21:06:59 395

原创 c++代码寻找USB00端口并添加打印机

插入USB端口的打印机,安装打印机驱动,在控制面板设备与打印机处的打印机对象上右击,可以看到打印机端口。对于不少型号,这个端口是USB001或USB002之类的。经观察,这些USB00*端口并不是打印机驱动所创建的。即使不安装打印机驱动,插入此型号的打印机也会创建或者复用USB00*端口。从中可知,端口是在的指示下创建的。所谓复用,指的是,若USB001端口已存在并且没有关联上打印机,那么此时插入相关型号打印机,此打印机设备会跟USB001端口绑定起来。在设备管理器中可以看到USB00*

2023-12-24 17:02:34 1112

原创 dpc与线程切换

因为一则用户态的程序没办法干扰这个呼出流程,二则如果不能呼出任务管理器来终止进程或者呼出windbg等工具进行观察调试的话,其实排查的方法也跟windows卡死是一致的——触发scrolllock蓝屏。大部分代码运行在被动级别上,线程切换流程里的某个阶段和dpc的DeferredRoutine处理是运行在dpc级别上,硬件中断都更高。上文的90对应的函数i8042prt!同样是按键后的反应,为什么在ctrl+alt+del不能呼出的场景下,scrolllock蓝屏还能够触发,也是一个获取关键知识的方向。

2023-12-24 16:55:55 946

原创 关于TCI的Z:\pagefile无助于蓝屏dmp生成的研究的阶段研究——蓝屏dmp生成、内核调试、IDA逆向

关于TCI的Z:\pagefile无助于蓝屏dmp生成的研究的阶段性研究。

2023-12-24 16:49:14 1181

原创 从源PC上一次性p2v(qcow2)的构想

纵使rcdc没有300GB的限制,如果不砍减,在IDV场景下,即使客户实际只需30G的C盘,那么110.5GB的空间shine模块总要预留出来给C盘扩展用,这个预留就是浪费了的。分区表表头:在给磁盘建立分区表后,磁盘初始位置的几百~几千字节的数据就是分区表表头,它索引了该磁盘分为几个分区,每个分区的头尾位置、大小、预设功能等。一个虚拟磁盘文件模拟一个磁盘,要模拟两个磁盘得用两个虚拟磁盘文件。由于4.1.E是新建的分区表,所以磁盘的mbr签名或者gpt的磁盘guid都是新建的,大概率不会跟源磁盘雷同。

2023-12-24 16:38:35 942

原创 一例“msvc编译器O2优化触发的崩溃”的分析

用volatile避免优化触发的崩溃隐患

2023-09-23 19:23:08 202

原创 win7x64新进程画面均无显示一例分析——从内核态到用户态,从x64到wow64,从汇编到托管

新进程无画面是因为0号线程被mutex(DictManager_GlobalLocker)卡住。输入法SOGOUPY用到的mutex(DictManager_GlobalLocker)无法释放是新进程卡住的直接原因。无法释放是因为本该由进程Imclient里线程fffffa80c895c950释放,但是它也被CriticalSection=7b0138卡住无法释放。cs=7b0138本该由Imclient里线程574来释放,但是它出了异常,异常代码的执行中也进入Wait了。

2022-10-18 17:41:19 636 1

原创 windbg找出指定驱动所在的内核调用栈

诸如Windows卡死或应用程序不明原因卡住等问题,如果我们怀疑是某个驱动导致,我们可以在dmp中查看此驱动所在的内核调用栈,看看是否此驱动调用了某些Windows同步函数而卡住。例如我怀疑是RegFilter.sys导致的Windows卡住,我可在系统dump中执行留意此处的Blocked。线程fffffa80ca29f930和fffffa80cb62c060 002bca8他们的调用栈就有RegFilter调用nt!ExAcquireFastMutex进而卡住。下一步就联系RegFilter的开发

2022-06-14 11:19:16 535

原创 win7安装KB4487898失败

某win7 64环境安装KB4487898后提示重启,重启后就提示失败。必现。此补丁为2019年3月12日之月度汇总。微软每月都会发布一个月度汇总,以及一个仅安全更新的月度更新。查看原故障环境已成功安装KB4462923(2018年10月9日的月度汇总)。故而有一个思路就是按顺序安装2018年11月,12月,2019年1月,2月的月度汇总,或许就能解决2019年3月这个月度汇总安装失败的问题。经过试验,大致可行。不过KB4486563(2019年02月12日的月度汇总)安装失败。改为安装2019年2月

2022-06-09 16:05:49 270

原创 systeminfo卡死一例分析

Win7 64位OS。设备与打印机窗口的进度条持续不能走完,此时打开设备管理器也依然卡住,systeminfo.exe程序也会卡住。此故障现象偶现难以复现。鉴于另外两个进程的线程太多了,就优先从systeminfo进程入手研究。给systeminfo进程下dmp,用windbg打开dmp,先查看每个线程的栈回溯:姑且猜测是0号线程,在等待应答,进而整个进程卡住。0号线程最后调用的是NtAlpcSendWaitReceivePort。这个api类似于网络socket的send和recv一体。它的声明如下:

2022-06-07 17:23:52 1134

原创 Windows Performance Analysis Field Guide笔记汇总

文章目录1 作者简介2 书中介绍的工具3 存储与网络相关3.1 存储3.2 网络4 内存相关4.1 进程内存4.2 内核内存4.3 系统提交内存4.4 页面文件4.5 物理内存5 处理器相关6 开机性能7 日志性能分析(PAL)工具8 可能导致整机卡死的原因书中大量篇幅介绍了各种磁盘(虚拟)内存的概念和性能指标的查看。这对于我们实时监控Windows的运行时性能,预警性能不足的方案提供了数据参考。对于cpu和网络,开机性能相关的性能指标着墨较少。对于Windows的卡顿延迟或卡死挂起现象的原因做了预测。

2022-04-20 14:56:20 1008 1

原创 64位windows下32位进程一例卡死分析

@TOC1 故障现象win7 64 os下,360浏览器不定期出现卡死。2 dmp分析使用任务管理器给360se进程下dump。链接: https://pan.baidu.com/s/1Hd-T0T6WEcufjkFKDA6MHg?pwd=z4u5 提取码: z4u5。windbg打开之,提示For analysis of this file, run !analyze -vwow64win!NtUserMessageCall+0xa:00000000`749bfdaa c3

2022-04-18 16:15:56 1793 4

原创 Vmware的win7 32安装wireshark备忘

Vmware WorkStation安装Win7 32位:cn_windows_7_professional_with_sp1_vl_build_x86_dvd_u_677939.isoGuest OS中安装vmware tool会失败,安装此补丁可解:windows6.1-kb4474419-v3-x86_0f687d50402790f340087c576886501b3223bec6安装wireshark后,wireshark可能无法检索出本地网卡,卸载重装npcap可解:npcap...

2022-03-28 12:11:35 5048

原创 Windows wlanapi连接ssid初探

文章目录wlanapi中一些概念wlanapi中的函数说明demowlanapi中一些概念Interface:类似与无线网卡,无线网络适配器。一个interface代表一张无线网卡WLAN_AVAILABLE_NETWORK:可用的无线网络连接。。图中的字符串ChinaNet-Py6j是ssid。profile:Windows在连接某个network成功后,一般会将密码等信息存下来。它就是profile。即使是无密码的network,若想用命令行再次登录也需要profile存在。命令行操作命令参见

2022-02-28 10:31:17 897

原创 无法正常进入Windows也能开启Windows内核调试

1 背景Windows的启动的早期阶段,大致分为3步:bootmgr,winload,nt内核加载。下图是Winload阶段的一个报错。如果出现Windowslogo,一般就是进入nt内核加载了。我们经常开的调试功能是nt内核加载后的调试。无法调试winload。如果故障环境,无法正常进入Windows,甚至连安全模式都进入不了,那么试图开启Windows调试就不知所措了。2 原理参阅BCDEdit /bootdebug。在以下示例中,命令启用 Windows 启动管理器、启动加载程序调试

2022-01-14 16:38:33 1207

原创 某些Win10无法进入安全模式的修复

bcd编辑

2022-01-13 18:13:45 6784

原创 Windows内使用livekd使得即时获得内核层dmp或实时查看快照

1 需求场景对于个别程序陷入内核不返回,或者无法呼出调试器等场景,往往需要查看内核层数据再进一步分析。通常用scrolllock法触发蓝屏。但是这样做一则需要事先配置好蓝屏设置,二则蓝屏后,故障现象就被终止了。livekd就可克服上述缺点,它能够即时获得内核层dmp,不影响Windows继续运行。当然,livedkd毕竟是个应用程序,前提是至少要能够执行livekd。livekd需要配合kd.exe或者windbg.exe使用。推荐直接下载windbg,这里面包含了二者。livekd还需要ntosk

2021-09-22 19:45:07 698

原创 某医院影像客户端卡死分析

1 故障现象Windows里的his客户端,登录后,打开患者的影像照片,就很容易his卡死。只得将his强杀再开。卡死频率大约每3~6次就会出现1次。2 初步分析2.1 检查his安装正确否通过beyondcompare做文件夹比较,可以认为his安装正确。2.2 死循环还是卡死卡死时用procexp查看该进程的cpu消耗以及各个线程的cpu消耗。发现都接近0。可以认为当时,这个进程里的每个线程都是陷入内核不返回,而不是某些线程处于死循环中。遂对该进程创建dmp。3 深入分析3.1 进程d

2021-08-09 17:44:04 783

原创 win7文件扩展名关联打开方式时崩溃(RtlQueryInformationAcl+0x9)的调试

故障现象win7x64,装了蓝山办公,再卸载之,就出现了文件扩展名关联打开方式时会崩溃。dmp分析捕获进程崩溃dmp,可知崩溃的进程为rundll32.exe,崩溃时的栈如下:00000000`000eec00 000007fe`fce9b35a : 00000000`000706e4 00000000`00310ea8 00000000`00000111 00000000`00000000 : ntdll!RtlQueryInformationAcl+0x900000000`000eec30

2021-07-13 12:57:34 1477

原创 volatility2.6.1在Windows下搭环境和distorm3在py2下的编译

volatility2.6.1需要Crypto和distorm3。实际上,即使没有这两样,一样能将内存dump转为windbg的dmp。不过还是来研究一下python的import功能。Crypto比较坑,pip install pycrypto即可。不是install crypto。distorm3最新版时3.5.1,py3下,直接pip install可以装。不过volatility用的时py2,在py2下pip install distorm3的时候报了一堆错随将distorm3的源码包t

2020-12-23 20:49:01 2200 1

原创 鼠标一直转圈。Windows内新建进程没反应,卡在KiStartUserThread

目录故障现象初步怀疑双机调试dmp分析故障现象Win7x64系统,多见于刚展开Windows桌面。鼠标一直转圈。Windows内新建进程没反应,但是可浏览文件夹,ctrl+alt+del可呼出winlogon桌面。但是任务管理器点击没反应,win+r可键入notepad,cmd等,但是均无反应。直到5-15分钟后自然恢复。难以复现,但每天总有出现。初步怀疑故障时触发ScrollLock蓝屏,分析dmp,发现许多新进程的头号线程都卡在nt!KiStartUserThread。THREAD ffff

2020-11-30 11:44:43 1324

原创 visualstudio下zlib和protobuf编译环境备忘

这里写自定义目录标题前置准备编译zlib写一个zlib的demo编译protobuf写一个demo前置准备安装visual studio安装cmake编译zlib下载zlib的源代码,并解压运行cmake。source code打开zlib-1.2.11/,build binaries选择zlib-1.2.11/cmake/build。这里默认会生成visualstudio工程,位于build目录下。打开工程,编译install项目,则会把zlib的include和lib等复制到C:\Pr

2020-08-18 14:47:05 941

原创 Windbg介绍

1. 介绍1.1. 相关网站微软网站社区网站调试分享1.2. 下载对于Win10,推荐使用微软商店下载windbg preview版本。其它的os,可以下载windows sdk,在安装选项中选择windbg。preview版本皆可调试32,64位进程和内核。传统版本分为32和64两个版本,但优势在小巧便携。1.3. 符号配置微软的动态库,exe等,微软一般会公开pdb文件的下载,windbg经过配置后,会自动下载,从而利于解析程序的数据结构。简易的方法是配置环境变量_NT_SYMBOL

2020-06-15 16:14:30 14636 2

原创 windbg挂代理下载pdb

以前只要设置_NT_SYMBOL_PATH环境变量,windbg就能直接下载pdb后来,得挂代理。用proxier来指定windbg使用sock5代理最近代理好像也不行了。但是http代理却可以。先设置环境变量_NT_SYMBOL_PROXY为http代理地址,例如127.0.0.1:10809再启动windbg,可下载pdb...

2020-05-16 21:49:51 3089

原创 c++实现超大整数的乘法

这里写自定义目录标题c++实现超大整数的乘法代码c++实现超大整数的乘法c++已实现因数不大于UINT32_MAX(42949 67295)的乘法,故而可以将超大整数每9位分成一段,然后循环分段相乘,再在末尾填零,然后再做加和。这里就仅需要实现超长整数的加法。代码#include <iostream>#include <string>#include <v...

2020-04-02 21:22:50 2488 3

原创 从host端对Windows虚机进行内存dump和分析

1 场景用途在市场故障或开发测试时遇到的windows卡顿问题,无法启动任务管理器,无法启动调试器,尤其是偶现的。在未配置双机调试,ScrollLock蓝屏和核心转储时。要想获知虚机内正在做什么十分困难。在此提供一种方法可以或许虚机的内存数据,进而转换为windbg可以分析的完全转储。2 步骤2.1 dump虚机内存浏览一下host端的磁盘空间df -h将虚机内存保存到比较空余的地方。...

2019-11-19 09:28:17 1095

原创 xperf的安装

这里写自定义目录标题Windows XPWindows 7Windows 10新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出...

2019-09-27 11:25:32 780

原创 _snprintf_s系列备忘

微软的_snprintf_s总是记不清n的作用。现整理如下。_snprintf_s有两个版本。一个是带参数模板的,使用于数组,另一个需要指明可操作空间的,适用于堆区变量或数组。#include &lt;cstdio&gt;#include &lt;cstring&gt;#include &lt;cstdlib&gt;#include &lt;cassert&gt;#define LEN...

2018-05-30 16:46:25 3073

原创 一种基于copy-on-write的多生产者消费者模型

#ifndef _CREATEONCOSUME#define _CREATEONCOSUME#include &lt;vector&gt;#include &lt;memory&gt;#include &lt;mutex&gt;#include &lt;queue&gt;using namespace std;template&lt;typename T&gt;class Cre...

2018-03-14 12:11:16 170

原创 从json数组构造QAbstractTableModel子类,快速绘制QTableView

一般的,QSqlTableModel可以关联数据库的一张表,QTableView对象通过setModel,关联这个model对象,这样,编码上很方便能将QTableView展示成数据库表的样式。但是如果数据来源不是数据库表,而是json数组,则需要继承QAbstractTableModel,然后再让tableview-&gt;setModel。下文的AbsTblMdlJsonArray就简易地实现...

2018-03-13 20:25:05 1132 2

原创 msvc14.1(vs2017)编译x64的qt5.9.1

vs2017安装在"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community"。qt源码在"F:\qt-everywhere-opensource-src-5.9.1"1. 打开cmd,执行vs编译工具链的环境设置C:\Program Files (x86)\Microsoft Visual Studio\2017\Co

2017-08-23 10:11:13 6821 2

原创 ida调试win64选择windbg

1. 从52pojie上下载了ida6.8。2. 打开idaq64.exe,不知道为什么,我的win7上可以选择windbg调试器,win10上却不行。3. windbg x86版安装在C:\Program Files (x86)\Windows Kits\10\Debuggers\x864. 在ida目录的cfg/ida.cfg里修改DBGTOOLS = "C:\\Program

2017-08-10 19:10:22 6461

原创 windows下mogo-c-driver编译release版的库文件

按照mongodb默认教程的操作,编出来的libbson-1.0.dll是debug版的。这样相关程序发布后,目标机即使安装了vcredist也无法运行。release版的编译步骤如下:1. 下载mongo-c-driver的源代码,选择tar.gz那个(那个有libbson)https://github.com/mongodb/mongo-c-driver/releases。解压之2

2017-07-15 21:40:57 415

原创 windows下boost库的选择

windows下boost使用完全编译(b2 --build-type=complete)(这条命令只能编出win32的,编不出x64的),能得到三种boost库。每一种都有debug版(文件名带-gd-的)1. boost_atomic-vc141-mt-1_65.lib boost_atomic-vc141-mt-1_65.dll这个明显是动态库。欲使用此,则vcxproj的预

2017-07-15 17:10:41 872

原创 log4cplus将日志文件名按日期创建

日志文件一般会带上日期,或者创建以日期命名名的文件夹,将日志文件创建于其中。log4cplus网上有不少教程,但是似乎没有人说这种方案。事实上源码里有这个类TimeBasedRollingFileAppender,就满足此需求。#include #include #include #include #include #include #include using namespa

2017-02-09 11:02:20 9199 5

原创 c语言用尾递归实现单向链表的逆向排列

c++的stl很好用,c语言的简单链表最近几年几乎不用了。最近一次笔试,遇到了这题,就十分捉急。当时想到似乎得用递归。现在算是完成了。以下以简单的单向链表(链表头结点跟普通结点一致)为例。#include typedef struct Node { int i; struct Node *pNext;} Node;Node *createList(const int *dat

2017-02-09 10:32:10 747

空空如也

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

TA关注的人

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