分类 : ASM

Armadillo脱壳知识和方法大全[转]

原文:http://bbs.pediy.com/showthread.php?t=77137

作者:jcyhlh

近日对Armadillo壳很感兴趣,缘于它的多种组合的变化,但仔细看来,其保护的解决方法又有相对固定。方法无外乎那么几种脱壳方法(当然排除有…

一块三毛钱大侠的文件分割工具源码ASM

一款ASM的文件分割工具源码

一款盗号木马的核心源码

大概看了一下,实现方法和内存注册机比较像。先调试定位,然后计算好偏移后,再写代码。

[转载]xx驱动蓝屏分析笔记

单机分析,可怜的我还得蓝屏一次获取dump文件,把dump文件载入WinDBG中。

Microsoft (R) Windows Debugger Version 6.8.0004.0 X86
Copyright (c) Microsoft Corporation. All rights reserved.

Loading Dump File [C:\WINDOWS\MEMORY.DMP]
Kernel Summary Dump File: Only kernel address space is available

Symbol search path is: SRV*G:/temp/*http://msdl.microsoft.com/download/symbols
Executable search path is:
Windows Server 2003 Kernel Version 3790 UP Free x86 compatible
Product: Server, suite: TerminalServer SingleUserTS
Built by: 3790.srv03_gdr.070301-2306
Kernel base = 0×804e0000 PsLoadedModuleList = 0×8056ac08
Debug session time: Tue Feb 26 01:09:09.000 2008 (GMT+8)
System Uptime: 0 days 0:36:21.588
Loading Kernel Symbols

代码逆向乱谈之导引

早就想写点什么,自己都不知道一天在瞎忙什么,一直到最近才开始动手。。。我想通过这个乱谈系列跟大家分享一些心得。我打算在这个系列文章中讲点方法与思路,当然,很多方法并不是我的原创,只是我用这些方法和思路解决了我的实际问题。由于本人水平有限,很多说法只是我个人的理解,然后用我自己的语言表达出来,可能并不专业,所以在这里不负责任的乱谈一下,欢迎大家拍砖。

Windows句柄表格式(1) – 2000句柄表格式

科大的牛人,出手就是不同凡响。不过居然工作后做Web方面的开发,也算是有才了。饭碗和爱好还是不能兼得的。by lonkil

发信人: ftofficer(0210|别了,科大), 信区: Kernel
标 题: Windows句柄表格式(1) – 2000句柄表格式
发信站: 瀚海星云 (2006年11月26日01:50:44 星期天), 站内信件

版大暗示我需要交一篇原创了。工作以后天天搞一些Web上面的开发,很久没有研究内核
了。翻翻以前自己的手记,拼凑了一篇,简单写些Windows当中的句柄表格式好了。

今天比较晚了,先写2000下面的,明天再整理一个XP的好了。两者之间差异巨大,几乎
是完全重写的。

句柄表是Windows Object Manager维护的一个进程范围有效的表,用来管理Windows的内
核对象。关于Object Manager和句柄表的基础可以参见《Windows Internal》,讲的很
清楚。但是一旦涉及到了句柄表的实际格式,《Windows Internal》就讳莫如深了,对
于2000的句柄表还说了一些,但是对于XP/2003就基本上没有说什么了。

我们对句柄表的探索是从EPROCESS开始的,EPROCESS结构当中有一个指向_HANDLE_TABLE
结构的指针,名字叫做 ObjectTable,2000在0×128处,XP在0xC4处。这个结构在2000和
XP当中是完全不同的。2000当中定义很简单:
kd> dt nt!_handle_table
nt!_HANDLE_TABLE
+0×000 Flags : Uint4B
+0×004 HandleCount : Int4B
+0×008 Table : Ptr32 Ptr32 Ptr32 _HANDLE_TABLE_ENTRY
+0×00c QuotaProcess : Ptr32 _EPROCESS
+0×010 UniqueProcessId : Ptr32 Void
+0×014 FirstFreeTableEntry : Int4B
+0×018 NextIndexNeedingPool : Int4B
+0×01c HandleTableLock : _ERESOURCE
+0×054 HandleTableList : _LIST_ENTRY
+0×05c HandleContentionEvent : _KEVENT

真正指向Handle table entry的就是那个Table指针了,这是一个类型为_HANDLE_TABLE_
ENTRY***的东西,所以从2000的句柄表当中查东西出来就是分三次查表就好了。在WI当
中也有讲,Windows 2000将句柄值除以4之后,把结果的后24位当作三个8位索引来看待
,每个都是在对应级别的索引表当中的索引,前两个是Ptr表,最后一级是
_HANDLE_TABLE_ENTRY表。(这一点Windows Internal说的不清楚,容易让人认为说不用
除以4)。

举个例子来说吧。随便找个handle比较多的进程,就拿Winlogon好了。

kd> !handle 0628 7 b8
processor number 0
Searching for Process with Cid == b8
PROCESS fd779820 SessionId: 0 Cid: 00b8 Peb: 7ffdf000 ParentCid: 008c
DirBase: 035bf000 ObjectTable: fd7806a8 TableSize: 372.
Image: WINLOGON.EXE

Handle Table at e1cc9000 with 372 Entries in use
0628: Object: fd670488 GrantedAccess: 0012019f
Object: fd670488 Type: (fd90b840) File
ObjectHeader: fd670470
HandleCount: 1 PointerCount: 1
Directory Object: 00000000 Name: \SfcApi {NamedPipe}

记着这个Handle 0×0628。下面我们手动来查查看。先看这个Handle的值,除以4之后是0
x18A,低三个字节分别代表三个索引:0×00,0×01,0×8A。下面从进程的EPROCESS开始

kd> dt nt!_eprocess fd779820
nt!_EPROCESS
+0×000 Pcb : _KPROCESS

+0×128 ObjectTable : 0xfd7806a8 _HANDLE_TABLE

kd> dt nt!_handle_table 0xfd7806a8
nt!_HANDLE_TABLE
+0×000 Flags : 0
+0×004 HandleCount : 372
+0×008 Table : 0xe1cc9000 -> 0xe1cc9400 -> 0xe1cc9800
_HANDLE_TABLE_ENTRY

第一级索引表在e1cc9000,索引为0,故:
kd> dd 0xe1cc9000
e1cc9000 e1cc9400 00000000 00000000 00000000

故第二级索引表在e1cc9400,索引为0×01,注意每个索引项为4字节:
kd> dd e1cc9400+0×01*4
e1cc9404 e1eb3000 e1eb3800 00000000 00000000

故sub handle table地址为e1eb3000,索引为0×8A,注意这时候表中存储的已经是_HAND
LE_TABLE_ENTRY了,故而每个大小为8字节:
kd> dd e1eb3000+0×8A*8
e1eb3450 7d670470 0012019f 7d6701e8 001f03ff

可见该对象的_OBJECT_HEADER结构位置在(7d670470 & FFFFFFF8) | 80000000 =
Fd670470,_OBJECT_HEADER当中的结构是0×18字节,之后就是各种对象的data了。所以
对象所在的位置就是fd670488
kd> !object Fd670488
Object: fd670488 Type: (fd90b840) File
ObjectHeader: fd670470
HandleCount: 1 PointerCount: 1
Directory Object: 00000000 Name: \SfcApi {NamedPipe}

这正与2000的句柄表格式相符。


Doing a little bit at a time, and an oyster makes a pearl.
※ 来源:·瀚海星云 bbs.ustc.edu.cn·[FROM: 222.95.168.191]

VC中使用内联汇编

这几天狂懒,什么事都不想做,什么地方也没去,一直在CSDN转转,居然看到03年刚学VC时在CSDN发的第一贴,那个菜呀,现在看来真的很好笑,那段时间真的太痛苦了,没人问没人学,就一个人闭门造车,后来开始混CSDN,一直到在水源混成星星了,后来就去的少了。还好走过来了,没有放弃。

AutoRun病毒的U盘检测部分实现

本程序主要实现AutoRun病毒的U盘检测部分。由于底层接口MS已经帮我们实现好,我们上层实现起来就容易多了。主要通过在窗口回调中检测WM_DEVICECHANGE消息,然后再进一步确认状态。最后再判定是不是移动存储设备。

算法分析入门教程实战篇及应用篇

原文:http://bbs.pediy.com/showthread.php?t=28298

曾经夸下海口,要写一篇关于算法分析入门教程的文章。新春佳节之际,祝各位破友心情愉快,破解顺利,破解技术节节高。顺便在看雪论坛上又浏览了一圈,发现 算…

串操作指令使用说明

在计算机中,大部分数据存放在主存中,8086CPU提供了一组处理主存中连续存放的数据串的指令——串操作指令。串操作指令中,源操作数用寄存器SI寻 址,默认在数据段DS中,但允许段超越;目的操作数用寄存器DI寻址,默…

一个壳的源代码

一款壳的源代码:

ASM代码

include win32.inc
.586
.model flat,stdcall
locals

extrn _wsprintfA:proc,MessageBoxA:proc,ExitProcess:proc,IsDebuggerPresent:proc
extrn Releas…

窗口间的数据通信之消息通信

Windows窗口之间的通信有多种方式,据我所知的就有:通过Socket、互发消息、剪贴板等,我用Win32 ASM演示了通过互发消息进行通信的两种方式,一种方式通过发送WM_SETTEXT,进行简单的字符串的通信;一种方式通过…

计算机电源使用类型检测程序

在上一篇文章《安装XP SP3发现的小功能》中,看到微软的SP3在安装的时候对所使用的电源进行了检测,感觉这样的功能具有一定的实用意义。因为以前没接触地电源管理方面的知识,在最我提到要了解一下,这一功能是怎么实…

安装XP SP3发现的小功能

前天是微软的补丁日吧?我检测了一下,机器没什么补丁要打的。勤打补丁是个好习惯呀,^_^。一想XP的Service pack 3不是出来有一段时间嘛?一直没打,怕和我系统的开发环境造什么冲突。昨天,几个同事都说打过SP3…

定时关机重启注销源码

第一个ASM程序,终于写了一个比Hello Word稍微复杂一点的程序了。这个程序断断续续的写了很长的时间,其间在一边学习ASM,一边写这个小程序。利用这个程序学到不少汇编方面的知识。今天 终于将这个程序给写结束了,W…