Python取证技术(4): Windows 注册表分析

注册表介绍

如下图,打开注册表编辑器,注册表有5个根键,

一个键和它的子键以及值统称为Hive

注册表的键有两种类型:volatile和 nonvolatile。后者在将数据保存在本地硬盘;前者则在本地硬盘没有相关的文件,系统在内存中内存中创建和管理,是临时性的,系统每次启时都会创建volatile hives;

HKEY_LOCAL_MACHINE\HARDWARE : Volatile hive
HKEY_LOCAL_MACHINE\SYSTEM\Clone : Volatile hive

只有两个根键被保存在系统硬盘中且是nonvolatile类型的,数据在主内存中处理:HKEY_LOCAL_MACHINE和HKEY_USERS,其他的根键要么是这两个根键子建,要么就是volatile hive类型。

不同Windows版本的注册表文件

versionFilescontents
3.1xreg.datcomplete windows 3.?? registry
95system.datsystem-values (hkey_local_machine)
user.datuser-values (hkey_users)
NT
system32\config\sam用户及密码的数据库
system32\config\software安装的软件信息(hkey_local_machine\software)
system32\config\system存储计算机硬件和系统的信息(hkey_local_machine\system)
profiles\%username%\ntuser.dat存储用户参数选择的信息(此文件放置于用户个人目录,和其他注册表文件是分开的)(hkey_current_user{s-1-xxx…})
profiles\%username%\ntuser.manlike ntuser.dat but a mandatory-profile

Python取证技术(3): Windows 事件日志分析

Windows的事件日志都存放在C:\Windows\System32\winevt\Logs目录下。以evtx后缀结尾。
事件日志是在windows上记录重要事件发生的特殊文件,当用户登录系统或者程序报错时,就会被记录。对我的电脑右键菜单管理→事件查看器可以查看

安装python_Evtx

直接使用如下命令安装即可。

pip install python-evtx

如果没有安装pip,下载get-pip.py运行后,在python安装目录有个script目录,里面有安装好后的脚本,将该目录设为环境变量,就可以直接使用pip命令。

Python取证技术(2): hash生成

在计算机取证中,经常会对文件计算hash,常用的hash有md5、sha256等等。pyhon中提供了hashlib库,让我们可以很方便的使用hash函数。

先通过一个实例来让大家了解怎样使用python的hashlib库。

import hashlib   #导入hash库

Text   = "This is Test"
md5    = hashlib.md5()
sha256 = hashlib.sha256()

# 输出生成的hash
md5.update(Text)
sha256.update(Text)

print "md5:" + md5.hexdigest()
print "sha256" + sha256.hexdigest()

输出结果:

md5:ba5e658e8787abe7f6bc473169e566aa 
sha256:c0944b5a36476a91b39dee68df2432eae4565c315cfe870a9f951ca643abfb61

Python取证技术(1):环境搭建和ctype库介绍

环境配置

安装虚拟沙盒virtualenv

pip install virtualenv

创建一个虚拟沙盒,也就是python的独立开发环境,类似于VMWare里虚拟机的操作系统一样,对外界不会产生任何影响。

root@kali:~# virtualenv KenEnv
New python executable in KenEnv/bin/python
Installing setuptools, pip, wheel...done.

创建成功后,会在当前目录建立一个专属于该python独立开发环境的目录。该目录包含了可执行python文件和pip库的复件。可用于在python独立开发环境安装其他packages。该环境的名称可以随便指定。在这里的名字是KenEnv。命令提示符

reversing.kr Ransomware

首先看程序,发现被加了upx壳,使用脱壳工具脱掉后,看有没有关键的字符串。

来到引用Key的地方。

.text:0044A775                 push    offset aKey     ; "Key : "
.text:0044A77A                 call    ds:printf
.text:0044A780                 add     esp, 4
.text:0044A783                 call    sub_401000
.text:0044A788                 push    offset input_key
.text:0044A78D                 push    offset aS       ; "%s"
.text:0044A792                 call    ds:scanf
.text:0044A798                 add     esp, 8
.text:0044A79B                 mov     dword ptr [ebp-18h], offset input_key
.text:0044A7A2                 mov     eax, [ebp-18h]
.text:0044A7A5                 add     eax, 1
.text:0044A7A8                 mov     [ebp-1Ch], eax

Far Manager插件编写2

在上一篇中,插件显示在插件菜单栏中,但是我们还没有实现该插件的功能。

开始之前,我们先来科普一下,在Far Manager中调用插件的几种方法,除了从插件菜单中调用插件,Far Manager还提供了Alt+F1(左侧硬盘菜单)、Alt+F2(右侧硬盘菜单)、宏、lua宏、文件查找结果列表、命令行、编辑器、文件面板、对话框等等。可以说在几乎在任意位置都能调用插件。

要插件实现功能,我们需要导出OpenW函数。当打开插件时会调用OpenW,OpenInfo记录了该插件被触发的信息。结构如下:

struct OpenInfo
{
  size_t StructSize;  //结构大小
  enum OPENFROM OpenFrom;  //触发方式
  const GUID *Guid;  //如果是通过插件菜单打开的,则该guid是插件菜单guid,如果是宏则是宏的guid。
  intptr_t Data; //取决于OpenFrom,不同触发方式,该字段表示的数据不同
};

Message

在OpenW中我们可以根据OpenFrom打开插件方式的不同来实现不同的功能。这里就实现一个小小功能弹一个消息框。

Far Manager插件编写1

由于大部分时间都是使用Far程序,于是想写个插件提升效率,但是网上都没有相关的资料,而且官方提供的文档也只有老毛子语。只能自己摸索摸索。写在博客希望能帮助更多的人少走弯路。

Far Manager(short for File and ARchive Manager),是一款Windows文件管理视图,并且可以执行cmd命令。提供了高度可定制的插件接口。

插件编写

Far插件是一个dll文件,通过Far提供的接口来实现高度可定制化的插件。将该dll文件放入Far的插件目录,调用插件时会加载该dll。

GetGlobalInfoW

Far加载插件时,最先加载就是插件导出的GetGlobalInfoW函数,如果没有导出该函数,这个插件也就不能被Far调用。这个函数主要的功能是提供插件的基本信息。如作者、插件版本、描述和插件路径、GUID等等。

// {1C6B0907-0B96-47C4-A24B-36A9B184AF25}
static const GUID guid_PluginGuid =
{ 0x1c6b0907, 0xb96, 0x47c4,{ 0xa2, 0x4b, 0x36, 0xa9, 0xb1, 0x84, 0xaf, 0x25 } };  //全局变量

void WINAPI GetGlobalInfoW(GlobalInfo *Info)
{
    Info->MinFarVersion = MAKEFARVERSION(
        FARMANAGERVERSION_MAJOR,
        FARMANAGERVERSION_MINOR,
        FARMANAGERVERSION_REVISION,
        FARMANAGERVERSION_BUILD,
        FARMANAGERVERSION_STAGE);

    Info->StructSize = sizeof(GlobalInfo);
    Info->Author = L"Ken";
    Info->Description = L"My First Plugin";
    Info->Title = L"My First Plugin";
    Info->Guid = guid_PluginGuid;
}

pwnable.kr bof

一个简单的缓冲区溢出,用gdb调试,

程序首先传入一个参数0xdeadbeef,然后调用func函数,看看func处代码

_IO_get获取输入的数据,然后比较ebp+8和0xcafebabe是否相等,相等则打印flag。

,