VA2FO插件更新0.2,增加FO转VA功能。

2011-11-11 发表在 开发和设计 查看 250 次 | 2 条评论

插件介绍:一个可以直接在OD里实现“物理地址和虚拟地址相互转换”的插件。详细请看上一篇文章

这个功能早就想加进去了,这几天才终于抽出点时间实现。

目前增加了“物理地址”转“虚拟地址”的功能,所以现在这个版本包含了“虚拟地址”和“物理地址”“相互转换”的功能,并且修复了上个版本的几个小问题。

阅读全文 »

病毒行为监测工具(Malware Behavior Interceptor)。

2011-03-27 发表在 开发和设计 查看 589 次 | 评论

这是去年刚来北京时做的一个工具,用来自动判断某文件是否属于病毒,完成的版本只能用做演示,后来工作忙起来了,就没时间再回去修改。现在看看,好像快烂在电脑里了。还不如分享出来,希望给他人有所帮助。

实现的功能:
1. 利用微软的Detours实现API inline hook
2. 实现简单的沙箱功能
a. 文件重定向
b. 注册表重定向
c. 进程、线程控制
3. 被控进程与控制进程数据实时交互
4. 进程行为判断规则功能,自动识别程序是否恶意
阅读全文 »

JS实现循环感染XSS Worm。

2011-03-27 发表在 开发和设计 查看 541 次 | 评论

这是去年十月份刚来北京时接的私活做的一个东西。当时已经很久没有碰Web了,所以做起来遇到点小麻烦,但是最终搞定。

主要目的是在有XSS漏洞的论坛上发帖(包含恶意JS),当用户访问该贴时,帖中的JS代码会获得访问者的cookie,然后用改访问者的身份信息自动发一个具有同样功能的帖子。依次类推,实现”Worm“的功能。

获得Cookie的方法不难。伪造用户数据也不难。难点在于,怎样将一段js代码本身当做该段js代码中的一部分post出去。去几个论坛调查了几次,并结合自己的研究,通过以下方法解决:
1. 利用arguments.callee.toString();获得当前函数的string文本
2. 去掉将该段文本中的”换行“
3. encodeURIComponent()转义
阅读全文 »

用NetFilter在Linux下实现一个小型防火墙MiniFirewall。

2011-03-27 发表在 开发和设计 查看 499 次 | 评论

这是去年十月份刚来北京时接的一个私活做的东西。现在发出来应该没什么问题了。当时做的时候,遇到了不少问题,发出来希望能给他人有所帮助。

基本原理:
1. server端:
a.编译成Kernal Module,然后利用NetFilter建立挂钩函数,在挂钩函数里做包的处理工作。
b.建立文件系统/proc存储防火墙规则
2. Client端:通过对文件系统/proc的读写访问,与server端交互,进行防火墙规则的设定

阅读全文 »

Python爬虫自动下载Discuz论坛附件。

2010-05-15 发表在 开发和设计 | 标签 , , 查看 3,917 次 | 11 条评论

因工作需要,要定期收集卡饭论坛的病毒样本板块的病毒样本,所以就考虑用 Python做个爬虫,然后自动下载附件。

核心功能有3个:

1· 登录
2· 伪造cookie保持session
3. 下载样本
阅读全文 »

[驱动开发学习] DDK与WDK

2009-11-21 发表在 开发和设计 查看 430 次 | 评论

最近尝试去了解WINDOWS下的驱动开发,现在总结一下最近看到的资料。

  1.首先,先从基础的东西说起,开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发 WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发WINDOWS下的驱动程序,我们需要一个DDK/WDK。

  2.DDK(Driver Developer Kit)和WDK(Windows Driver Kit)的区别:

  这个要说说驱动相关的一些历史:

  1).95/98/ME下,驱动模型为:Vxd,相关资料可以看《编程高手箴言》的前几个章节,里面有很详细的介绍,虽然这个东西已经过时,但大概看看还是会增长见识的。

  2).2000/XP/2003下,Windows采用WDM驱动模型(Windows Driver Model),开发2000/XP/2003的驱动开发包为:DDK。

  3).Vista及以后版本,采用了WDF驱动模型(Windows Driver Foudation),对应的开发包:WDK。

其实WDK可以看做是DDK的升级版本,现在一般的WDK是包含以前DDK相关的功能,现在XP下也可以用WDK开发驱动,WDK能编译出2000-2008的各种驱动。

  3.Vxd驱动文件扩展名为:.vxd。

   WDM和WDF驱动文件扩展名为:.sys。

参考资料:

1.http://topic.csdn.net/u/20071225/13/bbb7eeba-7abf-483d-8724-abb76aa4e22c.html

2.http://topic.csdn.net/u/20090104/16/9d09f896-fd4b-4b6b-807c-990ddc63c35b.html

3.http://topic.csdn.net/u/20080204/19/2ca8d266-f384-4d8f-865c-c16a33aa97b0.html

3CIT俄罗斯方块游戏。

2009-09-02 发表在 开发和设计 查看 299 次 | 评论

呃,第一个VC游戏。为了迎接趋势科技3CIT的新文化参加的比赛。
方块是3 C i T这4个字母,所以要得分其实蛮难的。

点击下载此文件

VC实现美化界面的几种方式。

2009-07-04 发表在 开发和设计 查看 527 次 | 评论

最近由于做杀毒手的缘故,在这方面小有点研究,所以概括一下。

1·最简单最省事儿的,当然是使用第三方的皮肤控件。
这些控件按使用方法、效率、美化的控件数量分优劣,所以或多或少给你的项目带来了未知风险。

2·HOOK。一般是是HOOK窗体过程函数,在这个函数里根据消息类型做判断。
其实方法1大部分也是使用了HOOK,不过由于1通常都是直接拿来dll,而2则是自己写,所以这里就分为两个方法。

3·在项目里独立出一个UI模块,其他各个模块的控件都是UI模块生成。UI模块的控件类对其他模块是透明的。
这也就是闪电杀毒手使用的方法。这种方法的优点是:界面统一规范;缺点是:麻烦……

4·也是有一个独立的UI模块,UI里面重写了各种控件。不过这些控件类对其他模块是开放的。其他模块在声明控件变量的时候,直接使用UI模块的控件类,即包含那些控件类的头文件。但是还能对控件进行可视化操作,即直接拖放控件,然后使用DDX_Control(pDX, IDC_MYBUTTON, m_btn1);进行子类化即可实现界面美化。我目前觉得这种方法不错,优点是:简单异操作;缺点可能就是编译的体积较大。

利用SetUnhandledExceptionFilter对Release程序进行异常处理。

2009-07-02 发表在 开发和设计 查看 1,602 次 | 2 条评论

闪电杀毒手2.5发布出去有一段时间了,最近收到几个Bug反馈。
通常发布出去的Release产品,如果遇到没有预料到的异常,通常都会弹出Windows默认的错误窗口Windows Error Reporter.
这时用户就傻了:交互不友好;RD也傻了:不知道异常的具体信息。

SetUnhandledExceptionFilter可以设置在WER弹出之前的最后一次异常处理的机会。所以只要设置好我们的异常处理函数就可以捕获到Unhandled Exception。

SetUnhandledExceptionFilter(CleanToolExceptionFun);
LONG WINAPI CleanToolExceptionFun(struct _EXCEPTION_POINTERS* ExceptionInfo)
{

}

在这个函数里你可以做以下几件事:
1·获得异常的ExceptionRecord和Context
2·获得异常编号
3·获得异常的模块
4·获得堆栈的信息
5·程序继续执行还是退出

1和2都好办,直接通过传递进来的参数就可以获得:

ExceptionInfo->ExceptionRecord->ExceptionAddress;

3通常的做法是,通过ExceptionRecord获得异常的内存地址,调用VirtualQuery获得Handle,再通过GetModuleFileName获得出现异常的文件路径。

MEMORY_BASIC_INFORMATION mbi = {0};
if (FALSE == ::VirtualQuery( addr, &mbi, sizeof(mbi) ) ) return;
UINT_PTR h_module = (UINT_PTR)mbi.AllocationBase;
::GetModuleFileNameW((HMODULE)h_module, sz_module, len);
return;

4的做法是通过StackWalk64函数便利堆栈。

StackWalk64(IMAGE_FILE_MACHINE_I386,hCurrentProcess,hCurrentThread,&sStackFrame,pContext,0,0,0,0)

5是通过函数的返回值来确定的。

在实现的过程遇到几个好玩的问题:
1·如果exe调用dll,dll中要使用AFX_MANAGE_STATE(AfxGetStaticModuleState())之后,dll的资源才能被访问到;但是如果dll调用exe,则必须使用AFX_MANAGE_STATE(AfxGetAppModuleState())。

2·StackWalk64的问题:在Release版本下,Stackwalk64获得的堆栈信息不完整,具体表现为:如果异常是由MFC的模块抛出的,那么获得的堆栈将缺少栈最上方我们自己的模块的信息。比如A->B->MFC,则获得的栈为(至顶向下):MFC->A。但是在Debug的版本下不存在这个问题。为此我还特意用OD调试了Release版本,发现堆栈是完整的,那么只能认为是StackWalk的问题了。

3·在便利异常的模块的节表的时候,Release版本下程序偶尔会莫名其妙地退出。

4·Release编译的优化问题:如果我直接写int i = 5/0,编译时会直接报错。如果我写成:
int i = 0;
AfxMessageBox(L”%d”, 5 /i),编译就可以通过。汗……

闪电杀毒手官方网站。

2009-06-21 发表在 开发和设计 查看 374 次 | 评论

我认为一个渐渐成型的软件,是应该要有个专门的网站的。所以我抽空给杀毒手做了个。

访问地址:

http://www.shadushou.com

http://shadushou.com

内容不多,所以干脆在一个Frame里显示。我承认我花了不少心思在上面,注意细节,注意交互性,注意留白,等等。
但是可能是顾及的东西比较多,所以只能做成这样。部分子页面还是做的不怎么好,以后慢慢改吧。

BTW,调用jmail发邮件的时候遇到个搞笑的问题,Send的时候总是出现错误,查了半天,原来是必须以"username:password@smtpserver"的形式作为参数。汗-_-