Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых)

 eXeL@B —› Программирование —› ASM вставки в Delphi (продолжение)
Посл.ответ Сообщение

Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 24 марта 2007 19:08
· Личное сообщение · #1

Решил переписать HardLock.dll из RLProtector v0.7.4 beta, но были косяки, которые обсуждались в моем первом топике. Щас вроде написал, ниже отчет:

После недолгих эксперементов решил рабочую длл ИДЕ скормить, вот что она выдала:

.text:1000102E ; --------------- S U B R O U T I N E ---------------------------------------
.text:1000102E
.text:1000102E
.text:1000102E public HardLockKey
.text:1000102E HardLockKey proc near
.text:1000102E push 0 ; nFileSystemNameSize
.text:10001030 push 0 ; lpFileSystemNameBuffer
.text:10001032 push offset FileSystemFlags ; lpFileSystemFlags
.text:10001037 push 0 ; lpMaximumComponentLength
.text:10001039 push offset VolumeSerialNumber ; lpVolumeSerialNumber
.text:1000103E push 0 ; nVolumeNameSize
.text:10001040 push 0 ; lpVolumeNameBuffer
.text:10001042 push 0 ; lpRootPathName
.text:10001044 call GetVolumeInformationA
.text:10001049 mov eax, offset FileSystemFlags
.text:1000104E mov ebx, offset VolumeSerialNumber
.text:10001053 mov eax, [eax]
.text:10001055 mov ebx, [ebx]
.text:10001057 xor eax, 21350921h
.text:1000105C rol eax, 3
.text:1000105F xor eax, ebx
.text:10001061 ror ebx, 3
.text:10001064 retn
.text:10001064 HardLockKey endp

.data:10003000 ; Section 3. (virtual address 00003000)
.data:10003000 ; Virtual size : 00000008 ( 8.)
.data:10003000 ; Section size in file : 00000000 ( 0.)
.data:10003000 ; Offset to raw data for section: 00000000
.data:10003000 ; Flags C0000040: Data Readable Writable
.data:10003000 ; Alignment : default
.data:10003000 ; ====================================================================== =====
.data:10003000
.data:10003000 ; Segment type: Pure data
.data:10003000 ; Segment permissions: Read/Write
.data:10003000 _data segment para public 'DATA' use32
.data:10003000 assume cs:_data
.data:10003000 ;org 10003000h
.data:10003000 ; DWORD FileSystemFlags
.data:10003000 FileSystemFlags dd ? ; DATA XREF: HardLockKey+4o
.data:10003000 ; HardLockKey+1Bo
.data:10003004 ; DWORD VolumeSerialNumber
.data:10003004 VolumeSerialNumber dd ? ; DATA XREF: HardLockKey+Bo
.data:10003004 ; HardLockKey+20o
.data:10003004 _data ends
.data:10003004
.data:10003004
.data:10003004 end start

Из листинга стало ясно, что адрес 10003000h указывает на FileSystemFlags,
а адрес 10003004h на VolumeSerialNumber.

В аттаче исходники HardLock.dll на Delphi и пример использования.

-----
xchg dword [eax], eax




Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 24 марта 2007 19:09
· Личное сообщение · #2

Блин, не приаттачилось.

8b50_24.03.2007_CRACKLAB.rU.tgz - HardLock.rar

-----
xchg dword [eax], eax




Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 24 марта 2007 19:09
· Личное сообщение · #3

советую тебе учить асм, и ПОНИМАТЬ код, а не рипать...

-----
Shalom ebanats!




Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 24 марта 2007 19:51
· Личное сообщение · #4

SLV
Асм я потихоньку учу.
Если я рипаю, то говорю это и всегда с исходниками выкладываю. Просто я помню когда начинал всем этим заниматься, почти все на асме, было трудно разбираться не зная его, а так все понятнее для меня, может еще кому-нибудь пригодиться и поможет в чем-то разобраться.

-----
xchg dword [eax], eax





Ранг: 113.0 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 25 марта 2007 00:25 · Поправил: Chingachguk
· Личное сообщение · #5

Если честно, я не понял что за вопрос был, может быть в этом дело:

asm
mov eax, [Flags]
mov ebx, [SN]
xor eax, 21350921h

И это компЕлируецца как-то странно?

Имхо pas&delphi имеют отличную поддержку асм-вставок, и нет смысла бояцца писать тут как в настоящем ассемблере:

function HardLockKey2: integer; stdcall;
var
Flags, SN: integer;
key1, key2: integer;
begin
Flags:= GetFlags;
SN:= GetSN;
asm
mov eax,Flags { This should be translated into something like "mov eax,[ebp-XXX]"}
mov ebx,SN
xor eax, 21350921h
rol eax, 3
xor eax, ebx
ror ebx, 3
mov @Result,ebx
end;
end;

Однако tips:

1) Нужно следить за сохранением регистрофф типа ebx,edi,esi... но тут лучше покурить хэлп по этому языку;

2) Отлаживать такую процедуру удобнее не на "комплексе" из dll и приложения, а в tiny приложении на встроенном ассемблере (имхо он нормален) отладить процедурку;

3) Можно не бояцца писать (повторяюсь) почти как "на настоящем асме":

function HardLockKey2: integer; stdcall;
var
Flags, SN: integer;
begin
asm
push ebx
call GetFlags
xor eax, 21350921h
rol eax,3
mov eax,ebx
call GetSN
xor eax,ebx
ror ebx,3
mov @Result,ebx
pop ebx
end;
end;

На ошипки не проверял

-----
The one derivative you manage is the one I abhore (c) Slipknot




Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 25 марта 2007 18:12
· Личное сообщение · #6

Chingachguk
Я на скорую руку писал, главное работает =))

-----
xchg dword [eax], eax




Ранг: 12.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 26 марта 2007 19:56
· Личное сообщение · #7

не знаю пробывал на асме под делфи пистаь, но мне не понравилось так как порой портил значения переменных



Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 27 марта 2007 06:42
· Личное сообщение · #8

maxPD пишет‚:
портил значения переменных

сохраняй регистры и все будет ок

asm
pushad
...
<код>
...
popad
end;

-----
xchg dword [eax], eax



 eXeL@B —› Программирование —› ASM вставки в Delphi (продолжение)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати