#

Windows 异常处理机制学习

参考资料:
1.Windows核心编程
2.Windows系统程序设计之结构化异常处理
3.C++处理异常技巧-try,catch,throw,finally
4.深入理解C++中的异常处理机制
5.读windows核心编程,结构化异常部分,理解摘要
6.【原创】白话windows之四 异常处理机制(VEH、SEH、TopLevelEH…)

关于异常

常见异常:

  • 程序访问一个不可用的内存地址(例如,NULL指针);
  • 无限递归导致的栈溢出;
  • 向一个较小的缓冲区写入较大块的数据;
  • 类的纯虚函数被调用;
  • 申请内存失败(内存空间不足);
  • 一个非法的参数被传递给C++函数;
  • C运行时库检测到一个错误并且需要程序终止执行。
  • 访问的对象(文件等)或则地址不存在
  • 等等。。。。。
    根据异常作用或则产生后后果可以将异常分为错误(重新执行产生异常的指令如页面错误)、陷阱(执行下一条指令如调试断点)和终止(进程终止或则系统崩溃)。

VC++直接利用api实现bmp图像转jpg图像

网上找了很久寻找直接bmp格式转jpg,大部分都是利用libjpeg/libjpeg-turbo实现的。libjpeg实现有很多有点支持多平台Windows/linux/嵌入式,但是使用较为麻烦,需要自己编译lib可能还需要自己懂一点make语法之类的。so 能不能直接在Windows找个api实现呢?遂打开msdn输入”bmp converting to jpg”,还不错找到两个相关问题链接1链接2 。使用GDI+.aspx)、CImage.aspx),而且使用这些几乎可以实现任何图片格式之间的转换GDI+库封装了很多图像处理相关的函数还有很多待学习。例子只是一个很简单的bmp转jpg

Windows安全机制学习笔记

参考资料:
Windows Vista操作系统最新安全特性分析:改进和局限
Windows Vista 安全指南
您必须知道的Windows Vista安全功能
Win8的安全特性
Windows 8 安全性改进
Understanding Windows Service Hardening
逆向Windows 8:内核安全特性拾趣

系统安全

代码完整性:

代码完整性(CI:Code Integrity)可以有效地防范木马、rootkit等对系统文件的恶意修改,防范不安全的第三方驱动对系统的危害。CI会检查代码的hash值(内嵌于代码中的x.509证书,或者位于%windir%\system32\catroot里的编录文件),一旦发现hash值不符,就会停止加载代码。
CI主要检查以下的代码:

  • (1) 系统启动时,检查内核、HAL和驱动的完整性
  • (2) 检查所有加载到内核内存空间的代码完整性
  • (3) 对加载到受保护进程空间里的代码进行完整性检查

服务加固


Windows Xp和Vista Session的不同
  • session 0隔离
  • 最小特权账户(把更多服务的启动帐户,从LocalSystem迁移到LocalService或者NetworkService)
  • 独立SID(每个服务都有一个独立的SID,这样服务就可以利用该SID来控制其专属资源的ACL)、
  • 服务的SID标记为Write-Restricted(写限制)、
  • 减少不必要的特权
  • 限制网络访问

完整性级别校验

Windows中各种对象都有完整性级别,例如进程主要级别从低到高为Untrust、Low、Medium、Hight和System。Windows 2000/XP安全体系里,安全子系统把进程的访问令牌和资源的访问控制列表进行匹配比较,以确认该进程是否具有访问该资源的权限。而在WindowsVista下,除了遵守传统的安全控制机制外,还必须检查进程和资源对象的完整性级别,完整性级别低的进程,不能写入完整性级别高的资源对象【通过这种完整性级别可以防止一些恶意行为如dll注入、代码注入或则修改pe文件】。

Windows权限机制学习

参考资料:
【原创】白话windows之 访问控制模型(Access Control Model)
浅析Windows安全相关的一些概念
CreateEvent 和OpenEvent时事件全局名称问题 Global

对windows权限机制最直观的认识

Windows用户权限

在之前的学习中对于windows权限机制有过零散的学习,但是对于整个windows权限管理机制没有一个全面的认识所以在这总结学习哈,虽然现在也没有搞清楚完。

Windows权限管理我觉得最常用的就是UAC权限(管理员权限)。每个进程都有自己的用户最常用的有标准用户、管理员(UAC)【注:这两个就是平常用户启用的进程的用户】,SYSTEM、LOCAL SERVICE、NETWORK SERVICE【注:这三个一般是系统进程及服务启动的且Windows启动后system用户已经登录到系统 】。而每个用户又有不同的特权Privilege,我们可以通过whoami -all查看当前用户所拥有的Privilege。

Standard用户拥有的特权

重庆印象

迎来了难得的暑假,8月11日从成都出发到重庆,买好的动车票,早上8点10分的票。结果又起晚了只有喊个uber了,运气比较好还在学校里面就有辆2分钟就坐上了车,安心了,师傅比较健谈看出了我是出去玩的,当我说我是去重庆的时候师傅给分享了点经验不要期望太高。嗯,我满口答应,不过我觉得出去玩最重要的是和谁去,地点不是很重要,哈哈。
10点多一点正常到达重庆北站,打电话问问刘哈儿这货居然没赶上车,哈哈也好我到菜园坝还要段时间,直接轻轨3号线过去开始了我的重庆印象。
三天行程:

  • 第一天半天时间,下午朝天门试了下长江游船晚上解放碑逛逛看看电影
  • 第二天报了个团,武隆县,嗯天坑地缝游
  • 第三天要走了,观光解放碑的八一小吃街(好吃街)

Peb(Process Environment Block)简单学习及分析

参考资料:
Google peb site:pediy.com
PEB结构—-枚举用户模块列表
修改已加载DLL的模块名和路径

PEB结构初探

windows系统中通过各种结构来管理各个对象,关于进程线程的PEB、TEB、EPROCESS等,这几个结构的关系如下图


PEB、TEB、EPROCESS结构在系统结构中关系

而PEB(Process Environment Block)——进程环境块使用较多,并且我们可以找到很多关于PEB的资料并且用处也很大,它包含了映像加载器、堆管理器和其他的windows系统DLL所需要的信息,因为它们需要在用户模式下修改PEB中的信息,所以必须位于用户空间。PEB存放进程信息,每个进程都有自己的 PEB 信息。准确的 PEB 地址应从系统的 EPROCESS 结构的 1b0H 偏移处获得,但由于 EPROCESS在进程的核心内存区,所以程序不能直接访问。但是由上面的关系图可以发现TEB也指向PEB结构同时位于用户空间并且可以很方便的获得,可以通过CPU的FS寄存器来访问TEB,一般存储在[FS:0],在TEB结构偏移30H处可以获得PEB位置
1
2
3
4
5
__asm
{
mov eax,fs:[0x30]
mov PEB,eax
}


除此之外还可以通过以下方式获得PEB结构

- 在内核中我们可以先PsGetCurrentProcess得到当前进程的EPROCESS,然后通过它的成员域PEB访问到当前进程
- 在内核中,我们可以通过KPRCB获得当前线程的ETHREAD,然后通过它的成员域来访问当TEB,然后再通过TEB的成员域来访问PEB

关于Windows自动提权autoElevate

参考资料:
深入了解 Windows 7 用户帐户控制
List of Windows 7 (beta build 7000) auto-elevated binaries
工具:
Strings.exe
Sigcheck.exe
Procexp.exe
Procmon.exe
知识点:
Manifest文件
UAC

一直想怎么才能找到类似sysprep.exe这样可以有UAC权限但是运行的时候不会触发UAC弹框(即我们常说的Windows白名单程序),在网络上搜寻良久也未成发现有什么可用的信息。最后只有重头看看UAC相关信息,终于在MSDN上发现相关信息即参考资料1。(其实之前微软是一直公布这份名单的,而且连rundll32都是)
从参考资料1中我们可以获得很多信息,由于vista在启用uac时貌似平等对待不管是Windows系统的还是第三方应用获得uac权限都要弹框获得用户许可,所以在win7上微软启用了白名单机制,对于某些系统应用可以直接获得uac权限。
条件就是:

  • 1.该可执行文件必须经过 Windows Publisher 的数字签名,Windows Publisher 是用于对 Windows 附带的所有代码进行签名的证书(仅由 Microsoft 进行签名是不够的,因此 Windows 未附带的 Microsoft 软件不包括在内);
  • 2.该可执行文件必须位于其中一个为数不多的“安全”目录中。安全目录是指标准用户无法修改的目录,并且它们包括 %SystemRoot%\System32(例如,\Windows\System32)及其大多数子目录、%SystemRoot%\Ehome,以及 %ProgramFiles% 下的少许目录(其中包括 Windows Defender 和 Windows 日记本)。
    而要能够autoElevate还必须满足的一点就是要在程序的manifest文件中申明成类似这个样子的true,而且参考资料1还提供了两个工具来获得这个manifest文件搜寻满足条件的exe。
    strings.exe -s *.exe | findstr /i “autoElevate”>”D:\Program Files (x86)\SysinternalsSuite\autoevate.txt”

Visual Studio使用备注

这里添加一点别人写的为什么还使用vc6的原因,描述比较清楚
http://blog.csdn.net/weolar/article/details/52456886

1
2
3
4
5
6
1、可以无视VS2015的MD版本需要的那一堆api-xxxx-xxx的dll了。那堆玩意有几十个,恶心的要死。
2、可以不用管manifest的问题。这东西巨恶心,有一个没设置好,就是各种加载不了。关键是本机没问题,
说不定客户机器上哪里就不对了。
3、小巧。vc6的是msvcp60.dll和mscrt.dll。这东西全系列windows都自带了,非常爽,这意味着你可以省
下MT的那堆额外的size了。其实windows的
所有dll基本都是用这个两个来运行的,等于说windows自己用的很爽,但就是没告诉你怎么用····

Hexo搭建中的一些问题

参考资料:
hexo你的博客
使用Hexo搭建博客
关于 Hexo 的若干问题
快速开始Hexo的正确姿势
把Hexo同时部署到GitHub和GitCafe

一直想自己搭个blog玩玩,主要是在别人平台总是感觉有所束缚不管写什么东西都要审核半天,同时也想自己学习下一些网页知识。但行动一直没有。在今年5月份的时候终于有了行动,租了个digitalocean的ubuntu的vps想自己在上面搭个vpn自己用然后也能跑个wordpress的博客。开始还用得很舒服,但是之后就是每天崩溃也不知道是自己搭的问题还是vps的问题最后人也崩溃了就果断放弃了。。。。。。
然后之后看了github也能搭blog,而且看了效果也不错。就果断试试效果果然不错哈哈,而且搭建也简单再也不用什么apache,mysql什么的了。而且免费还能自己绑定域名。
搭建方法就是参考资料中的,先看1然后一步步跟着来然后搭好了再看2 3 很详细。但是中间也遇到过一些问题所以这里也总结一下。

##a.整个blog系统的架构
由于web不是很懂,这里就只是我的理解。本地端就是自己电脑上需要的主要是mygit+node.js+hexo(主要作用主要是将本地的网页组合成静态的网页就不需要什么服务器解析了只需要访问的浏览器解析),然后服务端需要一个gitbub pages项目(这边主要作用就是一个云存储器)。然后分享和统计用的百度、评论用的多说