加壳原理与简单实现加壳(delphi源码)
7jdgs blog
Delphi代码
- {*****************************************************************
AddShell()源自于前一段时间有写的addsection()新增区段代码,
在增加区段代码的基础上,追加了
1.修改启动入口点位置
2.增加一段壳头xor $50的代码function AttachStart-function AttachEnd
这一段代码是先填充,再被修改成合适原EXE的壳头
3.修改原启动代码入口点所在区段的段属性可写并进行xor $50运算加密
不支持addshell()处理已经过addshell的exe
*****************************************************************}
-
- unit Unit1;
-
- inte易做图ce
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
-
- type
- TForm1 = class(TForm)
- Button1: TButton;
- Edit1: TEdit;
- Button2: TButton;
- Button3: TButton;
- procedure Button1Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1 : TForm1;
-
- implementation
-
- {$R *.dfm}
- function AttachStart: dword; stdcall; //我们定义的待填充数据
- asm
- pushfd
- pushad
- mov eax,$12345678 //将会被自动计算并修改为加密初始地址
- mov ebx,$1234 //将会被自动计算并修改为加密大小
- mov ecx,0
- @AA:
- xor byte ptr[eax],$50
- inc eax
- inc ecx
- cmp ecx,ebx
- jbe @aa
- popad
- popfd
- push $12345678 //将会被自动计算并修改为原OEP
- ret
- end;
-
- function AttachEnd: dword; stdcall;
- begin
- end;
-
- {-------------------------增加区块并实现简易加壳--------------------------------}
- procedure AddShell(lFileName: string; lBackup: boolean); //打开exe文件,是否备份
- var
- hFile : THandle; //文件句柄
- ImageDosHeader : IMAGE_DOS_HEADER; //DOS部首
- ImageNtHeaders : IMAGE_NT_HEADERS; //映象头
- ImageSectionHeader: IMAGE_SECTION_HEADER; //块表
- lPointerToRawData : dword; //指向文件中的偏移
- lVirtualAddress : dword; //指向内存中的偏移
- i : integer; //循环变量
- BytesRead, ByteSWrite: Cardinal; //读写用参数
- AttachSize : dword; &nbs
补充:综合编程 , 安全编程 ,