BlackHat之路第六期:一次网站逆破经历。

最近博客高产,实属不容易。偶尔静静思考,写点东西,总比打游戏来得好。
读书不可有太多实在的意义,写文章也是。

一个网络上的朋友,从黑鹰安全网出来的,黑了一个aspx的网站,拿到了页面和bin。在看雪上发了个帖子,征人破解。说是一些页面打开直接空白,怀疑加入了域名校验的功能。我正好想练练手,所以接了下来。

2个小熬夜,搞定。结果是,改动的地方不多,分析的过程比较曲折。

BlackHat之路第五期:一个简单的PE Append感染型病毒的手工修复。

PE_DOWNEXEC.O是上周刚发现的新的感染型样本,该病毒会感染exe文件,并新加一个节,节名为hhqg,然后病毒会修改exe文件的eip,指向这个新节,执行完毕后重新跳回原来的eip。

下面我们将手工修复被病毒感染的文件。

使用C#监听Outlook特定新邮件。

这个月开始要上夜班,由于做事是on email的,所以部门以前的做法是,隔一段时间起床刷一下邮件。我受不了,所以做了个工具,用来监听outlook的新邮件,并做声音提示。

其实关键代码没有几行,难度在于这些函数在MSDN里基本找不到。术语上叫做基于Office的Add-in的开发。
但是这里我并没有实现成插件,只是截获了Outlook的NewMailEx事件,然后通过回调函数做判断。

核心代码如下:

public void _tMonitorOutLook()
{
ApplicationClass outLookApp = new ApplicationClass();
outLookApp.NewMailEx += new ApplicationEvents_11_NewMailExEventHandler(outLookApp_NewMailEx);
MessageBox.Show(“开始监听Outlook邮件!”);
while (true)
{
Thread.Sleep(10);
}
}

private static void outLookApp_NewMailEx(string EntryIDCollection)
{
ApplicationClass outLookApp = new ApplicationClass();
NameSpace outLookNS = outLookApp.GetNamespace(“MAPI”);
MAPIFolder outLookFolder = outLookNS.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
string storeID = outLookFolder.StoreID;

MailItem mail = (MailItem)outLookNS.GetItemFromID(EntryIDCollection, storeID);

//判断标题
Regex rx = new Regex(s_strRegex);
if (rx.IsMatch(mail.Subject))
NewPspCaseArrived(“有新邮件到达:” + mail.Subject);

}

原理如下:
1·修改NewMailEx的回调函数,指向我们自己的函数
2·NewMailEx会传递一个EntryID过来,作为参数1,我们再获得收件箱的StoreID,作为参数2,然后调用GetItemFromID,就可以获得新邮件的实例
3·接下来就可以做自己想做的事情了

我的工具截图如下:

如果你感兴趣,可以从以下链接下载:
点我下载

当然,如果你使用的是Outlook,而且你还会写一点正则表达式,那么你也可以使用这个工具监听你的邮件了。只要你把监听文件夹改成一个不想关的文件夹就可以了。不过别忘了,需要.Net Framework 2.0(+)。

BlackHat之路第四期:API Hook做自定义的弹出对话框。

Windows自定义的弹出对话框太丑了,而由于对话框是通过调用MessageBox这个API,由Windows生成一个Model窗口产生的,所以我们没办法为这个Windows生成的窗口自定义皮肤。

所以可以通过Hook MessageBox这个API来自定义对话框。
这里的Hook有两种,一个是Inline Hook,一个是IAT Hook。
前者是修改当前进程空间里的API所在内存,后者是修改当前进程的导入表中的函数指向地址。

杀毒手的跨版本升级方式探索。

随着杀毒手的版本越来越多,因此各版本之间如何平滑升级是我们必须考虑的问题。

1·从2.3版本,程序每次启动时都会强制更新index.dll,即“更新组件”。
因此,“最新的更新组件+完整的update.ini”,可以让2.3开始的版本可以平滑升级,包括跨版本升级。
不过,需要注意的是这个“完整的update.ini”,“完整”是指,当前最新版本里应该“完整”地包括哪些内容,而非“需要更新的内容”。如果是后者,跨版本升级就会出现问题。

2·对于2.3以前的版本,我建议使用“一个版本,一个update.ini”的方式来保证跨版本升级。
杀毒手目前流传在外的版本有1.53和2.0,如何让这两个版本平滑升级到2.3?
(1)2.0—>2.3:
维护一个update20.ini,确保2.0的版本能更新到2.3的index.dll,其他组件可不考虑;而2.3的index.dll指向新的更新源update23.ini,用来更新其他组件至最新版本。

(2)1.53—>2.3:
首先保证1.53能升级到2.0,更新到2.0后,重复(1),即可更新到2.3。
1.53—>2.0的更新同样采用“专属update.ini”的方式,确保1.53的index.dll能更新到2.0的index.dll

3·不过这样就带来一个问题,因为1.53和2.0已经流传在外了,也就是说,他们的更新源已经固定了,怎么来为他们配置“专属update.ini”?
这里只能说我们运气好了,幸好目前只流传两个版本,最新版本是2.0,所以说,需要升级的只有1.53,那么1.53肯定能升级到2.0的index.dll,所以,如果要保证1.53能平滑升级到2.3,只要现在更新一下2.0的index.dll,更改其的更新源,不等于1.53升级到2.0的更新源,且不等于2.3的index.dll的更新源

4·因此保证(1)和(2)都成功,只要现在发布一个新的版本,让2.0的index.dll指向一个新的更新源A,2.3的index.dll也指向一个新的更新源B

怀念阿桑。

我对于阿桑,有着特殊的感情,或者说是一种缘分。
我听阿桑的时候,很多人还不知道阿桑。
大一那年(2003)理工的夏天,由于学校不让用电脑,所以我的大部分娱乐时间都用来听歌。
挑CD挑来挑去之后形成的一个习惯是,我会根据封面来选CD,觉得封面来电的,我通常都买来听。
当时在理工西山的过道边上看到地摊上有一个沧桑落寞的女子的封面,我至今还是很有印象,心想这女人唱的歌应该很安静很平和,于是买回来听,反复地听。

从第一张的《叶子》《温柔的慈悲》,到后来的《寂寞在唱歌》,等等等等,很多歌只记得旋律,却从来不记得歌名。印象里她的歌适合旅行的时候听,一个人发呆的时候听,适合周末早上起床的时候听,而且一张碟里的歌通常都不错,旋律平和,通透人心。

后来慢慢得知,阿桑很多出名的歌都是翻唱的,而且也正是因为阿桑,让这些歌从鲜为人知变为广为流传。

感谢阿桑,让我有了那么一段安静的音乐享受经历。
你就这样走了,很难过那年你来理工我没去要你的签售CD。我只记得佩佩说,佩佩和你握了手,还夸了你,说你很和蔼很平易近人。我还听别人说,你和师兄张智成在理工的演出很成功。真是替你高兴。

你就这样突然走了,我这一个你的粉丝,真是越写越难受了。

============
当年买的第一张你的专辑,记得封面不是这样的,抱歉当时太穷,买不起正版;后来毕业的时候,低价处理给学弟学妹们了。

BlackHat之路第三期之后续:第一个注册机的注册算法分析

PEID查看,壳是PESpin 1.3,该壳挺难脱,需要找到Stolen Code,然后修复OEP和IAT。由于本文只谈算法分析,所以脱壳步骤不在其中。

壳脱完后,运行程序,输入几个测试数据,发现有两种结果:1·提示格式不对;2·提示失败。

最简单的方法,在MessageBoxA设断,输入测试数据:

数字五笔2008通用注册补丁。

数字五笔是老爸使用的一个输入法,因为老爸不会拼音也不会五笔,难得找到一个好用的根据笔画来打字的输入法,但是没购买的版本每次都提示购买。挺难为他的。
所以找时间爆破了一下,内存补丁法。

在安装了数字五笔的机器上,将该工具放到system32目录下,运行,然后随便输入一个注册码点击注册,便可以成功注册。

下载:
点击下载此文件

声明:请勿用作商业用途。

BlackHat之路第三期:第一个注册机。

周末的时候想给手机换个铃声,于是上网找mp3切割工具,skycn上排名第一的是Mp3铃声剪辑王:
http://www.skycn.com/soft/41870.html

可是非注册版的有限制,不爽,于是决定搞掉它。
爆破很简单,但是想到可能大家也有这方面的需求,于是做了个注册机。

p.s.PESpin的壳很难脱

注册机下载:
点击下载此文件

声明:请勿用作商业用途。

BlackHat之路第二期:Worm_down.ad创建mutex分析。

Worm_down.a和Worm_down.ad都是利用 MS08-067漏洞,通过溢出挂载svchost.exe进程从而进行局域网传播的病毒。其中.ad是.a的变种。
这两个变种都有一些一样的功能,其中一个便是当本身被加载后,会创建一个Mutex,以防止被重复加载。

.a变种创建该Mutex的方法是调用zip.lib中的crc32算法,将计算机名进行crc验算后作为Mutex的名字。由于该方法简单,所以很容易创建相同的Mutex。
.ad变种意识到了这一点,因此作者自己写了一个算法,用来生成Mutex名。这里我们便来分析一下.ad变种生成该Mutex的方法。

由于要根据计算机名做Mutex,因此我们在GetComputerNameA上设断点,然后F9运行,如下图:

趋势科技闪电杀毒手2.0发布。

2.0终于发布啦,核心开发人员减少至我和另一位同事。
2.0主要对UI做了一些重新设计和效率的优化,以及恶意软件的模块翻新,还有其他模块的微调。
UI重新设计,恶意软件,自动升级,架构等都担在了我身上。
3.0将侧重扫描和专杀的制作,同时病毒码也将逐渐积累

感受还是挺多的,越来越发现设计的重要性,同时自己也越来越有想法,看来我在大学里的积淀还是有用处的。
界面设计我还是很满意的,都是通过代码写出来的,都知道vc做界面不容易。

下载地址:
http://www.trendmicro.com/download/zh-cn/product.asp?productid=52