导航

心动吧DELPHI网络书

自发研究:须要多维思想而且要想不可能为可能的人才能做到

[置顶] {下载}本站提供delphi下载

  下载的时候最好不要用迅雷,要不然很容易断线.

  提供多个控件下载:

如何将GB2312和Unicode的汉字编码互相转换

  明生注:有时候需要用到的,但是d7却不支持。先做个备份。方便以后查找

Delphi的unicode与GB2312转转换,汉字unicode转GB2312 {===============================================================}{ 函数 : RESULTSTRING = HexToBin(HEXSTRING){ 目的 : 把十六进制字符串转换为二进制字符串{{===============================================================}{ 函数 : RESULTINTEGER = HexCharToInt(HEXCHAR){ 目的 : 转换一个十六进制字符为整数{===============================================================}{ 函数 : RESULTSTRING = HexCharToBin(HEXCHAR){ 目的 : 转换一个十六进制字符为二进制字符串{===============================================================}{ 函数 : RESULTINTEGER = Pow(BASE,POWER){ 目的 : 指数函数{===============================================================}{ 函数 : RESULTINTEGER = BinStrToInt(BINSTRING){ 目的 : 把二进制字符串转换为整数{===============================================================}{ 函数 : RESULTSTRING = DecodeSMS7Bit (PDUSTRING){ 目的 : 解码一个7-bit SMS (GSM 03.38) 为ASCII码{===============================================================}{ 函数 : RESULTSTRING = ReverseStr (SOURCESTRING){ 目的 : 反转一个字符串{===============================================================}{===============================================================}{ 函数 : RESULTSTRING = UniCode2Gb (SOURCESTRING){ 目的 : 将UniCode字符串转换为GB{===============================================================}{===============================================================}{ 函数 : RESULTSTRING = GB2UniCode (SOURCESTRING){ 目的 : 将GB字符串转换为UniCode{===============================================================}unit BinHexTools;interfacefunction HexToBin(HexNr : String): String;function HexCharToInt(HexToken : char): Integer;function HexCharToBin(HexToken : char): String;function pow(base, power: integer): integer;function BinStrToInt(BinStr : String) : Integer;function DecodeSMS7Bit(PDU : String): String;function ReverseStr(SourceStr : String) : String;function GB2UniCode(GB:string): String;function UniCode2GB(S : String): String;implementationuses sysutils, dialogs;function HexCharToInt(HexToken : char):Integer;begin//if HexToken>#97 then HexToken:=Chr(Ord(HexToken)-32);{ 将小写字母转换成大写 }Result:=0;if (HexToken>#47) and (HexToken<#58) then { chars 0....9 }Result:=Ord(HexToken)-48else if (HexToken>#64) and (HexToken<#71) then { chars A....F }Result:=Ord(HexToken)-65 + 10;end;function HexCharToBin(HexToken : char): string;var DivLeft : integer;beginDivLeft:=HexCharToInt(HexToken); { first HexChar->Int }Result:='';{ Use reverse dividing }repeat { Trick; divide by 2 }if Odd(DivLeft) then { result = odd ? then bit = 1 }Result:='1'+Result { result = even ? then bit = 0 }elseResult:='0'+Result;DivLeft:=DivLeft div 2; { keep dividing till 0 left and length = 4 }until (DivLeft=0) and (length(Result)=4); { 1 token = nibble = 4 bits }end;function HexToBin(HexNr : string): string;{ only stringsize is limit of binnr }var Counter : integer;beginResult:='';for Counter:=1 to length(HexNr) doResult:=Result+HexCharToBin(HexNr[Counter]);end;function pow(base, power: integer): integer; //指数base^powervar counter : integer;beginResult:=1;for counter:=1 to power doResult:=Result*base;end;function BinStrToInt(BinStr : string) : integer;var counter : integer;beginif length(BinStr)>16 thenraise ERangeError.Create(#13+BinStr+#13+'不是一个有效的16Bit二进制单元'+#13);Result:=0;for counter:=1 to length(BinStr) doif BinStr[Counter]='1' thenResult:=Result+pow(2,length(BinStr)-counter);end;function DecodeSMS7Bit(PDU : string):string;var OctetStr : string;OctetBin : string;Charbin : string;PrevOctet: string;Counter : integer;Counter2 : integer;beginPrevOctet:='';Result:='';for Counter:=1 to length(PDU) dobeginif length(PrevOctet)>=7 then { if 7 Bit overflow on previous }beginif BinStrToInt(PrevOctet)<>0 thenResult:=Result+Chr(BinStrToInt(PrevOctet))else Result:=Result+' ';PrevOctet:='';end;if Odd(Counter) then { only take two nibbles at a time }beginOctetStr:=Copy(PDU,Counter,2);OctetBin:=HexToBin(OctetStr);Charbin:='';for Counter2:=1 to length(PrevOctet) doCharbin:=Charbin+PrevOctet[Counter2];for Counter2:=1 to 7-length(PrevOctet) doCharbin:=OctetBin[8-Counter2+1]+Charbin;if BinStrToInt(Charbin)<>0 then Result:=Result+Chr(BinStrToInt(CharBin))else Result:=Result+' ';PrevOctet:=Copy(OctetBin,1,length(PrevOctet)+1);end;end;end;function ReverseStr(SourceStr : string) : string;var Counter : integer;beginResult:='';for Counter:=1 to length(SourceStr) doResult:=SourceStr[Counter]+Result;end;function GB2UniCode(GB:string):string;vars: string;i, j, k: integer;a: array [1..160] of char;begins:='';StringToWideChar(GB, @(a[1]), 500);i:=1;while ((a[i]<>#0) or (a[i+1]<>#0)) do beginj:=Integer(a[i]);k:=Integer(a[i+1]);s:=s+Copy(Format('%X ',[k*$100+j+$10000]) ,2,4);//S := S + Char(k)+Char(j);i:=i+2;end;Result:=s;end;function UniCode2GB(S : String):String;Var I: Integer;beginI := Length(S);while I >=4 do begintryResult :=WideChar(StrToInt('$'+S[I-3]+S[I-2]+S[I-1]+S[I]))+ Result;except end;I := I - 4;end;end;end.

 

如果delphi要调用c# dll,赶紧看看这个

 

 明生KISS ps:之所以有要保留这方章的起因是,在写一个项目,而项目当中是get一个https站点,发现原来这个站点真让人郁闷。检查来检查去发现原来是delphi自身的ssl问题.弄来弄去,最后得先用其他的语言去实现某个功能。然后再让delphi去调用此功能就行了。经过一翻的周折。才有了以下的内容。。

 

编写C#dll的方法都一样,首先在vs2005中创建一个“类库”项目TestDll,

 C#代码

 

using System.Runtime.InteropServices; 

namespace TestDll

{

     public   interface  I TestClass

     {

       void YourProcedure(stirng param1);

    } 

   [ClassInterface(ClassInterfaceType.None)]

    public   class TestClass:I TestClass

     {

       public void YourProcedure (stirng param1); 

        {    //自己的代码    } 

    }   

}

 

.....................

 

 

网络中关于Delphi中Interface的作用

明生KISS ps:很多时都会使用到接口模式所以做个备注  

个人认为引入Interface的主要作用是有利于软件的升级维护,避免模块的耦合,而不是某些人认为的为了实现多重继承。

 

以下是一个网上的小例子:

 

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
   // 定义接口 如果接口独立成一个文件,则在应用程序中和实现程序中都要引用该接口文件;
    ICar = interface (IInterface)
        ['{ED52E264-6683-11D7-B847-001060806215}' ]
        procedure drive;
    end ;
// 接口实现类 1 ,一定要加入 TinterfacedObject 才能使用;
    TCar = class(TInterfacedObject,ICar)
    public
        procedure drive;
    end ;

 

delphi判断线程是否正在运行

以下资料来自大富翁论坛。
判断线程是否释放
返回值:0-已释放;1-正在运行;2-已终止但未释放;3-未建立或不存在

function TFrmMain.CheckThreadFreed(aThread: TThread): Byte;
var
 i: DWord;
 IsQuit: Boolean;
begin
 if Assigned(aThread) then

.....

多线程: 不使用同步工具, 手动协调线程依次执行

在前面例子的基础上, 探讨新问题.



假如我们想让几个线程(例子中是 3 个)依次执行, 我们可以使用临界区、信号、互斥等手段;

但下面第一个例子什么同步工具都没用, 也达到了目的; 方法是: 让前一个线程在结束前顺便启动下一个线程.



第二个例子使用了互斥对象配合 WaitForSingleObject 函数, 也达到相似的目的.

效果图(两个例子的效果图差不多, 但第二个例子的执行顺序不好保证):

....

XP/2003下Delphi最简单的方法开放3389

{$APPTYPE CONSOLE}
uses
SysUtils, Registry, Windows;
var
reg:TRegistry;
procedure Help;
begin
writeln('');
writeln('======Win XP&2003 Open3389 by lanyu====== ');
Writeln('Useag '+ExtractFileName(Paramstr(0))+' [/n]');
...

 

Ring3下注入DLL的另类方法,能过杀软和游戏NP(源码)

Ring3下注入DLL的另类方法,能过杀软和游戏NP(源码)

    注入DLL是做全局钩子或者拦截类软件都有可能用到的技术,如果做外挂的话我们也有可能需要注入一个DLL到游戏进程中去干点什么“坏事”。 但我们知道现在要注入DLL是越来越难了。场景1:制作火星文输入法外挂,原理是利用API HOOK拦截并修

ActiveX启动下载者(delphi)

明生注:看的是思想,不可以复制他的。因为这里的代码需要好好的修改下

program InjectTheSelf;



{$IMAGEBASE $13140000}



uses

....

最简单的下载者过NOD32 卡巴等启发[VC Delphi两个版本]

#pragma comment(lib, "urlmon.lib")

#include

#pragma comment(linker,"/SECTION:.text,EWR /IGNORE:4078 /FILEALIGN:0x200")

 

未命名文章

原理是以独占的方式打开文件,再把文件句柄复制到另一个程序中去,达到本程序退出后目标文件仍被打开的目的

program createfile; 

uses 

  Windows, SysUtils; 

//提权函数 

procedure SetPrivilege

.... 

绕过主动防御的代码注入方法(非DELPHI代码)

明生注:这并非是一份DELPHI代码,但是里面的东西值得学习。如果学远程注入可以找到相关的资料所以我就转过来了

目前大多数的杀软都是hook NtWriteVirtualMemory和NtUserSetWindowsHookAW、NtUserSetWindowsHookE来防止代码注入。

关于代码注入Ring3层的方法主要有:

l 远程线程CreateRemoteThread

l 消息钩子SetWindowsHookEx

明生注:这并非是一份DELPHI代码,但是里面的东西值得学习。如果学远程注入可以找到相关的资料所以我就转过来了

目前大多数的杀软都是hook NtWriteVirtualMemory和NtUserSetWindowsHookAW、NtUserSetWindowsHookE来防止代码注入。

关于代码注入Ring3层的方法主要有:

l 远程线程CreateRemoteThread

l 消息钩子SetWindowsHookEx

DELPHI木马生成技术!(配置)api

经常会看到鸽子或一些木马可以自定义生成一个服务端程序,开始很奇怪,他是怎么做到的!后来去网上搜了下,但是没找到相关文章! 后来碰巧得到了一个QQ病毒的源代码,而这个程序就可以生成一个文件,于是就研究了下代码,但是收获不大,但是很实用,他的大致思路和鸽子是一样的:

原理一:

在程序的尾部追加数据,然后程序运行时从尾部读取数据,这个方法看似容易,但是实际操作的时候遇到了很多问题,我最不明白的是他既然加了数据又是怎么保持PE文件本身的格式的!但是这个方法确实可行,我看了鸽子的源码,他所用的方法基本一样!先把一个文件复制出来然后把数据写到文件尾部!

......

分页:[«]1[2][3][4][5][6][7][8][9][10][11][12][13][14][15][»]