9 OTP设计原则——第一部分

9.1 概述

OTP设计原则用于指导以进程、模块和目录的形式组织Erlang代码的规范。

9.1.1 Supervision树——进程管理树(监控树)

Erlang/OTP最基本的概念是监控树,由workers进程和supervisors进程组成。workers是真正执行任务的进程,我们在这里实现自己的功能;supervisors是监控进程,用于监视worker进程的行为,当worker进程异常时可以重启它。通过这种设计,worker进程可以专注工作,而supervisor监控进程尽量少的做事——它只负责监视自己负责的进程,可能是worker进程,也可能是次级监控进程。监控树按照层级组织代码,由顶层监控进程、次级监控进程和工作进程组成,很容易设计高容错系统。

9.1.2 行为模式(behaviours)

在监控树中,许多进程有类似的结构和模式。例如,supervisors进程结构上类似,区别就是监控的子进程不一样。workers进程几乎都是客户端-服务端架构、有限状态机模型,以及拥有类似的事件处理机制,比如异常日志。

hiho难度1题目题解

hiho是个很不错的oj网站。定位应该是找工作的应届生。看起来很新颖,但实际上还是传统oj,只不过出题的由学校变成企业,讨论也很少,感觉几乎没什么人。它最吸引我的就是题目比较好,不像leetcode那样烂大街(leetcode的题目我并不怎么喜欢),很有acm的感觉;题目数量不多,但分类明确,有挑战有知识含量,省得我这种不是专门刷题的工作党到处找题做。缺点就是优点换个说法:太acm,不像leetcode那样专门为了企业招人;题目偏难,分类太过明确。

最近为了提高自己的修养,不烂在一个地方,重新开始刷oj。poj刷了一些,题目参差不齐,有点浪费时间;hiho就好多了。先把level1的都做完。这些题目难度不大,对我来说基本读完题就能有思路;但同时陷阱也不少,自己又好多年没写过这种模式的代码,不免好多时间都在找错误。虽然没专门做acm,但自己这几年写了不少代码,工程上考虑更多,也有些基础,所以做起来还算得心应手。这里先总结一下最简单的lv1。

构建内核HOOK框架

分析漏洞或者提取病毒行为,调试器是必不可少的,不过面对rootkit或者其它有驱动辅助的程序,OD或者windbg硬上可能会蓝屏,驱动级的anti还是不容小觑的;此外不少企业或者团队还希望有自己的模拟器,可以去半自动跑一些样本。不管怎么说,内核HOOK框架都是必不可少的。

内核HOOK需要关注的类型并不多:SSDT、ShadowSSDT、IDT内核关口HOOK;文件系统过滤,可以自建控制设备和卷设备过滤,也可以使用MiniFilter;网络控制,TDI/WPF驱动必不可少,甚至需要自己的NDIS驱动;重点当然是内核入口,现在的主流是KiFastCallEntry,我们也是处理了这个点。

虚拟机检测技术

现在的主流虚拟机产品充分利用硬件虚拟技术,如intel-vt和AMD-SVM,虚拟效率高、透明性好,VMM的处理器虚拟化、内存虚拟化、I/O虚拟化等物理资源虚拟的实现都是软硬件结合,充分了解虚拟化原理才能做到很好的检测虚拟机运行。本文将介绍intel-vt虚拟机各个方面的实现原理,了解与真实机的不同,进行针对性的检测。

虚拟机环境在操作系统和硬件资源之间增加一层VMM(虚拟机监视器),这里的操作系统也称为客户机;VMM更像是传统的物理操作系统,管理着硬件资源;客户机执行某些敏感操作——中断、某些寄存器操作、IO指令操作等时,会退出到VMM层,由VMM做相应的转换、运算或者修改操作之后再进入客户机。

CS游戏分析第二回——解决上次遗留的数据问题

武器

上回的一个遗留问题是人物和武器的结合。今天先来分析一下。首先根据上节课的找子弹部分,找到武器的对象地址。

这是子弹减少的代码,esi指向武器,偏移CC指向子弹。

ESI=0102CFC8

07956C3A - 48 - dec eax
07956C3B - 8B CE  - mov ecx,esi
07956C3D - 89 86 CC000000  - mov [esi+000000CC],eax <<
07956C43 - 8B 86 A4000000  - mov eax,[esi+000000A4]
07956C49 - 8B 40 04  - mov eax,[eax+04]

逆向分析windows密码获取工具

用过一个小型获取明文密码程序,只有一个可执行文件ReadPSW.exe,通过逆向写出了源代码,稍微改改可能也可以支持64位。分享一下逆向过程和工作原理。

我喜欢先用IDA看大致流程,遇到难以静态看出来的函数再用OD或者windbg。 IDA F5 main函数,一段一段得看。

WDF_DECLARE_CONTEXT_TYPE_WITH_NAME

WDF提供的这个宏用于实现面向对象编程中常见的存取器函数(我都忘了这个的确切名字是什么了,不同语言有不同的称谓),就是调用某个函数来获取某个结构的某个成员。完整定义如下:

CS游戏分析第一回——做到无敌

前言

游戏安全一直是敏感的灰色话题,很多技术不会公开,从事游戏攻防的也很低调。这造成一个问题,对游戏安全感兴趣的人会无从下手,比如我,就不知道面对复杂的游戏如何分析。经过一些日子的思考学习,总算有了点思路,就以CS为例,介绍如何分析游戏、辅助工具以及相应的安全防护。

选择CS有几个原因:首先它是我第一次碰电脑就接触的东西,感情深厚;其次CS逻辑清晰易懂,没有复杂的反调试、加密等防护;最后就是基本所有人都玩过,写例子大家也容易理解。打算写一个小系列,从简单的不死、子弹不减到联网状态的数据包传输、找到各个功能实现call、人物画面渲染等,最后了解整个游戏结构,并写出防护软件来保护CS。

Windbg和od脚本编写

一般情况调试器的基本功能已经够用,尤其是有源码的时候,查找问题足够方便。但是很多时候我们需要让调试器自动完成一些功能,比如某个函数调用之后的数据记录、数次调用某函数的结果、两个函数调用之间发生的事情等等,简单的可以用条件断点或者基础log解决,稍微复杂的就需要用到脚本了。

平常用windbg和od最多,前者功能强大,还能调试驱动;后者简单易用画面清晰。偶尔也会用到Immunity Debugger,《python灰帽子》中对这款python调试器大加赞赏,兼容性上比OD略好一些,对python的支持扩展起来也更方便。我觉得只有掌握调试器脚本的用法才能在解决一些有难度或者复杂问题时做到游刃有余,既能利用现有调试器的功能,又能更灵活的找到自己需要的信息。

CVE-2010-3962分析

比较老的漏洞,html解析器出了问题,<table style=position:absolute;clip:rect(0)>这个极品代码会导致类的虚函数表被覆盖一位,然后地址就错位了。http://www.exploit-db.com/exploits/15421/ 可以找到POC,经典的heapspray;http://bbs.pediy.com/showthread.php?t=125122 解析过程导致漏洞触发分析。我这里就是用windbg调一下,触发并找到问题所在。winxp sp3 + IE6 。

首先把POC的shellcode开头改成CCCC,windbg载入IE,这里可以设置利用页面为首页,方便.restart。直接跑起来,执行到shellcode自动断下。