免费的加壳软件 Safengine

Safengine是一个具有反调试、反附加、动态自效验等功能,同时提供了对代码的变形、乱序和虚拟化等功能的应用程序保护壳,是一款简单易用的软件保护工具,它改变您的软件执行流程,以达到阻碍自动分析,消耗破解时间、精力的目的。
Safengine的代码分析引擎将在保护应用程序时提供完整的分析,从而对应用程序进行系统化的保护,将您的原始代码移动和变形,并且加入无数垃圾代码和反调试、跟踪代码。
Safengine处理的范围是整个程序,而不是程序里的某一个过程。所以,即使您的关键代码在保护后未经变形,也需要耗费破解者很长的时间才能找到,而往往只是一行两行代码,穿插在数以万计的垃圾代码中,是极其隐蔽和猥琐的。
Safengine的代码虚拟机在同类产品中最稳定、最完善,整体运行架构线程安全,不会改变系统对受保护代码的线程的调度。虚拟处理器采用了逻辑门级的指令拆分,使用与非和加法两个基础运算指令实现了大部分复杂的x86指令,并且使用了随机的虚拟寄存器参与运算,极大程度提高了代码保护的安全性。
在同类的软件保护壳中,Safengine提供了最完整的解决方案,集代码加密、虚拟化、授权于一体,并且每一项功能都可圈可点。
Safengine支持所有Win32/64 PE文件,包括:
可执行文件 (.exe)
屏幕保护程序 (
.scr)
动态链接库 (.dll)
ActiveX 控件 (
.ocx)
驱动程序 (*.sys)

官方网站:http://www.safengine.com

Scintilla GETTEXTRANGE 获取中文字符

Private Type CHARRANGE 'cr
    cpMin As Long
    cpMax As Long
End Type
Private Type TEXTRANGE
    chrg As CHARRANGE
    lpstrText As Long '这里一定要定义为Long不要定义为String
End Type
'拦截窗口的消息
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If uMsg = WM_NOTIFY Then
        Dim ns As NMHDR
        CopyMemory ns, ByVal lParam, Len(ns) '目标,源,大小-字节
        If ns.hwndFrom = SciLexerHwnd Then
            If ns.code = SCN_CHARADDED Then
                Dim dqpoint As Long
                Dim startint As Long
                Dim endint As Long
                Dim tr As TEXTRANGE
                Dim B() As Byte  'tr结构最后一个用这个方法引用一个数组的开头位置
                dqpoint = SendMessage(SciLexerHwnd, SCI_GETCURRENTPOS, 0, 0) '取得当前位置
                startint = SendMessage(SciLexerHwnd, SCI_WORDSTARTPOSITION, dqpoint - 1, False) '//当前单词起始位置
                endint = SendMessage(SciLexerHwnd, SCI_WORDENDPOSITION, dqpoint - 1, 0) '//当前单词终止位置
                tr.chrg.cpMax = endint
                tr.chrg.cpMin = startint
                ReDim Preserve B(0 To (endint - startint + 1)) As Byte
                tr.lpstrText = VarPtr(B(0))
                lR = SendMessagesc(SciLexerHwnd, SCI_GETTEXTRANGE, 0, tr) '获取
                If (lR > 0) Then
                    Debug.Print UTF8ToUTF16(B)
                End If
            End If
        End If
    End If
    WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
End Function

CSS 小记

样式表的结构:
选择符{标记属性:属性值;标记属性:属性值;标记属性:属性值;标记属性:属性值;......}

例如:

H1{font-size:12pt;} 

引用:

这里会更改字号


还有一种定义方法:

.H1{font-size:12pt;} 

这种方法是定义的话,引用就不能用上面的标记了。

需要以class 去引用

这里是内容

另外一种方法

#H1{font-size:12pt;} 

这种方法是以ID形式引用,如下方法:


还有一种css有很多的属性例如:

a:link {color: #FF0000}     /* 未访问的链接 */
a:visited {color: #00FF00}  /* 已访问的链接 */
a:hover {color: #FF00FF}    /* 当有鼠标悬停在链接上 */
a:active {color: #0000FF}   /* 被选择的链接 */

这里的a是什么? 看下面的代码:

上、下 博客

其中的a就是超链接的意思。而后面的link visited hover 等 我们可以看成是一种对象属性。而a就是超链接对象。

看下面的代码:

a.01:link {color: #FF0000}     /* 未访问的链接 */
a.01:visited {color: #00FF00}  /* 已访问的链接 */
a.02:hover {color: #FF00FF}    /* 当有鼠标悬停在链接上 */
a.03:active {color: #0000FF}   /* 被选择的链接 */

引用的时候可以直接按class引用例如 class="01",这种定义方法实际就是分开定义超链接的属性值。