7月末。

2009-07-30 发表在 记录思考 | 查看 201 次 | 6 条评论

多么煽情的题目啊,看到就让人想起那首好听的《七月》……

最近想的比较多一个事是,就是希望7月快点过去吧,我好收拾情绪,重新过上充实的看书/写程序/调试的生活。
不过我也常安慰自己,混吧混吧,偶尔混一两天也是可以的,毕竟我大部分时间都没混,到八月就开始好好干[bookworm]。

这样的情绪很囧,可是我也安然,不上班就打打游戏看看网页逛逛淘宝看看电视吃吃零食,一天一天悠哉悠哉就这么过去了。
这样的心态,似乎是7月中找老板谈涨工资的问题后开始的。看来我还是经不起钱的诱惑……

不过话又说回来,7月其实还是干了不少事儿的。

7月中,回了次家,给家换了台电脑,好好陪了妈妈,有跟她好好地聊天,逛街。妈妈四十多了,每次我想到我三十岁的时候,妈妈就会五十多,我就一阵惶恐。

7月中,丢了个手机,为促进国家GDP增长做了点贡献。因此入手个黑莓8700g,欢喜中……

7月末,终于下定决心剪了从小到大以来最短的一次“伪毛寸”,我本来是想可以更短,但是无奈理发师说我发质太软,再短就会很难看,所以……不过效果还是可以的[bookworm]。

7月,尝试着在淘宝开店。目前销售为0……给烤火做了个店铺访问计数器,效果可以……目前已在售,5块钱1年,目前淘宝最便宜,有兴趣的可以留言-_-[bookworm]

7月,给豆子做了个加班计时器。豆子由于当医生,经常加班,但是又不发加班费,于是豆子给我找了个活儿。让我统计她的加班时间,然后给她每个月发加班工资~哎,我都成了资产阶级了。

7月末,也就是今天,收到砖头从韩国寄来的明信片。很是感动,电视剧里的情节终于也发生在我的身边。二话没说,把贺卡贴在了Block分割栏上,以兹炫耀[lol]

7月,我的Dota水平飞速增长……[teeth]眼看着VS上的胜率一直保持在50%以上……而且总共不到90把,已经6级了。[cool]Dota是个好东西啊,浪费我不少时间,一天打他个四五把,一天就基本过去了。

7月,还有些躁动。看着别人比自己好,会眼红,会咽不下这口气。偶尔会觉得AV这一行前途黯淡,也会觉得自己的开发能力和AV能力还是不够级别。不知道这是间歇性的情绪烦躁,还是别的,不过我知道这总归是好的,至少表明我还是渴望进取。

7月。7月,真的很长。

PS,张惠妹的新专辑真的很好听:http://www.haoting.com/musiclist/ht_e0b348ac5d3c9e68.htm

有感于国内的真真假假虚虚实实。

2009-07-19 发表在 记录思考 | 查看 95 次 | 2 条评论

我承认这篇博文纯水。

订阅的RSS已经好多天不看了,加粗的蓝色数字都是三位以上,然后我就发现我一下子就Out了很多。

“其实我写的不是博文,是寂寞”
“这么水你就别看了,你妈妈喊你回家吃饭”

活生生的生活啊,这无厘头的文化只有中国网友能造得出来。

花儿原来解散了,大张伟吸毒了?
饭否原来被封了,为什么不学枣保跳墙,你看枣报还是活灵活现的,连T恤都出来了。
枣保上说津晋高速公路塌陷,新闻联播却大篇幅报导伊朗坠机,只字不提塌陷的事儿,我这年轻小伙就被枣报给刺激兴奋起来了。

我感叹着呢,国家本来就是统治阶级保护自己权利的机器,新闻联播本来就是用来洗脑的嘛。
但是呢,一个国家媒体,一个主流媒体,把中国的信息传播搞得一团糟,老百姓们根本不知谁真谁假。
国家媒体为了保护统治者的权利,只知道和谐,国外很乱,国内很好。
主流媒体都是只知道赚钱的主儿,只要能赚钱,什么料儿写不出来。

都怪中国太大了,不是说开个车立马就能去事发现场。

我最鄙视中国的广告媒体了,什么“每个女人都应属于自己的LV”啊之类的,我敢说,女人们本来都是好好的,就是被这些广告给惯出来的。不知道哪个媒体的哪个广告策划哪天蹲坑的时候一不小心想出了这句话。本来这世上是没这样的理念的,但是这广告一经大肆宣传,就无中生有地形成了一个主流价值观。女人们都奔奢侈品去了。

房价也是这样。谁告诉你结婚就必须要有新房了?每年都这么多人结婚,那房子岂不是要建到月球上去了?
炒房者有钱啊,就花钱做广告,那些广告公司也乐意啊,有钱赚嘛,就铺天盖地的做广告啊,然后人们看到这样的广告,以为除了自己,其他人都是像广告上说的那样的,所以就要求自己也这样。这样的人一多起来,于是一个主流价值观就形成了。房价就上去了。

所以,广告媒体是恶性主流价值观的始作俑者。

我妈妈喊我回家吃饭了,不写了。

BlackHat之路第七期:Worm_downad扫描器

2009-07-09 发表在 逆向调试 | 查看 33 次 | 评论

这个东西是想练练手的,因为觉得自己大部分是分析别人写的东西,所以觉得自己也应该写点东西出来。
这个东西主要有两个功能:扫描网内的机器,猜测密码以及判断是否有MS08-067攻击的漏洞。

做的过程中还是学到不少东西的。内网连接,怎么猜密码,怎么利用管道,怎么利用漏洞等等。

下载地址:
点击下载此文件

MPEG-2 0Day攻击原理和预防。

2009-07-07 发表在 逆向调试 | 查看 38 次 | 评论

MS08-067带来的Worm_downad的硝烟还没有完全散去,最近又惊爆一个新的0 Day漏洞,喜欢上网看图片和视频的网民们要小心了,说不你正看得眼冒金星的时候,病毒已经在悄悄地侵入你的电脑。

这个漏洞发生在windows系统的BDATuningModelMPEG2TuneRequest视频组件中。当用户浏览被挂马的网页时,恶意代码就会调用MPEG2视频组件的msvidctl.dll模块,从而溢出执行ShellCode。

说起来有意思的是,这个漏洞归根到底是由于微软工程师犯了一个“程序员的错误”。本来是应该传递一块buffer的指针过去,但是结果却传递了这个指针的指针,也就是MOV变成了LEA。这个大部分程序员都曾犯过的错误就这样成了本次0Day的罪魁祸首。
阅读全文 »

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

2009-07-04 发表在 程序开发 | 查看 50 次 | 评论

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

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 发表在 程序开发 | 查看 170 次 | 1 条评论

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

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

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

}
[/Code]

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

1和2都好办,直接通过传递进来的参数就可以获得:
[Code]
ExceptionInfo->ExceptionRecord->ExceptionAddress;
[/Code]

3通常的做法是,通过ExceptionRecord获得异常的内存地址,调用VirtualQuery获得Handle,再通过GetModuleFileName获得出现异常的文件路径。
[code]
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;
[/code]

4的做法是通过StackWalk64函数便利堆栈。
[code]
StackWalk64(IMAGE_FILE_MACHINE_I386,hCurrentProcess,hCurrentThread,&sStackFrame,pContext,0,0,0,0)
[/code]

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),编译就可以通过。汗……

Robolet萝卜游侠破解杂记。

2009-07-01 发表在 逆向调试 | 查看 98 次 | 1 条评论

萝卜游侠,是这个东东,http://www.robolet.com/,应该是网游自动脚本类工具。
一个朋友要破网络验证,于是我就破破看。

出于保护软件的目的,只讲个大概流程和要点。
这个东东是我见过的极少的不通过加猛壳来保护自身的网游类工具,我不知道官方是舍不得买猛壳的钱还是……反正岂一个汗字了得。

1·下载包下载下来的exe A并不是最后运行的主程序,第一次点击后,会把主程序 B释放出来,释放的位置是几层随机命名的文件夹里面。

2·B运行的时候会校验当前目录有没有B.rsys文件,搞笑的是只检验文件的Handle是否存在,不看文件的内容。

3·B运行后,出现的主窗口是B生成的,但是点击登录后,运行的却是另一个地方的Code,这个地方是A的目录下的一个dat文件C。这里又出现搞笑的地方了,这个Dat其实是一个Dll,只是把后缀改成了dat而已。

4·调了几次后发现,A、B、C的Code基本上一样,只是几部分Code分开运行了而已。A释放B,B调用C。比如登录那部分的代码,是通过LoadLibrary来调用C.dll里的登录函数。

5·找到登录函数后,基本上就是明文的登录验证了,原理大同小异,获得用户名和密码后,作为querystring传给一个网页,通过返回值来判断是否注册、是否付费、费用是否到期。几个JNZ、JZ改成JMP或是NOP掉就可以了:

6·后续操作就是优化的问题了,这里就不说了。

总结:我觉得这种“保护”方式真的蛮逗的,如果直接调试下载下来的exe,发现会直接跟飞了,如果你怀疑程序使用了反调试或是自校验,那你就走入了误区。其实只要打开FileMon看一下就知道了。这样的东西居然卖钱,再汗一下。