Award版的Bios在主板中使用非常广泛,文件结构也不是特别复杂,所以用来进行分析还是比较合适的。Award公司的Bios除BootBlock之外的部分都要使用lha压缩后合并到最终的Bios文件中,也就是说最终的Bios文件中只有BootBlock是能直接执行的,其他部分在执行之前都需要进行解压。Award版的Bios中不同模块使用lha文件标准定义中的文件日期部分区分,主模块的识别代号是50000000,其他模块也有自己独特的区分代号,例如:ACPI Table的代号是40030000。
BookBlock部分就在Bios文件的最后68K或128K,机器启动后,BootBolck被映射到F0000-FFFFF(64K)或者E0000-FFFFF(128K),然后机器调用FFFF0处的代码开始Post过程,Bios的这个位置基本都是一条长跳转(至少我还没见过其他类型的)。在完成最基本的初始化之后,BootBlock进入解压缩模块,对Bios的主模块进行完整性校验和解压缩,如果校验失败或者解压缩失败则会跳到BootBlock中的失败处理中,也就是一个最简单的引导模块,这个引导模块通常只支持很少的硬件设备,这个部分存在的意义就是在发现Bios文件出现问题后有一个恢复的机会,但如果是主模块内部出现问题而不是文件封装出现问题,这部分的判断是不可能起作用的。
阅读全文——共8274字
两个以前写的IDA插件,一个是向IDA里面粘贴2进制数据的,另一个是把IDA里面的反汇编数据以RTF格式Copy到剪贴板。
编译和使用环境为IDA 5.2
insertbin.plw
rtfcopy.plw
用 WinDbg 内核调试查找隐藏进程。
查找隐藏进程的方式有很多种,可以枚举内核进程链,可以枚举句柄,也可以暴力搜索内存等。本文介绍的方法就是暴力搜索内存法,不过不需要编码,而是直接利用 WinDbg 本机内核调试功能,查找隐藏进程。内核调试下都可以使用,不过双机调试时速度太慢,要等很久结果才会出来。
首先是定位搜索范围的问题,EPROCESS 结构都是分配在 NonPagedPool 中,只需要搜索这段内存即可。
lkd> dp nt!MmNonPagedPoolStart l1
阅读全文——共2603字
本文分析了 Vista 系统上 DbgPrint 函数的执行流程以及 DebugView 工具的原理。
详细请参考 pdf 文档:dbgprint 函数流程分析.pdf
vmkd 可以大大提高内核调试虚拟机的反应速度,但 VMware server 用起来很不方便,不支持直接从主机拖放文件,每次都得从网络上传。所以花了点时间把 vmkd 修改了一下,现在支持在 VMware Workstation 上使用。vmkd 的原理可以去作者网站上查看,大概是截获内核调试引擎和远程调试器通信的过程,用快速的传输数据方法替换了原来的模拟串口方法,从而加速了内核调试时的响应速度。传输数据时用到了 VMware 提供的 0×12 后门指令,直接和主机上的 vmware-vmx.exe 进程通信,把需要传输的数据存放到某个内存,由注入到 vmware-vmx.exe 进程的 vmxpatch.dll 读取出来后通过新的管道发给调试器。0×12 后门指令由 vmware-vmx.exe 进程中的某一段代码负责响应,vmxpatch.dll 注入时会通过特征码查找这一段代码,因为 VMware Workstation 和 VMware server 这一段代码的特征码不一样,所以 vmkd 查找失败,不支持 VMware Workstation。把 vmxpatch.dll 中的这段特征码修改一下就能实现对 VMware Workstation 的支持。
阅读全文——共531字
WinDbg + VMWare 可以双机调试内核,但 VMWare 本身提供的虚拟串口方式调试速度很慢,而且调试时占用 CPU 100%,用起来还是不够爽。
Skywing 最近在网站上发布了一个工具 vmkd(http://www.nynaeve.net/?page_id=168 )可以解决上面的问题,而且还写了一系列文章说明实现原理(http://www.nynaeve.net/?p=174)。
我试用了一下,感觉非常好用,介绍给大家,呵呵!
阅读全文——共693字
最近写了个小工具查找隐藏驱动,可以查找断开 PsLoadedModuleList 链的驱动,比如 np 的驱动。
下面是关键代码:
PDIRECTORY_BASIC_INFORMATION pDriverBuffer = NULL;
阅读全文——共2957字
这个工具可用来查看 PE 文件的信息熵值,从而判定文件是否被压缩。编码思路来源于 PEiD 工具,每个节的信息熵和 PEiD 的计算结果一样,但 是整个文件的熵值和 PEiD 的计算结果不同,搞不清楚 PEiD 怎么弄的。也懒得去逆向了。在PEiD 论坛有个帖子讨论了这个问题:http: //www.secretashell.com/PEiD/viewtopic.php?t=42。
关于信息熵的相关知识我也不懂,只是看了点资料,了解些皮毛。有啥问题也别问我,问了也白问,呵呵可以上 http://en.wikipedia.org/wiki/Information_entropy 看看。
另外,感觉这个功能还是挺有用的,比如 ProcessExplorer 可以显示被压缩的进程,估计就是用到了这种办法。(猜测的 ^_^)
阅读全文——共362字
$$ ntcall Script v0.1
$$ by 小喂 2006.10.29
aS ufLinkS “<u><col fg=\\\”emphfg\\\”><link name=\\\”%x\\\” cmd=\\\”uf 0x%x\\\”>”;
aS ufLinkE “</link></col></u>”;
阅读全文——共506字
从XPSP2后系统引入了一个特性:PEB地址随机化,每个进程的PEB地址不固定,大概有14种可能。系统创建进程时设置PEB的地址。
NtCreateProcess / NtCreateProcessEx / PspCreateProcess / MmCreatePeb / MiCreatePebOrTeb
在MiCreatePebOrTeb函数中根据当前时间计算随机值:
PVOID HighestVadAddress;
阅读全文——共1897字