飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2906|回复: 4

[07版] 浅析软件安全

[复制链接]

该用户从未签到

发表于 2007-3-27 17:04:54 | 显示全部楼层 |阅读模式
在目前的软件行业,太多的程序有安全问题,代码在被发布前只是经过很少的或是很简单的测试,发布后,很快被破解公布,特别是在网络上的共享软件,令人感慨万千。

面对有组织的破解团体,在敌从我寡的情况下,你的软件安全吗?



标题:         作者:fonge[PET]

好的代码防护离不开壳,一般来讲,加壳即是加密。
通常,好的加密离不开好的壳发挥的作用。选用一款或多款好的加壳工具来对软件加壳是相当强力的代码保护。

壳是什么东西呢?
壳是在程序外面先于程序执行用来保护程序代码的一段代码。
加壳工具工作的原理,就是把可执行文件的代码与数据都进行变换,以数据的开式放在一个或多个地方,生成的目标文件入口代码是加壳软件准备好用来还原可执行文件代码的。

为了保护自己的核心代码不被偷窥,无非就是在代码可读性上下功夫,没有比加壳更容易实现的代码变换了。加壳让你的代码进入另一个世界,原代码已经是面目全非,然而经过一定处理过后依然具有同等功能。

目前,市面上已经有很多成熟的加壳软件,其中加密性能超凡的加壳软件比比皆是。比如说ASProtect,它拥有压缩、加密、反跟踪代码、反-反汇编代码、CRC校验和花指令等保护措施,且为软件开发人员提供SDK,实现加密程序内外结合。还比如VMProtect,经VMProtect处理过的代码,至今还没有人公开宣称能还原。等等……


标题:anti-*    作者:fonge[PET]

anti,反对,对抗的意思。anti-*,故名思义,对抗*。
举个例子,日常生活中的,人家要故意搞你,事事都针对你,而这些故意要针对你而做的事,我们就可以现解为anti-U。这下容易理解了吧。

在加密保护中,为了代码的安全,必然的出现anti-*这样的结构词。
面对调试,我们得想办法抗调试,不然,我们的代码就将暴露在调试者眼下;面对反汇编,我们得想办法抗反-反汇编,要让他的反汇编结果不尽其意,得不到他想要的结果;等等......就是要给未授权查看代码者不安心的去欣赏我们的大作,最后一怒之下不看了,
这就是我们要的anti-*结果。

目前,这些anti-*已充分应用到大量壳中。

*    *    *    *    *    *    *   
引用一段经典,检查自己的进程的父进程:
procedure CheckParentProc;
  var
    Pn: TProcesseNtry32;
    sHandle: THandle;
    H, ExplProc, ParentProc: Hwnd;
    Found: Boolean;
    Buffer: array[0..1023] of Char;
    Path: string;
    begin
      H := 0;
      ExplProc := 0;
      ParentProc := 0;

      //[得到Windows的目录]
      SetString(Path,Buffer,GetWindowsDirectory(Buffer, Sizeof(Buffer) - 1));
      Path := UpperCase(Path) + '\EXPLORER.EXE';   //get to explorer的路径path

      //[得到所有进程的列表]
      sHandle := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
      Found := Process32First(sHandle, Pn); //查找进程

      while Found do //在所有进程中循环查找
      begin
        if Pn.szExeFile = ParamStr(0) then //自己的进程
        begin
          ParentProc := Pn.th32ParentProcessID; //得到父进程的进程ID
          //父进程的句柄
          H := OpenProcess(PROCESS_ALL_ACCESS, True, Pn.th32ParentProcessID);
        end
        else if UpperCase(Pn.szExeFile) = Path then ExplProc := Pn.th32ProcessID;      //Explorer的PID
        Found := Process32Next(sHandle, Pn); //found next
      end;

      //[检测父进程是不是explorer]
      if ParentProc <> ExplProc then
      begin
        ShowMessage('请在explorer下运行程序'); //这里就是我们想要加入的代码了
      end;
end;

*    *    *    *    *    *    *  


标题:加密算法    作者:fonge[PET]

加密离不开算法,无论是加密狗内核算法加密,还是普通的注册码方式。在加密中加入漂亮的算法技巧,在代 码的保护中充当非常重要的角色。
选择一种出色的加密算法体系来加密,整个加密将会事半功倍。而如今网络上,已有大量成熟算法的源码可以 直接用,如:mD5,sha-*等之类的hash算法,blowfish等对称算法,ElGamal等签名算法。
也可以自己设计。
然而,仅仅是有好的加密算法仍是远远不够的,还需要把整个加密算法熔入了整个代码保护中,没有灵活的运 用是做不到了。
没有完美的加密算法结构,只有好的代码加密范例。因为,被公认的加密算法,也不过是充分应用计算机的逻 辑性能问题来提高自身的安全性的。用加密算法保护好代码才是我们想要的。


这里给出一个tea算法样例,tea算法本身算法并不复杂,仅仅是通过参于算法的循环次数来提高安全性:
+————————+————————+————————+————————+————————+————————+

; data   = 8 bytes (64-bit)
; keylen = 16 bytes (128-bit)
; rounds = 32

.686
.model flat,stdcall
option casemap:none


TEAInit        proto :DWORD
TEAEncrypt        proto :DWORD,:DWORD
TEADecrypt        proto :DWORD,:DWORD

TEA_ROUNDS equ 32
TEA_DELTA equ 9E3779B9h

.data?
TEA_KEY dd 4 dup(?)

.code

align dword
TEAInit proc pKey:DWORD
        mov eax,pKey
        mov ecx,[eax+0*4]
        mov edx,[eax+1*4]
        bswap ecx
        bswap edx
        mov [TEA_KEY+0*4],ecx
        mov [TEA_KEY+1*4],edx
        mov ecx,[eax+2*4]
        mov edx,[eax+3*4]
        bswap ecx
        bswap edx
        mov [TEA_KEY+2*4],ecx
        mov [TEA_KEY+3*4],edx
        ret
TEAInit endp

TEAROUND macro y,z,k,enc
        mov ecx,z
        shl ecx,4
        mov edi,z
        lea esi,[z+ebx]
        add ecx,[TEA_KEY+(k+0)*4]
        shr edi,5
        xor ecx,esi
        add edi,[TEA_KEY+(k+1)*4]
        xor ecx,edi
        if enc eq 1
        add y,ecx
        else
        sub y,ecx
        endif
endm

align dword
TEAEncrypt proc uses edi esi ebx pBlockIn:DWORD,pBlockOut:DWORD
        mov esi,pBlockIn
        mov eax,[esi+0*4];y
        mov edx,[esi+1*4];z
        xor ebx,ebx
        bswap eax
        bswap edx
        .repeat
                add ebx,TEA_DELTA
                TEAROUND eax,edx,0,1
                TEAROUND edx,eax,2,1
                add ebx,TEA_DELTA
                TEAROUND eax,edx,0,1
                TEAROUND edx,eax,2,1
        .until ebx == TEA_DELTA*TEA_ROUNDS
        bswap eax
        bswap edx
        mov esi,pBlockOut
        mov [esi+0*4],eax
        mov [esi+1*4],edx
        ret
TEAEncrypt endp

align dword
TEADecrypt proc uses edi esi ebx pBlockIn:DWORD,pBlockOut:DWORD
        mov esi,pBlockIn
        mov eax,[esi+0*4]
        mov edx,[esi+1*4]
        mov ebx,TEA_DELTA*TEA_ROUNDS
        bswap eax
        bswap edx
        .repeat
                TEAROUND edx,eax,2,0
                TEAROUND eax,edx,0,0
                sub ebx,TEA_DELTA
                TEAROUND edx,eax,2,0
                TEAROUND eax,edx,0,0
                sub ebx,TEA_DELTA
        .until zero?
        bswap eax
        bswap edx
        mov esi,pBlockOut
        mov [esi+0*4],eax
        mov [esi+1*4],edx
        ret
TEADecrypt endp

end


+————————+————————+————————+————————+————————+————————+

[ 本帖最后由 fonge 于 2007-3-27 17:06 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

x
PYG19周年生日快乐!

该用户从未签到

发表于 2007-3-27 18:23:40 | 显示全部楼层
感谢兄弟供稿~
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-3-27 18:34:01 | 显示全部楼层
见。外。了~
PYG19周年生日快乐!

该用户从未签到

发表于 2007-3-29 16:21:37 | 显示全部楼层
/:01 /:12 /:08
PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2017-6-11 12:16
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2007-3-30 00:18:35 | 显示全部楼层
    不错的文章。
    真理是不怕重复的。/:08
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表