1. Trang chủ
  2. » Công Nghệ Thông Tin

Cracker Handbook 1.0 part 191 potx

5 62 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cracker Handbook 1.0 Part 191 Potx
Trường học Standard University
Chuyên ngành Computer Science
Thể loại tiểu luận
Năm xuất bản 2023
Thành phố standard city
Định dạng
Số trang 5
Dung lượng 16,91 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Call DeviceIoControl ; @tiep:push 1 call VietPro // Un Hook test al, al je @end mov eax,[esp] mov dDctv, eax // Store origin return Address add esp,04 mov eax, dAddLib call eax

Trang 1

Type

PJMP = ^TJMP ;

TJMP = packed record // 7 bytes

jma1 : Byte ;

jcod : pointer;

jma2 : word ;

end;

var MJMP,OJMP : TJMP;

// D/c ham FreeLbrary , DeviceIO, Handle of MapView, store;

dFreeLib, dAddLib,DLLData,dDctv : pointer ;

fAddPro : Thandle ; //Handle of Current Proccess

const

pLib : pChar = 'kernel32.dll';

pDio : pChar = 'DeviceIoControl';

pFree: pChar = 'FreeLibrary';

pName: pChar = 'TV_PL';

// LKQ: $88 bytes ; 0 $79 store right Result ;

// dword [80] = dFreeLib ; [84] = Handle of marfix.dll

lKQ : array [0 $87] of byte =

($00,$00,$02,$00,$37,$00,$01,$00,$02,$00,$01,$00,$10,$00,$07, $00,$54,$56,$26,$26,$50,$4C,$20,$20,$00,$10,$00,$7A,$80,$A7, $E2,$9A,$A7,$60,$D3,$FC,$BB,$B1,$38,$EE,$DF,$9E,$DE,$30,$00, $04,$00,$18,$0A,$D0,$07,$31,$00,$04,$00,$07,$0B,$DF,$07,$FF, $FF,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00, $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,

$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,

$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,

$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00); // Opcode replace at xxxx1AD0 address

lML : array [0 $26] of byte =

($55,$E8,$00,$00,$00,$00,$5D,$8B,$D5,$5D,$81,$E2,$00,$00,$FE, $FF,$8D,$38,$8D,$32,$33,$C9,$83,$C1,$20,$F3,$A5,$8B,$06,$50, $8B,$46,$04,$FF,$D0,$C2,$04,$00,$90);

function VietPro( N: Integer): boolean ; stdcall ;

var dRead: Dword ;

begin

Try

Trang 2

case N of

0: begin

ReadProcessMemory(fAddPro,dAddLib,@OJMP,sizeOf(OJMP),dRead); result :=(dRead =sizeOf(OJMP) );

end;

1: result:=

WriteProcessMemory(fAddPro,dAddLib,@OJMP,sizeOf(OJMP),dRead);

else result:=

WriteProcessMemory(fAddPro,dAddLib,@MJMP,sizeOf(MJMP),dRead);

end;

except result:= false ; end;

end;

procedure TVPL ;

asm

// - Check Address -

mov eax,[esp]

mov ecx,eax

xor ax, $12EA // 1st call DeviceIoControl return at xxxx12EA

test ax, ax

jne @tiep

// Check Opcode at xxxx215C : call xxxx1DA0 = E8 3F FF FF

add ax,$215C

cmp dword ptr [eax], $FFFC3FE8

jne @tiep

// End check Address -

// - OK, found correct memory ; -

// Un Hook -

push ecx

push 1

call VietPro

pop ecx

test al, al

je @end

// Copy LKQ -

mov eax,ecx // $28Fyyyy

xor ax,ax

Trang 3

push eax

sub eax, $10000 // $28E0000

lea edi,[eax]

lea esi, [LKQ[0]]

xor ecx, ecx

add ecx, $22 // Copy lKQ = $88 bytes vao $28E0000 repz movsd

// - Replace code at xxxx1DA0 -

pop eax

add ax,$1DA0

lea edi,[eax]

lea esi,[LML[0]]

xor ecx, ecx

add ecx, $27 // Do dai lML!

mov eax, ecx

shr ecx, $02

repz movsd

mov ecx, eax

and ecx, $03

repz movsb

// Jmp to origin DeviceIoControl

push dAddLib // D/c cu DiviceIO

ret

/// Error , return back call origin

@end: mov ecx,[esp]

add esp,$24 // restore esp origin

push ecx

ret

/// No, Check Address failed Call DeviceIoControl ;

@tiep:push 1

call VietPro // Un Hook

test al, al

je @end

mov eax,[esp]

mov dDctv, eax // Store origin return Address

add esp,04

mov eax, dAddLib

call eax // call origin DeviceIoControl

push eax // store result

Trang 4

push 2

call VietPro // Hook again

pop eax

push dDCtv // Restore origin return Address end;

function AutoLoad( FModul: THandle): pointer; stdcall; asm

mov ecx, dFreeLib

mov eax, DLLData

test eax, eax // Hook OK ?

je @NotOK // No, return @FreeLibrary lea esi,[lKQ[$80]]

mov eax, FModul // handle of makfix.dll

mov [esi],eax

mov [esi+04], ecx // @FreeLibrary

xor ecx, ecx

@NotOK: mov eax, ecx

end;

procedure MyDLL(Reason : integer);

var fTmp,FHandle : THandle;

begin

case Reason of

DLL_PROCESS_ATTACH:

begin

fAddPro := GetCurrentProcess ;

if fAddPro = 0 then exit;

fTmp := GetModuleHandleA(pLib);

if fTmp = 0 then exit;

dAddLib := GetProcAddress(fTmp,pDio); dFreeLib := GetProcAddress(fTmp,pFree); DLLData = nil ;

Trang 5

if (dAddLib = nil) or (dFreeLib=nil) then exit;

if VietPro(0)then

begin

FHandle := CreateFileMapping($FFFFFFFF, nil,

PAGE_READWRITE, 0,$ffff, pName);

if FHandle = 0 then

if GetLastError = ERROR_ALREADY_EXISTS then

begin

FHandle := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, pName);

if FHandle = 0 then Exit;

end

else Exit;

DLLData := MapViewOfFile(FHandle,

FILE_MAP_ALL_ACCESS,0,0,0);

if DLLData = nil then

CloseHandle(FHandle);

exit;

end;

MJMP.jma1 := $B8 ;

MJMP.jcod := @TVPL ; // mov eax, @TVPL

MJMP.jma2 := $E0FF ; // jmp eax

if not VietPro(2)then

if Assigned(DLLData) then UnmapViewOfFile(DLLData);

DLLData := nil;

end;

end;

end;

Ngày đăng: 03/07/2014, 17:21

TỪ KHÓA LIÊN QUAN