Windows
Windows 编程

免费的加壳软件 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