avpbase.dll的一些学习笔记

avpbase.dll的一点学习笔记 http://www.krnl.info/thread-4832-1-1.html
avpbase.dll的学习笔记(2)CBase::PrepareFileRecords http://www.krnl.info/thread-4835-1-1.html
avpbase.dll的一点学习笔记(3)CLink http://www.krnl.info/thread-4839-1-1.html
avpbase.dll的一点学习笔记(4)CBase::DoRecords http://www.krnl.info/thread-4840-1-1.html

简而言之,卡巴的病毒库中有6种记录,其中BT_RECORD和BT_LINK32较为重要,BT_RECORD下又分为8个子类型,其中RT_FILE最为重要,另外还有RT_UNPACK和RT_EXTRACT类型。卡巴对于RT_FILE类型的记录有特别的优化,一条RT_FILE为一个R_File结构,卡巴加载库后会把一个R_File 分割为R_File_Short、R_File_Cutted和R_File_CureData三个小结构放到数组里,呃,RT_FILE也有8个子类型的。BT_LINK32为卡巴的NB所在,CLink充当了连接器的作用,把COFF格式的OBJ代码加载到内存中,并进行重定位等操作,使之可以像加载DLL一样从病毒库中加载可执行代码,而卡巴的一些核心代码比如_GetFirstEntry和_GetNextEntry就在库文件中,另外卡巴的那些脱壳和解密代码也在库文件中,因为病毒库的代码并没有泄漏,所以也无从得知_GetFirstEntry这个后面会提到的重要函数的代码内容。卡巴在对文件查毒的时候,会把文件看作一个个Entry,把每个Entry读入到缓存中,而后对缓存进行查毒。查毒的过程可见我在上面提到的帖子,主要根据病毒库指定偏移取一定长度的数据作HASH后比较HASH是否一样,有指定Link则将代码执行起来。

可能有不对的地方,还请指正,呵呵。

星期日, 十二月 11th, 2011 学习笔记 没有评论

迅雷客户端漏洞三个

无意间发现的迅雷客户端几个漏洞,都是dll hijacking类型的。
迅雷客户端有几个版本在启动的时候有几个DLL路径没有写好,所以会导致加载失败。
因为迅雷是能打开种子的,那么当迅雷启动时,会把种子的目录作为程序的当前路径,如果种子目录下刚好有那几个名字DLL的话,DLL就会被LoadLibrary,DllMain中的代码就会被执行。所以,你如果把种子和含有恶意代码的DLL一起打包发给别人的话,打中的几率还是很高的。不过迅雷现在似乎会推动最新版本的升级补丁。

迅雷漏洞

我测试到的迅雷版本和DLL名。
迅雷版本号:7.2.1.3136
进程名:ThunderPlatform.exe 1.1.2.76
加载失败的DLL名: .dll (没错,就是.dll)

迅雷版本号:7.2.1.3136
进程名:XBrowser.exe 1.0.0.1
加载失败的DLL名:呃,我记得似乎是ieframe.dll,怎么今天没试出来,算了,不确认了,反正已经被补掉了。

迅雷版本号:7.2.3.3244
进程名:ThunderPlatform.exe
加载失败的DLL名:xlnet_manager.dll

3136版本的那两个漏洞,通过一个在迅雷工作的朋友报了上去,后来朋友跟我说修复了,我又下载了3244版本的瞧了几眼,发现。。。。,又出来一个新的,于是报乌云上去了:http://wooyun.org/bugs/wooyun-2011-02980。今天乌云上过了30天自动公开了,我也懒得去确认迅雷最新版本到底修改没。有兴趣的人可以再瞧下,呵呵。

星期六, 十一月 12th, 2011 胡思乱想 一条评论

《STL源码剖析》学习笔记(4)

20,STL仿函数需要定义相应的型别,以便让配接器取出,以此而拥有配接能力,相应型别只是一些typedef,所有操作在编译期全部完成,对程序的执行效率没有影响。仿函数的相应型别主要用来表现函数参数型别和传回值,为了方便,STL已经定义了两个class,代码如下:

template <class Arg, class Result>
struct unary_function {
    typedef Arg argument_type;
    typedef Result result_type;
};
 
template </class><class Arg1, class Arg2, class Result>
struct binary_function {
    typedef Arg1 first_argument_type;
    typedef Arg2 second_argument_type;
    typedef Result result_type;
};      
</class>

› Continue reading

Tags: , ,

星期六, 十月 29th, 2011 学习笔记 没有评论

《STL源码剖析》学习笔记(3)

18,copy算法利用函数重载,对char* 和wchar_t* 的操作直接memmove,利用模版特化对于有trivial operator=的操作memmove,对于RandomAccessIterator通过头尾间隔来确定循环次数,对于InputIterator通过不断累加是否到达last来确定循环次数。

template <class InputIterator, class OutputIterator>
inline OutputIterator __copy(InputIterator first, InputIterator last,
	OutputIterator result, input_iterator_tag)
{
	for ( ; first != last; ++result, ++first)
		*result = *first;
	return result;
}
</class>

› Continue reading

Tags: , ,

星期三, 十月 26th, 2011 学习笔记 没有评论

《STL源码剖析》学习笔记(2)

12,set、map、multiset、multimap底层均以红黑树实现。红黑树是一种平衡二叉搜索树,平衡二叉搜索树比失去平衡的二叉搜索树来说插入和删除的时间长,但是查找速度快,红黑树相对普通平衡二叉搜索树来说据说统计性能比较好。红色树的迭代器内含一个节点的指针,按照一定的规则来移动,是双向迭代器。跟list一样,每个都是个节点,所以插入不会导致其他迭代器失效,内存也是随用随申请和释放。

13,二叉搜索树具有对数平均时间的表现,但是这样的表现构造在输入数据具有足够随机性的假设上。hashtable的数据结构在插入、删除、搜索等操作上也具有常数平均时间的表现,而且这种表现是以统计为基础,不需要依赖输入数据的随机性。
› Continue reading

Tags: , ,

星期三, 十月 12th, 2011 学习笔记 没有评论