Exe protector za 50 PLN

Czasami dostaje różne propozycje współpracy czy napisania jakiegoś programu, jednak głupota niektórych ludzi jest aż zabawna (przykro to stwierdzić, ale rodacy przodują w tego typu rzeczach), niedawno otrzymałem intratną propozycję stworzenia prostego exe-protectora w assemblerze, z komentarzami etc., do pracy inżynierskiej dla jednego czuczona.

Jako, że nie chciało mu się szukać niczego w sieci, zaproponowałem mu 400 PLN, gdyż taki prosty template posiadam w swojej kolekcji, jest przetestowany, sprawny, kompatybilny i oto jak potoczyła się dalsza dyskusja:

Czuczon: Ty mi proponowałeś protektor za 400zł
Czuczon: kolega mi proponuje za 50zł

Czuczon: ile byś za to chciał? z przekazaniem praw autorskich, zebym to mogl uzyc jako pracy inżynierskiej
Ja: 400 PLN
Czuczon: przesadzasz z tą ceną
Ja: to napisz sam
Ja: to proste
Czuczon: kolega mi dał źródła protektora co szyfruje AES’em, ale to za trudne do ogarnięcia, nie rozumiem tego kodu :/
Czuczon: a wiesz może jak trzeba przerobić kod, żeby nie był plagiatem?
Ja: wiem
Ja: trzeba go solidnie pozmieniac na tak samo dzialajace instrukcje i funkcje
Czuczon: czyli np. przepisanie go na inny język programowania wystarczy?
Czuczon: mówie o C++ -> Asm
Ja: no jak ci sie uda
Czuczon: troche problem bo na klasach pisany, prawie 100% obiektowo

Dyskusja na tym się zakończyła, gdyż nie byłem w stanie zaproponować bardziej konkurencyjnej ceny do 50 PLN :). Tak szczerze mówiąc to nie wiem co tacy ludzie myślą, że takie rzeczy na drzewie rosną i że to pisze się z buta i jeszcze ma wszystko działać, a nie zdają sobie sprawy ile wiedzy w to zostało włożone, czasu na napisanie, na przetestowanie na różnych OS-ach, nawet takiego głupiego exe-protectora doh!

Jeśli mieliście podobne przypadki równie intratnych zleceń, napiszcie w komentach, pośmiejemy się razem 🙂

Assembler x100

Chciałbym serdecznie Was zaprosić na stronę domową Wojtka Muły, który zebrał na niej sporą liczbę algorytmów oraz ciekawych snippetów napisanych w assemblerze z wykorzystaniem najnowszych rozszerzeń procesora (od x86 po SSE4).

Najlepszym przykładem talentu Wojtka jest biblioteka sse2string, czyli najczęściej wykorzystywane funkcje znanej z języka C, biblioteki string.h, napisane w assemberze z wykorzystaniem rozszerzeń SSE2.

Wojtek prowadzi również bloga, gdzie można znaleźć ciekawe snippety w assemblerze, pierwszy z brzegu przykład warunkowej wymiany rejestrów:

sbb edx, edx ; part of step 2. - edx = 0xffffff if CF=1, 0x000000 otherwise
mov ecx, eax
xor ecx, ebx ; step 1
and ecx, edx ; completed step 2. - now C is 0 or (A xor B)
xor eax, ecx ; step 3
xor ebx, ecx ; step 4

Myślę, że każdy fanatyk assemblera znajdzie tam coś dla siebie.

Strona domowa — wm.ite.pl
Blog — wmula.blogspot.com

Pobieranie adresu EIP

Pobieranie adresu EIP to jedna z ważniejszych czynności w kodzie wirusów, exe-pakerów, exploitów etc., poniższy artykuł prezentuje standardowe metody jak delta offset oraz te mniej znane na uzyskanie własnego adresu EIP.

http://corkami.blogspot.com/2010/03/si-cest-ton-corps-qui-bouge-cest-ton.html

Jeśli ktoś zna inne metody — dopiszcie się do komentarzy.

Alpha blending dla Delphi (MMX)

Alpha blending dla Delphi w assemblerze z wykorzystaniem MMX:

function AlphaBlend(Pixel: dword; Background: dword; Alpha: byte): dword;
begin

  asm

  movzx       eax,Alpha       // kanal alfa 0-255
  imul        eax,01010101h   // 000000xx = xx xx xx xx
  movd        mm6,eax         //
  pxor        mm7,mm7         //
  punpcklbw   mm6,mm7         // rozpakuj do bajtow

  mov         edx,00FFFFFFh
  movd        mm2,edx

  movd        mm0,Background  // pixel z tla
  pand        mm0,mm2         // usun kanal alfa z tla

  movd        mm1,Pixel       // pixel obrazu
  pand        mm1,mm2         // usun kanal alfa z pixela

  punpcklbw   mm0,mm7         // rozpakuj pixel obrazu do bajtow
  punpcklbw   mm1,mm7         // oraz pixel litery do bajtow

  psubw       mm0,mm1         // src - pix
  pmullw      mm0,mm6         // *alpha
  psrlw       mm0,8           // >> 8
  paddb       mm0,mm1         // +

  packuswb    mm0,mm7         // spakuj ponownie do pixela
  movd        eax,mm0         // zapisz do eax

  mov         Result,eax

  end;

end;

To tylko przykład, można to zoptymalizować pod względem konwencji regcall, ale już mi się nie chcę, z dedykacją dla jednego geniusza, który twierdził, że to niemożliwe…