当前位置:编程学习 > Delphi >>

加壳原理与简单实现加壳(delphi源码)

7jdgs blog
Delphi代码
  1.  {*****************************************************************
    AddShell()源自于前一段时间有写的addsection()新增区段代码,
    在增加区段代码的基础上,追加了
    1.修改启动入口点位置
    2.增加一段壳头xor $50的代码function AttachStart-function AttachEnd
     这一段代码是先填充,再被修改成合适原EXE的壳头
    3.修改原启动代码入口点所在区段的段属性可写并进行xor $50运算加密


    不支持addshell()处理已经过addshell的exe
    *****************************************************************}  
  2.   
  3. unit Unit1;   
  4.   
  5. interface  
  6.   
  7. uses   
  8.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   
  9.   Dialogs, StdCtrls;   
  10.   
  11. type   
  12.   TForm1 = class(TForm)   
  13.     Button1: TButton;   
  14.     Edit1: TEdit;   
  15.     Button2: TButton;   
  16.     Button3: TButton;   
  17.     procedure Button1Click(Sender: TObject);   
  18.     procedure Button3Click(Sender: TObject);   
  19.     procedure Button2Click(Sender: TObject);   
  20.   private  
  21.     { Private declarations }   
  22.   public  
  23.     { Public declarations }   
  24.   end;   
  25.   
  26. var  
  27.   Form1             : TForm1;   
  28.   
  29. implementation   
  30.   
  31. {$R *.dfm}   
  32. function AttachStart: dword; stdcall;   //我们定义的待填充数据   
  33. asm   
  34.        pushfd   
  35.        pushad   
  36.        mov eax,$12345678      //将会被自动计算并修改为加密初始地址   
  37.        mov ebx,$1234          //将会被自动计算并修改为加密大小   
  38.        mov ecx,0   
  39.        @AA:   
  40.        xor byte ptr[eax],$50  
  41.        inc eax   
  42.        inc ecx   
  43.        cmp ecx,ebx   
  44.        jbe @aa   
  45.        popad   
  46.        popfd   
  47.        push $12345678        //将会被自动计算并修改为原OEP   
  48.        ret   
  49. end;   
  50.   
  51. function AttachEnd: dword; stdcall;   
  52. begin   
  53. end;   
  54.   
  55. {-------------------------增加区块并实现简易加壳--------------------------------}   
  56. procedure AddShell(lFileName: string; lBackup: boolean); //打开exe文件,是否备份   
  57. var  
  58.   hFile             : THandle;          //文件句柄   
  59.   ImageDosHeader    : IMAGE_DOS_HEADER; //DOS部首   
  60.   ImageNtHeaders    : IMAGE_NT_HEADERS; //映象头   
  61.   ImageSectionHeader: IMAGE_SECTION_HEADER; //块表   
  62.   lPointerToRawData : dword;            //指向文件中的偏移   
  63.   lVirtualAddress   : dword;            //指向内存中的偏移   
  64.   i                 : integer;          //循环变量   
  65.   BytesRead, ByteSWrite: Cardinal;      //读写用参数   
  66.   AttachSize        : dword;         &nbs
补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,