gisempire100
捉鬼专家
捉鬼专家
  • 注册日期2004-08-13
  • 发帖数552
  • QQ
  • 铜币2462枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2330回复:0

老歌新唱--使用VB6开发的ActiveX实现.NET程序的混淆加密

楼主#
更多 发布于:2008-01-22 12:37
<br>代码下载地址:<a href="http://www.cnblogs.com/Files/wuhuacong/VBActiveX.rar" target="_blank" >http://www.cnblogs.com/Files/wuhuacong/VBActiveX.rar</a></p>
<p>由于存在一下几种特点:<br>1、.NET程序反编译容易,而使用一些混淆工具会导致有些程序不能运行<br>2、VB6开发ActiveX控件,那叫一个快,VB代码也不是很容易被反编译。<br>3、结合两者的特点,如果在.NET中使用了封装一些关键代码的ActiveX控件,那么程序的安全性是否好一点呢?<br><br>对于这种做法,请大家拍砖讨论,本人提供一个如何实现这种做法的思路。<br><br>一、 编写一个封装关键字符串或者实现逻辑的ActiveX控件<br>   1、首先使用VB6创建一个ActiveX的工程项目<br><img alt="Snap1.jpg" src="http://www.cnblogs.com/images/cnblogs_com/wuhuacong/Snap1.jpg" border="0" height="414" width="461"><br>2、设置VB ActiveX的工程属性<br>  <img alt="Snap1-2.jpg" src="http://www.cnblogs.com/images/cnblogs_com/wuhuacong/Snap1-2.jpg" border="0" height="357" width="442"></p>
<p>3、编写类模块函数</p>
<div ><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Option Explicit<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Public Function GetString() As String<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">    GetString = "ABCDEFG"<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">End Function<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Public Function ValidateString(ByVal str As String) As Boolean<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">    ValidateString = False<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">    <br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">    If str = "ABCD" Then<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">        ValidateString = True<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">    Else<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">        Err.Raise Err.Number, , "不正确"<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">    End If<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">End Function<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Public Function GetDateTime() As Date<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">    GetDateTime = Now<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">    <br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">End Function</div>
<p>注意:如果使用Err.Raise函数,在调用过程中会抛出一个异常<br><br><br>二、在.NET程序中引用并使用该ActiveX控件<br>1、创建一个Windows Form程序<br><img alt="Snap2.jpg" src="http://www.cnblogs.com/images/cnblogs_com/wuhuacong/Snap2.jpg" border="0" height="308" width="307"><br>2、添加ActiveX控件的引用</p><img alt="Snap3.jpg" src="http://www.cnblogs.com/images/cnblogs_com/wuhuacong/Snap3.jpg" border="0" height="258" width="266"><br><br>3、编写按钮事件及ActiveX控件调用代码<br>using System.Data;<br>using System.Drawing;<br>using System.Text;<br>using System.Windows.Forms;<br><br>namespace TestMyVBControl<br>{<br>    public partial class Form1 : Form<br>    {<br>        public Form1()<br>        {<br>            InitializeComponent();<br>        }<br><br>        private void btnTest_Click(object sender, EventArgs e)<br>        {<br>            MyVBControl.TestClass test = new MyVBControl.TestClass();<br>            MessageBox.Show(test.GetString());<br>        }<br><br>        private void btnValidate_Click(object sender, EventArgs e)<br>        {<br>            MyVBControl.TestClass test = new MyVBControl.TestClass();<br>            try<br>            {<br>                MessageBox.Show(test.ValidateString("ABCD").ToString());//正确<br>                MessageBox.Show(test.ValidateString("ABCDE").ToString());//有错误<br>            }<br>            catch(Exception ex)<br>            {<br>                MessageBox.Show(ex.Message);<br>                return;<br>            }<br>        }<br><br>        private void btnGetDate_Click(object sender, EventArgs e)<br>        {<br>            MyVBControl.TestClass test = new MyVBControl.TestClass();<br>            MessageBox.Show(test.GetDateTime().ToString());<br>        }<br>    }<br>}<br><br>结束,收工 <br>
喜欢0 评分0
A friend is never known till a man has need. ...CL
游客

返回顶部