DelPhi 2020. 4. 12. 13:50

<?
function random_string() {
$random= "";
for( $i=0; $i<rand(7,8); $i++) {
     if(rand(0,1)) {
$random .= rand(0, 9);
} else {
$random .= chr(rand(98, 122));
}
}
return $random;
}
print_r(random_string());
?>

posted by 핵커 커뮤니티
:
DelPhi 2020. 4. 12. 13:50

//랜덤 문자 만들기
function random_string($len) {
 $str = '1234567890abcdefghijklmnopqrstuvwxyz';
 $strlen = strlen($str) -1;
 $return = '';
 for ($i = 0; $i < $len; $i++) {
  $rand = rand(0, $strlen);
  $return .= $str[$rand];
 }
 return $return;
}

posted by 핵커 커뮤니티
:
DelPhi 2020. 4. 12. 13:47

int APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID reserved)

{

if(reason == DLL_PROCESS_ATTACH)

{

hWindowA = FindWindowA(NULL,"인젝터 "); //윈도우캡션명

if(hWindowA != NULL)

{

}

else

{

posted by 핵커 커뮤니티
:
DelPhi 2020. 4. 12. 13:44

function Ch4ckPr0c4(Process: String): Boolean;

var

ContinueLoop: BOOL;

FSnapshotHandle: THandle;

FProcessEntry32: TProcessEntry32;

begin

Result := False;

FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

FProcessEntry32.dwSize := Sizeof(FProcessEntry32);

ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

while Integer(ContinueLoop) <> 0 do

begin

if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))

= UpperCase(Process)) or (UpperCase(FProcessEntry32.szExeFile)

= UpperCase(Process))) then

begin

PID := FProcessEntry32.th32ProcessID;

if PID <> 0 then

begin

HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, PID);

Result := True;

Break;

end;

end;

ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);

end;

CloseHandle(FSnapshotHandle);

end;

posted by 핵커 커뮤니티
:
DelPhi 2020. 4. 12. 13:40

▶ 폼(Form)의 정의

폼은 델파이 프로그래밍에서 가장 중심적인 요소이며 실행시 사용자의 눈에 직접적으로 나타나는 하나의 윈도우가 된다.

폼은 도화지에 비유할 수 있으며 버튼이나 레이블, 리스트 박스, 콤보 박스 등의 컴포넌트를 바로 이 폼에 배치해 놓음으로써

완성되어 간다.



▶ 폼의 중요 속성

폼도 일종의 컴포넌트이므로 다양한 속성을 가지고 있다. 완성된 어플리케이션의 윈도우로 나타나게될 폼은 그 속성을 어떻게

지정하느냐에 따라 각기 다른 여러 가지의 외형을 갖게 되는 것이다.

★ Align

☞ 폼의 사이즈 및 위치를 정해준다. 디폴트 값은 alNone 이다.

alNone : 폼의 크기 및 위치가 사용자가 디자인한 사이즈,위치로서 나타난다.

alClient : 크기가 모니터 화면 전체 크기로 조정되어 나타난다.

alTop : 폼이 모니터 화면 상단에 나타난다.

alBottom : 폼이 모니터 화면 하단에 나타난다.

alLeft : 폼이 모니터 화면 좌측에 나타난다.

alRight : 폼이 모니터 화면 우측에 나타난다.



★ BorderStyle

☞ 폼의 성질을 정해준다. 디폴트 값은 bsSizeable 이다.

bsSingle : 크기 조절이 불가능하며 하나의 선을 가진 경계선을 갖는다.

bsToolWindow : bsSingle과 같으나 종료버튼만을 가지며 컨트롤 메뉴도 가지지 않는다.

bsSizeable : 크기 조절, 위치 이동, 최소화-최대화 버튼, 컨트롤 메뉴 기능과 경계선을 모두 갖는다.

bsSizeToolWin : bsSizeable과 같으나 종료버튼만을 가지며 컨트롤 메뉴도 가지지 않는다.

bsDialog : 크기 조절이 불가능한 일종의 대화상자의 형태를 갖는다.

bsNone : 크기 조절, 최소화-최대화 버튼, 컨트롤 메뉴, 위치 변경 기능이 모두 불가능하며 경계선도

없는 가장 단순한 폼이다.



★ Caption

☞ 폼의 경계선의 제목을 설정한다.


★ Color

☞ 폼 표면의 색을 설정한다.


★ Height, width, left, top

☞ Height : 폼의 크기 조절

☞ width : 폼의 높이 조절

☞ left : 폼의 맨 왼쪽 모서리의 위치 조절

☞ top : 폼의 맨 위쪽 모서리의 위치 조절


★ VerScrollBar 와 HorzScrollBar

☞ 폼에 생성될 수직, 또는 수평 스크롤 바의 유무와 세부 속성들을 지정한다.



▶ 폼의 중요 이벤트

☞ OnActive : 폼이 포커스를 받을 때 발생

☞ OnClose : 폼이 종료할때 발생

☞ OnCloseQuery : 폼의 종료 조건을 지정할 수 있다.

☞ OnClick : 폼 위에서 마우스가 클릭될 때 발생

☞ OnCreate : 프로그램이 실행됨에 따라 폼이 생성되면서 발생하는 디폴트 이벤트이다.

☞ OnDeactivate : 폼이 포커스를 잃을 때 발생

☞ OnHide : 폼이 보이지 않을 때 발생

☞ OnPaint : 폼이 새로 그려질 때 발생

☞ OnResize : 폼의 크기가 변경될 때 발생

☞ OnShow : 폼이 보이게 될 때 발생



▶ 폼의 중요 메소드

★ Close

☞ 폼 안에 배치된 모든 컴포넌트 및 모듈을 메모리에서 완전히 제거하고 폼을 닫는다.

예제1) Form14.close;

☞ name이 Form14인 폼을 닫는다.

예제2) close;

☞ 현재 코딩을 하고 있는 자기 자신의 폼을 닫는다.

다시 말해서, Form1의 유닛에서 이 메소드가 쓰여지고 있을때, Form1을 close시키는 것과 같다.


★ Hide

☞ 폼을 보이지 않도록 하나 메모리에서 완전히 제거하는 것은 아니다.


★ Show

☞ 폼을 보여준다.


★ ShowModal

☞ 폼을 보여주되 Modal 형태로 보여준다. 해당 폼을 종료하지 않고서는 다른 폼이나 어플리케이션으로 전환 할

수 없는 폼을 모달 폼(Modal Form)이라 한다

posted by 핵커 커뮤니티
:
게임 자료실 2020. 4. 12. 13:37

signed int __stdcall new_KickProc( int a1, int a2, int a3 )

{

return 1;

}

int __stdcall new_HackshieldComm( int hsCommCode, void *Param1, void *Param2 )

{

if( hsCommCode == 4 || hsCommCode == 5 || hsCommCode == 13 ) //kill!

{

if( hsCommCode == 4 ) //replace kick proc

{

DWORD *dwParam1 = (DWORD *)Param1;

pKickProc = (KickProc_t)*dwParam1;

*dwParam1 = (DWORD)new_KickProc;

}

int iReturn = pHackshieldComm( hsCommCode, Param1, Param2 );

return 1;

}

int iReturn = pHackshieldComm( hsCommCode, Param1, Param2 );

return iReturn;

}

void HookCommunication( EXCEPTION_POINTERS* pExceptionInfo )

{

DWORD dwEbp = pExceptionInfo->ContextRecord->Ebp;

DWORD dwParam2 = 0;

__asm

{

push eax;

push edx;

mov eax, dwEbp;

mov edx, [eax+0xC];

mov dwParam2, edx;

pop edx;

pop eax;

}

if( dwParam2 == 0xA ) //this is the ordinal of some export...hmm..

{

pHackshieldComm = (HackshieldComm_t)pExceptionInfo->ContextRecord->Eax;

pExceptionInfo->ContextRecord->Eax = (DWORD)new_HackshieldComm;

}

pExceptionInfo->ContextRecord->Eip = HS_JMP2;

return;

}

PVOID pContextHandler = NULL;

LONG WINAPI ***ExceptionHandler( EXCEPTION_POINTERS* pExceptionInfo )

{

if( pExceptionInfo->ExceptionRecord->ExceptionCode != EXCEPTION_SINGLE_STEP )

{

return EXCEPTION_CONTINUE_SEARCH;

}

if( pExceptionInfo->ExceptionRecord->ExceptionAddress == (PVOID)HS_JMP )

{

HookCommunication( pExceptionInfo );

return EXCEPTION_CONTINUE_EXECUTION;

}

return EXCEPTION_CONTINUE_SEARCH;

}

void InitContextHook()

{

pContextHandler = AddVectoredExceptionHandler( 0x50BE17, ***ExceptionHandler );

CONTEXT Context;

Context.ContextFlags = CONTEXT_DEBUG_REGISTERS;

GetThreadContext(GetCurrentThread(), &Context);

Context.Dr0 = HS_JMP;

Context.Dr7 = (1<<0)|(1<<2)|(1<<4)|(1<<6);

SetThreadContext(GetCurrentThread(), &Context);

#

posted by 핵커 커뮤니티
:
DelPhi 2020. 4. 12. 13:29

< 델파이 단축키 모음 >

[찾기]

Ctrl + F Find

Ctrl + R Find and Replace

F3 Search Again

[화면이동]

F11 View Object Inspector

F12 Toggle Form/Unit

Alt + 0 View Window List

Ctrl + F12 View Unit

Shift + F12 View Form

Ctrl + PgUp/PgDown CodeEditor에서 현재페이지의 첫줄(PgUp), 마지막줄(PgDown)로 이동

[컴파일/실행]

Ctrl + F9 Compile

F9 Run

F7 Trace Into

F8 Trace Over

F5 Set Breakpoint

Ctrl + F5 Add Watch

Ctrl + F7 Evaluate/Modify

[블록관련]

Ctrl + Shift + U Unindent

Ctrl + Shift + I Indent

Ctrl + O, C Column Block Mode (또는 Alt키를 누른상태에서 Mouse를 드래그 해

도 컬럼블럭 설정이 가능, Shift + Alt + Arrow Key 를 사용해도 컬

럼블럭 설정)

Ctrl + O, K Line Block Mode

[키 매크로]

Ctrl + Shift + R Record

* 키매크로 작성순서 : <Ctrl+Shift+R> -> <원하는키> -> <Ctrl+Shift+R>

Ctrl + Shift + P Play

[Object Inpector]

Ctrl + Down Object Inpector 상단의 Object List ComboBox 열기

이 상태에서 Component Name을 키보드로 치면 Incremental Search 기

능Tab Property 와 Property Value 부분을 전환가능하며,

Property 쪽에 Cursor 가 위치한 상태에서 키보드를 치면

Incremental Search

[Code Insight]

Ctrl + Space Code Completion 기능

Ctrl + J Code Template 기능

Ctrl + Shift + Up/Down Object 의 Member function/procedure 의 선언부와 구현부를

이동

Ctrl + Shift + C Object 의 Member function/procedure 의 선언부와 구현부중

의 한가지를 코딩 한후 누르게 되면 나머지 선언부 또는 구

현부를 완성시켜줌

[기타]

Alt + F10 현재 위치에서 Popup-Menu 띄우기

Ctrl + Enter Code Editor 에서 현재위치의 단어로 File Open을 시도(기본 확장자

는 .pas) 하고 현재 Path 에서 그 파일을 찾지 못하면 File Open

Dialog를 띄움.

Alt + { or } Find Matching Brace( ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[‘, ‘]’ 

 

posted by 핵커 커뮤니티
:
DelPhi 2020. 4. 12. 13:28

type

TArrayScan = record

ScanArray: STring;

Start: DWORD;

Finish: DWORD;

end;

Function GetMask(Array_of_bytes: String): String;

var

x, y: integer;

St: string;

Mask: string;

begin

St := StringReplace(Array_of_bytes, ' ', '', [rfReplaceAll]);

y := 1;

for x := 1 to (Length(St) div 2) do

begin

if (St[y] + St[y + 1]) <> '??' then

begin

Mask := Mask + 'O';

y := y + 2;

end else

begin

Mask := Mask + 'X';

y := y + 2;

end;

end;

Result := Mask;

end;

Procedure StringToArrayByte(Str: string; var Buffer: array of byte);

var

x, y, z: integer;

St: string;

begin

St := StringReplace(Str, ' ', '', [rfReplaceAll]);

y := 1;

for x := 0 to Length(St) div 2 - 1 do

begin

if St[y] + St[y + 1] <> '??' then

begin

Buffer[x] := StrToInt('$' + St[y] + St[y + 1]);

y := y + 2;

end else

begin

Buffer[x] := $00;

y := y + 2;

end;

end;

end;

Function CompareArray(DestAddress:DWORD ;CONST Dest: Array of byte; Source: array of byte;

ALength: integer; Mask: String; var ReTurn : TStringList) : Boolean;

var

x, y: integer;

a, b, c: integer;

begin

for x := 0 to Length(Dest) - Length(Source) do

begin

a:=0;

for y := 0 to Length(Source) - 1 do

begin

if (Dest[x + y] = Source[y]) or (Mask[Y+1] = 'X') then

begin

if y = (Length(Source) - 1) then

begin

Return.Add(IntToHex(DestAddress+x,8));

end;

end else

begin

Break;

end;

end;

end;

Result := True;

end;

Function ArrayScan(Struct: TArrayScan): TStringList;

var

ArrayStruct: TArrayScan;

mbi: Memory_Basic_Information;

StartAdr: DWORD;

FinishAdr: DWORD;

Mask: string;

Str : STring;

Buffer: array of byte;

ScanBuffer: array of byte;

data : COPYDATASTRUCT;

reTurn: TStringList;

begin

//

Str := StringReplace(Struct.ScanArray,' ','',[rfReplaceAll]);

StartAdr := Struct.Start;

FinishAdr := Struct.Finish;

Mask := GetMask(Str);

SetLength(ScanBuffer, Length(Str) div 2);

StringToArrayByte(Str, ScanBuffer);

reTurn := TStringList.Create;

while StartAdr <= FinishAdr - $10 do

begin

VirtualQueryEx(HandleWindow, PDWORD(StartAdr), mbi, sizeof(mbi));

if ((Mbi.RegionSize > 0) and

((Mbi.Type_9 = MEM_PRIVATE) or (Mbi.Type_9 = MEM_IMAGE)) and

(Mbi.State = MEM_COMMIT) and

((Mbi.Protect = PAGE_READONLY) or

(Mbi.Protect = PAGE_READWRITE) or

(Mbi.Protect = PAGE_WRITECOPY) or

(Mbi.Protect = PAGE_EXECUTE) or

(Mbi.Protect = PAGE_EXECUTE_READ) or

(Mbi.Protect = PAGE_EXECUTE_READWRITE) or

(Mbi.Protect = PAGE_EXECUTE_WRITECOPY) )) then

begin

SetLength(Buffer, 0);

SetLength(Buffer, mbi.RegionSize);

ReadProcessMemory(HandleWindow, mbi.BaseAddress, @Buffer[0],mbi.RegionSize, buf);

CompareArray(DWORD(mbi.BaseAddress),Buffer,ScanBuffer,Length(ScanBuffer),Mask,reTurn);

StartAdr := DWORD(MBI.BaseAddress) + MBI.RegionSize;

end else

begin

StartAdr := DWORD(MBI.BaseAddress) + MBI.RegionSize;

end;

end;

data.dwData := 4;

data.cbData := SizeOf(reTurn);

data.lpData := @reTurn;

Result := reTurn;

end;

posted by 핵커 커뮤니티
: