程序中使用花指令(Delphi源码)
网上收集的花指令代码2
push 111111
push 222222
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
add esp,-6C
push ebx
push esi
push edi
push ebp
mov ebp,esp
PUSH EAX
POP EAX
RETN
55 64 A3 00 00 00 00 58 58 64 A3 00 00 00 00 58 58 64 A3 00 00 00 00 8B EC 83 C4 F4 83 C4 0C B8
2C 52 40 00 50 8B E8 50 58 C3
0088102A 8BE8 MOV EBP,EAX
0088102C B8 34A64000 MOV EAX,40A634
00881031 50 PUSH EAX
00881032 C3 RETN
00881033 90 NOP
50 58 90 8B EC 6A FF 68 11 11 11 00 68 22 22 22 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 58 64 A3 00 00 00 00 58 58 58 58 8B E8 B8 34 A6 40 00 50 C3 90
-----------------------------------------------------------------
二次加花
push ebp
mov ebp,esp
jmp
UPX 文件头前=NOP
花指令
je 或jz 若相等则跳(机器码74 或0F84)
jne或jnz 若不相等则跳(机器码75或0F85)
jmp 无条件跳(机器码EB)
jb 若小于则跳
ja 若大于则跳
jg 若大于则跳
jge 若大于等于则跳
jl 若小于则跳
jle 若小于等于则跳
pop 出栈
push 压栈
程序顺利来到紧跟其后的正确信息处
xxxxxxxxxxxx 正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)
。。。
。。。
xxxxxxxxxxxx 出错信息(我们希望不要跳到这里,不让它出现)它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
五、程序转移指令
1>无条件转移指令 (长转移)
JMP 无条件转移指令
CALL 过程调用
RET/RETF过程返回.
2>条件转移指令 (短转移,-128到+127的距离内)
( 当且仅当(SF XOR OF)=1时,OP1<OP2 )
JA/JNBE 不小于或不等于时转移.
移位>1次时, 则由寄存器CL给出移位次数.
如 MOV CL,04
SHL AX,CL
四、串指令
───────────────────────────────────────
DS:SI 源串段寄存器 :源串变址.
ESI 目标串段寄存器:目标串变址.
CX 重复次数计数器.
3. 目的地址传送指令.
LEA 装入有效地址.
例: LEA DX,string ;把偏移地址存到DX.
花指令(精)
花指令的概念与认识花指令 1、什么是花指令什么是花指令?实际上,把它按照“乱指令”来理解可能更贴切一些,我们知道,汇编语言其实就是机器指令的符号化,从某种程度上看,它只是更容易理解一点的机器指令而已。
每一条汇编语句,在汇编时,都会根据cpu特定的指令符号表将汇编指令翻译成二进制代码。
而日常应用中,我们通过VC的IDE或其它如OD等反汇编、反编译软件也可以将一个二进制程序反汇编成汇编代码。
机器的一般格式为:指令+数据。
而反汇编的大致过程是:首先会确定指令开始的首地址,然后根据这个指令字判断是哪个汇编语句,然后再将后面的数据反汇编出来。
由此,我们可以看到,在这一步的反汇编过程中存在漏洞:如果有人故意将错误的机器指令放在了错误的位置,那反汇编时,就有可能连同后面的数据一起错误地反汇编出来,这样,我们看到的就可能是一个错误的反汇编代码。
这就是“花指令”,简而言之,花指令是利用了反汇编时单纯根据机器指令字来决定反汇编结果的漏洞。
2、花指令与免杀的关系加花就是,在程序汇编中,加了一些无用的废话,用来扰乱杀软对特征码的扫描对比,来达到免杀的目的。
是一种逃避方式,主要用于表面免杀。
加花指令的确没有改变特征码的位置,但是他改变了程序执行顺序,有的也能改变文件结构。
使杀毒软件扫描的时候跳到花指令处,即判断没有病毒。
通常情况下,在文件免杀的时候,加花指令是最简单、有效的方法,而且一般能通杀很多杀毒软件,所以一般文件免杀通用此法,前提是你的花指令不是常用的,最好能自己做出你个人的花指令,才会很有效。
3.花指令执行顺序花指令一般添加到程序的头部。
执行顺序:花指令入口-->执行花指令-->程序原入口-->执行原程序花指令的好坏直接决定程序是否可以躲避杀毒软件的查杀,花指令和壳的本质差不多,都是为了保护程序而做,所以我们做免杀的时候,可以多结合壳和花指令各自的优点对程序进行处理,达到更好的免杀效果。
大概步骤总结: 第一步:从编写手册中成对的提取几对第二步:打乱它们之间的顺序,也可不打乱第三步:中间插入几个nop或jmp,也可不插入第四步:最后添加跳转到入口地址指令第五步:把编写好的花指令添加到程序中后,测试是否可以正常运行,然后再用杀毒软件查杀 3、花指令的样本 PUSH EBP MOV EBP,ESP DEC EBP INC EBP ADD ECX,1 SUB ECX,-1 MOV EAX,DWORDPTR FS:[0] PUSH EAX MOV DWORD PTR FS:[0],ESP POP EAX MOV DWORD PTR FS:[0],EAX MOV CL,1 PUSH EAX SUB AL,90 POP EAX ADD ESP,-0C ADD ESP,0C PUSH EAX JNO 原始入口 ________________ push ebp mov ebp ,esp //常见的入口代码 add esp ,68 //以下的指令都是对称的(成对的) sub esp ,68 inc ecx dec ecx push edi pop edi push eax pop eax push edi pop edi inc ecx dec ecx nop jz 跳回入口点 //跳到程序的入口,执行原程序 jnz 跳回入口点 ____________ push ebp mov ebp, esp push eax push eax nop pop eax pop aex sub eax, 1 inc eax, 1 push 入口地址 retn。
花指令
JZ--------等于转移(Jump if Zero)
JNZ-------不等于时转移(Jump if Not Zero)
JB--------小于转移(Jump if Below)
JNB-------大于或等于转移(Jump if Not Below)
nop -------可任意在中间添加
与它等效的:
mov EDI,EDI
add esp,1 -------其中数字可以任意,注意以下面对应
add esp,-1
add esp,1 -------其中数字可以任意,注意以下面对应
sub esp,1
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
跳转
somewhere:
nop /"胡乱"跳转的开始...
jmp 下一个jmp的地址 /在附近随意跳
jmp ... /...
POPAD-----把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.
3.算术运算指令:
ADD-------加法.
SUB-------减法.
INC-------加 1
DEC-------减 1
MUL-------无符号乘法
DIV-------无符号除法
4.加区加花
首先通过加区段工具给无壳的服务端加一个区段。区段名子随便填写,比如hacker,大小一般填写在50-200 就好了。然后我们用LORDPE打开首先记下入口点。然后选择区段记下新添加的HACKER区段的入口点。因为我们要写花指令,所以我们在入口点设置为HACKER区段的比入口点稍微大点的地址。然后我们在写花指令。通常找不到零区域的时候就可以加区段。
Delphi常用代码
function f_CreatRecDir(mmFS:Integer; mmTime:TDatetime):String;
//创建并返回录音文件目录 mmFS->0=客户留言 1=通话录音
var
mmDir : String;
begin
mmDir:='';
case mmFS of
if FindFirst(result ,FaAnyfile,mmF)<>0 then exit;
end;
end;
end;
begin
if gOrderBH>4000000000 then gOrderBH:=0;
gOrderBH:=gOrderBH+1;
result:='S'+trim(inttostr(gOrderBH));
end;
function f_StrFX(mmIVRStr:String):String; //分析一个字串,如123变换成1-2-3
Codesite.Send('Err:通道'+inttostr(mmTDH)+' TZM='+inttostr(mmTZM)+' '+mmMS);
end;
//返回指定路径下不重复的文件名
function fDifferFile(AFilePathName:String):String;
0: mmDir:=gLyDIR + formatdatetime('yyyymmdd',mmTime);
1: mmDir:=gRecDIR + formatdatetime('yyyymmdd',mmTime);
delphi取得任意程序的命令行
delphi取得任意程序的命令行program GetCommandLineExDemo;uses Windows;constSystemHandleInformation = 16;ProcessBasicInformation = 0;STATUS_SUCCESS = cardinal($00000000);SE_DEBUG_PRIVILEGE =20;STATUS_ACCESS_DENIED = cardinal($C0000022);STATUS_INFO_LENGTH_MISMATCH = cardinal($C0000004);SEVERITY_ERROR = cardinal($C0000000);TH32CS_SNAPPROCESS = $00000002; // 模块列表快照JOB_OBJECT_ALL_ACCESS = $1f001f;typeTPROCESSENTRY32 = recorddwSize: DWORD;cntUsage: DWORD;th32ProcessID: DWORD; // this processth32DefaultHeapID: DWORD;th32ModuleID: DWORD; // associated execntThreads: DWORD;th32ParentProcessID: DWORD; // this process's parent processpcPriClassBase: Longint; // Base priority of process's threads dwFlags: DWORD;szExeFile: array[0..MAX_PATH - 1] of Char;// Pathend;typeUSHORT = Word;UNICODE_STRING = packed RecordLength : USHORT;MaximumLength: USHORT;Buffer : PWideString;end;RTL_USER_PROCESS_PARAMETERS = packed recordReserved1 : array[0..15] of Byte;Reserved2 : array[0..9] of Pointer;ImagePathName: UNICODE_STRING;CommandLine : UNICODE_STRING;end;PRTL_USER_PROCESS_PARAMETERS = ^RTL_USER_PROCESS_PARAMETERS;PEB = packed recordReserved1 : array[0..1] of Byte;BeingDebugged: ByteBool;Reserved2 : Byte;Reserved3 : array[0..1] of Pointer;Ldr : Pointer;ProcessParameters: PRTL_USER_PROCESS_PARAMETERS;Reserved4 : array[0..103]of Byte;Reserved5 : array[0..51]of Pointer;end;PPEB = ^PEB;PROCESS_BASIC_INFORMATION = packed recordExitStatus : DWORD;PebBaseAddress: PPEB;AffinityMask : DWORD;BasePriority : DWORD;uUniqueProcessId: ULong;uInheritedFromUniqueProcessId: ULong;end;TProcessBasicInformation = PROCESS_BASIC_INFORMATION;function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD) : THandle ; stdcall; external 'kernel32.dll' name 'CreateToolhelp32Snapshot';function Process32First(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL ; stdcall; external 'kernel32.dll' name 'Process32First';function Process32Next(hSnapshot: THandle; var lpme: TPROCESSENTRY32): BOOL ; stdcall; external 'kernel32.dll' name 'Process32Next';function NtQueryInformationProcess(ProcessHandle: THandle;ProcessInformationClass: Byte;ProcessInformation: Pointer;ProcessInformationLength: ULONG;ReturnLength: PULONG): DWORD; stdcall; external 'ntdll.dll';function EnablePrivilege(const PrivName: string; const Enable: Boolean = true): Boolean;varhToken: THandle;PrivId: Int64;tkp, PreviousState: TTokenPrivileges;ReturnLength: DWORD;beginResult:=False;if not LookupPrivilegeValue(nil,PChar(PrivName),PrivId) then exit;if not OpenProcessT oken(GetCurrentProcess,TOKEN_ADJUST_PRIVILE GES or TOKEN_QUERY,hT oken) then exit;tryReturnLength:=0;tkp.PrivilegeCount:=1;tkp.Privileges[0].Luid:=PrivId;if Enable then tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLEDelse tkp.Privileges[0].Attributes:=0;Result:=AdjustTokenPrivileges(hToken,false,tkp,SizeOf(TToke nPrivileges),PreviousState,ReturnLength);finallyCloseHandle(hT oken);end;end;function GetProcessCmdLine(PID: Cardinal): string;constSE_DEBUG_NAME = 'SeDebugPrivilege';ProcessBasicInformation = 0;varh : THandle;pbi : TProcessBasicInformation;ret : Cardinal;r : Cardinal;ws : WideString;aPEB : PEB;str:string;i:integer;ProcPar: RTL_USER_PROCESS_PARAMETERS;beginResult:='';str:='';if PID = 0 then PID:=GetCurrentProcessID;tryh:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,PID);if h=0 then exit;tryret:=NtQueryInformationProcess(h,ProcessBasicInformation ,@PBI,SizeOf(PBI),@r);if ret=0 thenrepeatif (not ReadProcessMemory(h,pbi.PebBaseAddress,@aPEB,SizeOf(aPEB ),r)) or (r<>SizeOf(aPEB)) then break;if (notReadProcessMemory(h,aPEB.ProcessParameters,@ProcPar,SizeO f(ProcPar),r)) or (r<>SizeOf(ProcPar)) then break;SetLength(ws,mandLine.Length div 2);if (not ReadProcessMemory(h,mandLine.Buffer,PWideChar (ws),mandLine.Length,r)) or (r<>mandLine.Length) then break;Result:=ws;until True;finallyCloseHandle(h);end;finallyend;end;function Trim(const S: string): string;varI, L: Integer;beginL := Length(S);I := 1;while (I <= L) and (S[I] <= ' ') doInc(I);if I > L thenResult := ''elsebeginwhile S[L] <= ' ' doDec(L);Result := Copy(S, I, L - I + 1);end;end;function UpperCase(const S: string): string;varCh: Char;L: Integer;Source, Dest: PChar;beginL := Length(S);SetLength(Result, L);Source := Pointer(S);Dest := Pointer(Result);while L <> 0 dobeginCh := Source^;if (Ch >= 'a') and (Ch <= 'z') thenDec(Ch, 32);Dest^ := Ch;Inc(Source);Inc(Dest);Dec(L);end;end;Function findprocess(TheProcName:String):DWORD; varisOK:Boolean;ProcessHandle:Thandle;ProcessStruct:TProcessEntry32;beginProcessHandle:=createtoolhelp32snapshot(Th32cs_snappro cess,0);processStruct.dwSize:=sizeof(ProcessStruct);isOK:=process32first(ProcessHandle,ProcessStruct);Result:=0;while isOK dobeginifTrim(UpperCase(TheProcName))=Trim(UpperCase(ProcessStruct. szExeFile)) thenbeginResult:=ProcessStruct.th32ProcessID;CloseHandle(ProcessHandle);exit;end;isOK:=process32next(ProcessHandle,ProcessStruct);end;CloseHandle(ProcessHandle);end;beginmessagebox(0,pchar(GetProcessCmdLine(findprocess('nod32.exe'))), 'aa', 0);end.。
Delphi常用代码(个人自用整理2)
Delphi常⽤代码(个⼈⾃⽤整理2)3.Delphi 实现⽂件加密源码unit main;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,ShellAPI,inifiles,registry,Des ,FileCtrl, jpeg, ExtCtrls;typeTBruce = class(TForm)dlgOpen1: TOpenDialog;Image1: TImage;Button2: TButton;Edit1: TEdit;Label1: TLabel;Button1: TButton;Label2: TLabel;Edit2: TEdit;Button3: TButton;Label3: TLabel;Edit3: TEdit;Button5: TButton;procedure FormCreate(Sender: TObject);procedure Button5Click(Sender: TObject);procedure JiaMI(var FilePath,MiMa:string);procedure JieMi(var DianFile:string);procedure ZhuCeCaiDan;procedure DelZhuCe;procedure Button1Click(Sender: TObject);procedure Edit2Exit(Sender: TObject);procedure FormShow(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varBruce: TBruce;FilePahtName :string;sRoot:WideString;sCaption:string;implementationuses Unit2;{$R *.dfm}DianFile,IniPath:string;inifile: TInifile;beginDianFile:=FilePath+'..\';iniPath:='dat.ini';inifile:=TIniFile.Create(IniPath);inifile.WriteString('111','key',DES.EncryStrHex(MiMa,'FEIGEW')); inifile.Free;renamefile(FilePath,DianFile);end;procedure TBruce.FormCreate(Sender: TObject);vari: Integer;beginZhuCeCaiDan;for i := 1 to ParamCount dobeginif LowerCase(ParamStr(i)) <> '' then beginFilePahtName:= ParamStr(i);end;end;end;procedure TBruce.JieMi(var DianFile:string);varFileName,FileJD:string;i:Integer;beginFileName:=DianFile+'.\';I:=Length(FileName);FileJD:=Copy(FileName,1,i-3);renamefile(FileName,FileJD);end;procedure TBruce.ZhuCeCaiDan;vara:TRegistry;begina:=TRegistry.create;a.rootkey:=HKEY_CLASSES_ROOT;if a.openkey('Folder\Shell\cutbig',true) thena.closekey;end;if a.openkey('Folder\Shell\cutbig\command',true) thenbegin//command⼦键的内容是点击右键后选择相应项后要运⾏的程序;//%1是在单击右键时选中的⽂件名a.writestring('','"'+Application.exeName+'" "%1"');a.closekey;end;a.free;end;procedure TBruce.DelZhuCe;vara:TRegistry;begina:=TRegistry.create;a.rootkey:=HKEY_CLASSES_ROOT;//⽤deletekey删除⼀个主键,其所包含的⼦键也被删除,如果已⽆此主键,运⾏删除操作不会带来别的危害a.deletekey('Folder\Shell\cutbig');a.free;Application.MessageBox('成功删除系统右键菜单!', '成功', MB_OK +MB_ICONINFORMATION);end;procedure TBruce.Button5Click(Sender: TObject);beginapplication.Terminate;end;procedure TBruce.Button1Click(Sender: TObject);varpassword:string;beginif FilePahtName='' then beginApplication.MessageBox('没有可加密的⽂件夹,请从⽂件夹上右键启动加密程序!','系统', MB_OK + MB_ICONWARNING);//Application.Terminate;end;if (Edit1.Text='') or (Edit2.text='') then beginApplication.MessageBox('密码不能为空,请输⼊你的密码!', '系统', MB_OK +MB_ICONWARNING);Exit;end;if Edit2.Text=Edit1.Text then beginpassword:=Edit2.Text;JiaMI(FilePahtName,password);Application.MessageBox('⽂件夹添加密码成功,请牢记您的密码!', '系统', MB_OK+ MB_ICONINFORMATION);//Application.Terminate;end else beginend;end;procedure TBruce.Edit2Exit(Sender: TObject);beginif Edit2.Text<>Edit1.Text then beginApplication.MessageBox('两次输⼊的密码不⼀致,请重新输⼊!', '系统', MB_OK + MB_ICONWARNING);Edit2.SetFocus;end;end;procedure TBruce.FormShow(Sender: TObject);beginEdit1.SetFocus;end;procedure TBruce.Button2Click(Sender: TObject);begin{ FilePahtName:='';if not dlgOpen1.Execute then exit;FilePahtName:=dlgOpen1.FileName;ShowMessage(FilePahtName);}sCaption := '⽂件夹'; //弹出框标题名(⾮弹出框窗体名)sRoot := ''; //初始⽂件夹(如'C:\','D:\DownLoad'等, 不存在则从桌⾯)beginif SelectDirectory(sCaption, sRoot, FilePahtName) then//已返回所选⽂件夹路径给FilePahtName,⾃⾏处理end;ShowMessage(FilePahtName);end;procedure TBruce.Button3Click(Sender: TObject);varlen:Integer;inifile: TInifile;IniPath,password,sstemp:string;beginBruce.JieMi(FilePahtName);len:=Length(FilePahtName);sstemp:=Copy(FilePahtName,1,len-1);iniPath:='dat.ini';inifile:=TIniFile.Create(IniPath);password:=inifile.ReadString('111','key','');password:=des.DecryStrhex(password,'FEIGEW');inifile.Free;Bruce.JiaMI(sstemp,password);if Edit3.Text=password then beginBruce.JieMi(FilePahtName);DeleteFile(IniPath) ;Application.MessageBox('您输⼊的密码错误,请重新输⼊密码!', '系统', MB_OK +MB_ICONWARNING);Edit3.SetFocus;end;end;end.⼀、“软件限时注册”控件(TShareRegist)功能说明:简介:⼀、1、只要将该控件加⼊主窗体,使Action属性设为true,再设置其它属性,你的软件就有限时注册的功能了,只要你牢记三个密钥,并加上给你的算号软件(RegObject_Admin.exe)你就可以⽆敌天下了。
花指令——精选推荐
花指令刚在52破解看了⼀篇花指令的⽂章,感觉挺好的。
第⼀种花指令是jmp+垃圾数据⽐如jmp label//这⾥存放垃圾指令或数据label://正常指令push ebpmov ebp,esp第⼆种是假分⽀跳转xor eax, eax;test eax, eax;jnz LABEL1;jz LABEL2;xor eax,eax这让eax为0,逻辑运算指令会影响ZF标志位的,所以会置ZF为1,那么永远会跳转到LABEL2处,这样LABEL1处的代码全部是垃圾指令,不管看起来多么正常,统统都是垃圾指令。
第三种是call和retn配合,看起来好像调⽤了⼀个函数,但实际上啥事也没做就返回了。
我写了⼀段测试代码。
int main(int argc, char* argv[]){printf("hello world");int a;__asm {call LABEL9;_emit 0x55;_emit 0x8b;_emit 0xec;_emit 0xff;_emit 0x83;_emit 0xec;_emit 0xc;LABEL9:add dword ptr ss : [esp], 0x0D;ret;__emit 0xF3;}a = 3;return 0;}_emit 0x55;_emit 0x8b;_emit 0xec;_emit 0xff;_emit 0x83;_emit 0xc;这中间有_emit的都是垃圾数据,⼲扰分析者的。
我们真正有效的代码就是int a;a=3;return 0;没了。
add dword ptr ss : [esp], 0x0D;这个改变函数返回地址的,调⽤完call Lable9之后,栈顶会存放函数的返回地址,也就是_emit 0x8b这个数据的地址。
由于是垃圾数据,我们必须不能让它返回到这个地址,要改⼀下改到下⼀句有效代码的地址处,也就是a=3;这句代码的地址,那么就需要让返回地址加⼀个值,加多少呢?这个我是反汇编之后⽤OLLYDBG调试之后算出来的。
电脑常用花指令大全
常用花指令大全用花指令大全常用花指令大全╬┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅╬常用花指令大全╬┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅╬┇部分花指令内容相同只是改了一些跳转处的汇编代码换了名字┇┇大家在加花指令的时候可以在新入口处先NOP几行在开始加花┇┇在加花的同时你也可以在花指令中随便NOP几行在继续添加花┇╬┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅╬******************************************************************** ****1.伪装vc++5.0代码:PUSH EBPMOV EBP,ESPPUSH -1push 415448 -\___PUSH 4021A8 -/ 在这段代码中类似这样的操作数可以乱填MOV EAX,DWORD PTR FS:[0]PUSH EAXMOV DWORD PTR FS:[0],ESPADD ESP,-6CPUSH EBXPUSH ESIPUSH EDIADD BYTE PTR DS:[EAX],AL /这条指令可以不要!jmp 原入口地址******************************************************************** ****2.胡乱跳转代码:push ebpmov ebp,espinc ecxpush edxnoppop edxdec ecxpop ebpinc ecxloop somewhere /跳转到上面那段代码地址去!somewhere:nop /"胡乱"跳转的开始...jmp 下一个jmp的地址 /在附近随意跳jmp ... /...jmp 原入口地址 /跳到原始oep******************************************************************** ****3.伪装c++代码:push ebpmov ebp,esppush -1push 111111push 222222mov eax,fs:[0]push eaxmov fs:[0],esppop eaxmov fs:[0],eaxpop eaxpop eaxpop eaxpop eaxmov ebp,eaxjmp 原入口地址******************************************************************** ****4.伪装Microsoft Visual C++ 6.0代码:PUSH -1PUSH 0PUSH 0MOV EAX,DWORD PTR FS:[0]PUSH EAXMOV DWORD PTR FS:[0],ESPSUB ESP,68PUSH EBXPUSH ESIPUSH EDIPOP EAXPOP EAXPOP EAXADD ESP,68POP EAXMOV DWORD PTR FS:[0],EAXPOP EAXPOP EAXPOP EAXPOP EAXMOV EBP,EAXJMP 原入口地址******************************************************************** ****5.伪装防杀精灵一号防杀代码:push ebpmov ebp,esppush -1push 666666push 888888mov eax,dword ptr fs:[0]push eaxmov dword ptr fs:[0],esppop eaxmov dword ptr fs:[0],eaxpop eaxpop eaxpop eaxpop eaxmov ebp,eaxjmp 原入口地址******************************************************************** ****6.伪装防杀精灵二号防杀代码:push ebpmov ebp,esppush -1push 0push 0mov eax,dword ptr fs:[0]push eaxmov dword ptr fs:[0],espsub esp,68push ebxpush esipush edipop eaxpop eaxpop eaxadd esp,68pop eaxmov dword ptr fs:[0],eaxpop eaxpop eaxpop eaxpop eaxmov ebp,eaxjmp 原入口地址******************************************************************** ****7.伪装木马彩衣(无限复活袍)代码:PUSH EBPMOV EBP,ESPPUSH -1push 415448 -\___PUSH 4021A8 -/ 在这段代码中类似这样的操作数可以乱填MOV EAX,DWORD PTR FS:[0]PUSH EAXMOV DWORD PTR FS:[0],ESPADD ESP,-6CPUSH EBXPUSH ESIPUSH EDIADD BYTE PTR DS:[EAX],AL /这条指令可以不要!jo 原入口地址jno 原入口地址call 下一地址******************************************************************** ****8.伪装木马彩衣(虾米披风)代码:push ebpnopnopmov ebp,espinc ecxnoppush edxnopnoppop edxnoppop ebpinc ecxloop somewhere /跳转到下面那段代码地址去!someshere:nop /"胡乱"跳转的开始...jmp 下一个jmp的地址 /在附近随意跳jmp ... /...jmp 原入口的地址 /跳到原始oep******************************************************************** ****9.伪装花花添加器(神话)代码:-----------根据C++改nopnopnopmov ebp,esppush -1push 111111push 222222mov eax,dword ptr fs:[0]push eaxmov dword ptr fs:[0],esppop eaxmov dword ptr fs:[0],eaxpop eaxpop eaxpop eaxpop eaxmov ebp,eaxmov eax,原入口地址push eaxretn******************************************************************** ****10.伪装花花添加器(无极)代码:nopmov ebp, esppush -1push 0A2C2Apush 0D9038mov eax, fs:[0]push eaxmov fs:[0], esppop eaxmov fs:[0], eaxpop eaxpop eaxpop eaxpop eaxmov ebp, eaxmov eax, 原入口地址jmp eax******************************************************************** ****11.伪装花花添加器(金刚)代码:--------根据VC++5.0改nopnopmov ebp, esppush -1push 415448push 4021A8mov eax, fs:[0]push eaxmov fs:[0], espadd esp, -6Cpush ebxpush esipush ediadd [eax], almov eax,原入口地址jmp eax******************************************************************** ****12.伪装花花添加器(杀破浪)代码:nopmov ebp, esppush -1push 0push 0mov eax, fs:[0]push eaxmov fs:[0], espsub esp, 68push ebxpush esipush edipop eaxpop eaxpop eaxadd esp, 68pop eaxmov fs:[0], eaxpop eaxpop eaxpop eaxpop eaxmov ebp, eaxmov eax, 原入口地址jmp eax******************************************************************** ****12.伪装花花添加器(痴情大圣)代码:nop..........省略N行nopnoppush ebpmov ebp, espadd esp, -0Cadd esp, 0Cmov eax, 原入口地址push eaxretn******************************************************************** ****13.伪装花花添加器(如果*爱)代码:nop........省略N行nopnoppush ebpmov ebp, espinc ecxpush edxnoppop edxdec ecxpop ebpinc ecxmov eax, 原入口地址jmp eax******************************************************************** ****14.伪装PEtite 2.2 -> Ian Luck代码:mov eax,0040E000push 004153F3push dword ptr fs:[0]mov dword ptr fs:[0],esppushfwpushadpush eaxxor ebx,ebxpop eaxpopadpopfwpop dword ptr fs:[0]pop eaxjmp 原入口地址 '执行到程序的原有OEP******************************************************************** ****15.无效PE文件代码:push ebpmov ebp,espinc ecxpush edxnoppop edxdec ecxpop ebpinc ecxMOV DWORD PTR FS:[0],EAX \POP EAX |POP EAX \MOV DWORD PTR FS:[0],EAX |(注意了。
Delphi常用语法和控件用法
♦ Trim(const S: string): string;
删除字符串前后的空格及控制字符 ♦ TrimLeft(const S: string): string; 删除字符串前的空格及控制字符 ♦ TrimRight(const S: string): string; 删除字符串后的空格及控制字符
取值范围 扩 展 ANSI 字 符集 UniCode 字 符 集 扩 展 ANSI 字 符集
数据库系统开发
字符型适用的运算符
♦ 关系运算符:=、<>、>、>=、<、<= 关系运算符: 、 、 、 、 、
数据库系统开发
String类型 类型
♦ 字符串String是代表一组字符的变量类型
,每一种语言都有自己的字符串类型的 存储和使用方法。
void myloop() { int i; int t = 0; i = 0; while(i<10) { t := t+i; i++; } }
数据库系统开发
♦ Object Pascal中的 中的while循环 中的 循环
procedure myloop var i , t : Integer; begin t := 0; i := 0; while i<10 do begin t := t + i; i := i + 1; end; end;
数据库系统开发
变量
♦ c语言中的函数 语言中的函数
void foo(void) { int x = 1; int y = 2; x++; y--; }
数据库系统开发
♦ 用Object Pascal编写 编写
花指令原理
花指令原理
花指令,也被称为花指令集或花指令片段,是一种干扰反汇编引擎正常工作的指令片段。
其原理是利用反汇编器静态分析算法的缺陷,使得代码在反编译解析时出错,从而干扰程序正常执行。
花指令内部如果涉及到寄存器的使用,一般会将其保存在栈中。
花指令可分为两大类:可执行花指令和不可执行花指令。
其中不可执行花指令是利用反汇编器静态分析算法的缺陷使得代码在反编译解析时出错。
其原理使反汇编分析执行流命中执行会出错的垃圾数据,就会造成解析错误,而实际执行过程中垃圾数据并不会执行。
此外,花指令还分为两类:一种是通过构造巧妙的代码,引导反汇编引擎解析一条错误的指令,扰乱指令的长度,使反汇编引擎无法按照正常的指令长度一次解析邻接未解析的指令,最终使反汇编引擎输出错误的反汇编结果;另一种是利用间接跳转形式的花指令(在定长指令集如arm中比较常见)。
总的来说,花指令的原理是利用反汇编器的缺陷和特性,通过干扰反汇编引擎的正常工作,增加程序静态分析的难度,从而达到保护程序代码、防止逆向工程等目的。
delphi字符串中含有花括号
delphi字符串中含有花括号摘要:1.Delphi 字符串简介2.花括号在Delphi 字符串中的作用3.如何处理含有花括号的字符串4.总结正文:Delphi 是一种高级编程语言,广泛应用于Windows 平台的软件开发。
在Delphi 中,字符串是常用的数据类型,用于存储和处理文本数据。
在某些情况下,Delphi 字符串中可能含有花括号。
本文将介绍花括号在Delphi 字符串中的作用,以及如何处理含有花括号的字符串。
花括号(大括号)在Delphi 字符串中有特殊的作用。
在Delphi 中,花括号用于表示字符串的子字符串。
例如,假设有一个字符串`s ="abc{def}ghi"`,其中花括号`{}`包围的部分`def`就是该字符串的子字符串。
通过使用花括号,我们可以在程序中方便地提取和操作字符串的子部分。
处理含有花括号的字符串时,通常需要使用Delphi 的字符串处理函数。
以下是一些常用的处理含有花括号字符串的函数:- `Pos`:查找子字符串在字符串中首次出现的位置。
例如:`Pos("{", s)`将返回子字符串`{`在`s`中的位置。
- `Substring`:提取字符串中的子字符串。
例如:`Substring(s, 1,Pos("{", s))`将返回子字符串`abc`。
- `Right`:提取字符串右侧的字符。
例如:`Right(s, 3)`将返回`ghi`。
- `Left`:提取字符串左侧的字符。
例如:`Left(s, 3)`将返回`abc`。
通过这些函数,我们可以方便地处理含有花括号的字符串。
需要注意的是,处理含有花括号的字符串时要避免出现字符串结束符`#`。
当`#`出现在花括号内时,它将使花括号失去其特殊作用。
因此,在处理含有花括号的字符串时,要确保`#`不在花括号内。
总之,在Delphi 中,花括号在字符串中有特殊的作用,用于表示子字符串。
程序中使用花指令(Delphi源码)
程序中使⽤花指令(Delphi源码)程序中使⽤花指令(Delphi源码)unit Ex3Main;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Button3: TButton;Button4: TButton;Button5: TButton;Button6: TButton;Button7: TButton;Button8: TButton;Button9: TButton;Button10: TButton;Button11: TButton;Button12: TButton;StatusBar1: TStatusBar;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure Button5Click(Sender: TObject);procedure Button6Click(Sender: TObject);procedure Button7Click(Sender: TObject);procedure Button8Click(Sender: TObject);procedure Button9Click(Sender: TObject);procedure Button10Click(Sender: TObject);procedure Button11Click(Sender: TObject);procedure Button12Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.dfm}//第1种花指令procedure TForm1.Button1Click(Sender: TObject); var a,b:Integer;begina:=20;b:=10;asmjb @labeljnb @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第2种花指令procedure TForm1.Button2Click(Sender: TObject); var a,b:Integer;begina:=20;b:=10;asmje @labeljne @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第3种花指令procedure TForm1.Button3Click(Sender: TObject); varbegina:=20;b:=10;asmjbe @labelja @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第4种花指令procedure TForm1.Button4Click(Sender: TObject); var a,b:Integer;begina:=20;b:=10;asmjs @labeljns @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第5种花指令procedure TForm1.Button5Click(Sender: TObject); var a,b:Integer;begina:=20;b:=10;asmjpe @labeljpo @labeldb $E8@label:end;Messagebox(Handle,'a>b','info',MB_OK); end;//第6种花指令procedure TForm1.Button6Click(Sender: TObject); var a,b:Integer;begina:=20;b:=10;asmjl @labeljge @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第7种花指令procedure TForm1.Button7Click(Sender: TObject); var a,b:Integer;begina:=20;b:=10;asmjle @labeljg @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第8种花指令procedure TForm1.Button8Click(Sender: TObject); var a,b:Integer;begina:=20;b:=10;asmjz @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第9种花指令procedure TForm1.Button9Click(Sender: TObject); var a,b:Integer;begina:=20;b:=10;asmpush ecxxor ecx,ecxjcxz @labeldb $E8@label:pop ecxend;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第10种花指令procedure TForm1.Button10Click(Sender: TObject); var a,b:Integer;begina:=20;b:=10;asmjl @label1@label2:jmp @label3db $E8@label1:jz @label2@label3:end;Messagebox(Handle,'a>b','info',MB_OK); end;//第11种花指令procedure TForm1.Button11Click(Sender: TObject); var a,b:Integer;begina:=20;b:=10;asmcall @label1db $E8jmp @label2db $E8@label1:pop eaxjmp @label3db $E8,$E8,$E8@label3:inc eaxjmp @label4db $E8,$E8,$E8@label4:jmp eaxdb $E8@label2:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第12种花指令procedure TForm1.Button12Click(Sender: TObject); var a,b:Integer;begina:=20;b:=10;asmcall @label1db $E8,$E8@label1:pop eaxjmp @label2db $E8,$E8@label2:add eax,2jmp @label3db $E8@label3:push eaxretdb $E8@label4:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end; end.。
12木马的加花指令
木马的加花指令
花指令:就是一段没有实际意义的、不影响程序正常运行的一段代码。
它的作用就是加大杀毒软件查杀病毒的难度。
(1)按照前面所讲述的方法配置一个不加壳的木马程序。
(2)用OD载入这个木马程序,如图1所示,同时记下入口点的内存地址。
图1:OD的程序界面
(3)向下拉滚动条,找到零区域(也就是可以插入代码的都是0的空白地方)。
并记下零区域的起始内存地址。
(4)从这个零区域的起始地址开始一句一句地写入我们准备好的花指令代码。
(5)花指令写完后,在花指令的结束位置加一句:JMP 刚才OD载入时的入口点内存地址。
(6)保存修改结果后,最后用PEditor这款工具打开这个改过后的木马程序。
如图2所示,在入口点处把原来的入口地址改成刚才记下的零区域的起始内存地址,并按应用更改,使更改生效。
图2:使用PEditor更改入口点
加花指令免杀技术的优缺点:
优点:通用性非常不错,一般一个木马程序加入花指令后,就可以躲避大部分的杀毒软件,不像改特征码,只能躲过某一种杀毒软件。
缺点:这种方法还是不能过具有内存查杀的杀毒软件,比如瑞星内存查杀等。
另外目前还有几款软件可以自动帮你加花,比如木马彩衣进行加花,如图3所示。
图3:利用“木马彩衣”加花
点击“浏览”选择需要加花的木马程序,选择一种加花方法,然后点击“穿上”,程序就被加入花指令了,也就是会让木马穿上一件彩衣伪装了。
DELPHI源码调试方法(适合新手)
DELPHI源码调试方法(适合新手)Delphi调试概述除非你的程序只有几行,否则几乎不可能一次写成,因此调试就非常必要。
然而许多初学者不知道如何进行调试,写完程序就运行,发现结果不对再看代码,这样觉得非常吃力。
这里,简单介绍一下Delphi所提供的调试功能。
1.语法检查(Syntax Check)Delphi提供了语法检查的功能,这个功能和正常编译很相似,同样也会给出各类错误和警告信息,但是不会生成代码。
必须重视Delphi给出的任何信息,很多简单的错误就能够在这个阶段被发现。
Delphi的编译信息分为4类:Fault(故障),Error(错误),Warning(警告)和Hint(提示)。
Fault是指导致编译程序不能继续工作的错误,例如内存溢出等;Error是指发现用户程序不符合某些规定而导致不能按照用户程序的要求进行处理;Warning是指用户程序使用了某些不符合规定的形式,但是并不影响编译程序生成目标文件;Hint是指编译程序对用户程序的某些形式提出了怀疑。
前两类信息是必须要解决的,否则你不能运行你的程序,但是往往会有很多人忽略后两种信息。
然而,这些信息却是非常重要的。
对于下面这个代码,编译程序将会出现一个Warning:vara,b:Integer;begin...if a<100thenif a<b then begin...end;end.end.编译程序会告诉你,在“.”(句号)后面的内容被忽略了,实际上你会发现你漏了一个begin,同时将最后第二个end后面的“;”(分号)误写成“.”(句号)了。
再看看下面的代码:vara,b:Integer;beginb:=a+1;end;编译程序会给出一个Hint,告诉你a尚未被初始化,通常没有被初始化的变量其内容是不确定的。
由上可见,编译程序可以对你的程序进行初步的调试,协助你排除一些故障。
但是仅仅这样是完全不够的,需要更加强大的调试能力才能胜任更加复杂的程序调试任务。
delphi常用代码
Delphi常用代码汇总◇[DELPHI]网络邻居复制文件uses shellapi;copyfile(pchar('newfile.txt'),pchar('//computername/direction/targer.txt'),false);◇[DELPHI]产生鼠标拖动效果通过MouseMove事件、DragOver事件、EndDrag事件实现,例如在PANEL上的LABEL:var xpanel,ypanel,xlabel,ylabel:integer;PANEL的MouseMove事件:xpanel:=x;ypanel:=y;PANEL的DragOver事件:xpanel:=x;ypanel:=y;LABEL的MouseMove事件:xlabel:=x;ylabel:=y;LABEL的EndDrag事件:label.left:=xpanel-xlabel;label.top:=ypanel-ylabel;◇[DELPHI]取得WINDOWS目录uses shellapi;var windir:array[0..255] of char;getwindowsdirectory(windir,sizeof(windir));或者从注册表中读取,位置:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion SystemRoot键,取得如:C:\WINDOWS◇[DELPHI]在form或其他容器上画线var x,y:array [0..50] of integer;canvas.pen.color:=clred;canvas.pen.style:=psDash;form1.canvas.moveto(trunc(x[i]),trunc(y[i]));form1.canvas.lineto(trunc(x[j]),trunc(y[j]));◇[DELPHI]字符串列表使用var tips:tstringlist;tips:=tstringlist.create;tips.loadfromfile('filename.txt');edit1.text:=tips[0];tips.add('last line addition string');tips.insert(1,'insert string at NO 2 line');tips.savetofile('newfile.txt');tips.free;◇[DELPHI]简单的剪贴板操作richedit1.selectall;richedit1.copytoclipboard;richedit1.cuttoclipboard;edit1.pastefromclipboard;◇[DELPHI]关于文件、目录操作Chdir('c:\abcdir');转到目录Mkdir('dirname');建立目录Rmdir('dirname');删除目录GetCurrentDir;//取当前目录名,无'\'Getdir(0,s);//取工作目录名s:='c:\abcdir';Deletfile('abc.txt');//删除文件Renamefile('old.txt','new.txt');//文件更名ExtractFilename(filelistbox1.filename);//取文件名ExtractFileExt(filelistbox1.filename);//取文件后缀◇[DELPHI]处理文件属性attr:=filegetattr(filelistbox1.filename);if (attr and faReadonly)=faReadonly then ... //只读if (attr and faSysfile)=faSysfile then ... //系统if (attr and faArchive)=faArchive then ... //存档if (attr and faHidden)=faHidden then ... //隐藏◇[DELPHI]执行程序外文件WINEXEC//调用可执行文件winexec(' /c copy *.* c:\',SW_Normal);winexec('start abc.txt');ShellExecute或ShellExecuteEx//启动文件关联程序function executefile(const filename,params,defaultDir:string;showCmd:integer):THandle; ExecuteFile('C:\abc\a.txt','x.abc','c:\abc\',0);ExecuteFile('','','',0);ExecuteFile('mailto:tingweb@','','',0);◇[DELPHI]取得系统运行的进程名var hCurrentWindow:HWnd;szText:array[0..254] of char;beginhCurrentWindow:=Getwindow(handle,GW_HWndFrist);while hCurrentWindow <> 0 dobeginif Getwindowtext(hcurrnetwindow,@sztext,255)>0 thenlistbox1.items.add(strpas(@sztext));hCurrentWindow:=Getwindow(hCurrentwindow,GW_HWndNext);end;end;◇[DELPHI]关于汇编的嵌入Asm End;可以任意修改EAX、ECX、EDX;不能修改ESI、EDI、ESP、EBP、EBX。
如何加花指令
花指令相信做过免杀的朋友都知道花指令吧。
加花指令是一种不错的文件免杀方法,而网上公布的花指令和花指令添加器因为里边的花指令被公布了,所以免杀效果不好。
有点汇编基础的人就写自己的花指令,但写花指令的过程比较烦,所以我萌生了写一个花指令生成器的想法,首创哦^_^一、写花指令生成器必备知识1、花指令原理花指令是程序中的无用代码,程序多它没影响,少了它也能正常运行。
加花指令后,杀毒软件对木马静态反汇编时,木马的代码就不会正常显示出来,加大杀毒软件的查杀难度。
2、如何写花指令下面我们先看看一段花指令,分析理解它的原理:PUSH EBPMOV EBP,ESPpush edxpop edxinc ecxdec ecxadd esp,21add esp,-21add esp,10sub esp,10JMP 附近空地址随便乱跳JMP 原入口点花指令一般有三部分,开头就是PUSH EBP和MOV EBP,ESP这两句在大部分程序开头可以经常看到。
PUSH EBP 是把EBP压入堆栈,MOV EBP,ESP是把ESP的值赋给EBP,不懂没关系,只要知道PUSH EBP和MOV EBP,ESP 这两句经常出现在文件开头就可以了,随便用OllyDbg打开一个不加壳的文件载入后经常停在PUSH EBP MOV EBP, ESP。
接下来就是花指令啦,push edx是把通用寄存器EDX压入堆栈,pop edx是把通用寄存器EDX弹出堆栈,这两句和起来就相当于什么也没做。
接下来的inc ecx,ecx用来保存计数值,也是寄存器,INC是加1;下面的dec ecx中的dec是减1,加1减1相抵消,又是什么也没做。
add esp,21这是寄存器esp加21,add是加上,下面一句ad d esp,-21是寄存器esp加-21,小学知识,+21+(-21)=0,还是什么也没做。
再下来add esp,10寄存器es p加21,sub esp,10寄存器esp减10,sub是减去。
C语言花朵代码
C语言——绘画花朵代码部分#include <windows.h>#include <math.h>#define PI 3.14159265LRESULT CALLBACK WindowProcedure ( HWND, UINT, WPARAM, LPARAM ); void OnPaint ( HDC );void DrawLine ( HDC, int, int, int, int );void DrawFlower ( HDC, int, int, COLORREF );void DrawTie ( HDC, int, int, COLORREF );int WINAPI WinMain ( HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil ){char szClassName[] = TEXT ( "DrawFlower" );HWND hwnd;MSG msg;WNDCLASSEX wc = { 0 };wc.hInstance = hThisInstance;wc.lpszClassName = szClassName;wc.lpfnWndProc = WindowProcedure;wc.style = CS_DBLCLKS;wc.cbSize = sizeof ( WNDCLASSEX );wc.hIcon = LoadIcon ( NULL, IDI_APPLICA TION );wc.hIconSm = LoadIcon ( NULL, IDI_APPLICA TION );wc.hCursor = LoadCursor ( NULL, IDC_ARROW );wc.hbrBackground = ( HBRUSH ) ( COLOR_WINDOW+1 );if ( !RegisterClassEx ( &wc ) ) return 0;hwnd = CreateWindowEx ( 0, szClassName, szClassName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, HWND_DESKTOP, NULL, hThisInstance, NULL );ShowWindow ( hwnd, nFunsterStil );while ( GetMessage ( &msg, NULL, 0, 0 ) ){TranslateMessage ( &msg );DispatchMessage ( &msg );}return msg.wParam;}LRESULT CALLBACK WindowProcedure ( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ){PAINTSTRUCT ps;HDC hdc;switch ( msg ){case WM_PAINT:hdc = BeginPaint ( hwnd, &ps );OnPaint ( hdc );EndPaint ( hwnd, &ps );break;case WM_DESTROY:PostQuitMessage ( 0 );break;default:return DefWindowProc ( hwnd, msg, wParam, lParam );}return 0;}void OnPaint ( HDC hdc ){HPEN h;// 画蝴蝶结DrawTie ( hdc, 195, 354, RGB ( 255,0,255 ) );// 画枝干h = CreatePen ( PS_SOLID, 1, RGB ( 0,255,0 ) );SelectObject ( hdc, h );DrawLine ( hdc, 189, 372, 180, 400 );DrawLine ( hdc, 310, 160, 325, 68 );DrawLine ( hdc, 310, 160, 187, 374 );DrawLine ( hdc, 150, 140, 189, 374 );DrawLine ( hdc, 430, 176, 190, 374 );DrawLine ( hdc, 370, 110, 187, 374 );DrawLine ( hdc, 250, 72, 189, 372 );DrawLine ( hdc, 253, 192, 190, 374 );DrawLine ( hdc, 189, 372, 187, 400 );DrawLine ( hdc, 189, 372, 182, 400 );DrawLine ( hdc, 189, 372, 200, 120 );DeleteObject ( h );// 画花朵DrawFlower ( hdc, 320, 160, RGB ( 255,0,0 ) );DrawFlower ( hdc, 200, 120, RGB ( 0,255,0 ) );DrawFlower ( hdc, 150, 140, RGB ( 0,0,255 ) );DrawFlower ( hdc, 430, 176, RGB ( 255, 127, 0 ) );DrawFlower ( hdc, 370, 110, RGB ( 239, 179, 52 ) );DrawFlower ( hdc, 250, 72, RGB ( 235, 95, 186 ) );DrawFlower ( hdc, 325, 68, RGB ( 228, 119, 98 ) );DrawFlower ( hdc, 253, 190, RGB ( 247, 169, 117 ) ); }// 画花朵void DrawFlower ( HDC hdc, int x, int y, COLORREF c ) {int x1, y1, x2, y2;const int d = 30;double a, e;HPEN h;h = CreatePen ( PS_SOLID, 1, c );SelectObject ( hdc, h );for ( a = 0; a < 2 * PI; a += PI / 360 ){e = d * ( 1 + sin ( a * 5 ) );x1 = ( int ) ( x + e * cos ( a ) );y1 = ( int ) ( y + e * sin ( a ) );x2 = ( int ) ( x + e * cos ( a + PI / 5 ) );y2 = ( int ) ( y + e * sin ( a + PI / 5 ) );DrawLine ( hdc, x1, y1, x2, y2 );}DeleteObject ( h );}// 画蝴蝶结void DrawTie ( HDC hdc, int x, int y, COLORREF c ) {int x1, y1, x2, y2;const int d = 100;double a, e;HPEN h;h = CreatePen ( PS_SOLID, 1, c );SelectObject ( hdc, h );for ( a = 0; a < 2 * PI; a += PI / 360 ){e = d * ( 1 + sin ( a * 4 ) );x1 = ( int ) ( x + e * cos ( a ) );y1 = ( int ) ( y + e * sin ( a ) / 2 );x2 = ( int ) ( x + e * cos ( a + PI / 9 ) );y2 = ( int ) ( y + e * sin ( a + PI / 9 ) / 4.5 );DrawLine ( hdc, x1, y1, x2, y2 );}DeleteObject ( h );}//画线void DrawLine ( HDC hdc, int x1, int y1, int x2, int y2 ) {MoveToEx ( hdc, x1, y1, NULL );LineTo ( hdc, x2, y2 );}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序中使用花指令(Delphi源码)unit Ex3Main;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Button3: TButton;Button4: TButton;Button5: TButton;Button6: TButton;Button7: TButton;Button8: TButton;Button9: TButton;Button10: TButton;Button11: TButton;Button12: TButton;StatusBar1: TStatusBar;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure Button5Click(Sender: TObject);procedure Button6Click(Sender: TObject);procedure Button7Click(Sender: TObject);procedure Button8Click(Sender: TObject);procedure Button9Click(Sender: TObject);procedure Button10Click(Sender: TObject);procedure Button11Click(Sender: TObject);procedure Button12Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.dfm}//第1种花指令procedure TForm1.Button1Click(Sender: TObject); vara,b:Integer;begina:=20;b:=10;asmjb @labeljnb @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第2种花指令procedure TForm1.Button2Click(Sender: TObject); vara,b:Integer;begina:=20;b:=10;asmje @labeljne @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第3种花指令procedure TForm1.Button3Click(Sender: TObject); vara,b:Integer;begina:=20;b:=10;asmjbe @labelja @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第4种花指令procedure TForm1.Button4Click(Sender: TObject); vara,b:Integer;begina:=20;b:=10;asmjs @labeljns @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第5种花指令procedure TForm1.Button5Click(Sender: TObject); vara,b:Integer;begina:=20;b:=10;asmjpe @labeljpo @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第6种花指令procedure TForm1.Button6Click(Sender: TObject); vara,b:Integer;begina:=20;b:=10;asmjl @labeljge @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第7种花指令procedure TForm1.Button7Click(Sender: TObject); vara,b:Integer;begina:=20;b:=10;asmjle @labeljg @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第8种花指令procedure TForm1.Button8Click(Sender: TObject); vara,b:Integer;begina:=20;b:=10;asmjz @labeljnz @labeldb $E8@label:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第9种花指令procedure TForm1.Button9Click(Sender: TObject); vara,b:Integer;begina:=20;b:=10;asmpush ecxxor ecx,ecxjcxz @labeldb $E8@label:pop ecxend;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第10种花指令procedure TForm1.Button10Click(Sender: TObject); vara,b:Integer;begina:=20;b:=10;asmjl @label1@label2:jmp @label3db $E8@label1:jz @label2@label3:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第11种花指令procedure TForm1.Button11Click(Sender: TObject); vara,b:Integer;begina:=20;b:=10;asmcall @label1db $E8jmp @label2db $E8@label1:pop eaxjmp @label3db $E8,$E8,$E8@label3:inc eaxjmp @label4db $E8,$E8,$E8@label4:jmp eaxdb $E8@label2:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;//第12种花指令procedure TForm1.Button12Click(Sender: TObject); vara,b:Integer;begina:=20;b:=10;asmcall @label1db $E8,$E8jmp @label4@label1:pop eaxjmp @label2db $E8,$E8@label2:add eax,2jmp @label3db $E8@label3:push eaxretdb $E8@label4:end;if a>b thenMessagebox(Handle,'a>b','info',MB_OK); end;end.。