Download as pdf or txt
Download as pdf or txt
You are on page 1of 65

‫دورة ‪ 

ATRE‬ا  
 ﻡ ا ‬
‫ا رس اول – أ ا  ‪Number Systems‬‬


 ام  أﻥ ا ار ا   ‪...‬‬

‫‪: Binary‬‬

‫ها ه ا م ا  وه ا" ام ! ب‪ !,...‬ب ﻡ اا‪ *+‬ﻡ ن ﻡ دوا‪ $‬آ‪... $%‬ه‪ .‬اوا‪ - $‬ﺕ‪$‬ف اـ‬
‫‪ assembly‬أو اـ ‪ visual basic‬أو أي ‪4‬ء ﻡ ه‪ .‬ا"ت‪..‬ه ﺕ
ﻡ* ﻡ‪ 6‬ا
ر ا ‪...$%‬و‪7‬د ﺕر آ‪ $%‬أو م و‪7‬د‬
‫آ‪ ، $%‬و= اﺕ<; ‪ :‬ان ی‪$‬ﻡ‪ ! 8‬و‪7‬د ا
ر ‪$‬ﻡ‪ 1 8‬وم و‪7‬د‪$ .‬ﻡ‪. 0 8‬‬
‫ا م ا  إذن ی
ن ﻡ ر= ‪ CD,‬ه ‪ 0‬و ‪... 1‬و
 ‪E,‬ن أ س ا م )‪ .(Base‬ی‪I‬وي ‪. 2‬‬
‫ﻡ‪E, K‬ن ﺕ ﻡ* ه‪: .‬‬
‫]‪MOV EAX,DWORD PTR DS:[40A710h‬‬
‫ه ‪ *M‬ی
 ا
ﻡ* ﻡ‪ %‬ا‪ *+‬اوا‪ $‬ا ‪ ! $%‬ب ‪ :‬أﻥ‪%‬‬
‫‪1010000100010000101001110100000000000000‬‬

‫أﻡ ﺕ ‬
‫‪Push EAX‬‬
‫‪%,‬‬
‫‪1010000‬‬

‫وا‪N‬ن د  ﻥ‪$‬ى‪...‬آ‪ R‬ی


 ا  م ا ؟ د  أذآ‪$‬ك‪ ...‬م ا‪$S‬ي‪...‬آ  ﻥ ه ا‪ ، 10 9... 3 2 1 :‬ه* ‪-‬ﺡ‪ V‬؟‬
‫ا م ا‪$S‬ي ﻡ ن ﻡ ‪ 10‬رﻡز ه ‪ ، 0123456789‬إذن  ا‪M‬ل إ‪, 9 :‬ن ا‪$‬ﻡز )ار=م( ﺕ
‪...%‬ﻡ ا*؟ ﻥ_أ ﻡ‬
‫‪7‬ی ‪ `_a
,‬اـ ‪$<M 9‬ا ‪ ،‬وﻥ‪ 1 Rb‬إ‪ :‬ا‪c‬ﻥ ا
 )‪+‬ﻥ ا‪$S‬ات( ‪ ،‬إذن ‪ 9‬ی‪  *...10 %‬ﻡ ﻥ‪ *a‬إ‪, 399 :‬ن ‪+‬ﻥ ‬
‫ا‪N‬ﺡد = و‪ VM‬إ‪ $+d :‬ر= وه ‪ 9‬إذن ﻥ ا وﻥ‪_
I‬ل اـ ‪ $<a 9‬وﻥ‪ Rb‬واﺡ ‪c‬ﻥ ا
 ‪...‬ا‪c‬ﻥ ا
 ‪ 9%‬ان أﺽ<‪V‬‬
‫إ‪ 10 `_a
1 %‬إذن
‪ f‬ا‪ $<M‬وااﺡ ی
‪c *D‬ﻥ ا
 وه اـ ‪ ، 4 `_a
, ، 3‬أي ‪ *a‬إ‪. 400 :‬‬

‫ﺕ‪ 6‬ﻡ آ‪ R‬ﻥ  م ا  ‪:‬‬


‫‪ 0‬ﺙ ‪ 1‬ﺙ ‪ . 10‬ﻡ اي ﺡ‪*a‬؟ آ  ﻥ ‪...0..._h * S‬ی‪...1 i‬ی‪ i‬ﻡذا ؟ ‪ -‬ی‪4 i‬ء ‪,‬اﺡ ه ‪ $+d‬ر= ‪ ,‬ها ا م‪ .‬إذن‬
‫ا
_‪ $<a i‬وأﺽ‪ R‬واﺡ ‪c‬ﻥ ا‪k‬یة ‪ 10 : 6
, . 10 : *a!
,‬ﺙ ‪ 11‬ﺙ ‪ ، 100‬ﻡذا ﺡ‪ *a‬؟ اـ ‪ 10‬ی‪..11 %‬ی‪100 %‬‬
‫‪.‬آ ﺕ‪$‬ى ‪c,‬ﻥ ا‪N‬ﺡد = و‪ M‬إ‪ $+d :‬د إذن ا
_‪ $<a i‬وأﺽ‪ R‬واﺡ ‪c‬ﻥ ا
 )أي ‪+‬ﻥ ا‪$S‬ات( ‪+   ،‬ﻥ ا‪$S‬ات‬
‫وره = و‪ $+N VM‬د‪..‬إذن  ﻡ ﻥ‪ 1 Rb‬ـ ‪ 10 : *a! 1‬أي ﻥ_‪ D‬ا‪ $<a‬وﻥ ‪ *D‬اـ‪c 1‬ﻥ ا
 ‪ `_a,‬ی  ‪.100‬‬

‫اﻥ‪: $‬‬
‫‪decimal‬‬ ‫‪binary‬‬
‫‪0‬‬ ‫‪0‬‬
‫‪1‬‬ ‫‪1‬‬
‫‪2‬‬ ‫‪10‬‬
‫‪3‬‬ ‫‪11‬‬
‫‪4‬‬ ‫‪100‬‬
‫‪5‬‬ ‫‪101‬‬
‫‪6‬‬ ‫‪110‬‬
‫‪7‬‬ ‫‪111‬‬
‫‪8‬‬ ‫‪1000‬‬
‫‪9‬‬ ‫‪1001‬‬

‫أر‪ 7‬أن ﺕ ن ا< ‪$‬ة = أ‪ V!_M‬واﺽ! ‪.‬‬


‫آ* ر= )‪ , (digit‬ا م ا  ی‪ ، BIT :I‬آ* ‪ 4 bits‬ﺕ‪ ، NIBBLE :I‬آ* ‪ 8 bits‬ﺕ ن ‪ ، BYTE‬آ*‬
‫‪ two bytes‬ﺕ ن ‪ ، WORD‬و‪
+‬ﻡ آ* ‪ two words‬ﺕ ن ‪. DOUBLE WORD‬‬
‫اﻥ‪ $‬ا‪ * S‬ا
 ‪:‬‬

‫إن أول ‪ ,) V‬ا( ی‪ low bit :I‬أو )‪ Least Significant Bit (LSB‬أي ا_‪ V‬ذو ا‪ D‬ا=* ‪ ،‬و‪ ,‬ا‪E, *D‬ن ‪V $+d‬‬
‫)‪ ,‬ا‪I‬ر( ی‪ high bit :I‬أو )‪ Most Significant Bit (MSB‬أي ا_‪ V‬ذو ا‪ D‬ا‪.:‬‬

‫ﻡ‪K‬ﺡ ‪ :‬ﻡ ﻥ‪D‬ل ‪E, 10100101b‬ﻥ  ﻥ  = _ی ‪$‬ي و‪%‬ا وﺽ  ﺡ‪$‬ف ‪ , b‬ﻥ‪%‬ی ا‪  ...=$‬ها ‪...h$4 l‬‬

‫ﻡذا إذا أردﻥ ‪ 67‬دی  م ا  ؟ ‪m -‬س د  ﻥ‪$‬ى‪...‬‬
‫‪0=0+0‬‬
‫‪1=1+0‬‬
‫‪10=1+1‬‬

‫وا‪N‬ن  ‪$‬ى آ‪ R‬ﻥ‪ 1100110 6k‬ﻡ‪1101 6‬‬


‫‪1‬‬ ‫‪1‬‬
‫‪1 1 0 0 1 1 0‬‬
‫‪0 0 0 1 1 0 1 +‬‬
‫‪--------------------‬‬
‫‪1 1 1 0 0 1 1‬‬

‫آ ﺕ‪$‬ى ‪ D, ،‬أﺽ<  أ‪<M‬را ‪ =$‬ا‪...<I‬ها 


ﺽ` ‪...CD,‬آ ﺕ‪    *%I‬ا!‪I‬ب‪...‬ﻥ‪ p‬ﺕ ان ا‪ : $<a‬ا‪I‬ر ‪-‬‬
‫= ‪...i‬‬
‫أول ‪ $<M‬ﻡ‪ 6‬أول ‪ 1‬ﻥ
‪1 %
k‬‬
‫ﺙﻥ ‪ 1‬ﻡ‪ 6‬اـ ‪ 0‬ﻥ
‪1 %
k‬‬
‫ﺙ‪ 1 q‬ﻡ‪ 6‬اـ ‪ 1‬ﻥ
‪ 10 %
k‬ـ إذن ﻥ
‪ f‬اـ ‪ 0‬وﻥ‪c 1 Rb‬ﻥ ا
 ‬
‫را‪ 0 6‬ﻡ‪ 6‬اـ ‪ 1‬ﻡ‪ 6‬اـ ‪ 1‬ا‪ ;I‬ﻥ
‪ - 10 %
k‬إذن ﻥ
‪ f‬اـ ‪ 0‬وﻥ‪c 1 Rb‬ﻥ ا
 ‬
‫‪+‬ﻡ‪ 0 l‬ﻡ‪ 6‬اـ ‪ 0‬ﻡ‪ 6‬اـ ‪ 1‬ا‪ ;I‬ﻥ
‪1 %
k‬‬
‫ دس ‪ 1‬ﻡ‪ 6‬اـ ‪ 0‬ﻥ
‪1 %
k‬‬
‫ ‪ 1 6‬ﻡ‪ 6‬اـ ‪ 0‬ﻥ
‪. 1 %
k‬‬

‫ أ‪$4‬ح ات ا‪$+‬ى أي ا‪$t‬ح وا‪$b‬ب وا‪ +m


.%, ID‬و=
 ‪h‬ی‪ K‬إﺽ‪ ,‬إ‪ :‬اﻥ‪, - i‬ة آ_‪$‬ة ﻡ ‪...%‬‬
‫ام ا ا
اي ‪Hexadecimal‬‬

‫ی
ن ها ا م ﻡ ‪ 16‬ر= )رﻡ‪ (8‬ه ‪) :‬ﻡ ا ‪I‬ر(‬
‫‪FEDCBA 9876543210‬‬
‫أ س ا م )‪ (Base‬ی‪I‬وي ‪. 16‬د  ﻥ‪$‬ى آ‪ R‬ی  أن ﻥ 
‪c‬ام ها ا م‪...‬‬
‫‪ 0‬ﺙ ‪ 1‬ﺙ ‪... 2‬ﺙ ‪ 9‬ﺙ ‪ A‬ﺙ ‪... B‬ﺙ ‪ F‬ﺙ ‪10‬‬
‫ﻡ اي ﺡ‪*a‬؟ آ ‪ ,‬ا‪..;I‬أﻥ ا وﺡ اﻥ
‪ V%‬ار=م وو‪  M‬إ‪ :‬أ‪ $+‬ر= ﻡ  وه ‪ F‬اﺽ‪$t‬رﻥ إ‪ :‬ا
_ا‪$<a i‬‬
‫وإﺽ‪c 1 ,‬ﻥ ا
 ‪.‬‬
‫اﻥ‪ $‬إ‪ :‬ها ‪) :‬اأ ا

_‪ 6‬ﻡ ا‪I‬ر(‬
‫‪… 108 109 10A 10B 10C 10D 10E 10F 110 111 112 113….‬‬

‫…‪… D389 D38A D38B D38C D38D D38E D38F D390‬‬

‫آ ‪ ,‬ا م ا  ‪ ,‬أﺕ‪$t‬ق ت ا!‪I‬ب ‪ ,‬ها ا م ر‪ v‬أﻥ‪ %‬ﺕ
_‪ 6‬ﻥ<‪ l‬ا‪D‬ة ‪ ,‬ا م ا‪....;I‬‬

‫ام اﻥ
‪OCTAL‬‬

‫ها ا م ی
ن ﻡ ﺙﻥ رﻡز ه ‪7 6 5 4 3 2 1 0‬‬
‫وا ‪ i,‬ی ن آ
 )ﻡ ا‪I‬ر (‬
‫‪...‬‬
‫‪0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 27 30 31‬‬
‫‪32 33 ...‬‬

‫ام اي ‪Decimal‬‬

‫ها ه ا م ا‪m‬ف ‪ 6k‬ا س‪ ,...‬ا م ا‪$S‬ي ه ك ‪ 10‬أر=م )‪: (digits‬‬
‫‪0, 1, 2, 3, 4, 5, 6, 7, 8, 9‬‬

‫ا ﻡ أي ﻥم إ ‪Decimal‬‬

‫
!ی* ﻡ أي ﻥم إ‪ :‬ا م ا‪$S‬ي ‪E,‬ﻥ  ﻥ_أ ـ ‪ MSB‬وﻥ‪ m i$b‬س ا م ﻡ‪ ,$‬إ‪ :‬ا‪D‬ة ا
 ﺕ‪I‬وي ﺕ‪$‬ﺕ‪ f‬ا‪ ، =$‬ﺙ‬
‫ﻥ
‪ *D‬إ‪ :‬ا‪ =$‬ا
 ‪  i$b ,‬س ﻡ‪ ,$‬إ‪ :‬ا‪D‬ة ا
 ﺕ‪I‬وي ﺕ‪$‬ﺕ_‪... i‬وﻥ‪ 6k‬ه‪ .‬ا‪.D‬‬

‫ﻡ‪!
 K‬ی* ‪ 10100101b‬ﻡ ا م ا  إ‪ :‬ا‪$S‬ي ‪،‬‬

‫آ ﺕ‪$‬ى‪!
...‬ی* ﻡ ا م ا  إ‪ :‬ا‪$S‬ي ‪E,‬ﻥ  ﻥ_أ ـ ‪ MSB‬وﻥ‪ i$b‬ب ‪)2‬ا س( ﻡ‪D ,$‬ة ا
 ﺕ‪I‬وي ﺕ‪$‬ﺕ_‪, ، i‬‬
‫ﺡ
 ‪ ، 7‬ﺙ ﻥ‪ % 6k‬ا_‪ V‬ا
 ﻡ‪$b‬و ب ‪ 2‬ﻡ‪D ,$‬ة ا
 ﺕ‪I‬وي ﺕ‪$‬ﺕ_‪...i‬وه ا‪...‬ﺕ ‪ ,‬ا‪a‬رة ‪ %,‬واﺽ! ‪...‬‬
‫د  ﻥ‪ ;_t‬ا< ‪$‬ة ‪ :‬ﺕ!ی* ا‪ 1234h D‬ﻡ ا  ‪$S‬ي إ‪$S :‬ي ‪:‬‬

‫ﻥ_أ ـ ‪ MSB‬وه ‪ ، 1‬ﻥ‪  i$b‬س )أي ‪ (16‬ﻡ‪ ,$‬إ‪ :‬ﺕ‪$‬ﺕ‪ f‬ا‪) =$‬أي ‪ ، (3‬ﺙ ﻥ * ‪ ik ,‬ﻡ‪ 2 6‬ﻡ‪$b‬و  س‬
‫)أي ‪ (16‬ﻡ‪ ,$‬إ‪ :‬ا
‪$‬ﺕ‪) f‬أي ‪ (2‬وه ا‪...‬‬
‫ﻥ<‪ l‬ا< ‪$‬ة ﺕ ‪ : ;_t‬ا
!ی* ﻡ ا م اﻥ إ‪ :‬ا م ا‪$S‬ي‪.‬‬

‫ا ﻡ ‪ Decimal‬إ أي ﻥم  ‪:‬‬


‫ا< ‪$‬ة ه ‪ :‬ﻥ‪D‬م ‪ ID‬ا‪ D‬ا‪$S‬ی ‪ :‬أ س ا م اي ﻥ‪$‬ی ا
!ی* ‪ ، i‬و‪ -‬ﺕ ‪ :I‬أن ه ك ق ‪ .‬ﺕ‪  6‬ا‪ ID‬إ‪:‬‬
‫ان ی‪ `_a‬ﻥﺕ‪ w‬ا‪$<M ID‬ا‪...‬‬
‫ ‪ ;_t‬ا< ‪$‬ة ‪ :‬ا
!ی* ﻡ ‪ Decimal‬إ‪: Binary :‬‬
‫د  ﻥ‪D‬م 
!ی* ا‪ 359 D‬إ‪ :‬ﺙ  ‪:‬‬

‫‪Divider‬‬ ‫‪reminder‬‬ ‫‪notes‬‬


‫‪359/2=179‬‬ ‫‪1‬‬ ‫  ‪ ID‬اـ ‪ 2 : 359‬وا ﺕ‪ 179.5 w‬أي ‪ 179‬وا_= ‪1‬‬
‫‪179/2=89‬‬ ‫‪1‬‬ ‫وا‪N‬ن ‪ 179‬ﺕ‪ 2 ID‬ی‪I‬وي ‪ 89.5‬أي ‪ 89‬وا_= ‪1‬‬
‫‪89/2=44‬‬ ‫‪1‬‬ ‫‪ 89‬ﺕ‪ 2 ID‬ی‪I‬وي ‪ 44.5‬أي ‪ 44‬وا_= ‪1‬‬
‫‪44/2=22‬‬ ‫‪0‬‬ ‫‪ 44‬ﺕ‪ 2 ID‬ی‪I‬وي ‪ 22‬وا_= ‪0‬‬
‫‪22/2=11‬‬ ‫‪0‬‬ ‫‪ 22‬ﺕ‪ 2 ID‬ی‪I‬وي ‪ 11‬وا_= ‪0‬‬
‫‪11/2=5‬‬ ‫‪1‬‬ ‫‪ 11‬ﺕ‪ 2 ID‬ی‪I‬وي ‪ 5.5‬أي ‪ 5‬وا_= ‪1‬‬
‫‪5/2=2‬‬ ‫‪1‬‬ ‫‪ 5‬ﺕ‪ 2 ID‬ی‪I‬وي ‪ 2.5‬أي ‪ 2‬وا_= ‪1‬‬
‫‪2/2=1‬‬ ‫‪0‬‬ ‫‪ 2‬ﺕ‪ 2 ID‬ی‪I‬وي ‪ 1‬وا_= ‪0‬‬
‫‪1/2=0‬‬ ‫‪1‬‬ ‫‪ 1‬ﺕ‪ 2 ID‬ی‪I‬وي ‪ 0‬وا_= ‪ ...1‬ﻥ
‪ k‬ا‪ 0 ID‬إذن ‪ D,‬اﻥ
‪ %‬‬

‫وا‪N‬ن ا‪k‬اب ه ﻡ ﺕ‪$‬ا‪ , .‬د ‪ reminder‬ﻡ أ ( '&‪ ، #‬ﻡ ا" ر ‪ . ""#‬أي أن‬
‫‪359=101100111‬‬

‫د  ﻥ‪ ;_t‬ا< ‪$‬ة ‪ :‬ا


!ی* ﻡ ا م ا‪I‬ا  ا‪$S‬ي إ‪ :‬ا م ا‪$S‬ي‪.‬‬
‫ﻥ‪$‬ی ﺕ!ی* ‪ 67024‬إ‪ :‬ا م ا‪$S‬ي‪.‬‬

‫‪Divider‬‬ ‫‪reminder‬‬ ‫‪notes‬‬


‫‪67024/16=4189‬‬ ‫‪0‬‬ ‫‪ 16 : 67024‬ی‪I‬وي ‪ 4189‬وا_= ‪0‬‬

‫‪4189/16=261.8125‬‬ ‫‪0.8125 x 16 = 13  D‬‬ ‫‪ 4189‬ﺕ‪ 16 ID‬ی‪I‬وي ‪ 261‬وا_= ‪ ، 0.8125‬ﻥ‪D‬م ‪$b‬ب‬


‫ا_= ـ ‪ ، 13 : *a! , 16‬أي ‪D‬‬
‫‪261/16=16.3125‬‬ ‫‪0.3125 x 16 = 5‬‬ ‫‪ 261‬ﺕ‪ 16 ID‬ی‪I‬وي ‪ 16‬وا_= ‪ ، 0.3125‬ﻥ‪D‬م ‪$b‬ب ا_=‬
‫ـ ‪5 : *a! , 16‬‬

‫‪16/16=1‬‬ ‫‪0‬‬ ‫‪ 16‬ﺕ‪ 16 ID‬ی‪I‬وي ‪ 1‬وا_= ‪0‬‬

‫‪1/16=0‬‬ ‫‪1‬‬ ‫‪ 1‬ﺕ‪ 16 ID‬ی‪I‬وي ‪ 0‬وا_= ‪ ، 1‬ا ﺕ‪ 0 w‬إذن اﻥ


‪. %‬‬
‫وا‪N‬ن ا‪k‬اب ه ﻡ ﺕ‪$‬ا‪ , .‬د ‪ reminder‬ﻡ أ ( '&‪ ، #‬ﻡ ا" ر ‪ . ""#‬أي أن‬
‫‪67024 = 105D0‬‬

‫ﻡ‪K‬ﺡ ‪   :‬ا_‪$‬ﻡ‪ fk, _ - k‬أن ی‪ ;_I‬أي = ‪I‬ا  ‪$S‬ي ‪ ،‬ا‪ 0 =$‬إذا آﻥ‪ V‬ﻡ_
 !‪$‬ف‪ K,...‬ا‪1B2 D‬‬
‫ﺕ_‪ :D‬آ ه ﻥ‪ VI %‬ﻡ_
 !‪$‬ف ‪ C441   ،‬ی‪ fk‬أن ﺕ
_‪. 0C441 %‬‬

‫ا ﻡ و إ ام ‪ Binary‬واـ ‪. Hex‬‬

‫اﻡ‪" *% $‬ی ‪..‬أﻥ‪ $‬ا‪k‬ول  <*‪ * ...‬ر= ‪ l %‬ه ك ﻡ ی‪  iD‬م ا  )ﻡ‪ 6‬ا=‪ V‬ی ‪ p‬ﺡ<‪   i‬ها ‪ l‬ﻡ‪t‬‬
‫ﻡ ‪ . (p‬ﻡ‪ K‬ا‪$
,‬ض أﻥ  ﻥ‪$‬ی ا
!ی* ﻡ ‪ 1001101101b‬إ‪ :‬ه ‪ p...l‬أن ﺕ_أ ﻡ ‪ ID
 = ، LSB‬ا‪ =$‬إ‪ :‬ﻡ‪k‬ت آ*‬
‫ﻡ‪ k‬ﻡ ﻥ ﻡ ‪+ 4‬ﻥت‪ .‬ه ا ‪:‬‬
‫)‪-‬ﺡ‪ y‬أن ا‪ k‬ا ‪ ,‬ا‪I‬ر ﻡ ﻥ ﻡ ر= ‪   CD,‬ﻥ! ﻥ‪$‬یه ﻡ ﻥ ﻡ ‪ 4‬أر=م ‪ ،‬ا ﻥ‪ Rb‬إ‪$<M %‬ی إ‪ :‬ا‪I‬ر(‬

‫‪0 0 1 0‬‬ ‫‪0 1 1 0‬‬ ‫‪1 1 0 1‬‬

‫وا‪N‬ن ﻡ ا‪k‬ول ی ‪ p‬أن ﺕ‪K‬ﺡ‪ y‬أن ‪ 1101‬ﺕ‪ ، D *D‬و ‪ 0110‬ﺕ‪ ، 6 *D‬أﻡ ‪2 *D
, 0010‬‬
‫أذن ا ﺕ‪. 26D w‬‬
‫وا ‪ l‬ی
  <‪ l‬ا‪$t‬ی‪!
 ، D‬ی* ‪ 0B45A‬ﻥ‪_
I‬ل آ* ر=  ی‪, ، iD‬ـ ‪ A‬ی‪ 1010 %D‬و ‪ 5‬ی‪ 0101 %D‬و ‪ 4‬ی‪ 0100 %D‬أﻡ‬
‫‪ ، 1011 %D, B‬إذن ا
‪1011010001011010 k‬‬

‫‪Binary‬‬ ‫‪Decimal‬‬ ‫‪Octal‬‬ ‫‪Hex‬‬


‫‪0000‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪0001‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪0010‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬
‫‪0011‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬
‫‪0100‬‬ ‫‪4‬‬ ‫‪4‬‬ ‫‪4‬‬
‫‪0101‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪5‬‬
‫‪0110‬‬ ‫‪6‬‬ ‫‪6‬‬ ‫‪6‬‬
‫‪0111‬‬ ‫‪7‬‬ ‫‪7‬‬ ‫‪7‬‬
‫‪1000‬‬ ‫‪8‬‬ ‫‪10‬‬ ‫‪8‬‬
‫‪1001‬‬ ‫‪9‬‬ ‫‪12‬‬ ‫‪9‬‬
‫‪1010‬‬ ‫‪10‬‬ ‫‪13‬‬ ‫‪A‬‬
‫‪1011‬‬ ‫‪11‬‬ ‫‪14‬‬ ‫‪B‬‬
‫‪1100‬‬ ‫‪12‬‬ ‫‪15‬‬ ‫‪C‬‬
‫‪1101‬‬ ‫‪13‬‬ ‫‪16‬‬ ‫‪D‬‬
‫‪1110‬‬ ‫‪14‬‬ ‫‪17‬‬ ‫‪E‬‬
‫‪1111‬‬ ‫‪15‬‬ ‫‪21‬‬ ‫‪F‬‬
: Signed Numbers
*!‫ ﺕ‬- = .%, fI‫ أو ا‬f7‫  ا‬q‫ل !ی‬k‫ ﻡ‬- 6_t ‫_ أم _ ؟‬7‫ه* ه ﻡ‬... 0B521 : D‫ ا‬.‫ ه‬, ‫ﺕ‬
...‫رة‬4‫إ‬
First complement :‫ ا'ول‬-‫ا‬

‫ض أن أول‬$
<‫ إذن ی  أن ﻥ‬.$<a‫ ا‬%,  (256 combinations) R
c‫ د ﻡ‬256 *  , (V‫ )ی‬8-bits  ‫إذا آن ی‬
. _ (256-128) 
‫_ وااد ا‬7‫( ه ﻡ‬127-0) ‫ د‬128
. binary ‫ ـ‬iD‫ ﻡ ی‬:‫ إ‬i!‫ ﻥ‬hI_  ‫ﻥ‬E, f7‫ ي د ﻡ‬1st complement ‫ اـ‬: ‫ل‬a!
110110 : *a! , binary :‫ إ‬%!‫ﻥ ﻥ‬E, 54 D 1st c : ‫ل‬a! ‫إذن‬

: 
‫_; اد ا‬t‫ﻥ ﻥ‬, -54 ‫ أي‬، _ D‫ ا‬V‫أﻡ ا آﻥ‬
st
1 c = 2 power n – 1 – number in binary

...‫ وه ا‬n=16 ‫ـ‬, word V‫ وأن آﻥ‬n=8 ‫ـ‬, V‫ ی‬D‫ ا‬V‫ن آﻥ‬, ، ‫ﻥت‬c‫اه ﺕ  د ا‬$‫ ا
 ﺕ‬n
. n ‫س‬z ,$‫ ﻡ‬2 ‫ أي‬2 power n
st
V‫" ی‬a 1 c :‫ إ‬%‫ 
!ی‬-54 D‫ ا‬: ‫_; اد‬t  . binary :‫ إ‬%‫=  ﺕ!ی‬$‫ أي ا‬Number in binary

1st c = 2 power 8 – 1 – 110110


= 1111 1111 – 110110 = 11001001

‫_` اد‬a‫ر آ ی‬I ‫ی‬$<M  <‫ )أﺽ‬00110110 ‫وي‬I‫   ﺕ‬54 D‫ن ا‬, V‫ﺡ‬- ....‫* ﻡ ه‬% ‫ى أ‬$+‫ أ‬D‫ی‬$h ‫ه ك‬
(: %% ‫ ﻡ أ‬V‫ ه* رأی‬. 11001001 : *a!
, V *‫ آ‬l ‫ن ا‬N‫ﻥت( وا‬+ 8 ‫ﻡ ﻥ ﻡ‬

‫ى ؟‬$+‫ أ‬D‫ی‬$h ‫ أي‬l‫ ( و‬1st complement ‫ اـ‬D‫ی‬$h a=‫ )أ‬D‫ی‬$t‫ ا‬.‫


ر ه‬+‫ذا ﺕ ا‬...K= *‫ﻡ‬m
‫  د  ﻥ‬
‫ ه‬k
‫ ا‬، 251 D‫ ا‬6‫ ﻡ‬5 D‫ ا‬processor ‫ اـ‬6k‫  ﻡ ی‬q!‫  ها ی‬I‫؟ ﺡ‬p‫ آا‬l‫ أ‬. 0 : *a!
I, 5 6‫ ﻡ‬5- V7 ‫إذا‬
.‫ا‬$<M $_
‫ ﺕ‬k
, overflow ‫ اـ‬f_I‫ و‬، 255

  8bit ‫ ﻡ‬b‫اب ﻡ ن أی‬k‫ أن ی ن ا‬fk‫ ا ی‬8bit ‫ أي‬byte {, ‫  دی ﻡ‬7 !‫   ﻥ‬100000000 ‫ ه‬w‫ى ا ﺕ‬$‫آ ﺕ‬
‫ أي‬00000000 :D_‫ وی‬MSB ‫ه* اـ‬k‫ وی
 ﺕ‬، overflow ‫  ا! ب‬, :I‫ ا! ﺕ‬.‫ن ه‬, 9bit :  a‫ أﻥ  ﺡ‬q‫ﺡ‬
...$<M
32768 ‫ أول‬، (#.‫ & دا ﻡ‬65536 |S ‫ ﺕ‬16 bits ‫ أن‬q‫( ﺡ‬16 bit values) word {, ‫_;   ا
ﻡ* ﻡ‬t ‫ ا_أ ی‬l<‫ﻥ‬
. _I‫م 
* ااد ا‬c
I‫( ﺕ‬65536 :‫ إ‬32768) =_‫ وا‬، _7‫م 
* ااد ا‬c
I‫( ﺕ‬32767 :‫ إ‬0 ‫د )ﻡ‬
Second complement :
‫ اﻥ‬-‫ا‬

. binary ‫ ـ‬i‫ _رة  اد  ﺕ!ی‬.‫ ا * اول واي ور‬iI<‫_ ه ﻥ‬7‫اد ا‬z ‫ا * اﻥ‬
110110 : *a!‫  * اﻥ ﻥ‬%‫   ﺕ!ی‬54 ‫ـ‬,
.‫ ا * اول‬:‫ إ‬1 ,‫ﺽ‬E i ‫ل‬a!‫
 ا‬, _I‫ ا‬D ‫أﻡ ا * اﻥ‬
: ‫ إذن  * اﻥ‬11001001 ‫وي‬I‫  * اول ﺕ‬-54 ‫  أن‬,$ ;I‫ ال ا‬,
2nd c = 1st c +1 = 11001001 + 1 = 11001010

. ‫ ﻡ!ر ﺡی‬l ‫ح ها ا م   ها‬$4‫<!ت آ أ‬a‫ات ا‬$S 


‫ی  آ‬...‫ ﻡ ها‬$‫ﺙ‬:‫ أﺕ; أ‬

Assignment :
I-convert these values from decimal to hexadecimal , then to Binary
a) 15 b)150

II-convert these values from Binary to Decimal , then to Hex.


a) 1001 b)011101101

III-convert these values from Hex to Decimal , then to Binary.


a) 0B51 b)124C

IV- find the 1st and 2nd complement of the following decimal values :
a) 154
b) - 413

solutions should be mailed to revenge-34[at]hotmail[dot]com .


deadline: one week from the lesson's date .

References:

1- http://en.wikipedia.org/wiki/Main_Page
2- http://www.al-ebda3.info/ib/
3- http://www.emu8086.com/
4- http://www.arabteam2000.com/
5- Assembly Language: Step-by-Step , Jeff Duntemann
6- introduction to computer , Jawdat Abu Taha

http://www.at4re.com

Arab Team for Reverse Engineering


αλλκο
July - 2006
 ‫
 ا

   ﻡ ا‬ATRE ‫دورة‬
 ‫ م  ز ا –  ت ا‬-– ‫ا
رس ا‬

‫ج‬2‫ و‬، (processing) &  ‫ *) (م‬، (inputs) ‫ ز ا  ه   آ    ا   ت وا  ت‬
. (outputs ) ‫ ت‬2 ‫ ا‬3
. ( www.google.com:> ? ‫@ ا‬5 ‫ﺩ‬BC )...35 6 7 ‫ آ ن ﻩ‬: :‫= أ ل آ‬2 5  ‫ ز ا‬
: 35 (Ranges) ‫= م‬I‫ﺩة أ‬K G ‫(=) ا  إ‬B ‫آ و‬

- embedded system computer (e.g. : washing machine)


- microcomputers
- minicomputers
- mainframe computers
- super computers

.O U ‫=) ا‬I G ‫ وا‬، V5 2 ‫ ا‬:& ‫ ا‬G ‫ إ‬O3B P5 5‫ب ا ي أ‬S ‫ ز ا ﺡ‬


: S S‫= م أ‬I‫ أ‬5 @5 ‫ب‬S ‫ن  ز ا ﺡ‬B

I -central processing unit (CPU)


II -input devices
III-memory storage devices
IV-output devices
V -a communication network , called "bus" , that links all the elements of the system
and connects the system to the external world.

Central Processing Unit (CPU) : CDE‫ اآ‬CG ‫وﺡ


ة ا‬

‫? ا  ت‬3 ‫ ا ` ﺡ^ (م‬a b5 75 c‫ﺩة \ا‬K ‫?دة أو‬5 (chip) ‫ﺡ‬B\ ‫ﺩ ن‬I CPU ‫ا ـ‬
Oh ‫ى‬j‫@ ا  ت ا‬5‫ا‬C )g3 ‫( و(م‬arithmetic and logical calculations) (e3 ‫ا ﺡ=  وا‬
@5 ‫ﺩ‬BC ‫@ ا‬aB ‫ ا ي‬microprocessor ‫  ـ‬G=B 5  k  3 ‫ر ا‬e b5 .  )‫ب وا ﺡ‬S ‫ا ﺡ‬
...U m>‫ب ﺡ&) أ‬S ‫&  ز ﺡ‬3 ‫ وا‬. ‫ا ﺩوا ا    وا اآة دا‬
:   ‫ ا‬S Sj‫@ ا  ت ا‬5 ‫ ن‬CPU ‫) ا ـ‬g5

- arithmetic logic unit (ALU)


- registers
- control section
- internal bus

Arithmetic Logical Unit (ALU) LMN‫ ب وا‬P‫ ـ وﺡ


ة اﺡ‬S‫أو‬

‫ ت‬K‫( و‬or , xor , and , etc…) (e3 ‫( وا‬... ‫ح‬q b)  =‫@ ا  ت ا ﺡ‬K  o=5 ‫ ا ﺡﺩة‬n‫ه‬
. (...m>‫ا ( ر @ ا   ت )أآ أ‬
Registers ‫ت‬VGP‫  – ا‬U

(temporary)Iu ‫@ ا‬BC2 ‫ﺩم  ت ا‬2= ‫ ﺩا‬BS @ ‫ة‬m> ‫ وﺡﺩات ذاآة‬GK ‫ﺡي‬B CPU ‫إن ا ـ‬
...‫ﺡﺩدة‬5  ‫ واﺡﺩة (م‬:‫ آ‬، registers ‫ت‬x&= ‫@ ا‬5 ‫ﺩد‬K GK ‫ ا اآة ﺡي‬n‫ ه‬.‫   ت‬
. (‫ﺡ‬y ‫ت‬x&= ‫@ ا‬K O7? ‫ \ح‬OS‫و‬

Control Unit (CU) W‫ﺡ‬X‫  – وﺡ


ة ا‬U
: O  ‫ ا‬:==  O‫ ه‬CPU ‫ ا ـ‬:I @5 ‫?ه‬3 )B O ‫إن ا  ت ا‬
 ‫ |? ا‬Ph -1
within the computer. decoding the instruction

‫ات ا   ت‬5 Oh ‫ و ر‬CPU ‫ ا ـ‬:‫ ت ا (اءة وا   ﺩا‬K @5‫ا‬C )g3 -2


Sequencing the reading and writing of data within the CPU and externally on the Data Bus.

‫? ا  ت‬3 ‫ ﻩ‬x @5 )B ‫@ ا ي‬5‫ا‬C ‫ ا‬Oh )‫ ا ﺡ‬-3


Controlling the sequence in which instructions are executed.

ALU ‫ ا ـ‬:I @5 ‫?ه‬3 )B O ‫ ا ﺡ)   ت ا‬-4


Controlling the operations performed by the ALU.

Internal Bus Z[‫ – ا ا


ا‬Y‫را‬

‫دي‬u aB‫ وأ‬، ` ‫ ا‬a ‰  ‫ > ا ﺩا‬3 ‫ ﻁ ا‬O ‫ت ا‬y 7y‫ك ا‬xS‫@ أ‬5 \ @K ‫ رة‬K ‫ه‬
. - ‫ م – أي‬g3 ‫ى‬j‫ > ا‬3  ‰  ‫ت  ر ﻁ ا‬y 7‫ ا‬G ‫إ‬
: CPU Buses ‫@ ا ـ‬5 ‫ث أاع‬x* ‫ ك‬3‫ه‬
‫ط‬e G ‫ إ‬h   ‫( ا\ رات ا ﺩا‬senses) |=B ‫( ا ي‬line) ‫ﻁ‬2 ‫@ ا‬5 ‫ن‬B: Control Bus-1
. CPU ‫ ا ـ‬:‫أى ﺡ)  \ رات ﺩا‬
. ‫@ ا اآة   ت‬B‫ و‬3K ‫ﺡي‬B ‫@ ا  ‰ ا ي‬5 ‫ واﺡﺩ‬n &  ‫ ﻁ‬، The address Bus -2
.  ‫@ ا اآة وآ  إ‬5 ‫(م (اءة ا   ت‬B @‫ ﻁ  & ه‬، the Data Bus -3

...‫ ت‬G ‫_ ا‬Z` C^D‫ ]ة  ر‬


4-bit ‫ (ل أﻩ‬5‫ﺩ‬3K‫و‬... single-chip ‫@ ع‬5 µP ‫ وه أول‬4004 ‰ 5 :‫ﺡ“ \آ ا‬q ‫ ت‬3= ‫ ا‬Oh
‫ ها‬x .‫(ﻁ‬h “B  640 )&‫ ﺡ‬G‫ ذاآة ﺡ‬3K GK ‫ درا‬I ‫ آ ن‬. 4 bit ‫= وي‬B Bus Width ‫ أن ا ـ‬O3 @‫ﺡ‬3h
@B‫ و‬3K :I ‫و‬... 16-Bit ‫  = ع‬Bus ‫   ت‬:I 3‫ و‬1978 3S Oh 8086 ‫*)  ء ا ـ‬...‫ازات‬q ‫ﺩة‬K ‫از‬e ‫ا‬
‫ﺩة أاع‬K P ‫ ذ‬x...“B  &5 1 )&‫ ﺡ‬G‫ ذاآة ﺡ‬3K GK ‫ درا‬I ‫آ ن‬.“ 20 ‫  = ع‬addresses bus
:I 3 ‫ >ﺩرت ` ا  & ت‬aB‫ وأ‬، Pentium ‫ وه ا ـ‬، “ 32 ‫   ت  = ع‬:I 3 ‫ودة‬C5 “‫ت أ>ﺡ‬xB‫د‬5‫و‬
: ‫?ﺡ‬7 ‫ ا‬n‫ت و? > زر ه‬xB‫ ا د‬b&  I GK ‫ع‬xq› ، titanium ‫ “ آـ‬64 ‫  ت  = ع‬
http://en.wikipedia.org/wiki/List_of_Intel_microprocessors
)S  ) = 3h‫ﺩ‬B ‫ ا ي‬ = ‫وها ا‬...6 72 ‫@ ﺡ^ ا‬5 ‫ا‬U‫|  @ آ‬5 8088 ‫ و‬8086 O& 5 ‫إن‬
...x-86 family
‫ ه ؟‬... Zab‫ ا‬Cc
computer ‫  ـ‬h5 P5CB OSj‫‰ ا‬5 O‫ آ‬، (low level) ‫ ا =ى‬a?235 &5 m O‫ه‬
: O  ‫ آ‬computer model ‫ ا ـ‬c 33B ، structure

... CPU ‫ ا ـ‬:‫ ﺩا‬O ‫ت ا‬x&= ‫ ا‬GK 7?5 ‫ة‬g O( 3K‫وا¡ن د‬
(‫(ﻁ‬h ‫ \ة‬5 (Be 3 B  O?‫آ‬S...‰  internal architecture ‫ ا ـ‬G ‫ق إ‬e‫ @ أ‬: g‫ﺡ‬x5)


...‫ت‬x&= ‫= م‬I‫ﺩة أ‬K ‫ﻁ‬e2 ‫ ها ا‬Oh ‫ ك‬3‫آ ى ه‬
: general purpose registers

: ‫)  ص‬S‫ ا‬35 : ‫ و‬، ‫ض‬m ‫ ا‬5 K ‫ت‬x&=5 8 P 8086 ‫ & ت‬5 ‫إن‬

• EAX - the accumulator register.


• EBX - the base address register.
• ECX - the count register
• EDX - the data register
• ESI - source index register.
• EDI - destination index register.
• EBP - base pointer.
• ESP - stack pointer.

: O  ‫ ا‬ ‫ ا آ‬EAX ,EBX,ECX,EDX : b‫ر‬j‫ت ا‬x&= ‫ ا‬P ‫ن‬¥h bI‫ا ا‬

¨Bq @K “ 16 ‫ أول‬G ‫ أو إ‬EAX ¨Bq @K “ 32 ‫ ا ـ‬G ‫ ا >ل إ‬P3B ‫ت‬x&= ‫ ا‬n‫ ه‬b5 :5  ‫ﺩ ا‬3K
@B y EAX @5 ‫ أن ا (=) ا ي‬ª‫ﺡ‬y .  ‫ ا‬GK AH ‫ و‬AL ¨Bq @K “ 8 O *‫ أول و‬G ‫ إ‬G‫ أو ﺡ‬AX
EAX GK ¨e3B 5 q . ‫?د‬35 :| ‫ﻩ‬5 :5  ‫ ا‬P3B O?= ‫(ﻁ ا (=) ا‬h .‫ ا?اد‬GK ‫ا >ل إ ﻩ‬
. EBX,ECX,EDX GK ¨e3B

... 35 :&=5 :‫ ت آ‬5‫ﺩا‬2S‫ﺡﺩد ا‬B ‫‰ ه ا ي‬5 ‫ن ا‬¥h ، :&=5 : = ‫@ ا‬5 )« ‫ ا‬GK
‫ )أو‬RAM ‫ ا اآة‬V ‰  ‫ ا‬:‫دة ﺩا‬5 j KS : )B ‫ ا واآ‬n‫ ه‬b5 :5  ‫  آ أن ا‬B‫ﺩ‬
... 35‫ ا ز‬ =B 5 Buses ‫ﺩام ا ـ‬2S‫ ا‬ eB 5 :5  ‫«ه ( ﺡ^ ا‬

: segment registers

• CS - points at the segment containing the current program.


• DS - generally points at segment where variables are defined.
• ES - extra segment register, it's up to a coder to define its usage.
• SS - points at the segment containing the stack.

. GS ‫ و‬FS : ‫ )= ( ه‬UB‫ ا  & ت ا ﺡﺩ‬Oh @h ‫=&@ إ‬5 ‫ ك‬3‫ ه‬aB‫أ‬
‫ة‬h ‫ ) و @ ن‬n‫ن ه‬¥h ، segment registers ‫ ا ـ‬Oh I ‫@ أي‬BC2 P3B ‫@ أﻩ‬5 )« ‫ ا‬GK
pointing at accessible O‫ﺡﺩدة وه‬5  5 ‫ ﻩ‬: ، ‫ض‬m ‫ م ا‬K V ‫ت‬x&= ‫@ ا‬5 ‫ع‬3 ‫ن ها ا‬j... >
.(:  ‫@ ا‬K O3 = y) blocks of memory
‫ان‬3K ‫ أي‬G ‫ >ل إ‬general purpose registers ‫ ا ـ‬b5  3 G ‫ إ‬3 x segment registers ‫إن ا ـ‬
.‫ذاآة‬
SI = ‫ و‬DS = 1230h ba ‫ أن‬ &B 12345h O BC? ‫ان ا اآة ا‬3K G ‫ ل إذا أرد ا >ل إ‬U ‫ ا‬:S GK
O ‫ “ ا‬16 ‫@ ا (ﺩ  ـ‬5 y‫@ ﺩ‬B‫ و‬3 ‫@ ا‬5 ‫ﺩد أآ‬K G ‫ ا >ل إ‬33B ‫ﻩ ها‬j ‫( ﺩة‬Bq n‫ ه‬. 0045h
.segment registers ‫ ا ـ‬
‫ ا ـ‬b5 ‫ وﻩ‬10h ‫ ـ‬segment register ‫ب ا ـ‬a O BC? ‫ان ا‬3 ‫(م  ت ﺡ=  ت‬B CPU ‫إن ا ـ‬
: ‫ ها‬. general purpose register

: BX, SI and DI ‫ن‬¥h ، O‫ا‬h‫ ا‬:| . effective address G=B @3*‫ان ا ن =&@ إ‬3 ‫إن ا‬
. SS b5 :h BP and SP 5‫ أ‬DS b5
.effective address ‫ أن ن‬3B y ‫ى‬j‫ض ا‬m ‫ ا‬5  ‫ت ا‬x&= ‫ا‬

: special purpose registers

• EIP the instruction pointer.


• flags register - determines the current state of the microprocessor.

.  ‫?ه ﺡ‬3 ‫&ي‬B O ‫ ا  ا‬G ‫| دا وأﺩا إ‬B ‫ وه‬، CS b5 :B ‫ دا‬EIP ‫إن‬

‫ ت‬D‫ اا‬: Flag registers


& h c= ‫ إ‬. (e35‫  و‬B‫ ت ر‬K ?3 ‫ ﺩ‬CPU ‫ ا ـ‬:I @5  ( ‫ه‬m )B ‫ ت‬B‫إن ا ا‬
. ‰5  ‫@ ا‬5 ‫اء أى‬C‫ أ‬G ‫ ا ﺡ) إ‬:(3 ‫ﺩ ا |وط‬B‫ا  وﺡﺩ‬
GK O ‫ﺩ‬I ‫ \ة‬5 « ‫ق‬q ‫ ك‬3‫ه‬...‫ \ة‬5 (Be ‫ت‬x&= ‫ ا‬n‫) ه‬I m P3B y ‫ م‬K :|
...5‫ د‬I ‫ دروس‬Oh ‫ذآه‬

( (: ‫ آ ه‬O  ‫“ ا‬2= ^‫ﻩ ﺡ‬S‫ درو‬GK afeef ‫ ا | ´خ‬b5) :‫= م‬I‫* أ‬x* G ‫ ت إ‬B‫(=) ا ا‬
‰  ‫ ا‬Be  ‫ ﺡ‬Oh ‫(ﻁ‬h ‫دة‬5 O‫ وه‬K ‫ ا‬GK )‫ ا ﺡ‬Oh ‫ ?ﺩ‬y ‫= أي أ‬5 « ‫ ت‬B‫ را‬-
 ‫ ﺡ  إ‬3= @‫ ﺡ‬O ‫“ ا ﺡ‬I ‫ ا‬Oh .‫ ت‬B‫ ا ا‬n‫ل ه‬xmS‫@ ا‬h h ‫ ت إ‬B‫ را‬G ‫ﺡ ن إ‬B ‫ر‬
¨e3 ‫ (م  وﺡﺩة ا ﺡ= ب وا‬O ‫ ا  ت ا‬b‫ و‬ =‫ ﺡ‬m‫ * و‬O ‫ ت ا‬B‫ ا ا‬O‫ وه‬:b ‫ ت ا‬B‫ را‬-
‰  ‫ ا‬Oh
G‫ ا ( ﺡ‬n‫ ه‬G( 1 ( ‫ ﺩا ا‬b‫ذا و‬¥h  )‫ﺡ‬B ‰5 ‫ ت ا‬B‫ را‬O‫ وه‬:‫ة‬e= ‫ ت ا‬B‫ را‬-
 >  &5 5‫¨ أوا‬Bq @K ‰5  ‫ ا‬Oh ‰5 ‫ه ا‬mB

‫ة‬eS ‫ ت‬B‫ را‬3 ‫ و‬b‫ ت و‬B‫ را‬6 5‫ﺩ‬2=5 « ‫ ت‬B‫ را‬7 GK ‫ﺡي‬B 8086 ‰  ‫ ا‬Oh ‫ ت‬B‫ ا ا‬:&=5
CF Carry flag
PF Parity flag
AF Auxiliary flag
ZF Zero flag
SF Sign flag
TF Trap flag
IF Interrupt flag
DF Direction Flag
OF Overflow flag

‫ ا ﺩرس ا ( دم‬Oh )‫أراآ‬...‫ ا ا ﺩرس‬assignment ‫ﺩ‬B y...G ‫ﺩ ا‬I ‫ن درس ا م‬B 3‫ ه‬G ‫إ‬

References:
1- http://www.emu8086.com/
2- http://www.arabteam2000.com/
3- Fundamentals of Computer Organization and Architecture ,
Mostafa Abd-El-Barr and Hesham El-Rewini.
4- Assembly Language for Intel-Based Computers , Kip. R. Irvine

http://www.at4re.com

Arab Team for Reverse Engineering


αλλκο
July - 2006
 ‫
 ا  
 ﻡ ا‬ATRE ‫دورة‬
‫ – اﻉ  اا‬DOS
‫ م ا‬-–  ‫ا
رس ا‬

allko
‫ <ﻩ‬xacker ‫خ‬4 ‫ درس‬- –  ‫رس ('ذة – ﺡ‬#‫ا ا‬+‫ ه‬- ‫اء آ ة‬01‫ا" أود أن أ  إ أن أ‬#$
.‫ ا@ف‬- <A‫ ا‬B ‫ﻉ‬C... =
‫ا‬

DOS ‫ م ا‬

 ‫ض‬G‫ﺱب دون ا‬J‫ة ا‬0K1‫ام ارد وأ‬#G‫<  اﺱ‬EL -M" ‫ﺱب‬J‫  
ا‬DOS DE"
<L‫ و‬. ‫اص‬ST‫ت ا‬S‫ ا
 وﺱا‬، ‫ ﺡ‬QOE‫ة ﺡ ا‬0K1T‫ ا‬X+‫ ه‬E
Q .  N"0 O‫  وا‬A‫ ا‬K< POQ
^N_‫ ا‬X+‫ ه‬- $ -‫ و‬. ‫ﺱب‬J‫ة ا‬0K1‫ارد وأ‬E ‫د ﺱى‬T‫ ا‬Y‫ﻉ‬E‫ ا‬-L ‫ ﺱ[ل‬DOS ‫ا ن‬+‫ه‬
:  ‫^ ا‬N_‫ ا‬LEYE$ `K‫ ة <م ﺱ‬D=‫ا‬

‫ت‬O<E‫ وا‬directories ‫رس‬KO‫ ` ا‬Q‫ إدارة و‬-L b[‫ ﺱ‬DOS ‫ "ﻉ م‬: ‫ت‬O<E‫إدارة ا‬ -
‫ت م‬#' i"C -L ‫ت‬O<E‫" ا‬#‫ﻉ‬Q‫ إ
ء و‬B h‫ﺱ‬Q Y‫ا‬$ B EY .‫ص‬A‫< ا‬L ‫دة‬1E‫ا‬
‫ إ‬K"0GQ BS‫<  إدارة ا‬EL ‫ء‬oL p‫  ذ‬- ‫رآ‬Q ( ‫ﻉ‬C m$ 16 ‫ت‬A h ‫ﺱ‬$ ‫ا‬+‫ )ه‬DOS
.DOS
o<h$ ‫ﺡ‬E‫ "ﺱ‬K ، E‫ج ا‬G‫ ا‬/ G‫ ا‬L - E‫ ا‬DOS ‫ ""ﺡ م‬: Input/output -
. Interrupts ‫ﻉت‬CAE‫ ا‬i"C -L ‫ ت‬h‫ﻉ‬E‫إ'اج ا‬/‫إد'ل‬
‫ص‬A‫ ا‬- ‫ا ا‬A" K .‫م‬#G‫ﺱ‬E‫ ا‬X#"" $ ‫ أي‬+ OQ DOS -M" : ‫ ا‬EJQ -
.‫ ﻩ‬+ O‫` "ﺱ<` ا‬x ‫اآة‬+‫<ﻩ  =ن  ا‬EJ 
‫اآة‬+‫ ا‬-  ‫ا آ‬0 ‫ ﺡ‬p‫ ذ‬S y@G" ، X+ O ‫ اا‬#‫ اﺡ‬DOS EJ" #L : ‫اآة‬+‫إدارة ا‬ -
. ‫"ه‬JQ ‫اآة أو‬+‫ ا‬- #"0E‫ ا‬o<h$ < ‫ﺡ‬E‫ و"ﺱ‬، ‫ ت‬h‫ﻉ‬E‫ت وا‬E <‫ة اﻉ‬O

E‫ آ‬، ‫ﻉت‬CAE‫ ا‬i"C -L E‫ ا‬- $‫ ﻩ و‬$ ‫@ل‬Qb‫<  ا‬EL DOS -M" : Interrupts ‫ﻉت‬CAE‫ا‬ -
 E A ‫ك ا‬Q =E" ‫ل‬AE‫ ﻉ< ﺱ ا‬، ‫ﻉت‬CAE‫ ا‬X+‫ت ه‬#'  Q "‫"ك  ﺡ‬
. ‫^ ﻉ‬N_‫ز و‬Y ‫ﻉت‬CAE‫ م ا‬- ‫ءا‬01 ‫ﻉ<ﻩ‬1‫( و‬Terminate-Stay Resident) ‫اآة‬+‫ا‬

The Boot Process ‫ ا"! ع‬

" ‫ وا‬cool boot ‫ﻻع ارد‬S‫ ا‬E‫ﺱ‬Q  <EL ‫وث‬#‫ﺱب ﺡ‬J‫ء إ ا‬$K=‫ ا‬P‫دة و‬L‫ إ‬-L (
"
i S#Q ‫اء‬1‫اآة وإ‬+‫ ا‬BS‫  آ ا‬O@Q ‫< ﻩ‬L ‫ض‬OQ ‫ [ ا‬K‫دة ا‬L‫ﻉ  ﺡ إ‬E‫ د'ل ا‬KL
CS Y‫ﺱ‬E‫ ا‬EJQ `x -‫ و‬، ‫اآة‬+‫  ا‬iAJ‫ت ا‬G
- o<Y‫و ا ﺱ‬T‫ ا‬E <‫ا ن اﻉ‬+‫< ه‬L‫ و‬، OP E A$ IP Y‫ﺱ‬E‫ وا‬FFFF[0]h ‫ﻉان‬$
BIOS (Basic Input Output System)‫ ت‬Q‫ا" و‬#‫
= ا‬Q ‫ وا‬FFFF[0]h ‫ اﻉان‬#L BAQ ‫اآة‬+‫ا‬
O<GE‫ ا‬+E‫ ا‬yJO$ BIOS‫ ت‬Q‫ه رو‬#‫ﻉ‬$ ‫أ‬#Q . ROM ‫اآة‬+‫ ا‬
- Ah p‫ ذ‬#‫ﻉ‬$ BIOS ‫ ت‬Q‫ رو‬Q .K[ KQ‫ﺱب و‬J$ PE‫ة ا‬0K1T‫< آ ا‬L ‫  اﻉف‬$
: E‫اآة وه‬+‫ ا‬

‫ا‬$ -"‫و‬L <L AhE‫ ا‬X+‫ي ه‬JQ : Interrupt Services Table ‫ﻉت‬CAE‫ ا‬#' ‫ول‬#1 -1
. ‫اآة‬+‫  ا‬00000h ‫ اﻉان‬- ‫اء‬#$‫ ا‬p‫ وذ‬، ‫ﻉت‬CAE‫ت ا‬#'
‫ة‬#"#L ‫“` ﻉ<ت‬Q‫اآة و‬+‫ ا‬- 00400h ‫ اﻉان‬#L ‫أ‬#Q Ah ‫ وه‬: BIOS ‫ ت‬h‫ ﻉ‬Ah -2
.‫ﺱب‬J$ h JE‫ة ا‬0K1T‫ ا‬-L

‫< ﻩ‬L ‫ر‬D‫  ﺡل اﻉ‬+ O‫ ا‬A  ‫اص‬ST‫ت ا‬S‫ص ام  ﺱا‬S -L p‫ ذ‬#‫ﻉ‬$ BIOS ‫ ت‬Q‫” رو‬JQ
‫ و‬io.sys - O<E‫'  ا‬T‫ ا ا‬EJ" . ‫ص‬A‫ ا‬p‫د  ذ‬1E‫ ا‬bootstrap Q‫ا‬+‫ ا‬0 OJ‫ ا‬$ ‫إ‬
io.sys # ‫ "ﻉ‬. io.sys  + O‫ا" ا‬#$ hA ‫ إ‬hA + O‫ ا‬A"‫اآة و‬+‫ص إ ا‬A‫ ا‬- msdos.sys
 <'‫ا‬#‫ ا‬DOS ‫ ت‬h‫اول ﻉ‬#1  'T‫ – ا‬K" . msdod.sys ‫ إ‬X‫ور‬#$ + O‫ ا‬A"‫اآة و‬+‫•ﻉﻩ  ا‬Q
+O"‫ص و‬A‫ ا‬- config.sys ^<E‫أ ا‬A" `x ‫ﻉت‬CAE‫ت ا‬#' -"‫و‬L ‫ول‬#1 - ‫ص <م‬G‫ﺱ` ا‬A‫وا‬
autoexec.bat ^<E‫ أوا ا‬+O ‫ ﺱ‬X‫ور‬#$ ‫ي‬+‫ ا‬command.com ‫ إ‬+ O‫ ا‬msdos.sys A" ‫ أ' ا‬.X‫أوا‬
.‫ ﺡ‬QOE‫ ﺡ ا‬- <'#E‫ ت ا‬h‫ﻉ‬E‫ ا‬oS‫وا و"ا‬T‫” ا‬J K"‫و‬
.‫ي‬# <A‫"` ا‬#A‫ ا‬DOS ‫ﺱ م‬$ ‫ﻉ‬C ‫ا‬+‫ه‬

Loading System Program

‫< ﻩ‬L # ‫ وﺡ‬BhA - com $ ^(" . com ‫ و‬exe "+ O‫ اا ا‬- - x‫ ا‬- L DOS ‫` ام‬L#"
‫  واا‬#G‫ <ا ا@ ة ا‬o‫ وه ع ﺱ‬.‫س‬#=E‫ ت وا‬h‫ﻉ‬E‫ت وا‬E <‫ة اﻉ‬O `“" ‫أن‬
.‫اآة‬+‫  ا‬E AE‫ا‬
<L) ‫س‬#=E‫ ت وا‬h‫ﻉ‬E‫ت وا‬E <‫ة اﻉ‬O BhA ‫@< ه‬O BCA - ^(Q K exe ‫ا‬$ ‫أ‬
."#1 D‫آ‬T‫ اا ا‬o‫ﺱ‬Q ‫ أ'ى( وه‬BCA ‫ "=ن هك‬#S... ST‫ا‬
‫م‬A" ‫ي‬+‫ ا‬command.com EJ‫ ا‬$ ‫ 'ﻻل‬- - A$‫ اﺱ‬- L‫ آﻻ ا‬B ‫<  اﻉ‬EL DOS -M"
- L‫ آﻻ ا‬B ‫ﻉ<ﻩ‬Q ^<G ‫ ﺱ‬Bh$‫ و‬.`=J‫ﻩ ا‬E <‫ﺱ‬Q S ‫اآة‬+‫ي إ ا‬+ O‫ ا ا‬EJ$
o<C #L EJ‫ ا‬$ ‫ه‬0Y" ‫ط اﻉ"“ ا‬hG‫ﺱﺱﻉض اšن ا‬....EK‫ ﻉ ا'ﻻ‬C o‫ﺱ‬$
.i‫ﺡ‬b mS‫ إ و‬com ‫ت‬O< -L ”"#J‫ ا‬1M‫ وﺱ‬exe ‫ اع‬- $ + OQ

: <"  exe ‫ت‬O< + OQ ‫ات‬h' E


Q

.‫ص‬A‫< ا‬L ‫د‬1E‫ ا‬exe $ ‫ل إ‬P‫ ا‬-1


Program Segment Prefix (PSP) ‫ ا‬BhA N‫د‬$ E‫ﺱ‬Q Ah ‫ء‬$ -2
< ‫ة‬E‫اآة ا‬+‫ ا‬-E• ‫ة‬A ‫ود‬#‫< ﺡ‬L m"$ 256 - ^(Q ‫وا‬
.‫ ة‬PSP Ah #‫ﻉ‬$ ‫ ا‬EJQ -3
PSP BhA ‫ﻉان‬$ ES ‫ و‬DS ‫ﻻت‬Y‫ﺱ‬E‫ ا‬EJQ -4
E <‫žزاﺡ اﻉ‬$ IP Y‫ﺱ‬E‫ وا‬، < ‫ت‬E <‫ة اﻉ‬O BhA ‫ﻉان‬$ CS Y‫ﺱ‬E‫ ا‬EJQ -5
.‫ت‬E <‫ة اﻉ‬O BhA  0 ‫دة‬L ‫ﺱوي‬Q ‫و وا‬T‫ا‬
‫<ب‬hE‫ ا‬stack ‫` اـ‬YJ$ SP Y‫ﺱ‬E‫ وا‬stack ‫ اـ‬BhA ‫ﻉان‬$ SS Y‫ﺱ‬E‫ ا‬EJQ -6
Original Entry Point (OEP) + O‫ا" ا‬#$ hA - ‫اء‬#$‫ إ ا ا‬+ O‫ﺱ< ` ا‬Q -7

b‫ إ‬J J@‫ﺱ ا‬E‫ ` ا‬A$ SS:SP ‫ و‬CS:IP ‫ﻻت‬Y‫ﺱ‬E‫ ا‬1‫ زو‬EJQ A"h‫ ا‬X+K$ `Q #S ‫ﺡ¡ أﻩ‬b
‫ان‬L ‫ﻻن‬EJ" E‫ =ﻻه‬ES B T‫ ا‬p+‫ ت وآ‬h‫ﻉ‬E‫ ا‬BhA ‫ان‬L <L ‫ي‬J" b DS Y‫ﺱ‬E‫أن ا‬
.‫ﺱﻩ‬O$ ES ‫ و‬DS E S -  " ‫ أن‬exe ‫< ا‬L ‫ﺱج أن‬b‫ ا‬-=E" ‫ا‬+‫< ه‬L‫ و‬PSP BhA
. ‫ ت  ا‬h‫ﻉ‬E‫ ا‬BhA ‫ل إ‬P<

Stack ‫
س‬4‫ا‬

 Q  AhE‫ ا‬X+‫ ه‬# OQ .stack L#Q ‫اآة‬+‫زة  ا‬YJ Ah ‫" إ‬+ O‫ج اا ا‬JQ
‫ﺱﺱ‬T‫ ت ا‬h‫ﻉ‬E‫@ ا‬L ‫ل‬C ‫ أن‬E<L ، mSM =
$ ‫ ت‬h‫ﻉ‬E‫ وا‬-"‫ اﻉو‬-"0G ‫اآة‬+‫ ا‬- 0 ‫ﺡ‬
.word ‫ة‬#‫ واﺡ‬E<‫ ه آ‬stack 
‫ إذا‬com ‫ا‬$  p+ 1‫ ﺡ‬b ‫ اﻩ‬b‫  ﺡ ﻩ إ‬exe ‫ا‬$  stack ‫ﻉ"^ اـ‬Q E‫< ا‬L  "
‫ اـ‬BhA "‫ا‬#$ ‫ﻉان‬$ SS BhAE‫ ا‬Y‫ ﺱ‬DOS – K" . £ ‫ﺱ‬#= ^"‫ﻉ‬Q
‫" م ا‬
. J‫ﻩ ا‬E S ‫"ﻩ أو‬K ‫ 
 إ‬stack ‫` اـ‬YJ$ SP Y‫ﺱ‬E‫ – ا‬K" E‫ آ‬،stack

E <‫ﻉ‬...POP,PUSH,CALL ‫ت‬E <‫


=  آﻉ‬$ stack ‫ اـ‬B ‫ت‬E <‫ اﻉ‬- LEY ‫ﻉ‬Q
E<=‫ ا‬p<Q   E S ‫ن‬0JQ‫ه و‬+ OQ #L 2 ‫ار‬#AE$ SP Y‫ﺱ‬E‫"ت ا‬J yAQ ‫ﻻ‬D PUSH
K ‫ ا "
 إ‬E<=‫ ا‬AQ ” ‫< اﻉ=© ﺡ‬L K POP ‫ أ‬. K ‫ "
 إ‬SP ‫ﺡ‬P‫زة ا أ‬YJE‫ا‬
stack ‫ اـ‬ES - EKJ‫` ﺱ‬x stack ‫ اـ‬ES ‫ إ‬BX ‫ و‬AX - <Y‫ﺱ‬E‫ ا‬E S #"0Q‫  و‬BS ‫ إ‬SP
.- <Y‫ﺱ‬E‫© ا‬O ‫إ‬
‫واšن ‪EQ‬ﻉ‪  -‬ا@رة ا ‪...‬هك ‪  0G ` S‬ا‪E‬ﺱ‪Y‬ﻻت اﻉ ا‪T‬ر‪$‬ﻉ ‪ ،‬و"‪ #‬أن ى ذا‬
‫"‪#J‬ث أ‪x‬ء ‪$ + OQ‬ﻉ« اﻉ< ‪E‬ت ا‪E‬ﻉ<‪#=E$ A‬س‪...‬‬
:  ‫ت ا‬E <‫ اﻉ‬h‫اﺱ‬$ o Q‫< ا‬L AX,BX,CX,DX ‫ﻻت‬Y‫ﺱ‬E‫ ` ا‬S O‫ﺡ¡ أ إذا ﺡ‬b
Push ax
Push bx
Push cx
Push dx
:‫ آ‬K‫ﻉ‬1‫ﻉ<  أن ﺱ‬
Pop dx
Pop cx
Pop bx
Pop ax

‫ج‬GQ E S ‫ ه أول‬stack ‫ <ـ‬AQ E S '£ ‫( أي أن‬Last In First Out) LIFO ‫أ‬#E$ ‫ا‬+‫ ه‬E‫"ﺱ‬
Y‫ﺱ‬E‫ ا‬K <L M" b -= ‫دة  ﻩ‬1 AQ stack ‫ اـ‬- KL1‫` اﺱ‬Q ‫ ` ا‬A‫ﺡ¡ أن ا‬b .‫ﻩ‬
. stack ‫ اـ‬K  E" b‫ إ‬oY" - ‫د ﺡ‬1‫ ه ه و‬X‫ "  ذآ‬E ، SP
<L ‫ي‬J" ‫ أي رغ‬underflow ‫ وه  ﺡ‬stack ‫ اـ‬-  E S J‫و ﺱ‬J ‫و ه‬T‫ا‬
( FFFFh E A‫ا‬
‫ي‬JQ SP ‫ )أي‬overflow ‫<–  ﺡ‬E ‫ وه‬stack ‫ <ـ‬E S B‫و د‬J K  D‫ ا‬J‫أ ا‬
 E‫ه‬T‫­ ا‬$ <h p‫ "
= ذ‬. stack ‫ اـ‬B <‫ﻉ‬Q  ‫ر‬+J‫ﻉ« ا‬$ 'Q  " p+‫( و‬0 E A‫ا‬
‫دة‬L‫ ® إ‬L#‫ﺱ‬Q ‫ة‬A‫ل ام إ ﺡ ®  ﺱ‬A‫– وا‬1O h‫ﻉ‬Q ‫ ا  ﺡ‬E‫ﻉ‬
.#"#1 - o‫ﺱ‬J‫ﻻع ا‬S‫ض أو إ‬K‫اﺱ‬

Addressing : 89 :;‫اﻉ?> =< ا‬

K"‫و‬L m‫ﻉ  أآ إذا آ‬O$ ‫اآة‬+‫ت ا‬E<‫ل إ آ‬P‫< ت ا‬EL + OQ x86 ‫ت‬Y‫ﻉ‬E‫ ا‬B h‫ﺱ‬Q
‫
= آ‬$ ‫ﻻ‬D 0012 ‫ ذات ازاﺡ‬E<=‫ل إ ا‬P‫ﻉ ا‬E‫ ا‬B h‫ "ﺱ‬MOV E <‫ﻉ‬Q O  1‫زو‬
‫ان دي‬L ‫ ذات‬E<=‫ ا‬m‫  أ إذا آ‬1‫ا زو‬L p<EQ KT ‫ﻻ‬D AX Y‫ﺱ‬E‫ ة إ ا‬KG‫وﺱ‬
‫ض أن‬O‫ ا ﺱ‬E<=‫ ا‬X+‫ل إ ه‬P< - Qh' ‫ﻉ‬E‫ ا‬+O ‫ ﺱ‬+N#L 0013 ‫آﻉان ازاﺡ‬
: ‫  ا
= ا‬E‫ آ‬KQ"J

‫ﻩ‬P‫ و‬#‫ﻉ‬$ AL Y‫ﺱ‬E‫ إ ا‬0013 ‫ة ذات ازاﺡ‬YJ‫"ت ا‬J ‫ﻉ‬E‫ ا‬±‫و "ﺱ‬T‫ة ا‬hG‫ ا‬
‫ة ذات ازاﺡ‬YJ‫ ا‬±‫ "ﺱ‬K  D‫ة ا‬hG‫ أ  ا‬، 0014 ‫ و‬0012 - ‫زاﺡ‬b‫ ا‬#L - QYJ‫إ آﻻ ا‬
‫@ﺡ‬Q p+$‫ و‬0015 ‫ و‬0014 - ‫زاﺡ‬b‫ ذات ا‬- QYJ‫ﻩ إ آ< ا‬P‫ و‬#‫ﻉ‬$ AH Y‫ﺱ‬E‫ إ ا‬0014
. 0123h ‫ ه‬AX Y‫ﺱ‬E‫"ت ا‬J
X+‫ ه‬m‫ إذا آ‬E  ‫ﻉ‬E$ ‫م‬E‫ إ اه‬b‫ و‬/ "‫د‬O‫ ا‬-L ^<GQ Y$  1‫و‬0‫ ا‬BS‫ا‬E‫ ا‬Y$ ‫ج‬JQ b
BS‫ل إ ا‬P‫<  ا‬EL ‫ن‬b J JP N <L @J‫ ﺱ‬- J‫ آﻻ ا‬O  1‫ د" أم زو‬BS‫ا‬E‫ا‬
.‫ ﺡ‬JP =
$ K<A‫ و‬K$‫ وآ‬KQ‫اء‬S -E“Q ‫اآة‬+‫ت ا‬E<‫آ‬

‫ ت‬h‫ﻉ‬E‫ آ ا‬B •Q ‫^ أو‬P Y‫ا‬$  even E‫ﺱ‬E‫( ا‬directive)‫ ﻩ‬1‫ام ا‬#G‫ اﺱ‬B h‫ﺱ‬
.‫ن ﻉ  أآ <ا‬E“  1‫و‬0‫ ا‬-"‫ ذات اﻉو‬BS‫ا‬E‫اآة  ا‬+‫ ا‬
: Assembling and linking

‫ أو‬masm ‫ آـ‬assembler h‫اﺱ‬$ ‫ ﻉﻩ‬EYQ #L‫ و‬، source code E‫ت "ﺱ‬E <‫ﻉ‬Q - ‫ﻩ‬$=$ ‫م‬AQ 
‫ﻁ‬$ Linkers ‫ اـ‬#‫ام اﺡ‬#G‫ﺱ‬$ ‫م‬A `x ، object code E‫< <^ وﺱ ﻁ "ﺱ‬L @JQ p tasm
.#‫ واﺡ‬.exe ^< <L ‫@ل‬J‫ اﻉ« وا‬K“‫ﻉ‬$ B .obj ‫ت اـ‬O<
: ‫@د‬AE‫•ﺡ ا‬Q  ‫ا@رة ا‬
: <E‫ﺱ‬T‫ا ا‬$ "hQ ‫•ﺡ اﺡ‬Q K  ‫واšن أ ا ا@رة ا‬

.
<E‫ﺱ‬T‫ ا‬$ $=$ ‫م‬A (winasm , radasm , notepad , …) ‫ر‬J ‫ام أي‬#G‫ﺱ‬$ -1
.asm ‫اد‬#$ (D‫< <^ )أو أآ‬L @J‫
وع ﺱ‬E‫¡ ا‬O‫ ﺡ‬#‫ﻉ‬$ -2
‫ت اـ‬O< ‫ <^ أو‬B EY$ ‫م‬A (MASM , TASM , FASM , …) assembler BEY ‫ام أي‬#G‫ﺱ‬$ -3
.asm
^< ‫ )آ‬.obj ‫اد‬#$ relocatable object module, E‫< <^ "ﺱ‬L @J ، B EY‫ ا‬#‫ﻉ‬$ -4
( #‫ واﺡ‬.obj ^< ‫<ﻩ‬$A" .asm
^<E‫< ا‬L @J‫ و‬.obj ‫ت اـ‬O< B E1 ‫ﻁ‬$ (link , tlink , …) linker ‫ام أي‬#G‫ﺱ‬$ ‫م‬A -5
.‫ي‬+ O‫ا‬
.
< 0‫ه‬1 .exe ^< ‫ ه‬Q‫وا‬... K‫ ا‬#S ‫ه‬ -6

p<Q ‫دة‬L‫ ا‬o<h" h' ‫وث‬#‫ن ﺡ‬b...(h' ‫ث أي‬#J" ` ‫ض أﻩ‬O ‫ة آ‬h' ‫ﺡ¡ أﻩ  آ‬b ‫ﻉ‬C
‫ى‬#‫(  إﺡ‬h' ‫وث‬#‫ ﺡ‬-L ‫ "ﻉ‬EK ‫ ؟ آ‬E‫ﺡ‬T‫<ن ا‬$ - EK‫ى اﺱ‬Q ‫ه‬...#"#1 - ‫ة‬hG‫ا‬
... ‫اﺡ‬E‫ا‬
debugger ‫ام‬#G‫ج ا اﺱ‬J K E‫ =ﻩ ` "ﻉ‬.exe ^< <L <@‫( وﺡ‬h' ‫ث‬#J" ` ‫اذا‬...'£ ‫أ‬
 $ ‫م‬A‫( ﻉد <ﺱرس آد و‬hG‫ اآ
ف =ن ا‬#‫ﻉ‬$‫و‬...‫(  ﻩ‬hG‫ ا‬-C ‫ ﺡ ا واآ
ف‬A
.(hG‫ ا‬o‫ي ﺱ‬+‫ا=د ا‬
-L ‫ث‬#JQ ‫ت ا‬bAE‫روس وا‬#‫ ا‬- #"#‫ك اﻉ‬K ‫ﻁ‬$‫ واا‬BEYE‫م ا‬KO  B‫اذا أردت اﺱ‬
...‫ ا‬D‫ل آ‬hQ ‫ورة أن‬#‫ ا‬X+K #"‫ أر‬b A$‫ ﺱ‬m<S E‫ آ‬...‫ا‬+‫ه‬
effective addresses ‫ ا• ﺡ ﺡل اـ‬- #"0

X+‫  ه‬registers ‫ﻻت‬Y‫ﺱ‬E‫ ﻉ` ا‬-= ، m$ 20 - ‫=ن‬Q x86 ‫ت‬Y‫ﻉ‬E‫  ا‬-"‫(ن اﻉو‬$ <S
‫ ر®` أن‬m$ 20 `YJ$ ‫ ذاآة‬-"‫و‬L B ‫ إذن آ ^ ﺱ ` اﻉ‬، m$ 16 - ‫=ن‬Q ‫ت‬Y‫ﻉ‬E‫ا‬
- b#$ - <Y‫ام ﺱ‬#G‫  اﺱ‬-E=" J‫ ؟ ا‬m$ 16 ‫@ ه‬ST‫ ا‬KEY‫ﻻت ﺡ‬Y‫ﺱ‬E‫ا‬
...<=
E‫ ا‬m<‫ ﺡ‬#A $‫ و‬20 - ‫ أي أآ‬m$ 32 EKEY‫ ﺱ" ﺡ‬- <Y‫ﺱ‬E‫ا‬...#‫واﺡ‬

D E <‫ﻉ‬Q + OQ #L ‫ث‬#J"  ‫ ى‬L‫د‬

MOV AX, ES:[BX]

‫ أن‬#" . ( MyWord : ‫ا‬+‫اآة )وﺱ` ا ت ه‬+‫دة  ا‬1  ‫ ت ﻉ‬$ A #" ž ‫ى‬Q E‫آ‬
‫ا اﻉان‬+‫ @^ ه‬- <Y‫ ﺱ‬#G‫ى اﺱ‬Q E= ، MyWord ‫  ﻩ‬#1Q ‫ي‬+‫ﻉ اﻉان ا‬E< ‫د‬#J
: ‫ ه آ‬effective addresses ‫آ ان ا@  اﻉ <ـ‬+Q ، ES:[BX] ‫آ‬
Segment: offset
BX  ‫د‬1 ‫ اﻉان‬- offset ‫ء اـ‬01‫ و‬ES  ‫د‬1 ‫ اﻉان‬- segment ‫ء اـ‬01 ‫ا "ﻉ أن‬+‫وه‬
‫ ا
= ا "•ﺡ‬. AX ‫ إ‬K$ o‫ه‬+"‫ و‬MyWord ‫“ اـ‬J"‫ ا هك و‬o‫ه‬+" ‫ﻉ أن‬E‫ ا‬- #"‫و‬
MOV AX, ES:[BX] E <‫ اﻉ‬+ OQ ‫ء‬x‫ث أ‬#J"  ‫ آ‬
<L ‫ ( وهك‬RAM) ‫اآة‬+‫ى ا‬Q - E ‫ ا‬...‫ﻩ‬Q‫ﻻ‬Y‫ ﺱ‬- ‫ءا‬01 ‫ى‬Q‫ و‬8088 ‫ﻉ‬E‫ى ا‬Q ‫ ا ﺱر‬
‫ت‬LEY ‫ ا‬evenly E‫ﺱ‬A ‫=ن‬Q Segment Adresses ‫ )اـ‬Segment Adresses ‫ اـ‬-"‫و‬L ‫"ﺱره‬
8088 ‫آ أن‬+Q ‫ ذا‬، m"$ 16 ‫أ آ‬#Q ‫ أن‬-=E" ‫ل‬A L‫أو د‬.10h ‫ أي‬m"$ 16 ‫أ آ‬#Q mEY ‫ﺱ‬
-=E" mEY ‫ﺱن أن اﺱ‬J$ +'T$‫ و‬، ‫اآة‬+‫ ا‬- - m"$ 1048576 ‫ – أي‬1mb B ‫=ﻩ اﻉ‬E"
O<G = 65536 ‫ أي أﻩ هك‬، 65536 Q‫ ا‬16 ` ‫ﺱ‬AQ 1048576 ‫ اذن‬، m"$ 16 ‫أ آ‬#Q ‫أن‬
= : ‫ل‬AQ #S . 10h ‫ ه‬mEY ‫ان آ ﺱ‬L - $ ‫ق‬O ‫ى‬Q E‫ آ‬. X#L ‫أ‬#Q ‫ أن‬mEY ‫ <ﺱ‬-=E"
‫< ا ﺱر‬L ‫ ا‬-"‫ ﻉو‬، K‫ب اﺱ‬$ - ‫ﻩ‬L ‫ﺱ ء‬b‫` ا‬Q "K‫  ا‬0 ‫هك‬... 1h ‫ق‬O‫أرى ا‬
‫ آ‬- $ ‫ق‬O‫ ا‬m<S E‫ﻩ آ‬T ‫ا‬OP A ‫'  ﺱ‬T‫ ا‬O@‫ ا‬-= 0B8000h PT$ m‫ آ‬0B800h D
( ‫ﻩ‬L   ‫ا اﺱ‬+ EN‫ دا‬OP ‫ك‬K ‫ اذن‬10h ‫ي "< ﻩ ه‬+‫ان وا‬L

mEY ‫ اﺱ‬-L 02Dh #‫=ن "ﻉ‬E‫ا ا‬+‫ ه‬، ‫اآة‬+$  ‫دة  =ن‬1 KG‫ ﺱ‬#" ‫ ا‬MyWord ‫إن‬
‫ام‬#G‫= اﺱ‬E" ‫ﺡ¡ أﻩ‬b -= . 0B800 : 02D ‫ ه‬MyWord ‫ اـ‬X+‫ان ه‬L ‫ا žن‬+ 0B800h
offset ‫<^ ازاﺡ‬G‫ه ﺱ‬#L 0B801 ‫ ة‬KS ‫ ا‬mEY ‫ اﺱ‬-=‫ و‬، ‫ أ'ى‬mEY ‫ﺱ‬
:  x(‫© ا‬O K  ‫ ا‬-"‫ اﻉو‬B E1 ‫ل أن‬A ‫= أن‬E" $‫ و‬01Dh ‫وﺱ@ﺡ‬
0B800 : 02D
0B801 : 01D
0B802 : 00D
Segment: offset  @$ -"‫ اﻉو‬$‫ آ‬-L...‫ ة‬P ‫ﻻﺡ‬...‫ أو•ﺡ اšن‬mJP‫ أن ا@رة أ‬#AL‫أ‬
...©=K‫< ان ام ه ا‬L ‫ل‬#Q ‫ ا‬- ES‫" ا‬K  h A‫“ ^ اﻻﺡ‬Q b‫ أ‬oY 

.- xb‫ ا‬K"‫و‬L 0' #S -"‫ و أ‬MyWord #1Q -"‫ ﻉ<` أ‬JP‫ اšن أ‬. ‫ ا ا@رة ة أ'ى‬#‫<ﻉ‬
. AX  K‫ وو•ﻉ‬MyWord +'‫<ب و أ‬hE‫ ا اﻉان ا‬o‫ ذه‬#S ‫ﻉ‬E‫ "=ن ا‬E <‫ اﻉ‬+ OQ #‫ﻉ‬$
.‫ﻻ‬D DS ‫' آـ‬£ Segment Register ‫ام أي‬#G‫ اﺱ‬p=ž$ ‫ﺡ¡ أﻩ‬b

. BX,BP,SP,SI and DI  ‫ﻁ‬A ‫ و•ﻉﻩ‬-=E" offset ‫إن اـ‬

References:

1 http://www.arabteam2000.com/
2 Assembly Language: Step-by-Step , Jeff Duntemann

http://www.at4re.com

Arab Team for Reverse Engineering


αλλκο
July - 2006
 ‫
 ا  
 ﻡ ا‬ATRE ‫دورة‬
‫ا
رس ا ا – ات ا  و ا‬
allko

(Logic) !" ‫( وا‬Arithmetic)‫  ام  ا  ت ا‬


.   6 7 (operands) ‫ت‬-. ‫ ت ء  * ا‬0. '‫رس ا* أر‬,‫! ا‬

. flags ‫  اـ‬- : <=,‫ ا‬7>?@ ‫ء د‬,9‫ ا‬79: 

. 1 ‫ أو‬0  !‫ ا‬EPQ=‫ و‬flag * = N 7‫ آ‬، N 16 0 ‫ ه‬70 ‫ا ا‬E‫ن ه‬GH ‫ى‬J6  ‫آ‬
... UJ‫ =ج ا‬. ,U= W‫>" ت و‬. . @. S@‫ أ‬N=‫ة ا  رأ‬J!?‫  ا‬UJ6 ,=‫ أر‬N‫آ‬

• Carry Flag (CF) - this flag is set to 1 when there is an unsigned overflow. For example
when you add bytes 255 + 1 (result is not in range 0...255). When there is no overflow
this flag is set to 0.

• Zero Flag (ZF) - set to 1 when result is zero. For none zero result this flag is set to 0.

• Sign Flag (SF) - set to 1 when result is negative. When result is positive it is set to 0.
Actually this flag take the value of the most significant bit (MSB).

• Overflow Flag (OF) - set to 1 when there is a signed overflow. For example, when you
add bytes 100 + 50 (result is not in range -128...127).

( ‫ئ‬,9  9 7:n‫ )  * ا‬SHJ . S ‫ ا‬. k ‫ا=ت‬J‫ ا‬l:


First group: ADD, SUB,CMP, AND, TEST , OR, XOR

‫( ا‬operands)‫ت‬-. ‫ ا‬S ‫ ا  ت‬zE‫ه‬


REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate

REG: EAX, AX , AL , AH , EBX , etc…


memory: [BX], [BX+SI+7], variable, etc...
immediate: 5, -24, 3Fh, 10001101b, etc...

*  Jˆ‰6 TEST ‫ و‬CMP   6  . ‫ول‬n‫ ا‬7. ‫ ا‬lH  …‫‡†ن دا‬6 0H ، ‫ ا  ت‬zE‫ ه‬,  •
. ‫ء‬lŒ ‫‡†ن أي‬6 W‫!ﻁ و‬H ‫ا=ت‬J‫ا‬
CF, ZF, SF, OF, PF, AF l‫ ا  ت ه‬zES JˆQ6 l‫ا=ت ا‬J‫ا‬ •
mov Ž6 ‫ز أن‬0= W -. ، 0‫ ا‬k?@ . @= ‫Ž أن‬0H two operands ‫ =ن هك‬., •
.0‫ ا‬k?@ .   S@W ecx,ax
 !‫ ا‬zESH ، ‫ى ا  ت‬,‫( •ﺡ‬7. .) operand ‫ آـ‬.  : N=‫ ه أ@ﻩ اذا را‬zJ‫Ž ذآ‬0=  . “=‫أ‬ •
30  !‫ ا‬7! @‫ أ‬l 6 mov ebx,30 -. ، !‫ﺡ‬W ‫ي إذا  = هك‬J– ‫ —م ا‬l‫ه‬
.‫ا‬E‫ وه‬kS 30  !‫ ا‬7!@ l 6 mov ebx,30h   ، ‫ي‬J–
two operands‫  ان اـ‬: @‫ أ‬J‫آ‬E6 . z,=J6 ‫ي‬E‫ ا‬0‫د ا‬,6 ‫Ž أن‬0H ‫ة‬J‫اآ‬E‫ ﺡ ان ا‬lH •
‫ ا " ب‬0 operand ‫أ اـ‬,9@ @H ‫ة‬J‫اآ‬E‫ ﺡ ان ا‬lH ‫ا‬E ، 0‫ ا‬k?@ . @= ‫Ž أن‬0=
‫ة‬J‫اآ‬E‫ ˆ ان ا‬، JŒ‰. ‫ أي‬Pointer ‫>ر ـ‬P‫ ا‬l‫ وه‬ptr ˆ ، byte *‫ أو ﺡ‬word ‫ أو‬dword .‫أ‬
ADD DWORD PTR DS:[ECX],EAX : -.   ‫ ا‬zE‫ ا* ه‬J—@‫ أ‬. (-. DS:[BX] )
SUB AX , WORD PTR DS:[ECX] zE‫أو ه‬

. ‫ول‬n‫ ا‬7. ‫ ا* ا‬l@‫ ا‬7. ‫ ' ا‬0 ‫!م‬6 ADD   6 -1


. ‫ول‬n‫ ا‬. l@‫ ا‬7. ‫ح ا‬J"6 Sub   6 -2
. (‫!ﻁ‬H ‫ا=ت‬J‫ ا‬S JˆQ= 0‫ول ) ا‬n‫ ا‬. l@‫ ا‬7. ‫ح ا‬J"6 cmp   6 -3
‫ول‬,U ‫ أو‬Truth Table ‫ = * ـ‬. S !".   7‫ آ‬. !".   6 zE‫ ه‬. AND   6 ‫ى‬J@ ‫ د‬-4
  l!". ‫ب‬J›   l‫ ا  ه‬zE‫ )ه‬: ‫ ه‬Truth Table ‫ـ‬H AND    9 .!!‫ا‬
( ‫!ﻁ‬H ,‫ وااﺡ‬J?>‫ا‬

1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0

.‫!ﻁ‬H ‫ا=ت‬J‫  * ا‬Jˆ‰6 0‫  ا‬AND ‫!م ﻩ‬6 . k? ‫!م‬6 TEST   6 -5
: l‫ ه آ‬Truth Table ‫ اـ‬، !".   ‫!م‬6 OR   6 -6

1 OR 1 = 1
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0

: l‫ ه آ‬Truth Table ‫ اـ‬، !".   ‫!م‬6 XOR   6 -7


( 1 0H ? ‡. @‫ واذا آ‬، 0 0H S–. ‫ن‬-. ‫)اذا آن ا‬

1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0

Second group: MUL, IMUL, DIV, IDIV

‫( ا‬operands)‫ت‬-. ‫ ا‬S ‫ ا  ت‬zE‫ه‬


REG
memory

*  Ÿ9"= ‫ء‬l–‫ ا‬k?@ . ‫Œرات‬G ‫ب‬J“  IMUL ، ‫ون إŒرات‬, ‫ب‬J“‫ž  ا‬. MUL   6 •
. IDIV ‫ و‬DIV
CF , OF : ‫!ﻁ‬H ‫ا=ت ا‬J‫ان  * ا‬Jˆ‰6 IMUL ‫ و‬MUL   6 •
 H (set to 1) 1  !‫ا= ا‬J‫ ا‬6‫ ه‬7 6 ‫ه‬, ، ‫ت‬-. ‫ ا‬0‫ ﺡ‬. J9‫ أآ‬0‫ن ا‬6 ., H
 !‫ ا‬H‫و‬J . J¡ ‫ا=ت‬JH IDIV ‫ و‬DIV    9 .‫ أ‬. (set to 0) 0  !‫ن ا‬- H  ‫ا ذ‬,
. (undefined)
: l‫ ه‬IMUL ‫ و‬MUL l  6 lH ‫ب‬J“‫ ا‬S‫ =  * أ‬l‫ ا‬,‫ا!ا‬ •

• A byte operand is multiplied by AL; the result is left in AX.


• A word operand is multiplied by AX; the result is left in DX:AX. DX contains the high-
order 16 bits of the product..
• A doubleword operand is multiplied by EAX and the result is left in EDX:EAX. EDX
contains the high-order 32 bits of the product.

-2 * -4 = 8 = 8 h = 1000 b

MOV AL, -2
MOV BL, -4
IMUL BL
; AX = 8 h = 1000 b
1700 * 520 = 0D7D20 h = 11010111110100100000 b

MOV AX, 1700


MOV BX,520
MUL BX
; DX =000D h = 0000000000001101 b
; AX= 7D20 h = 0111110100100000 b

12345678h * 99999999 h = AEC33E18EAD65B8 h =


101011101100001100111110000110001110101011010110010110111000 b

MOV EAX, 12345678h


MOV EBX, 99999999h
MUL EBX
; EDX = 0AEC33E1 = 00001010111011000011001111100001
; EAX = 8EAD65B8 = 10001110101011010110010110111000

H›‫ن إ‬GH 7  ، kS ‫ أ@ﻩ‬l = ‫ا‬ESH h !‫ﺡ‬-‫ ا‬N?›‫ اذا أ‬.‫ ا‬، ‫ي‬J–  ‫ أ@ﻩ‬l = ‫ا‬ESH ‫د آ  ه‬, ‫ ا‬N9‫ أ@ﻩ اذا آ‬¤‫ﺡ‬W
.‫=ري‬9 ‫د‬, ‫ أن ا‬l 6 b !‫ﺡ‬-‫ا‬

(‫ ﻩ‬: ,=J6 . 0  96)  !  ‫ث‬-‫ت ا‬W‫ي =›¦ ا‬E‫ ا‬l‫ول ا‬,0‫  ا‬S H DIV ‫ و‬IDIV    9 .‫أ‬

Size Quotient (YZ‫)ا‬ Reminder (UVW‫)ا‬ Dividend (‫ﻩ‬R ‫م‬T‫)ا‬


Byte AL AH AX
Word AX DX DX:AX
dword EAX EDX EDX:EAX

11CCCEEE44BBBAAA h /33A33A33 = 583EF4DF h = 1011000001111101111010011011111 b

MOV EDX, 11CCCEEE h


MOV EAX, 44BBBAAA h
MOV ECX, 33A33A33 h
IDIV ECX
; EAX = 583EF4DF h = 1011000001111101111010011011111 b
; EDX = 15B96C3D h

Third group: INC, DEC, NOT, NEG

‫( ا‬operands)‫ت‬-. ‫ ا‬S ‫ ا  ت‬zE‫ه‬

REG
memory

ZF, SF, OF, PF, AF : ‫ا=ت ا‬J‫ان  * ا‬Jˆ‰6 INC, DEC   6 •


.‫ا=ت‬J‫ ا‬. ‫  * أي‬Jˆ‰6 W NOT   6 •
CF, ZF, SF, OF, PF, AF. : ‫ا=ت ا‬J‫  * ا‬Jˆ‰6 NEG   6 •

,‫ار واﺡ‬,!  7. ‫!م †=دة ا‬6 INC   6 -1


,‫ار واﺡ‬,!  7. ‫@!ص ا‬G ‫!م‬6 DEC   6 -2
(¦‫ ﺹ‬k ‫ وا‬1 ¦9>= 0 ‫ )اـ‬7. ‫ ت ا‬. N 7‫ آ‬k  ‫!م‬6 NOT   6 -3
. S two's complement ‫ال ا!  ـ‬,9 ‫!م‬6 NEG   6 -4
Fourth group : MOV instruction
‫( ا‬operands)‫ت‬-. ‫ ا‬S   ‫ ا‬zE‫ه‬

MOV REG, memory


MOV memory, REG
MOV REG, REG
MOV memory, immediate
MOV REG, immediate

: ‫!ﻁ‬H ‫ا ه ا  ح‬ESH ، segment register ‫ت‬-. ‫ ا‬,‫ ﺡ آن أﺡ‬lH .‫أ‬

MOV SREG, memory


MOV memory, SREG
MOV REG, SREG
MOV SREG, REG

( destination SU‫ول )ا‬n‫ ا‬7. ‫ ( إ* ا‬source ‫ر‬,> ‫ )ا‬l@‫ ا‬7. ‫!م « ا‬6   ‫ ا‬zE‫ه‬

‫ !م ﻩ‬. ،  ‫ ذ‬7   = ­‫ آ‬,  ‫ف‬J @ W H  .‫¯ آ‬.‫ا‬J9‫ @Ž ا‬... .n‫ ا‬. 7 !‫وا¬ن ا* ا‬
.¯.@J9‫ ا‬7‫ آ‬k‫!ﻁ و‬H z,=J@ . E?= ‫ي‬E‫ه آ اد ا‬

‫ه‬J‫ اŸ ذآ‬J.‫وا‬n‫ ' ا‬U 7 –6 ‫  ا‬.n‫ا‬

9553h+35h=9588h
mov eax,9553h
add eax,35h

111011101b * 100100001b=100001101001111101b
mov eax,111011101b
mul 100100001

01100001 AND 11011111 = 01000001


mov cx,01100001b
and cx,11011111b

‫ف‬J‫ ›' ا‬ ‫ وذ‬. 70. *‫ ا‬. ‫ف‬J ascii ‫  اـ‬: 7!6 ‫ أي أن‬، ‫ف‬J‫ﺡ‬n‫' ا‬. 7. ‫ ا‬  = : —‫ﺡ‬-.
: l‫ ا ل ا‬lH  ‫' آ‬a' : ‫ا‬E‫ ه‬6‫د‬J?. °>6 l.- 

01100001 AND 11011111 = 01000001


mov al, 'a' ; al = 01100001b
and al, 11011111b ; al = 01000001b ('A')
203 / 4 = 50.75
MOV AX, 203 ; AX = 00CBh
MOV BL, 4
DIV BL ; AL = 50 (32h), AH = 3

NEG 5
MOV AL, 5 ; AL = 05h = 0000 0101
NEG AL ; AL = 0FBh (-5) = 1111 1011
NEG AL ; AL = 05h (5)

NOT 00011011b
MOV AL, 00011011b
NOT AL ; AL = 11100100b

 = S@, DS:[2156] ‫ ا ان‬, ‫ة‬J‫اآ‬E‫ ا‬lH ‫دة‬U. 00011011b  !‫ض ان ا‬J? ، ‫ا ا ل‬E‫ ه‬lH
: l‫ ا‬7 

NOT 00011011b
NOT [2156] ; [2156] = 11100100b

...,! 6 ‫ون‬,‫ و‬³9 . ‫ إ=>ل ا‬lH N!H‫ و‬,: ‫ أن أآن‬7.²...‫ درس ام‬lS= ‫ا* ه‬

Assignment:
Write a code that perform the following arithmetic operation : (with minimum instruction)
[ (555AAA h + 10001000100010001 b ) * 666777888 ] / 0E777C h

References:
1- http://www.emu8086.com/
2- http://www.arabteam2000.com/

http://www.at4re.com

Arab Team for Reverse Engineering


αλλκο
August - 2006
 ‫
 ا  
 ﻡ ا‬ATRE ‫دورة‬
‫ا
رس ا –  ت ا – اﺭات‬
allko

...‫" ت ا!  إ  ا ا ات‬#$...  ‫درس ام  ول‬

I- jumping instructions

) .1‫ ا‬2 3‫ء أ‬5 ‫ ا ( ا‬6!. .‫ إن أرد‬0...%$  & ‫ ) !م & ( ا'وا‬#‫ن ا‬+ ,"#$ ‫آ‬
L  ‫ و‬conditional jump ‫ ه(> ا'وا ا   =وط‬,!$... !‫ أوا ا‬78‫ &ا‬9‫ ذ‬6; 0
. unconditional jump ‫=وط‬
... !‫ﺡ‬S ‫ (آه‬8 ‫ه‬L P0‫ أوا ا!  ا=وط وه ك ا‬,‫ ﺡ أه‬2 ‫ﺩول ا‬O‫ا‬

Instruction Description Affected flags


JZ  ‫ ﺹ‬O ‫ ا‬a. ‫ا  اذا آ‬ ZF=1  jump
JNZ . ‫ وي ﺹ‬$ S O ‫ ا‬a. ‫ا  اذا آ‬ ZF=0  jump
JE  ‫ ﺹ‬O ‫ ا‬a. ‫ا  اذا آ‬ ZF=1  jump
JNE . ‫ وي ﺹ‬$ S O ‫ ا‬a. ‫ا  اذا آ‬ ZF=0  jump
JC ‫( او اﺡ ج‬carry out) ‫ رج‬m" 1 ‫ج‬3‫ أ‬MSB ‫ا  اذا اـ‬ CF=1  jump
(borrow) ‫ رج‬m‫اﺡﺩ  ا‬
JNC , ‫( او‬carry out)‫ رج‬m" 1 ‫ج‬m$ , MSB ‫ا  اذا اـ‬ CF=0  jump
(borrow) ‫ رج‬m‫ﺡ ج اﺡﺩ  ا‬

... jne 6; 6P 6#$ jnz ‫ و‬، je 6; 6P 6#$ jz ‫ﻩ ا أن‬1 .‫ا‬
‫  أﺡﺩ‬- ‫ – & |ف‬1 ! ‫  اﺩرس‬yO‫ه(> ا‬...x" borrow ‫ واـ‬carry ‫ﺡ  م اـ‬. ;‫ن د‬w‫وا‬
.0=‫ "ﻩ ا‬، O1" 2&#‫  ا € ا‬afeef ‫اﺩروس خ‬
: carry ‫   م اـ‬0‫ ا‬#&‫ت ا'ر‬S ‫ف اﺡ‬#  2 ‫ﺩول ا‬O‫ ا‬.‫أ‬

1st number 2nd number sum(S) Carry (C)


0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

 ‫ اﺡ‬0 ، 0 ‫  وي‬carry ‫ن اـ‬+ (‫… ا'و‬xP‫… ا'و )ا| ف ا‬xP‫† ا‬O‫ت ا‬S ‫ ﺡ‬2  ‫ى‬$ ‫آ‬
1 ‫  وي‬carry ‫ واـ‬0 ‫(  وي‬sum) ‫ع‬O‫ ا‬. 3 ‫ إذن‬10 ‫) ه ا… ن أي‬$   1 † 1 †5 ‫ ; ﺩ‬#&‫اا‬
( carry :  ; ‫!ل‬. 2"18' & >(‫ وه‬، ‫ & ﺩ واﺡﺩ‬: ‫!ل‬.  # &)
87H+93H ‫ﺩد‬#‫† ا‬5 ‫ى  ا(ي ﺡﺩث ; ﺩ‬. ;‫ن د‬w‫وا‬

87H=10000111 83H=10010011

C C C Carry
st
1 0 0 0 0 1 1 1 1 number
1 0 0 1 0 0 1 1 2nd number
1 0 0 0 1 1 0 1 0 result
ignored MSB LSB

 |& a O ‫ ؟ ا‬ZF (Zero Flag) ‫  اا‬2‫ن  ه‬w‫ وا‬... 00011010 = 1A h 2‫ ه‬O ‫ا‬
. ZF=0 ‫)واﺡ !!! ( اذن‬
‫† اﺩرس‬5‫؟ را‬a; ”‫آ‬...15 O ‫ 'ن ا‬، 0 ‫ ؟ &  “آﺩ‬SF(Sign Flag) ‫  اا‬2‫ن  ه‬w‫وا‬
.%5 ‫ﺩد‬#‫  ﺩل ;" أن ا‬0 ‫ﻩ‬.‫ى إ‬$ ‫ آ‬MSB ‫ ا اـ‬.‫أ‬...‫ا'ول‬
‫ه‬x‫ آ‬، ( MSB ‫ﺩد )اـ‬#‫ ا‬x‫ آ‬2 ‫ة‬3'‫ ا‬. m‫ ا ا‬.‫ ؟ أ‬CF (Carry Flag) ‫ ذا ;  اا‬
. m" 6!  1 ‫ أ اـ‬0 ‫–† اـ‬. ‫ى‬$ ‫ وآ‬، 10 O   1 ‫ و‬1 †5  ‫ ﺡ‬2 ‫ﻩ‬.‫ "  أ‬a" ‫ وﺩ‬، 1  
,‫ ه" > و‬O$ ‫ ه‬0 (‫ ه"ﻩ‬O$ ,$ 2 # ignored ‫ ب‬0 ‫  ﻩ‬6 8‫  & "ن ا'ﺡ و أ‬1 ‫ا  )ه(ا اـ‬
>(‫" آ‬# ..."# ‫ ﺩ ;" ا‬# ‫ ذا؟ ه(ا‬...O ‫ءا  ا‬5 >1 #.
MOV BL , 83H
ADD BL , 87H
"; | ! 8 O ‫ اذن ا‬، ‫ & ت !ﻁ‬8 ‫ﻩ  † ـ‬O‫"م  أن ﺡ‬#‫ و‬BL 2 ‫ن‬m 8 O ‫  أن ا‬$
. Carry Flag ‫ ا‬%‫ (ه‬3'‫ ا‬a1‫ & ت وا‬8
.overflow ‫وه(ا   & م اـ‬

>(‫" آ‬#$ ‫أ‬


MOV BX , 83H
ADD BX , 87H
6& ‫ ه"ﻩ ه‬O .  ، !& ‫ اة ا‬2 > "‫ ه‬O$ ‫( ا(ي‬1) 3'‫ ا‬a1‫ أي أن ا‬overflow  ‫" ﺡﺩث‬
. 100011010 = 10A h ‫) ه‬$ ‫أي أن ا‬...("0= S ‫ أي‬a& 16 ‫  † ـ‬BX ‫ )'ن‬6‫  اﺡ‬y5 >1 # 8
. borrow ‫ف ;"  م اـ‬#  ‫ن‬w‫وا‬

1st number 2nd number sub(S) Borrow (B)


0 0 0 0
0 1 1 1
1 0 1 0
1 1 0 0

...y‫  ﻩ ا‬L ; ‫ج اﺩرس‬m S 2‫ أم & ﺩ  ا ﺡ آ‬

: ‫د‬0‫ى ه(ا ا‬. ;‫ د‬/ ‫ ل‬3

CMP BL,2
JE allko
MOV DX,44
JMP at4re
allko:
MOV BL ,7
at4re:
NOP
‫ ا ( ا‬6! 8 ، ‫ وا‬$ ‫ذا‬+ ، JE £‫ ه ك  ة =و‬,… ، 2 !‫ † ا‬BL .‫ ! ر‬,  ‫ﺩا‬1‫ ا‬2
£ 1& 9‫ ) وذ‬.1‫ ن  ا‬0 ‫ أي‬2 label †‫ و‬0 ‫ى‬$ ‫ آ‬. label ; ‫ رة‬1; ‫ ه‬allko ‫ و‬، allko
.‫ ن‬8‫ ن رأ‬7! & ;1  ‫ﺩ‬$ ‫ ا(ي‬,8S‫ & ا‬0&
‫ ا(ي‬2 ‫ا' ا‬...2#1£ 60=& ‫ ( ا'وا‬$ ) #‫ &† ا‬8 2  &‫ ( ا! ة و‬$  ‫   وا؟‬, ‫ ذا ان‬
. at4re ‫ ا‬label ‫ ا اـ‬£‫ =و‬L ‫ "ﻩ  ة‬. mov dx,44 ‫ ﺡ  ;ﺩم ا واة ه‬2 ( 8
. ‫  (ه‬NOP "# ‫ ا ا‬6! . ,… . ‫ (ه‬$ , ‫ و‬mov bl,7 "#$ ‫ ا‬6| 8 ‫ ﺡ  ا واة‬2 ‫إذن‬
. ‫ (ه‬$ , ‫ و‬nop "#$ ‫ ا‬6| 8 ‫ ﺡ  ;ﺩم ا واة‬2 ‫أ‬
.‫ء‬2¥ 6#& ‫!م‬$ S .‫ أي أ‬no operation ‫ | ر ـ‬3‫ ا‬2‫ ه‬nop "#$

‫ ا‬401200 ) ‫ ذاآة‬x3 †$ ‫ ا‬25H !‫ ا‬6!. 2‫و¦ ﻩ ه‬.. ‫د‬0‫ى ه(ا ا‬. ;‫ د‬/ ‫ ل‬3
:  ‫! ا‬7‫"   ا‬#‫ ه(> ا‬6# ‫ق‬£ ‫ه ك ;ﺩة‬... ( 401208

MOV EAX,25H
MOV ECX,8
BEGINNING:
MOV BYTE PTR DS:[401200+ECX],EAX
DEC ECX
JNZ BEGINNING
RET

¯) ECX 6O‫ ا‬2 8 !‫–† ا‬. ,… EAX 0‫ت و‬xO‫ أﺡﺩ ا‬2 25H !‫–† ا‬. ‫ﺩا‬1‫ ا‬2
6! ‫"ﻩ أ ا‬... BEGINNING ,8 & LABEL ‫ ه ك‬,… ( ‫ﺩاد‬#‫ آ‬ECX ‫ﺩم‬m . ‫ دة أن‬#‫ت ا‬5 0 £¥
2‫( ه‬25 h) "!. ‫د‬. 2 ‫ 'ن ا! ا‬BYTE PTR ‫ﺩم ه‬m ‫( ا‬Directive) ‫ﻩ‬5 ‫ أن ا‬°‫ﺡ‬S ، MOV
‫!" أول ة‬. , 8 25h !‫ن ا‬+ 2  &‫ و‬1 ‫( &!ﺩار‬ECX) ‫ﺩاد‬#‫! ص  ا‬.+& ‫!م‬. ,… . a & ,O‫&ﺡ‬
2  &) ZF=1 ‫ن‬+  |‫ ا ا‬ECX  a"‫ذا وﺹ‬+ £‫ ه ك  ة =و‬,… 401200 + 8 = 401208 ‫ا‬
...>‫ﺩ‬#& ‫ ا ا' ا(ي‬60 8‫ط ا!  و‬¥ €!‫( و  ﺡ‬# ‫!" ا! ا ا' آ ا‬. ‫ن ﺩ‬0.
 ! 8 2  &‫ﺡ!€ و‬$ ‫ اذا ا=ط‬ECX=7 ‫ “ن‬، ‫ 'ول ة‬DEC ECX ( $‫ و‬6!. "; ‫ﺩ أول‬#& †17 & 0..
BEGINNING ‫ا‬
‫ة ; ﺩه‬3'‫ اة ا‬2 6! ‫" ا‬#& ‫!م‬. ‫ا ان‬...‫(ا‬0‫ى وه‬3‫ ة أ‬6! ‫" ا‬#& ‫!م‬.‫و‬
 ‫  ﺡ!€ إذا‬, ‫ ا=ط‬ ‫ إذا‬ZF=1  ‫ إذا‬ECX=0  ‫  إذا‬.‫ن ﺩ ا‬0.‫ و‬401200+0=401200
.6= ‫ م ا‬. ‫( ا‬control) ‫ة‬7‫ أي ا; دة ا‬RETURN 2 # ‫ وه(ا‬RET ‫ وه‬2 ‫ ( ا' ا‬.

.  ‫" ت‬# ‫ ه(> ا‬2 ‫ﻩ‬.‫ﻩ ا أ‬1 .‫ا‬...‫ة‬P0& ‫ﺩم‬m $‫" ت ا!  و‬#$  3³ ‫ء‬5 ‫= ا‬. ‫ أن‬2!&
‫ ( ه‬MSB ‫ )أي‬a& 3³ 1 #$ ‫ أن ه(> ا'وا‬2 # ‫ ه(ا‬. 15 ‫ و إ‬1 8 ‫ رة إ‬¥‫ † أ;ﺩاد ذات إ‬6 # .
.% 8 ‫ﺩد‬#  1 ‫ واذا آ ن  و ـ‬%5 ‫ﺩد‬#  0 ‫ رة  ذا آ ن  و ـ‬¥´‫ ا‬a&

CMP OPERAND 1 , OPERAND 2

instruction description
JG JMP IF OP1>OP2 (JMP IF GREATER)
JNG JMP IF OP1 <= OP2
JL JMP IF OP1<OP2 (JMP IF LESS THAN)
JNL JMP IF OP1>=OP2
JGE JMP IF OP1>=OP2 (JMP IF GREATER THAN OR EQUAL)
JNGE JMP IF OP1<OP2
JLE JMP IF OP1<=OP2
JNLE JMP IF OP1>OP2
¯‫ﺩد و‬#‫ء  ا‬5 ‫ ( ه‬MSB ‫ ) أي‬a& 3³ ‫ أن‬1 #$ 2 15‫ ﺹ & ';ﺩاد ا‬3 2 ‫" ت‬# ‫أ ه(> ا‬
.‫ رة‬¥´‫ ;" ا‬S‫دا‬

CMP OPERAND 1 , OPERAND 2

instruction description
JA JMP IF OP1>OP2 (JMP IF above)
JNA JMP IF OP1 <= OP2
JB JMP IF OP1<OP2 (JMP IF BELOW)
JNB JMP IF OP1>=OP2
JAE JMP IF OP1>=OP2 (JMP IF ABOVE OR EQUAL)
JNAE JMP IF OP1<OP2
JBE JMP IF OP1<=OP2
JNBE JMP IF OP1>OP2

...x" '‫ﺡ ا‬. ;‫د‬


: 2 ‫† ا‬7!‫ ا‬6“$
MOV AL , -1
CMP AL,0
JG SECOND
FIRST:
MOV ECX,3
RET
SECOND:
XOR ECX,ECX
RET

. 1111 1111 : 2  ‫( آ‬a & ,O‫ )&ﺡ‬2y P‫" &   م ا‬P$ ,  -1 ‫إن‬
 ‫ اذا‬، 0  1‫ أآ‬a -1 ‫ واﺡ أن ا=ط   ﺡ!€  ـ‬، 0 ‫ و& اـ‬-1 ‫ & اـ‬.‫ه ك ;" ! ر‬
2 #  RET "#$ ‫ ه ك‬,… ECX=3 ‫ﺡ‬1| MOV ECX,3 "#$ ‫ﻩ ا‬5 8 2  &‫ ( ا! ة و‬$
. ) .1‫ ء ا‬.‫ة ا ا  م وإ‬7‫ ع ا‬5‫إر‬
. JG  S‫ &ﺩ‬JA a‫ﺩ‬m 8‫ ا‬0 €& ‫ ¯ ا‬....2 ‫د ا‬0‫ة ;" ا‬. €‫ أ‬0

MOV AL , -1
CMP AL,0
JA SECOND
FIRST:
MOV ECX,3
RET
SECOND:
XOR ECX,ECX
RET

S >( JA "#  1  & 0 1111 1111 : 2  ‫( آ‬a & ,O‫ )&ﺡ‬2y P‫" &   م ا‬P$ ,  -1 ‫إن‬
‫ء‬5 2‫ ه‬6& ‫ رة‬¥´‫  ﺩل ;" ا‬a MSB ‫ة‬3'‫ ا‬a1‫ اذن ا‬15 ‫ † أ;ﺩاد‬6 # . ‫ ه‬.' -1 2 #$
... 255 ‫ وي‬$ ‫ﺩه‬O 8 ‫ ا ;=ي‬1111 1111 !‫اذن  ﺡ ا‬...,‫ ا‬
XOR ECX,ECX "# ‫ ا ا‬6! 8‫و‬...‫ﺡ!€ ا=ط‬$ ‫اذا !ﺩ‬...‫“آﺩ‬$ 60& ‫ ؟‬0  1‫ أآ‬255 6‫ن ه‬w‫وا‬
..‫دة "  م‬#" RET "#$ ‫ ه ك‬,… ECX=0 6#O 8 2 ‫ا‬

ECX=0 GH IJB JA A B CD NO ، ECX=3 GH IJB JG A A B CD ‫اذن‬


II- variables

. ) .1‫  ا‬.data †7! 2 ‫” ا ات‬#$ ,  . # ,O‫ وﺡ‬,8‫ ا(اآة ﻩ ا‬2 ‫ ن‬0 ‫ا  ه‬
: 2 ‫ﺩول ا‬O‫ ا ا‬.‫أ‬

db Define byte 1 byte = 8 bit


dw Define word 2 byte = 16 bit
dd Define double word 4 byte = 32 bit

: 2  ‫( آ‬xP) 4445h y‫( و&! ا& ﺩا‬xP) word ,O‫( و &ﺡ‬xP) allko ,8 &   ”#$ ,  •
Allko dw 4445h

: 2  ‫ن ا| آ‬0 8 ‫ ؟‬y‫ﻩ أي  ا& ﺩا‬y 7;‫ﺩ إ‬. S 0  ‫ ¯ ا‬. ”#$ .‫ ذا  أرد‬ •
Allko dw ?
 " y‫ﻁ  ا& ﺩا‬#$ , ‫ﻩ اذا‬.‫ أ‬°‫ﺡ‬S..y‫د  ا& ﺩا‬5‫= ا ;ﺩم و‬$ ‫  م‬8S‫ ا‬x;
.data? †7! 2 ‫ ﻩ‬#$ 9"#

: 2  ‫( آ‬array)  | ”#$ 9 0 –‫أ‬ •


xxx dd 7,5,4,8,1
.‫ آ ه واﺡ‬dword ,O‫ ; | &ﺡ‬6‫ ; ﺹ وآ‬5  .0  | ”# &  ‫ه‬
: 2 ‫ ا‬6; 0 xP º P‫ | ا‬#‫و "ﺹل ا ا‬
Add xxx[2],400
...‫(ا‬0‫ وه‬xxx[1] 2. P‫ وا‬xxx[0] ‫ أن أول ; | ه‬°‫ﺡ‬S

,‫ﺩه‬.‫ و‬، a & 6‫ آ‬2 450 y‫& ﺩا‬S‫ﺩ و† ا! ا‬.‫ &  ت  ا(اآة و‬4 O‫ ﺡ‬.‫ أرد‬.‫ ض أ‬ •
: ‫"ﻩ‬# ";  ‫ه(ا‬...,8S‫ ¯ ا‬. a‫ﺡ‬$ #5
Alalme db 450,450,450,450
: 2  ‫ آ‬68‫! أ‬£ ‫ ه ك‬0
Alalme db 4 dup (450)
:2  ‫آ‬...y‫ ء  ا& ﺩا‬7;‫ دون إ‬0 ‫ء‬2=‫ ¯ ا‬. 6; 0
Alalme db 4 dup (?)

: 2  ‫  آ‬#$ 0 ‫أ ا |ص‬ •


X db 'A'
. db ‫ﺩام‬m 8‫ ا‬%O ‫ أي‬، a & ,O‫ ( آ ات &ﺡ‬strings) ‫” ا'ﺡف وا |ص‬#$ %O ‫ﻩ‬.‫ أ‬°‫ﺡ‬S
. $‫ |½  د‬$ 2 x; & & †$ string ‫ أن اﺡف أو اـ‬°‫ﺡ‬S‫و‬

: °‫ﺡ‬S...‫” ﺡف‬#$ ; ”" m S string ”#$ •


msg db 'allko is da best',0
a" #$ ‫ ﺩ‬a ‫إن آ‬... string ‫  ء اـ‬.‫ ا   ﺩل ;" ا‬2 (NULL)  |‫د ا‬5‫ا ق اﺡﺩ ه و‬
.‫ﺡﺩث‬$‫ف ;  ذا أ‬#$ a.“ 61  ‫"ي‬#‫† أي   ت ا ى ا‬

‫ﺩام‬m 8‫ ا‬9 0 (3³ ‫ )أو أي ﺡف‬A ‫  آ & اﺡف‬S‫ﻩ &ﺩ‬.‫ ه أ‬، ‫ ﻩ‬# 9"; %O 3³ ‫أ‬ •
... ASCII ‫ﺩول‬5 2 ‫ا! ا! &" ﻩ‬
Y db 65

(: ‫ ت‬. ‫ ﺡ‬S & €  & 2 ‫ اﺩ; ء‬,0   $‫ أ‬. .‫ن درس ام ﺩ ا‬0 ‫ا ه‬
Assignment:
I- What is the value of the SF , CF , ZF and OF flags after the following code is carried
out?
MOV BX , 81E1 h
ADD BX , 0C0FD h

II- what is the value of EAX after the following code is carried out ?
MOV BX , -5
CMP BX , 5
JA SECOND
FIRST:
MOV EAX,3
RET
SECOND:
AND EAX,0
RET
III- Rewrite the following code without changing what it do.
MOV EAX,25H
MOV ECX,8
BEGINNING:
MOV BYTE PTR DS:[401200+ECX],EAX
DEC ECX
JNZ BEGINNING
RET
IV - define a word-sized variable , named "allko" , with a 8100 h initail value.
V - define a word-sized variable , named "allko2" , without an initail value.
VI – define an array of character , a,b,c and d .
VII – define a string of your choice.

References :
1- www.arabtem2000.com
2- www.emu8086.com

http://www.at4re.com

Arab Team for Reverse Engineering


αλλκο
August - 2006
‫دورة ‪ 
ATRE‬ا  
 ﻡ ا ‬
‫ا
رس ا دس‪ -‬ت ا وران وازا‬
‫‪allko‬‬

‫درس ا م  ث  ت ا وران وازا‪!!, ...‬ول أر)( ت '&‪ # ، %‬ه!ك ا   ‬
‫ا ت ا‪./0‬ى ‪5 6...‬ل  ‪2 3 1! 4‬ا ‪!!,‬ول أه‪...%&' 1‬‬
‫أ‪.!, :‬ض ‪ 78‬ا‪0‬وا‪ .‬ا‪./0‬ى‪...‬‬

‫‪ROL‬‬
‫ه‪2‬ا ا‪ .0‬ه ا‪/‬ﺹر ـ ‪ Rotate Left‬أي  و‪D .‬ر ‪  ...‬أآ‪  .F‬ا ‪M#‬م ' ‪ H#L‬ا  ‪ IJ, K‬آ‪H‬‬
‫‪KP‬ء ) !‪ROL AX,1 2N‬‬

‫‪ROL AX,1‬‬

‫‪Before‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪After‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬

‫‪CF :‬‬
‫‪1‬‬

‫‪ V6‬آ‪ U‬أن ‪  ^ (MSB) S) ./T‬و‪ ].‬و أﺹ‪ I8‬أول )‪ ، (LSB) S‬أ‪d' :‬ن ه‪2‬ا ا ‪ c S8‬ذه‪! `Da S8‬ﻩ‬
‫ا ‪ CF e‬آ ه وا‪.IJ‬‬

‫‪ROR‬‬
‫‪ iNa‬ا ‪.#N‬ة '‪ # ROL   K‬ا ‪.N‬ق أن ا‪ ]5‬ا وران ه ‪   V6 .‬ث ! !‪ 2N‬أ‪.‬‬
‫‪) ROR CH,3‬ه‪2‬ا ا‪ .0‬دل !‪ 2N‬أ‪Mn ROR CH,1 .‬ث ‪.‬ات   (‬

‫‪Before:‬‬
‫‪before 0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪after‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬

‫‪CF :‬‬
‫‪1‬‬
SHL
e ‫ ا‬MSB ‫ ا ـ‬t‫ه‬2‫( و‬LSB e ‫  ا  )إ‬0 'J‫ ^ إ‬.(Shift Left) ‫ر‬D ‫ إزا‬H) ‫ &م‬.0‫ا ا‬2‫ه‬
: ‫ا‬2#‫ أي ه‬. CF

:K  ‫ ^ ا‬SHL DL,1 :  ‫] ا‬2‫ ه‬2N! ! MF'

Before:
0 1 1 1 0 1 1 1

After:
CF:
0 1 1 1 0 1 1 1 0 0

. 2 ‫]( )ـ‬.‫^  و‬, ‫ي‬2 ‫ب ا  د )ا‬.:) ‫ة وا ة &م‬. SHL .‫ أ‬2N! ‫ إن‬...‫ ازا‬.‫ أوا‬K' ‫ ه‬w&a
: K  ‫ ا‬.za‫أ‬
shl ax, 1 ;Equivalent to AX*2
shl ax, 2 ;Equivalent to AX*4
shl ax, 3 ;Equivalent to AX*8
etc…
...‫ب‬.: ‫ ا‬5a ‫ب‬,6 '‫ آ‬SHL .‫ أ‬K' ‫` م‬D ‫ ا‬H5D ‫ن ا‬# ‫ ان‬t5' ، ‫ﻩ‬8a‫ ا‬#

SHR
: V6... ‫ أ‬8 ‫ ا‬iNa

‫ ا ـ‬H H 0 K U‫وآ‬... CF ‫ ا ـ‬e ‫ ا‬LSB ‫ج ا ـ‬.` U‫ آ‬V6... SHR AL,1 : ‫ل‬F ‫ا ا‬2‫ى ه‬.a !‫د‬
... MSB

Before:
0 1 1 1 0 1 1 1

After:
CF:
0 0 0 1 1 1 0 1 1 1

... 2 e ‫ه‬.‫^  و‬, K ‫ ا & ا‬Dc K! ‫ة وا ة‬. SHR .‫ أ‬2N! ‫إن‬

shr ax, 1 ;Equivalent to AX/2


shr ax, 2 ;Equivalent to AX/4
shr ax, 3 ;Equivalent to AX/8
etc…
:  ‫ت‬zM

‫ح‬D .’ ROL AX,3 ‫ أي أن  آـ‬. 1 ‫ )& ار‬6‫ إ‬.‫! ا  و‬# 6 8086/8088 ‫ت‬5  K' •
‫ ت‬e •8w! .0‫ا ا‬2‫ ه‬.!# 1  .F‫ )آ‬.‫ ا  و‬I8‫ أﺹ‬80286 “   ” ) # ، 1)
ROR / ROL / SHR / SHL

ECX c H5 ‫ف‬, ]21'...Sc : ‫د‬.5 K‫ ه‬SHL ECX,32 HF  2N! ‫• إن‬
‫ ل ا ـ‬8D, 1! ‫ ا‬K' ،  ‫  ا‬0 ‫ل‬/‫د‬d) ‫  &م‬H‫  إزا وآ‬32 ‫ﻩ ه!ك‬a0...‫ا‬.N‫ﺹ‬
‫ﺹر‬/). 5! ‫ ا‬iNa e ‫—دي ا‬, SHL ECX,33 HF ' :‫أ‬...‫ا‬.N‫ ﺹ‬32 ‫ )ـ‬ECX K' S) 32
K1' 6‫ ف و إ‬1 ‫ ا‬H5D ‫^ ا‬5  Hc‫ات أ‬. ‫ أن ^ ) د‬t5 ‫ر‬D ‫ن ازا  أو‬d'
. Sc :

‫ﻩ‬a‫ أ‬K! ‫ة‬. 16 BX H5D ‫ ا‬.‫ ' و‬Sc : :‫ أ‬K‫ ه‬ROR BX,16 HF  ‫ن‬d' HF ) •
•8w! 1DNa ‫ة‬.#N ‫ ا‬. ROR BX,1 ™'# ROR BX,17 ‫ أن‬:‫ أ‬V6...e ‫و‬0‫  ﻩ ا‬e ‫د إ‬,
. ROL  e

unsigned K‫ه ه‬.‫^  و‬, K ‫ ا & ا‬Sa‫   آ‬K' (N! 2 ‫ت‬N: e D& ‫•  ا‬
‫ ) ازا‬Sc   K' .‫ن ﺹ‬#  5! ' ‫راة‬P‫ ذات ا‬Sa‫أ ان آ‬..‫رة‬P‫أي ) ون إ‬
K' ] 5D' Kc) ‫ن آن ه!ك‬d' ، 2 e D& ‫ ) ا‬Sc ‫ أي‬، ‫ة وا ة‬. 
. Kc8 ‫ ا‬e ‫( ا ﺹل‬wD ' ‫ة‬.  .F‫( أآ‬D& ‫ت  ازا )أ‬2Na  # ... CF

:   ‫ ا  ا‬2N! ™'# ‫ ه‬SHL AX,8 HF  2N! ‫• إن‬
MOV AH,AL
MOV AL,0

:   ‫ ا  ا‬2N! ™'# ‫ ه‬SHR BX,8 HF  2N! ‫• إن‬
:  ‫ ا  ا‬2N! ™'# ‫ه‬
MOV BL,BH
MOV BH,0
:  ‫ ه ا‬2N!  IJ K ‫ وا‬OLLY “a.)  ‫ذة‬/ ‫] ا ﺹر ا‬2‫ ه‬e ‫ ا‬.za‫ ا‬/ ‫"! ل‬
MOV AX,64
SHL EAX,0C

MASM ‫( آـ‬5 ‫ا“ ا‬.) K' !) HEX ‫م‬z!) ‫ اد‬0‫ض أن ا‬.N' OLLY ‫ آـ‬I&! ‫ا“ ا‬.) K' ‫ﻩ‬a‫ أ‬V6
: K  ‫ آ‬t#' MASM “a.) K' •)D ‫د ا‬# ‫) ا‬# ‫ﻩ‬a‫ أي أ‬. DECIMAL ‫م‬z!) ‫ اد‬0‫ض أن ا‬.N'
MOV AX,100
SHL EAX,12

...‫ت أول  'ﻩ‬.’‫“  و‬a.) IN) Sc U‫ آ‬IJ e ‫و‬0‫ ا ﺹرة ا‬K‫] ه‬2‫ه‬

: F8 ‫واŸن‬

‫ى‬./‫ة أ‬. F8

64 h * 1000 h = 64000 h ‫ (( أي‬C ‫' &ة‬. 2)) ‫ )ـ‬64 h ‫ب‬.:) !c !a‫أي أ‬
100 * 4096 = 409600 ‫(( أي‬12 ‫' &ة‬. 2))‫ )ـ‬100 !).J ، ‫ي‬.L ) ‫أو‬

CALL & RET

....0‫ا ا‬2‫ ة ه‬D)  ‫ ء ا ا‬,‫^ ا‬


. ‫ع ا ا‬a tD 32bit ‫ او‬16bit ‫ل‬w) ‫ع‬3. ‫ !ان ا‬.(stack) ‫ س‬# ‫ ا‬K' ‫ع‬3. ‫( !ان ا‬: call .6‫ا‬

. ‫ع  ا ا‬3. .6‫ا ا‬2‫` م ه‬D ret n .6‫ا‬


. ‫ع  ا ا‬3. ‫ س ! ا‬# ‫ ا‬K' "1Nz!" t5 K ‫( ا‬bytes) ‫ت‬8 ‫  د ا‬HF n ¤. ‫ا‬
ESP H5D ‫ س ا‬# ‫ ا‬.P— .§ •.¨   ‫ت وذ‬8 ‫  ا‬¤N& ‫ ه ا‬Uz! ‫ا &ﺹد ) ا‬
n ‫ ) ون‬ret .6‫ ا‬H5Da ‫ س‬# ‫ ا‬K' ‫ )ت‬Uz! ) ‫&م‬a 6 ‫ ان‬a‫اذا ارد‬

Call function



ret
Assignment:
I - write a code that multiply 62 by 8
II - write a code that divide 4000 by 16
III- what is the value of CF after the following code is carried out

Mov ax,10
Shl ax,12

References:
• http://www.arl.wustl.edu
• http://www.arabteam2000.com

http://www.at4re.com

Arab Team for Reverse Engineering


αλλκο
August - 2006
 ‫
 ا  
 ﻡ ا‬ATRE ‫دورة‬
keygening I - ‫ا
رس ا‬
allko

‫وأود‬...‫ن ارس ا‬0 ‫ أن‬,-(.‫ أ‬..%&'()‫ &*


ا‬keygenerater
‫ه ا ارس ن  ح آ
آ‬
...%&'()‫ @? ا ت آ=ا ; آ ﻩ <; ا‬Goppit ‫ﻩ  ـ‬6.‫ أن أ ا ارس أن أ‬3'4

%@ JK ;‫ 
و‬I‫ر ا‬I‫ ا‬E‫ ﻉ‬3(<
‫ آ‬FG ‫م‬4H 3 keygen 3(‫?م @ﻩ ﻉ‬C ; ‫ أن ه ا ارس‬DC‫أ‬
.
0 KeyGen ‫ اـ‬P- ‫?م‬- (9 ‫ و‬8) % ‫ارس ا‬

CONSOLE
60 )...U C'‫ ا‬R- 3(‫ﻉ‬0 ‫ @ ة اوس‬-‫ @ ة آ‬C T F   ‫ <(&ﻩ‬-< U C'‫ ا&(
أن ا‬D R ‫ﻩ‬-<‫ أ‬
... GUI ‫
اـ‬V(‫
ا‬R6‫ ذات اا‬U‫ ا'ا‬,&< X‫آ‬- -C‫ أ‬,‫ إ‬DC‫أ‬...
V ‫ ت‬R6‫وا‬


0‫?
< د‬0c ‫ =' ﻩ‬J4... WinAsm U C Z'=. ‫م‬X&0 `0‫ أ‬. masm32 U C Z'= ‫?م‬. ‫
ه أن‬0‫ﻩ ا‬6 ‫ﺡ‬C 
: % ‫  ى ا‬new project  h‫ ا‬File
(V 4 ; JK ‫*&ﻩ‬d ‫ن‬e‫وا‬

J4 ‫ ا( ن ا(ﺹ 
اد‬%@ ‫ن‬e‫ وا‬. OK ‫  أو‬C‫*ﻁ ا‬G‫ ا‬JK . Console Application ‫  ر‬h‫ ا‬T&< ‫ى‬. (‫آ‬
%  ‫ (@? ت و‬source code ‫ اـ‬PG‫ آ ن ; ا((; ان ا‬:
s‫ﺡ‬u)
 ‫ ارة ا‬%@ D‫ا‬. ‫ 
اد ا ي‬
: (...%&'()
‫ ا‬,&< ‫ ﻉدوا‬. ‫ ان‬J‫آ‬0‫
; أر‬R 3 paste ‫ و‬copy 3(‫?ا ﻉ‬.
...‫ا‬c ‫ا‬c ‫ اد‬3&‫?م ﺡ‬-

386.
.D*C ; c‫ ه ا اﺱ‬. 80386 U ‫(<
ا ﻉ&( ت ا ﺹ
(ﻉ‬z ‫ﺱ م‬0 ‫ ان‬masm32 '0 c‫ه ا اﺱ‬
.model flat, stdcall
. -z‫ ا‬P(6 %@ * 0 ; `0‫ ا‬c‫ ا اﺱ‬R@ ;}(~‫ ا‬. stdcall ‫ و) <; اـ‬. model ‫ <;  ه
اـ‬J& C ;
option casemap:none
.‫ﺡف‬I‫ ) ح )ﺡ? (  ن ﺡﺱ 
ﺡ 
ا‬labels‫ ان اـ‬%-‫ﻉ‬0 c‫ه ا اﺱ‬
include windows.inc
. ( -‫ﻩ ه‬. 0 ‫ ﺡ‬-' ‫ آ‬-CH‫ )وآ‬-& %@ windows.inc ;(` ‫?م‬0 ‫ن‬H masm32 '0
include kernel32.inc
‫ء‬%‫‚ ا‬C
include masm32.inc
‫ء‬%‫‚ ا‬C
includelib kernel32.lib
kernel32.lib ƒ& P -z C ‫ ﻁ‬0 ‫ أن‬linker ‫' اـ‬0
includelib masm32.lib
‫ء‬%‫‚ ا‬C
.data
‫ ت‬C '‫ ا‬Pc?
0‫ ا‬%-‫ﻉ‬.
HelloMsg db "Hello World",0
% u< ;  %‫ ه‬R. 0 ‫ وﺡ‬MsgBoxCaption R(‫ﺡف( ا‬I‫ )&ﺱ&
; ا‬string ƒ0‫?م ﻉ‬C -‫ه‬
( c++ ‫ اـ‬%@ ‫ )آ( ه اﺡ ل‬0 ‫ ـ‬%R -  string ‫ أن اـ‬%-‫ﻉ‬0
0 R- ‫ا‬...‫ﺹ‬- ‫ا‬
CRLF db 00Ah, 00Dh , 0
‫ال‬XC ‫? ن‬0 ‫ وه ذان ا( *ان ﻉ‬CRLF (CARRIAGE RETURN , LINE FEED) J *  ƒ0‫?م ﻉ‬C -‫ه‬
.3‘ ‫ا واﺡا‬c
‫ ا‬d’
ExitMsg db "Enter to Exit",0
.‫ ﻩ‬3K ( c ‫ح‬d “'
.data?
. R
V‫(
ا ا‬4 ) % ‫ ت )ا( *ات( ا‬C '‫ ا‬Pc?
0‫ ا‬%-‫ﻉ‬.
Buffer db ?
.
V‫(
ا ا‬4 ‫ * ‚ ﻩ‬
.code
‫ ي‬- ‫ اد ا‬Pc?
0‫ ا‬%-‫ﻉ‬.
start:

(&‫  ر أي آ‬h‫(; ا‬0...‫
اد‬0‫ ا‬,‫ إ‬. %‫ ن رأ ن( وه‬c?C ‫ ﻉه‬60 ‫ﻩ‬CI) label ;< ‫ <' رة‬start
(&‫آ‬
...u= beginning ‫ى آـ‬h‫أ‬
invoke StdOut , addr HelloMsg
‫د‬C % ‫ ا‬UC ‫ان اﺱ‬-< %R@ addr HelloMsg ‫ أ‬،  string ‫ ر‬R•‫ ا(ﺱ’و
<; إ‬StdOut
‫ دا‬%< ‫ﺱ‬C -‫ه‬
.
‫ اا‬D R ‫ أي أن ه ا ه ا' را  اﺡ‬. RG<
invoke StdOut , addr CRLF
.‫ واﺡ‬c ‫ (?ار‬3‘
‫ ا‬d’ ‫ل‬X-- -C‫ أي ا‬CRLF %‫ ه‬RG‫ﻉ‬- % ‫ ا‬UC ‫ اﺱ‬-‫ه‬...‫ء‬%‫‚ ا‬C
invoke StdOut , addr ExitMsg
.3K ( c ‫ح‬d “'
invoke StdIn , addr buffer,1
) ; ‫ﺹ‬C ‫ ا ?' ل أي‬0C ) ;‫ﺡ‬C P4‫ اا‬%@ .‫ﺹ ; ا(ﺱ م‬-‫ ا ﺹ
 ?' ل ا‬StdIn
‫ دا‬%< ‫ﺱ‬C -‫ه‬
R@ 1 ‫ أ اـ‬.‫ان ﻉودة‬K )‫ﺱ *ق إ‬0 ) UC ‫ن <ض اﺱ‬I ‫*&ﻩ‬. J 0 ‫ @ر‬U C'‫›&“ ا‬I "
@ G‫ اـ "إ‬D ‫ه‬
.‫( واﺡا ; ا(ﺱ م‬character) @‫ ﺡ‬3'? ‫ﺱ‬- -C‫ أ‬,‫ ا‬0 ‫ &ا
وه‬%C =‫ا' را  ا‬

invoke ExitProcess, 0
. 0 ‫ ا' را  اﺡ وه‬RV c<Ÿ ‫?م‬C‫ و‬U C'‫ ء ا‬RCŸ
‫ ا ﺹ‬ExitProcess
‫ دا‬%< ‫ﺱ‬C -‫ه‬
end start
; -‫ 'ﻩ ه‬C ,&<) ¡ 0 (@.,&<)‫ ا‬%@ ‫ ه‬-' ‫ آ‬-C) start -' ‫ آ‬-C‫ ا‬ ‫ )ﺡ‬. U C'‫
ا‬0 RC ,‫ إ‬. D ‫ه‬
. ‫ ن اأ ن‬c?-‫ ون ا‬

D R‫زرار آ‬I‫ ا‬E‫ﻁ اﻉ&ي ﻉ‬0 ‫ ى‬... -z C ‫ب‬zC -<‫ن د‬e‫وا‬

;0‫ ر‬h 3(0 ‫ )ه ا ا ر‬Go All  h‫ ا‬JK ;‫ و‬Make


(V 4 F @ T-(0 ‫او‬..‫ رة‬FG(‫ ا‬Go ALL ‫ زر‬,&< ‫*ﻁ‬G‫ا‬
ƒ& ‫ ا(&; )ا(&ƒ ا)ول‬ ‫ ﺡ‬T- ¡&c. ‫ @ ة‬C T ‫ ﻉ ا`*ﻁ <&ﻩ  ج‬. ( link %C =‫ وا‬assembe ‫ ا)ول‬: ;-K‫ا‬
. WinAsm &z ‚C %@‫ و‬J)‫‚ ا‬- ;&(‫ ا‬ ‫ﺡ‬. ‫ ا?>=< ان‬. (‫ &ƒ اﺱرس آد‬%C =‫ا(وع وا‬
: % ‫  ى ا‬ ‫ن ﻉ اﺡ‬e‫وا‬
GUI

...06 ‫ وع‬F  J4

. ok ‫*ﻁ‬G‫  ا ا‬V ?&. ‫ن ﺡدا‬0 ‫ أي‬default ‫ ه اـ‬Standard EXE ‫ ر‬h ‫إن‬
%@ D‫ا‬. ‫ 
اد ا ي‬J4 ‫  ا‬. message box U C ... - U C ‫ اول‬3(‫?م ﻉ‬-...
›‫
@ ر‬d d Rs. ‫ن‬e‫وا‬
:
 ‫ارة ا‬
U C'‫ ا‬%@ R‫ﺡ‬d J 0 J % ‫ة وا‬0z‫ ا‬cI‫ح @?ﻁ ا‬- ; ...‫ا‬c ‫ا‬c ‫ اد‬3&‫?م ﺡ‬-
.“ ‫اﺱ‬

push MB_OK
. ?‫ﻩ )ﺡ‬-< ‫ ﺡث‬- . MessageBox
‫ ; را ات دا‬P ‫ ا' را  اا‬P@‫ د‬J 0 -‫ه‬
push offset MsgBoxCaption
© =‫ ه ا ه ا' را  ا‬. U‫ ا(ﺱ‬,&<‫ أ‬%@ Rs  % ‫ ا‬string ‫( اـ‬offset) ‫ان‬-< P@‫ د‬J 0 -‫ه‬
push offset MsgBoxText
.%C =‫ ه ا ه ا' را  ا‬. U‫ وﻁ ا(ﺱ‬%@ Rs  % ‫ ا‬string ‫( اـ‬offset) ‫ان‬-< P@‫ د‬J 0 -‫ه‬
push NULL
. 0 ‫ ـ‬R‫(; ا 'ا‬0 .‫ء‬%d ) ‫ ﺹا أو‬%-‫ﻉ‬. NULL
(&‫ آ‬.  ‫ه ا أول را‬
call MessageBox
( stuck ‫ اـ‬%@ ‫; ا' را ات‬0X. J 0)
‫ر ﻉ‬I‫ ا‬R.‫ را ا‬-‫ ا < ء اا
ﻉ ان د@ﻉ‬J 0 -‫ه‬
push NULL
ExitProcess
‫ ا' را  اﺡ ا‬P@‫ د‬J 0 -‫ه‬
call ExitProcess
U C'‫ ء ا‬RCŸ
‫ ا ﺹ‬ExitProcess
‫ دا‬%< ‫ﺱ‬C -‫ه‬

... -z C ‫ب‬zC -<‫ن د‬e‫وا‬


‫ ا(&; )ا(&ƒ ا)ول &ƒ ا(وع‬ ‫ ﺡ‬T- ¡&c. ‫ @ ة‬C T ‫ ﻉ ا`*ﻁ <&ﻩ  ج‬...Go ALL ‫ زر‬,&< ‫*ﻁ‬G‫ا‬
. WinAsm &z ‚C %@‫ و‬J)‫‚ ا‬- ;&(‫ ا‬ ‫ﺡ‬. ‫ ا?>=< ان‬. (‫ &ƒ اﺱرس آد‬%C =‫وا‬
: % ‫  ى ا‬ ‫ن ﻉ اﺡ‬e‫وا‬

!!! ‫' رك‬...‫@ــ‬...T %&'(‫ أ‬U C ‫اذا آ ن ه ا أول‬

z'& % ‫“ اﻉ‬0‫ ت ا‬0 - %@ Xacker ‫ا ? )ت‬4‫او ا‬..%&'(‫ا آ ب ا‬4 @ %C =‫ ا‬c‫ <; اﺱ‬3‫اذا اردت ا  ﺹ‬
“&‫ ﻉ‬0  ‫ اول را‬.Zs‫ را ات آ( )ﺡ‬4 hH. ‫ ه‬- ‫ ا‬% ‫ ا‬MessageBox
‫ ان دا‬.‫ﻩ  ة وة‬.) ?(@
. (‫ @ ة‬-‫ )ا‬U‫ اـ(ﺱ‬D R style ‫ ـ‬

?0~ ‫ ك‬-‫ ه‬. string ‫ان &ـ‬-< ,&< ‫ &ﺡل‬offset ‫ﻩ‬6. - ‫ ا‬-C‫ ا‬ ‫)ﺡ‬... ‫ اد‬,&< 30‫ﻉ‬. 3(‫ﻉ‬- ‫ن‬I‫ا‬
: %  ‫ى آ‬h‫ا‬

push MB_OK
lea eax,MsgBoxCaption
push eax
lea eax,MsgBoxText
push eax
push NULL
call MessageBox

-C @ ‫ى‬. (‫آ‬... ‫ او ›ه‬string ‫ان ـ‬-< ,&< ‫ﺱ م &ﺡل‬. RC‫ أي ا‬load effective address %-‫ﻉ‬. lea
(&‫ﻉ‬. ‫ان‬
(stuck)‫ ا(س‬,‫ ا?(
إ‬T&. P@C JK ;‫( و‬h‫ ا‬3z‫  ر أي ﺱ‬h‫ ا‬T-(0) eax 3z‫ ا(ﺱ‬%@ ‫ان‬-‫ن اﻉ‬XC
. push ‫
ا اـ‬c‫ ا‬
P(z(‫; ﺡ© ان ا‬...%C =‫ ا)&ب ا)ول او ا‬%@ ‫ ) < ء اا
اء‬call ‫ و‬push
?0~ - ‫ ا‬-C‫ ا‬ ‫)ﺡ‬
--(@ ( `0‫ أ‬fasm P(z J<0 R@
' -( ) masm32 ‫ ه‬winasm U C ‫ﺱ ﻩ‬0 ‫( ا ي‬assembler)
: % ‫ ا‬ ‫ )ﺡ‬.
R‫ اﺱ‬,R - %@ %&'()‫ ا‬3‫ﻉ‬z. *‫?م ﺹ‬0 masm32 ‫ @ ن‬P4‫ اا‬%@ .‫ى‬h‫ا ام ﺹ*
ا‬
: ;< ‫ ء‬-* )‫(; ا‬0
push MB_OK
push offset MsgBoxCaption
push offset MsgBoxText
push NULL
call MessageBox

: ‫وه‬...‫ واﺡ‬c‫ ﺱ‬

invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK

‫(ﻉ ت‬z(‫ ا‬P R‫(; ا ا‬0 )‫( و‬directive) ‫ﻩ‬6. ;< ‫ <' رة‬%‫ ه‬invoke
(&‫آ‬...
*‫ ا‬D ‫
ه‬R ‫ ى‬ ‫)ﺡ‬
% ‫ ا‬addr
(&‫ آ‬ ‫` )ﺡ‬0‫ أ‬.‫ ¡ @ﻩ ا' را ات‬. ‫¡ ا ي‬. ‫ ا‬ ‫ )ﺡ‬. masm ‫ 
ـ‬%R@...u= tasm ‫ آـ‬h)‫ا‬
. invoke
*‫ ﺹ‬%@ offset
(&‫ ا ام آ‬T-(0 ) ‫ﻩ‬C‫ ا‬,‫ 'ﻩ إ‬C‫ ا‬. string ‫ان اـ‬-< P@‫ د‬,‫ إ‬.
: %  ‫ آ‬R ‫ى @(; آ‬hI‫ اا
ا‬,&< “'c-0 ‫ء‬%‫‚ ا‬C

invoke ExitProcess,0

...
z -‫‚ ا‬C ,&< -&‫ى ﺡ‬. (‫آ‬...D R R' ‫اﺡ ف ا¯ اﺱ ?
وا‬...¡0z  J4 ‫ن‬e‫ا‬
“'c ‫ و ة‬T‫ﺡ‬C‫ ا‬T‫ ذ‬P ;...= 3R‫ ا‬%R@ invoke ‫?
اـ‬0~ ‫ﺱ م‬- ‫ن @ <ا‬e‫ ; ا‬:
s‫ﺡ‬u
(...=‫ اآ‬J&‫ ﻉ‬. %‫; آ‬.h)‫? ; ا‬0c‫ا‬
MB_OKCANCEL ‫ ـ‬R' ‫ﺱ‬. ‫ب ان‬6 . messagebox ‫(ﻁ اـ‬C ;< ‫ <' رة‬Z&4 (‫ آ‬%R@ MB_OK ‫أ ص‬
‫ب‬6 ‫ن‬e‫ ا‬. cancel ‫ و‬ok ‫ ك‬-‫ ه‬F'‫ @?ﻁ أﺹ‬ok ‫د زر‬6‫ﻩ ل و‬C‫ أ‬z 
-C‫ أي ا‬. + ‫ رة‬dŸ R‫ ا 'ا‬T-(0 or
(&‫ آ‬. MB_YESNO or MB_ICONASTERISK or MB_DEFBUTTON2
‫  ر‬h‫(; ا‬0 ©‫ ﺡ‬winasm 3'4 ; P  T ‫(ﻁ ج‬C 3 T ‫ ء آ‬-‫ﻩ ا‬C‫ ا‬ ‫ )ﺡ‬. ‫
ﻉ‬Ku=‫( ط ا‬CI‫ ا‬--
: ,&< 3‫ اﺱ “  ﺡ‬C ‫ن‬e‫ ا‬.‫( ط ا( @ة‬CI‫ ا‬P(z
(V 4 ; 0. ‫(ﻁ ا ي‬-‫ا‬

‫(ﻁ‬-‫ﺡ(( وا‬I‫اه &ن ا‬. % ‫ )ا‬Hch


C?0‫د أ‬6‫ و‬%-‫ﻉ‬0 %C =‫(ﻁ ا‬-‫ وا‬yes,no ;0‫د زر‬6‫ و‬%-‫ﻉ‬0 ‫ول‬I‫(ﻁ ا‬-‫ا‬... ‫)ﺡ‬
.(...‫ و ﻁ‬,&<I Rs0 ‫م ا ي‬u‫ * ا‬Z(4 :
s‫ﺡ‬u). G‫ر ا( ر ا@ ا‬X‫ ه ا‬%C =‫ر ا‬X‫ أن ا‬%-‫ﻉ‬0 © =‫ا‬
P ‫ﺱ م‬. % ‫ ا‬directives ‫ اـ‬E‫
ا ام ﻉ‬C ‫ ه إ‬R- ;... 0‫ا‬X(‫ ; ا‬0‫ ﻩ اﻉ‬masm P(z ‫ أن‬Z&4
...
C =‫ وا‬,‫و‬I‫ ه ا‬-(R0  =‫أآ‬... ‫ و›ه‬.while ‫ و‬.elseif ‫ و‬.if 3(.
<(z(‫ ا‬D ‫ه‬...‫* ت ا(ﺱ ى اﻉ&ي‬
:%‫ ﻉ‬ ‫)ﺡ‬

The C version : The MASM version:

if (var1 == var2) .if (var1 == var2)


{ ;code goes here
//code goes here .elseif (var1 == var3)
} ;code goes here
else .else
if (var1 == var3) ;code goes here
{ .endif
//code goes here
}
else
{
//code goes here
}
.elseif ‫ﺱ م‬-@ ‫ى‬h‫ ك ﺡ )ت أ‬-‫إذا آ ن ه‬...FG‫ آ( ه وا‬.endif ‫ ـ‬%R -.‫ و‬.if ‫'أ ـ‬. ‫(&
اط‬6
dialog procedure
‫ آ‬%@ ¯‫ ا‬D ‫ ا ام ه‬J 0 (-‫ ارس ا? دم ﺡ‬%@ =‫ ارة أآ‬F` 

Assignment:
I- write a console program that receive the name of the user then print it , like this :

note that the program should take the name then print it followed by the sentence "is da
best" .

II- write a simple message box GUI program.

References:
ARTeam Win32 Assembly for Crackers – Goppit

http://www.at4re.com

Arab Team for Reverse Engineering


αλλκο
August - 2006
 ‫
 ا  
 ﻡ ا‬ATRE ‫دورة‬
keygening II - ‫ا
رس ا‬
allko

... ‫ "ه‬#‫* ) ا( وأزرار و‬+ ,- . ‫"ى آ‬...‫ا م    ا‬
9 ‫ ر‬IJ G‫ﺡ‬... add new Rc "B‫ ا‬Project 9() ,6 ‫وا;ن‬...1 2 ‫ ا رس ا‬4 4 ‫ ا آ‬+‫"و‬56 758‫أ‬
view 9() ,4 X ‫ه"ا‬J explorer bar ‫ ا ـ‬,-  ‫ )ان‬:  ‫ "ى ا‬explorer bar ‫ ا ـ‬4 ‫ﻩ‬84 Q‫أ‬...‫ زر)ء‬9 LM ‫ة‬
explorer "B‫ا‬

Resources ‫ﺹ[ ـ‬M6 2)‫( و‬ASM Files) source code ‫ﺹ[ ـ‬M6 2)..., 2) ,6 ‫ ن‬- ‫"وع ا;ن‬5 ‫ ان ا‬G‫ﺡ‬
:   ‫ "ى ا‬explorer bar ‫* ا ـ‬L‫ أ‬4 ‫ ا;ن‬. (Resources Files)

: 9  ‫ ا ﺹ رة ا‬4 ‫ آ‬fg‫ وأ‬explorer bar ‫ " ا ـ‬de ‫ ا;ن‬. Resources "B‫ا‬

: resources ‫ ا ـ‬9 4   ‫"ى ا‬e ‫"ض أن‬L.. (Add new dialog) ‫ر‬2 ‫ ا‬,6 ‫" أول زر‬B‫وا;ن ا‬
. Dialog ‫ و‬Tool Box "B‫ ا‬view 9() ,6... dialog ‫ا ا ـ‬mI ‫ ر‬6n‫ ا‬j 94k‫" إ‬8 ‫ا;ن‬
. Dialog ‫ و "ﻁ ا ـ‬Tool Box ‫" "ﻁ ا ـ‬Is 

*- w+ fgx4 " de ‫" ا وس‬y6 ‫ ان‬G‫ﺡ‬z .‫زرار‬n‫ ا‬94ku ‫ص‬B ‫ وه‬ToolBox ‫ "ﻁ‬4 ‫ر‬2 ‫ ا‬,6 ‫" دس زر‬B‫ا‬
.*Ln‫ ا‬4 ,- ‫ و‬dialog ‫ ا ـ‬,6 ‫ن‬-6 ‫ أي‬4 ‫"م ا }ر‬2 ) . + 96z+
:   ‫* ا‬-5  fg‫ﻩ أ‬8‫ أ‬G‫ﺡ‬z

:   ‫"ى ا‬24 explorer bar ‫ة ا ـ‬m48 4 6‫أ‬

98B "B .‫ص ﻩ‬B ID ‫ ﻩ‬resource *-4...‫ص  }ر‬M ‫ ا‬ID ‫ ه ا ـ‬98B 9 8~...‫ "ه‬de ...‫ ا‬98B ‫ ه‬98B ‫أول‬
9 - ‫ ا‬X- : 9s‫ﺡ‬z6) . hello : ,- ‫م واآ‚ أي ء و‬z- ‫ ا‬X26‫"ه وا‬B‫ ا‬.‫ ا }ر‬w+ ‫ ب‬- ‫م ا‬z- ‫ ه ا‬Caption
"Is ‡68" assembling and linking *+ + ‫ﻩ‬8‫"‚ إ ا‬# *-5 "Ise ‫ أن ا ﺡ"وف  ف‬,6 #" ‫ ا‬w+ 9 " 
. (  *-5 9 " ‫ ا‬9 - ‫ا‬
dialog ‫ وﻁ ا ـ‬4 ˆ "6 ‫ وا;ن ار‬. edit "‫ﺹ‬+ ‫ر( وه‬2 ‫ ا‬,6) ‫"ﻁ‬5 ‫ ا‬4 "‫ﺹ‬+ ˆ ‫" را‬B‫ وا;ن ا‬toolbox ‫ ا ـ‬w ‫ د إ‬8
. ‫ ق ا }ر‬4
) #‫ر‬4 ‫"آﻩ‬e‫ ب وا‬- ‫م ا‬z- ‫ ا‬f26‫ وا‬text ‫ﺹ" أ وه‬+ "B‫" أ‬B‫ ا‬explorer bar ‫ ا ـ‬,6 ‫( وا;ن‬edit) ""‫ﺡ‬e ˆ "6 ‫ ر‬IJ G‫ﺡ‬ze
‫ن‬x ‫ ﻩ "ى‬+ ‫ن‬-6 ‫ أي‬4 "‹8‫ا‬... dialog ‫ " ﺡŠ ا ـ‬de X- : 9s‫ﺡ‬z6) *-5 ‫ا ا‬mI dialog ‫ ا ـ‬f‫  ﺹ‬. (  ‚-e
.(‫ء‬5e ‫ " آ‬-e ‫ " او‬d‫  ﺡŠ و) ﺹ‬-‫ﺡ‬e‫ و‬I + ‫ˆ ا وس‬k....‫‹ط‬8 I fg‫ا }وا ا‬

:   ‫ ا‬w+n ‫ "ى‬explorer bar ‫ ا ـ‬,6 (IDD_DLG1001) w+n ‫م ا   د‬z- ‫ " ا‬d8 +‫ا;ن د‬

Caption "‫ﺹ‬+ w ‫ول واذه‚ إ‬n‫ ا‬w+ "‹8‫ ا‬. ""‫" ˆ ا ﺡ‬6 “ ” ‫ ا }ر وا‬8” ‫ وا‬dialog ‫ﺹ" ه ا ـ‬+ ‫أول‬
. hi  – 9‹"˜ ‫™ ا‬L – "B ‫ زرا‬.k‫ أ‬. www.alalame.net/vb : w ‫م ا‬z- ‫ " ا‬#‫و‬
:   ‫ هك زر آ‬Make 9() *L‫" أ‬s8‫ﻩ؟ ا‬4 ‚Š ‫ذي‬m ‫ ا‬4 ‫ذج ه}ة‬8 ,6 dialogs ‫ ا ـ‬94k‫" إ‬e ) ‫وا;ن‬

:   ‫ ا‬X ‫ﻩ ه‬6  ‫ و‬dialog ‫ء ا ـ‬LB‫ ا‬G‫ﺡ‬z . visual mode : off ˆk‫ و‬w ‫‹* ا‬8 ‫آ‬... ,  ‫ﻁ ا }ر ا‬dk‫ا‬

." ”- *I‫ˆ ا "( ا‬k ‫ل ا‬zB ,6 * 4 X z ,- ...9Š6" "˜‫ ا‬9Q 9 ‫ آ‬X- ‫ زر‬94kž ‫إذن‬
. ‫ﻩ وا ﺹ‹ﻩ ه‬M284 ‫ﻩ‬4k‫" إ‬e }‫ ه‬dialog ‫ اذا آن هك‬Q‫أ‬
Project "B‫ ا‬explorer bar ‫* "ﻁ ا ـ‬L‫ أ‬,6 ‫ا;ن‬

"Ise ‫" ان‬8 ‫ ا }ر‬X ‫ ذ‬w+ ‫ﻁ‬dQ8 6+ ‫ﻩ ه‬+ "8 6 ‫ ا;ن‬. untiteled1.asm .6 "B‫ ا‬explorer bar ‫ ا ـ‬w+‫ أ‬4 ‫وا;ن‬
:   ‫ ن آ‬-  ‫ د ا ˜ ب‬- ‫ا‬...j n‫ ا " ˆ ا‬4 9
‫ ف ه‬x6 " # "˜ ‫أول‬...‫ د ˜"ا ˜"ا‬- ‫"ح ا‬x ‫آ د‬

mydialog proto :DWORD,:DWORD,:DWORD,:DWORD

‫ ه Š‚ أن‬Q‫ أ‬، I+(declaration) ‫ن‬z+ž ‫‹ م‬e ‫ Š‚ ان‬4 z”6 function *+ "e 6+ ، ‫"ى‬Bn‫ ا‬9Š6" ‫ت ا‬d 4
~ ,6‫ و‬proto ‫ ا   ﻩ‬,‫ ~ آ‬,6‫ و‬mydialog ‫  ه‬9 (‫ إ"ا‬4"+ "˜2 ‫ا ا‬m‫ ه‬4 . (procedure)9 (‫ اž"ا‬m‫ ه‬,+ ,8
.DWORD=Double Word ‫ ع‬8 ,6 ‫"ات‬6‫"ى  ˆ ا را‬e ‫ وآ‬، 9 (‫ اž"ا‬mI ‫"ات‬6‫ا را‬
. dialogs ‫ " Š ˆ ا ـ‬d , "˜2 ‫ا ا‬m‫ه‬
‫ ف ا   ه‬x ‫ " ا‬# "˜2 ‫ا‬

.data?
hinstance HINSTANCE ?

9 ) I ™  ‫ت ا‬8  ‫ أي ا‬uninitialized data ‫ﺹ[ ـ‬M6 ‫ﻩ‬8‫"ق أ‬L ‫ ا‬,- .data *”6 ‫”ﻩ‬6 ‫ت‬8  ˆ˜‹6 ‫ ه‬.data? ‫إن‬
.9 (‫ ا ا‬9 ) *‫ﻩ  ﺡ‬8‫ أ‬w+ 9 ‫ ؟ د‬96z+ ‫ﻩ‬8Š hinstance " d ‫ن ا‬4 G‫ﺡ‬ze -4 ، 9 (‫ا ا‬

: ‫ ( ه‬c++ ‫ ـ‬92  ) 9 ‫ ا ا‬."e... ‫ ا ﺡدة‬module ‫( ـ‬handle) j‹6 ‫رع‬u ‫‹ م‬e GetModuleHandle 9 ‫ان دا‬

HMODULE WINAPI GetModuleHandle( LPCTSTR lpModuleName );

‫ ـ‬Q‹6 8‫ و    إن أرد‬. ‫ ﻩ‬j‹6 "8 ‫ي‬m ‫ ا‬module ‫ ا ا ـ‬I string w+ (pointer)"y6 ‫ ه‬9 ‫ ا ا‬mI "6‫أي أن ا را‬
 ‫ ﺡ‬4 G‫ﺡ‬ze ‫ آ‬,- ...I + ‫"ا‬y6 ‫"ف‬8 ~ ‡68"  6 ‫ن‬-6 4 ( kernel32.dll ‫ )أي‬string ‫ ا ـ‬m‫}ن ه‬M8 8u4 z”6 kernel32.dll
9 ‫  دا‬e ‫ي‬m ‫ ا‬. ‫أي ا‬...9 ‫ء ا ا‬58‫ إ‬4 ‫م‬M‫ي ا‬m ‫ ا‬. j‹6 ‫رع‬u ‫‹ م‬e 9 ‫ن ا ا‬u4 9 ‫ ا ﺡ‬m‫ ه‬4 .‫"ا‬Lg ‫" آن‬6‫ن ا را‬u4
. eax 4 ‫}ن‬M ˆ" ‫ ا‬j‹ ‫آ" أن ا‬m  " .‫ ﻩ‬4 GetModuleHandle
:   ‫ ( ه آ‬c++ ‫ ـ‬92  ) IL"4 DialogBoxParam 9 8” ‫ ا‬9 ‫ ا ا‬6‫أ‬

int DialogBoxParam(

HINSTANCE hInstance,

LPCTSTR lpTemplateName,

HWND hWndParent,

DLGPROC lpDialogFunc ,

PARAM dwInitParam);

. dialog box ‫ ا ـ‬w+ ‫ي‬m L ‫ ا‬IL6 ‫ ا  ﺡ ي‬module ‫ ـ‬j‹6 ‫ول ه‬n‫" ا‬6‫ا را‬
dialog ‫ا ا ـ‬m‫ ه‬I6 ‫"ع‬Le  ‫ ا‬9 gn‫ة ا‬m4 ‫ أي ا‬. ‫م‬n‫ة ا‬m4 j‹6 “ ” ‫ ا‬. dialog box ‫ ا ـ‬w ‫" إ‬y6 ‫ ه‬8” ‫ا‬
I‹2  “ ‫ )ﺡ‬dialog box ‫ ا  "ر ا ـ‬9 ‹ ‫™ ﺡد ا‬6M ‫ ا‬. dialog box ‫( ا ـ‬procedure)9 (‫ إ"ا‬w ‫" إ‬y6 ˆ ‫ا "ا‬
. WM_INITDIALOG ‫ة‬2 ‫( ا‬9 " ‫‡)ا‬2 ‫ ا‬,6 lParam "6‫ را‬1"­ ,+

: procedure ‫ ا ـ‬Xe ‫ﺡ ت‬6 ‫"ى‬8 +‫ ا;ن د‬.‡68" ‫ء ا‬I8ž ‫ وه‬I‫ "ﺡ‬1 9” ” ‫ ا‬9 ‫ا ا‬

:   ‫ ه آ‬9 (‫ اž"ا‬."e ‫ إن‬.9 (‫ اž"ا‬."e ‫أول ˜" ه‬

INT_PTR CALLBACK DialogProc(

HWND hwndDlg,

UINT uMsg,

WPARAM wParam,

LPARAM lParam );

.*(‫ ر‬1"­ ,+ ‫م‬s ‫ˆ ا‬6 *6 dialog ‫ ـ‬4 . messages ‫ ه‬9 ‫ر‬n‫" ا‬g ‫ ا‬m‫إن ه‬
6‫ أ‬dialog ‫ ا ـ‬w ‫ ا‬9g‫ ا ا‬9 " ‫ ﺡد ا‬8” ‫" ا‬6‫ وا را‬dialog Box ‫ ـ‬j‹6 ‫( ه‬w ‫و‬n 9 " ‫ول )أو ا‬n‫" ا‬6‫ا را‬
,+ 9 4k‫ت إ‬6 6 ‫" ا "ا ˆ ﺡد‬6‫  ”* ا را‬، dialog ‫ ا ـ‬w ‫ ا‬9g‫ ا ا‬9 " ‫ ا‬,+ 9 4k‫ت إ‬6 6 ‫ ﺡد‬4 “ ” ‫" ا‬6‫ا را‬
,6 ‡68" ‫ ا‬1d ‫ أو أن‬-z”6– 6 ‫ زر‬w+ ‫م‬M2 ‫ﻁ ا‬dQ ‫ أن‬X m 8 ,‫ﺡ‬4 9g‫ وا‬9 ‫‹ ل ر‬8 6+ . 9g‫ ا ا‬9 " ‫ا‬
...w+n x ‫زر‬

: MSDN 9-6 4 ‫  د‬6 ‫ آ ه‬SetDlgItemText 9 ‫ دا‬."e ‫وا;ن "ى‬

BOOL SetDlgItemText( HWND hDlg, int nIDDlgItem, LPCTSTR lpString);

 ‫ ا‬string ‫ ا ـ‬w ‫" إ‬y6 ‫ ا ” “ ه‬. [ ‫ي  "ض ا‬m ‫" ﺡد ا ﺹ" ا‬6‫ را‬8~ . dialog box ‫ ـ‬j‹6 ‫" ه‬6‫أول را‬
.Ik"+  ‫ ف‬
‫‚ ا‬-e ‫ أن‬6u4 – ‫ ا وال‬9 ‹ ‫ أو‬m‫ ه‬9 ‫ ا‬92  ‫ ﺡ ا ﺹ" – اء‬1  4 ‫ ران‬B X ‫ﻩ ه‬8‫آ" أ‬m  "
.4 6 ‫ا‬m‫” " وه‬- *I‫ أ‬ID ‫ ا ـ‬9 ‫آ  آ‬x  ...‫ص ﻩ‬M ‫ ا‬ID ‫‚ ا ـ‬-e ‫ أو أن‬، z”6 DC_BUTTON1002 ‫ أي‬، "‫ا ﺹ‬

mL4 "6‫م ه أ‬M2 ‫ ا‬,6 9g‫ ا ا‬9 " ‫¯ ا‬8‫ﻩ اذا آ‬8‫ا  أ‬m‫ وه‬if uMsg==WM_COMMAND. ‫ ه‬9 (‫ اž"ا‬Xe 4 "˜ ‫أول‬
1002 )"‫ ا ﺹ" ذي ا ـ‬,+ ‫درة‬g ، 9g‫ ا ا‬9 " 9  ‫ت ا‬6  ‫¯ ا‬8‫ﻩ اذا آ‬8‫‹ ل أ‬e w ‫و‬n‫ ا‬2 if ‫ هك‬if ‫ ا ـ‬m‫ ه‬,k .9  ‫" ا‬6‫وا‬n‫ا‬
. ( edit ""‫" ˆ ا ﺡ‬6 4 ‫ )أي‬1003 )" ‫ ا ﺹ" ذي ا‬4 msg1 ‫"ض‬e ‫ أن‬I6 ‚­‫ وا‬SetDlgItemText 9 ‫ دا‬+4 <,n‫>ا }ر ا‬
9 ‫ دا‬+4 <"2n‫>ا }ر ا‬1004 )"‫ ا ﺹ" ذي ا ـ‬,+ ‫درة‬g ، 9g‫ ا ا‬9 " 9  ‫ت ا‬6  ‫¯ ا‬8‫ﻩ اذا آ‬8‫‹ ل أ‬e 9 8” ‫ا‬
‫ هك‬, ­"5 ‫ ا‬,‫  هذ‬. ( edit ""‫" ˆ ا ﺡ‬6 4 ‫ )أي‬1003 )" ‫ ا ﺹ" ذي ا‬4 msg 2 ‫"ض‬e ‫ أن‬I6 ‚­‫ وا‬SetDlgItemText
. if *+ Ie  ‫ ا‬endif
:   ‫ ا‬mL4 ‫ق‬z#‫م ه ­‚ إ‬M2 ‫ ا‬,6 ‫ ا ﺹدر‬9 " ‫¯ ا‬8‫ﻩ اذا آ‬8‫ أ‬e m‫ وه‬elseif uMsg==WM_CLOSE. ‫ هك‬X ‫ ذ‬
. if *+ Ie  ‫ ا‬endif ‫ هك‬X ‫ و  ذ‬. dialog box ‫ق ا ـ‬z#u ‫‹ م‬e ‫ ا   ف‬EndDialog 9 ‫ ا ا‬+‫ا‬
.‫م‬s ‫ ا‬w ‫ ˜"ة ا‬2 ‫  ا‬e  ‫ ا‬RET 9 e ‫~ هك‬. 9 ­ ‫˜ ة اﺡ‬M ‫ ا‬m‫ وه‬xor eax,eax . eax *Š2 ‫ " ا‬L‫ ﺹ‬9 e exe ‫ه‬
. 9 (‫ء ا"ا‬I8‫ إ‬96 mydialog end Š8 9I ‫ ا‬4‫و‬

:   ‫"ى ا‬e ‫"ض أن‬L ‫ ( وا;ن‬winasm Š6 ™L8 *QL) ‚6 ‫ن‬-6 4 ‫ت‬L ‫ ا‬GL‫أﺡ‬... w+n‫ ا‬4 Go All ‫ زر‬w+ ‫ﻁ‬dk‫ا;ن ا‬
: (,n‫ ا }ر ا‬w+ ‫ﻁ‬dQ ‫ ذة  ا‬Bx6 ‫ ا ﺹ رة‬m‫)ه‬

´28‫ ا وا‬+‫"و‬56 ‫ء‬µ8‫ أ‬resource  8” ‫ وا‬asm  ‫ول‬n‫ن ا‬L6 ‫‹ت هك‬4" ‫ ا‬4…‫˜ ات  ا‬M ‫"اˆ ا‬4 x˜B X "IJ ‫إن‬
‫ي‬m ‫ زر ا‬w+ ‫ﻁ‬dQ   - ‫ˆ ا‬k ‫ ا‬w ‫‹* ا‬8‫ن ا‬n‫ وا‬new rc "B‫ ا‬make 9() ,6 ~ ‫ رس آ د‬2 ‫ ا‬2) w ‫ ا‬asm .6 ‫ﺡ ت‬6
‫ن "ى‬n‫ ا‬. winasm Š6 ™L8 4 ‫ت‬L ‫ ا‬GL‫ واﺡ‬go all ‫ زر‬w+ ‫ﻁ‬dk‫ ا‬.‫ ا ﻩ‬resource .6 ‫ﺡ ت‬6 ´28‫ وا‬make 9() *L‫أ‬
...14"6 ‫ ه‬6 ˆ6 ‫ آﻩ‬6 98‫ك ‹ر‬x˜B Še ‫ﺡول ان‬...˜B‫ أ‬z 9Š  ‫ا‬

. eL‫ ا ) ا‬8 -e ‫* أن‬6 wI8‫ا ا م ) ا‬mI ‫ ن در‬- ‫ا‬mI ‫و‬

http://www.at4re.com

Arab Team for Reverse Engineering


αλλκο
August - 2006
‫دورة ‪ 
ATRE‬ا  
 ﻡ ا ‬
‫ارس ا
‪keygening III -‬‬
‫‪allko‬‬

‫ ا ر
 ا )ا وا(  أ   آ ا
 ام ‪  winasm‬آ )ا‪ +‬ا
* )(‪...‬ا‪-‬م‬

‪ 0‬آ ﺹ‪ /0‬آ‪....‬وإ ‪ 56
-‬ﻩ أ‪...23‬ا<)ح
‪-:‬ن ﺹﺹ ـ ‪ crackme‬ا‪E‬ي وﻩ ا‪C‬خ‬
‫‪ ColdFever‬آﺡ ي  ‪ 0‬ى ا*)‪ .‬واﺡ‪ / 3‬دي اﺡ ي ‪.‬‬
‫ أ‪-S‬ض آ)ا  ‪Q‬ﺹ‪ P‬آ) اﺡ‪..3‬ﺡ ي ‪ T U‬ا‪6) W .Q...‬ت 
 ‪coldfever‬‬

‫اﺡ ا*) ‪ . olly   +‬آ ‪)Q‬ى ه‪0‬ك دا ‪ . F9 l m/ bp  .401172 0/ GetDlgItemTextA‬أد‪ PS‬أي‬
‫ا
 و‪ allko :‬وأي ر‪ o‬و‪ . 123456 :‬ا‪t‬ن ا‪ . register Us‬ه ‪  / o‬ا‪ (F8)*Q . olly 5‬و‪Q  0/‬ﺹ‪ P‬ا‪5‬‬
‫اـ ‪ 0/ CALL‬ا‪-0‬ان ‪ F7 Us 4011B6‬آ )ى ذا ‪ T-3‬ه‪0‬ك‪.‬‬

‫ ا‪ 3‬ه‪0‬ك دا ‪ lstrcatA‬ا


‪ FIT- y2‬إ‪ 5‬ا)‪3‬ل )أي‬
‫إ‪ 5‬ا‪E‬اآ)ة ‪ m3 . (403256 0/‬دا ﺡب ا|‪-‬ل ‪lstrlenA‬‬
‫)‪3‬ن ا|‪-‬ل  ‪ P603 l eax‬إ‪( 403396 5‬‬
‫ه‪6 3 0‬ر  ا|‪-‬ل  ا‪5 6‬‬
‫‪Q‬ﺡ‪ P‬ا‪ 403638 6‬إ‪ EBP 5‬و ا‪ 403396 6‬إ‪. EDI 5‬‬
‫ه‪ 3 0‬ﺡƒ ‪ o‬ا‪‚.‬ت ا‪EDX , EBX , ECX , :‬‬
‫‪EDI , EAX‬‬

‫‪Q‬ﺡ‪ P‬ا‪-</ o)4E6AF4BC6‬ا( ا‪S‬ر ا*)‪(+‬‬


‫‪Q‬ﺡ‪ ‡ P‬ا‪ 6‬وا‪0‬و‪  3 ˆ0 *Q.3‬اﺹ‪P‬‬
‫‪)‰ 3‬ح ‪-‰  3‬ل ا‪-‬زر)‪ .(allko=5‬ا‪t‬ن ‪o ECX‬ﻩ ‪. 2‬‬
‫‪Q 3‬ﺡ‪ P‬أول ﺡ)ف إ‪ xor / P/ 3 l . eax 5‬ﻩ ‬
‫ا‪ 3 l . 4E6AF4BC 6‬ز‪3‬دة ‪ )< EDI‬إ‪ 5‬اﺡ)ف ا ‬
‫‪ l‬إ ‪6‬ص ‪3  0/. ecx‬ﺹ*ﺡ ‪ m0Q ecx=0‬اـ ‪.loop‬‬
‫‪ P6 3‬ا‪ EDX  .0‬ا‪ 5‬ا‪E‬اآ)ة‪ 3 l...‬إر‪T‬ع‬
‫ا‪‚.‬ت ا‪C‬ر ‪ m6‬ا‪ E0Q P*o 6‬اـ ‪. loop‬‬

‫‪ P6 3‬ا‪ .0‬ا‪EAX 5‬‬


‫‪ 3‬د ا*را)ات ا‚‪  l‬ا ‪-6Q .wsprintfA‬م ﺡ‪P3-‬‬
‫ا‪ .0‬ا ﺡﺹ‪ m/ 0‬ا‪ 5‬أﺡ)ف و أر‪o‬م )أي ا‪ 5‬ر‪-‬ز‬
‫‪0
. ( ASCII‬ﺡ ث ‪ m0/‬ﺡ‪...6‬‬
‫ا‪t‬ن ‪ 3‬إ اـ ‪ string‬ا‪ 6‬ا‪0 FIT- 5‬ﺡﺹ‪5/ P‬‬
‫اﺹ‪ s‬ا‪3) (m0‬ل‪.‬‬
‫ه‪6 / Q 0‬ر   ا)‪3‬ل ا ‪ PS‬وا)‪3‬ل اﺹﺡﺡ‪.‬‬

‫ان أول ﺡ)ف  ا‪-‬زر  ا‪ . 4E6AF4BC 6‬ه‪ WE‬اـ ‪ )Q loop‬ﺡ‪ / 5‬د   ا)ات ‪3‬وي ‰‪-‬ل ا‪-‬زر‬
‫‪o‬ﺹ ‪“ . 3‬ذا آن ‰‪-‬ل ا‪-‬زر ‪ ، 5‬ن ه‪ WE‬اـ ‪ )Q loop‬دور‪ Q‬ا‪ ، 0l‬أي ‪ / P/ 3‬اـ ‪ xor‬ﺡ)ف ا‪C‬ول‬
‫وا  ا‪-‬زر‪ / P/ 3 l .‬أ•*ﻩ <) ‪Q‬ﺡ‪-‬ل ا‪ .0‬ا‪).  6‬د ‪ o‬ه‪ –:‬إ‪ 5‬ر‪-‬ز ﺹ‪ s‬اـ‬
‫‪  . ascii‬ا‪ 3 3m0‬إ ه‪ WE‬ا)‪-‬ز إ‪ FIT- 5‬و ﺡﺹ‪ 5/ P‬ا)‪3‬ل‪ .‬ا‪t‬ن د‪ 0/‬ﺹ ا‪  .‬ا‪ 3‬ه‪0‬ك ‪4‬‬
‫أﺡ)ف  أول آ‪3)
P‬ل ‪ ‡s‬ا‪ / )—0‬ا‪-‬زر  ا ‪ PS‬وه ‪. FIT-‬‬

‫ا‪t‬ن •‪ . winasm + ) Ps‬أ <˜ <)و‪ 3 T /‬ا ‪ .‬وا‪t‬ن  ‪ project (o‬ا‪. new rc )S‬‬
‫‪< “ o‬ء ‪) 3 T dialog‬أول زر  ار  •)‪ . (explorer U3‬ا‪t‬ن أ <˜ ) ‪Q‬ﺡ)‪ )3‬و‪‚l‬ث أزرار آ ﺹ‪-‬رة‬
: ‫ا‬

(‫ا‬E:‫ˆ ه‬3  :Q  ‫ ه آ )œ)ه إن‬resource P: ID ‫ أن اـ‬5‫ا *ﻩ ا‬


1001 : ()‫ ا‬dialog ‫اـ‬
1002: ‫ي‬-‫) ا‬3)‫) اﺡ‬
1003: ‫) ا‬3)‫) اﺡ‬
1004: generate ‫زر‬
1005: copy ‫زر‬
1006: exit ‫زر‬

: .:‫د ا‬-‫ آ‬:0 ‫د‬-‫رس آ‬-‫ ا‬o 5‫ه ا‬E0 ‫ن‬t‫ا‬


: ‫ Ÿول أ
|) ه‬Q ‫آ‬
.386
.model flat,std call
option casemap:none

include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib

generating ‫)ى ـ‬S‫ وأ‬dialog ‫واﺡ ة ـ‬...‫ن‬0l‫ ا‬procedures ‫ اـ‬y3)Q m3

mydialog proto :DWORD,:DWORD,:DWORD,:DWORD


generating proto

‫| ا* ت‬6  ‫ن‬t‫ وا‬. 4messages P*6Q 5‫و‬C‫ ا‬0...‫ • ء‬P*6Q  ‫ل‬3)‫ ا‬-Q (‫)ا‬T‫ﺡƒ أن إ‬
: ‫ ا‬03 
.data
special1 db "FIT-",0
special2 db "%d",0

m0/ ‫ﺡ ث‬0


‫ و‬wsprintfA ‫ل أ ا  ﺹ  ا‬3) ‫ر‬C‫ˆ اﺡرف ا‬Q ¥ 5‫و‬C‫ ا‬string ‫اـ‬
: Qt‫ ا‬03 ‫ و‬.data? |6 5‫ن ا‬t‫ ا‬QŸ .6‫ﺡ‬

.data?
hInstance HINSTANCE ?
NameBuffer 32 dup(?)
SerialBuffer 32 dup(?)
mystr 32 dup(?)
3‫ إن أردت ا‬. ‫ آ ه‬m—‫" اﺡ‬s‫ "اﺹ‬WE‫ ه‬. (handle) ‡*6 ‫ ﻩ‬20 ‫ ﻩ‬0
)s ‫ ه‬5‫و‬C‫ا‬
...ª ) ‫ ا‬5/ «‫ ﺡ‬P‫ اﺹ‬
 32 dup('d') ‚ ª*‫ آ‬- . NameBuffer )s ‫ﺹ‬S ª3 32 .‫ ﺡ رœ ﺡ‬.‫ﺡ‬Q  ‫ا‬
‫م‬m
‫‚ ا‬/ : ˆE W 3)   ‫ا‬E‫ ‰* ه‬. d ‫ ﺡ)ف‬32 m ª3 32 .‫ ﺡ ﺡ‬.‫ﺡ‬
‫ أ–  ا)وض‬: ‫Ÿل‬Q ‫ ر‬23‫ أ‬. ‫ • ء‬m – œ‫ أن اﺡ ر‬5/ ‫ ل‬Q ‫  ون ' ' ( ا‬m ‫)ﺡƒ أ‬
: ‫ا‬E:‫ ه‬.‫ˆ ا‬Q : ‫أن‬
NameBuffer db 32 dup(?)
 : . ( db ‫ﺹ‬o‫ )أ‬directive ‫ˆ اـ‬Q / ‫ء‬0s
‫ˆ ا‬0: uninitialized data  P 0 C...:< 
.m*:Q  ‫ك أن‬3“ initialized data ‫ى‬-
T-3  «‫ ﺡ‬.data o
0/ 0
...ªo¯ )s‫ ﻩ آ‬0 ‫ أ ا)ا‬. SerialBuffer «‫) ا‬s‫ ا‬5/ ®*|03 ‫– ا< ء‬
: ‫
|) ا‬C‫ ذˆ ا‬3 . wsprintfA ‫ا
 ام دا‬
.const
IDD_KEYGEN equ 1001
IDC_NAME equ 1002
IDC_SERIAL equ 1003
IDC_GENERATE equ 1004
IDC_COPY equ 1005
IDC_EXIT equ 1006

‫ار‬-‫ و ) ﺡ‬1001 ID ‫ ﻩ اـ‬.:‫ Ÿن زر ا‬.‫ أن *) ا‬-‫  ﻩ ه‬P‫ آ‬0‫( ه‬constants) ª‫ا‬-‫| ا‬6 -‫ا ه‬E‫ه‬
 )s ‫|ء‬/¥ ‫ م‬Q equ ‫ اة‬directive ‫ إن اـ‬. resources ‫ اـ‬6  ‫ا‬E:‫ وه‬ID 1003 ‫ل ﻩ اـ‬3)‫ا‬
: ‫ ا‬03  ‫ن‬t‫ ا‬.error ˆ|
6‫ ا‬WE‫) ه‬s ‫ أي ﺡو‬.+ )*‫ ا‬P/ ‫ال‬-‰ l o

.code
start :
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke DialogBoxParam, hInstance, IDD_KEYGEN, NULL, addr DlgProc, NULL
invoke ExitProcess,eax

‫ء  ا‬/ 
‫ ذˆ ا‬3 . ‫ي‬E0‫د ا‬-:‫ ا‬3‫  ا‬03 )|
l .‫د‬-:‫| ا‬6 0(  0 ‫ أ‬03 )|
‫أول‬
(‫)ا‬T¥‫ ا«
 ي ا‬. kernel32.dll ‫دة ﻩ أي‬-T-‫ ا‬y ‡*6 
‫ﺹر‬S. GetModuleHandle
‫ˆ ا
* اﻩ ـ‬0:3‫ و‬dialog ‫ ا ا
 اـ‬، kernel32.dll y ‡*6 ‫ول‬C‫ ا‬: ‫ر‬C‫ ا*را)ات ا‬. dialog ‫اﺹ ـ‬
(‫)ا‬T‫ إ‬5‫ ا)ا ¯•) إ‬، (‫ة أم‬E T-3  ‫ ﻩ‬C )‫م )ﺹ‬C‫ة ا‬E0 ‡*6 «‫ ا‬، (1001 ‫ اص ﻩ )أي‬ID
)‫® را‬3)‰ / m*6
«‫ )ﺡ‬dialog box ‫ ا
)ر اـ‬6‫ﺡ د ا‬3 –‫ ا‬، dialog box ‫( اـ‬procedure)
.+ )*‫ء ا‬m “ ‫ﺹ‬S ‫ ا ا ا‬. WM_INITDIALOG ‫)ا)
( اة‬+‫  ا‬lParam

. dialog ‫)ا( اـ‬T‫ إ‬:0


‫ن‬t‫وا‬

DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM


.if uMsg == WM_INITDIALOG

.elseif uMsg == WM_COMMAND


mov eax,wParam
.if eax==IDC_GENERATE
invoke GetDlgItemText,hWnd,IDC_NAME,addr NameBuffer,32
call Generate
invoke SetDlgItemText,hWnd,IDC_SERIAL,addr SerialBuffer
.elseif eax==IDC_COPY
invoke SendDlgItemMessage,hWnd,IDC_SERIAL,EM_SETSEL,0,-1
invoke SendDlgItemMessage,hWnd,IDC_SERIAL,WM_COPY,0,0
.elseif eax==IDC_EXIT
invoke SendMessage,hWnd,WM_CLOSE,0,0
.endif
.elseif uMsg == WM_CLOSE
invoke EndDialog,hWnd,0
.endif
xor eax,eax
ret
DlgProc endp

messages ‫‚ث‬l ‫ك‬0‫م ه‬/ P:<.®‫  ا رس ا‬m< ‫دا‬-‫ آ‬ª‫


*® و•)ﺡ‬6 ‫)ى‬S‫ أ•)ح )ة أ‬
‫ أن‬0‫ˆ ه‬0:3 . (‫ )ا* ء‬initialization ‫ﺹ  اـ‬S ‫ وه‬، œ‫)ى ر‬Q ‫ وآ‬5‫و‬C‫ ا‬. 

‫زرق( أ‬C‫ن ا‬-)
o¯ . (6‫)ى ﺡ‬0
‫ )آ‬56
- Ps< ‫د اص‬-:‫أو ا‬...‚ .: icon ‫د اص 
 ام‬-:‫ ا‬2Q
.œ‫)آﻩ ر‬Q‫ا‬
. copy ‫د اص ر‬-:‫  ا‬-‫ ه‬3 .‫) ا‬s‫ر ا‬
.elseif eax==IDC_COPY
invoke SendDlgItemMessage,hWnd,IDC_SERIAL,EM_SETSEL,0,-1
invoke SendDlgItemMessage,hWnd,IDC_SERIAL,WM_COPY,0,0
‫ أن‬:3 .mm‫ آ أ‬msdn 5‫ˆ ا وال Ÿ    أذه ا‬Q ‫  •)ح‬ªo-‫‰ ا‬¥ /‫  دا‬0‫ﺡ‬
(‫ا*را) ا ) ا ا‬...‫ ا*را)ات‬5‫ ا *ﻩ ا‬U6 . msdn ‫ ˆ ـ‬P‫ آ ه وإن أردت اﺹ‬m—‫ﺡ‬Q
. IDC_SERIAL 0‫ ه‬-‫ﻩ وه‬0 ·0 ‫ أن‬3)Q ‫ي‬E‫ن ا‬:‫ ا‬-‫ه‬

: ‫د‬-:‫ أ
ﻩ ا‬W . generate ‫أ زر‬
.if eax==IDC_GENERATE
invoke GetDlgItemText,hWnd,IDC_NAME,addr NameBuffer,32
call Generate
invoke SetDlgItemText,hWnd,IDC_SERIAL,addr SerialBuffer

(IDC_NAME) ‫زر‬-‫ ا‬ESŸ


‫ ا‬GetDlgItemText ‫ء دا‬/ 
‫ ا‬-1 : 03 ‫ ذˆ ار‬5/ Us2‫أي ان ا‬
3 l .‫ واﺡ  ا*را) ا)ا‬-‫ آ ه‬5‫و‬C‫ ﺡ) ا‬32 ‫ ا اـ‬ESŸQ  m *| . NameBuffer  ‫ ﻩ‬Q‫و‬
 ‫ل‬3)‫)ض ا‬Q ‫ ا‬SetDlgItemText ‫ء دا‬/ 
‫ ا‬3 3m0‫ و ا‬، ‫ل‬3)‫ ا‬-Q (‫)ا‬T‫ء إ‬/ 
‫ا‬
.‫ن اﺹﺹ‬:‫ا‬

: (*‫ ا‬/ Pm ‫د‬-:‫ ا‬3- ªo) ‫ل‬3)‫ ا‬-Q (‫)ا‬T“ ‫د اص‬-:‫)ى ا‬0 ‫ن‬t‫وا‬

1 Generate proc
2 mov edi,offset NameBuffer
3 invoke lstrlen, edi
4 cmp eax,5
5 jl NOINPUT
6 invoke lstrcat,addr SerialBuffer,addr special1
7 xor eax,eax
8 xor ecx,ecx
9 invoke lstrlen, edi
10 mov ecx, eax
11 sub ecx,3
12 mov edx,4E6AF4BCh
13 xor eax,eax
14 xor ebx,ebx
15 begin:
16 mov eax,dword ptr [ebx+edi]
17 inc ebx
18 xor edx,eax
19 dec ecx
20 jnz begin
21 invoke wsprintf,addr str3,addr special2,edx
22 invoke lstrcat,addr SerialBuffer,addr str3
23 NOINPUT:
‫‪24‬‬ ‫‪ret‬‬
‫‪25‬‬ ‫‪Generate endp‬‬

‫ا|) ‪ 1‬و ‪-3 25‬ﺡن أ‪ *Q 3‬أ ‪ ˆQ‬ا‪)T¥‬ا( وأ‪... m0Q 3‬‬


‫ا|) ‪-63 2‬م Ÿ‪-0/ ES‬ان ا‪-‬زر  و‪23‬ﻩ  ‪ 3 *œ) edi‬م ‪ P edi‬ه‪ WE‬ا‪m‬م( ‪.‬‬
‫ا|) ‪ / 3 3‬دا ‪ lstrlen‬و‪)•¯ m  3‬ا ا‪ 5‬ا) ‪ +‬اﺹ ‪-‬زر  ‪ .‬ه‪ WE‬ا ا ‪Q‬ﺡ ‰‪-‬ل‬
‫ا) ‪ +‬ا |‪)•¯ m‬ا ‪/‬ﻩ ) ﺡ أ‪0|/‬ه ¯•)ا ‪ 5/‬ا‪-‬زر ( و‪-6Q‬م “‪/‬دة ا|‪-‬ل  ‪. EAX‬‬
‫ا|) ‪3 4‬ﺡﺹ  إذا آن ا)‪3‬ل ا ‪-‰ PS‬ﻩ ا‪ 5  Po‬أم ‪...‬إذا آن ﺹ)ا )أي  ‪ 3‬إد‪S‬ل أي • ء(‬
‫أو آن ا‪ 5  Po‬ن ا|) ‪ 5‬ﻩ ‪) jl Q‬أي ‪  ( jump if low‬ا‪E‬هب ا‪) NOINPUT 5‬ه‪ ª)/ P‬ا‪t‬ن‬
‫ذا ‪o‬ﺹ ت  ا رس ا® ‪ label : -6‬؟ إن ‪ NOINPUT‬و ‪ begin‬ه ن ‪ 5/‬ذˆ( و ا‪-‬ﺹ‪-‬ل ا‪5‬‬
‫ه‪0‬ك
 ‪ E0Q‬ا‪-:‬د ا‪E‬ي ه‪0‬ك‪ T-3  ‰*..‬ه‪0‬ك ه‪ ret Q -‬ا ‪ Q‬ا|)ة ا‪ 5‬ا*) ‪ +‬و‬
‫‪ m0Q‬ه‪ WE‬ا‪)T¥‬ا( ‪.‬‬
‫ا|) ‪ / 3 6‬دا ‪ lstrcatA‬ا
‪ FIT- y2‬ا‪  5‬ا‪ 3‬ا)‪3‬ل ‪.‬‬
‫ا|) ‪ 7‬و ‪-63 8‬ن ﺹ) ‪ eax‬و ‪ mQ ecx‬ا 
 ا‪.m‬‬
‫ا|) ‪ / 3 9‬دا ‪) lstrlen‬ة أ‪)S‬ى ‪ -‬ا|‪-‬ل  ‪‚))) . eax‬ﺡ— ‪ :‬آن ‪:¥‬ن ‪  0/‬ﺡ*‪ 0‬ا|‪-‬ل‬
‫)ة ا‪C‬و‪ 5‬أن ‪2‬ﻩ  ‪... )s‬و  ﻩ آ اﺡ‪  W0.‬ا*) ‪. (((...+‬‬
‫ا|) ‪ P603 10‬ا|‪-‬ل  ‪ eax‬ا‪. ecx 5‬‬
‫ا|) ‪)|3 11‬ح ‪  3‬ا|‪-‬ل ‪).‬ذا ‪ 3‬؟  ‪ !!!  o‚/‬ه‪E:‬ا ‪ 3)3‬ا*)‪ +‬ا
Ÿﻩ !! إ ‪). m‬د ‪ o‬ا‪S‬ر‪(: 3‬‬
‫( ‪ .‬ا|) ‪ 23 12‬ا‪ mQ edx  4E6AF4BCh 6‬ا 
 اﻩ  اـ ‪. loop‬‬
‫ا|) ‪ 13‬و ‪3 14‬ﺹ)ان ‪ eax‬و ‪ mQ ebx‬ا 
 ا‪  m‬اـ ‪. loop‬‬
‫ا|) ‪ 15‬ه‪0
label -‬ﺡ ث ‪0/‬ﻩ  ‪.Po‬‬
‫ا|) ‪ 16‬ه‪  -‬ا‪ 3‬اـ ‪ . loop‬آ ‪)Q‬ى ‪ P6 3‬ﺡ‪3-‬ت ا‪E‬اآ)ة ا ‪-0/‬ا ‪3 m‬وي ‪ ebx+edi‬ا‪4 ، eax 5‬‬
‫‪ ª3‬ف ا)ة ا‪-‬اﺡ ة )أي ‪ . ( DWORD‬ﺡƒ أ ﻩ آ رأ‪ ˆQ ª3‬اﺹ‪“ s‬ن  ‪  T-3‬ا‪ )<3 
-6‬ا‪5‬‬
‫‪-0/‬ان ذاآ)ة ‪-:3 o‬ن ‚ ه‪E:‬ا ]‪ [ecx+8‬أو ه‪E:‬ا ]‪ [3* edi + ebx‬أو أي ﺹ‪ s‬أ‪)S‬ى‪...‬أ ‪: DWORD PTR‬‬
‫‪ DWORD‬ه ا‪S‬ﺹر ‪ double word‬وآ‪Q word P‬وي ‪ ، ª3 2‬إذن ‪Q DWORD‬وي ‪ .ª3 4‬ا *ﻩ ‚ ‪ˆ0:3‬‬
‫أن ‪ :Q‬ا ‪:‬‬
‫]‪mov eax,word ptr [ebx+edi‬‬
‫‪C‬ن ‪ eax‬ﺡ‪.‬ﻩ ‪ ª 32‬أي ‪ ª3 4‬أي ‪ dword‬و  ا|Ÿ أن ‪ P60Q‬إﻩ ‪ . word‬أ‪ 23‬ا‪ Ÿ|S –:‬ﺹ‪s‬‬
‫]‪mov ax,dword ptr [ebx+edi‬‬

*  ‪  – Ÿ|S‬ا‪ ª 32 P6 ®|0‬ا‪ P. 5‬ﺡ‪ .3 .U6 ª 16 .‬أن ‪-:3‬ن اـ ‪ source‬واـ‬
‫‪ destination‬و‪ 3‬ﺡ‪ *‰....‬ه‪E‬ا ‪3‬ﺹ ‪  mov Q‬أ‪)/‬ف إذا  آن ه‪0‬ك ‪Q‬ت ‪)Q‬ج ‪ /‬ه‪WE‬‬
‫ا‪ /6‬ة‪.‬‬
‫‪E )3 T‬آ) أ ‪ 0‬ا‪)S‬ت ‪ ebx‬آ اد ‪-‬زر  ‪...‬ا‪)S‬ت ‪ edx‬آ‪:‬ن ‪ -‬ا‪ ، 4E6AF4BCh 6‬ا‪)S‬ت ‪edi‬‬
‫آ¯•) ا‪ 5‬ا‪-‬زر ‪...‬ذا؟ ‪ 3)— ˆ0:3‬ا‪S‬ر  ‪ :... 3)Q‬ه‪0‬ك ‡ ا‪-2‬ا‪...U‬ﺡول اد ‪: eax /‬‬
‫‪)Q‬ى ﺡ  ﻩ  ا وال — ا وال ‪ mo Q‬ﻩ‪...‬أ ‪  -m ecx‬ا
ﻩ ‪ extended counter‬أي‬
‫ا‪  /‬ا
 اﻩ آ اد‪ edi .‬و ‪ 3 ebi‬ن œ* آ¯•) و  ‪0/ m ...l o m 2Q‬و‪3‬‬
‫ذاآ)ة ‪Em‬ا ه‪ -‬ا* ا‪

C‬ا‪E‬ي د ‪ Intel‬ﺹ‪. (: m/0‬‬
‫ا|) ‪-63 17‬م ‪3‬دة ‪ 6 ebx‬ار واﺡ ‪ .‬ﺡƒ أ ﻩ  ا‪ 3‬آن ‪ )<3 edi‬ا‪ 5‬أول ﺡ)ف )را‪ T‬ا|) ا ( و ‪ebx‬‬
‫‪o‬ﻩ ﺹ) إذن ا‪-.‬ع
<) ا‪ 5‬أول ﺡ)ف‪  :...‬ا ورة ا  اـ ‪ 3) Loop‬أن ‪ l  P‬‬
‫ﺡ)ف و ‪ .3‬ز‪3‬دة ‪ 6 ebx‬ار واﺡ ﺹ*ﺡ ا‪-.‬ع ‪ )<3‬ا‪ 5‬اﺡ)ف ا وه‪E:‬ا‪.‬‬
‫ا|) ‪ 18‬ه‪ -‬أ
س اـ ‪ loop‬وه‪ -‬ا‪E‬ي
‪ -‬ا)‪3‬ل‪ P: xor P/ 3 ‰*...‬ﺡ)ف  ا‪ 6‬ا ‬
‫ ‪ edx‬وه ‪) 4E6AF4BCh‬ﺡ)ف ‪  (T – h‬ا‪“ Q : 6‬ن ا‪—0‬م ا ا
ا<)ي ‪ m03‬‬
‫‪ 0/‬ﺡ)ف ‪) m0: ، F‬ور‪ C 3‬ﻩ  و ‪ )*
m‬ا‪ .‬أن ه‪ WE‬ا‪ 6‬ه ‪—0‬م ‪ decimal‬و– ‪ (. hex‬ﺡƒ‬
‫أن ا‪ 6‬ا‪Q (m0‬ن  ‪. edx‬‬
‫ا|) ‪603 19‬ﺹ ‪ 6 ecx‬ار واﺡ ‪.‬‬
‫ا|) ‪ 20‬ﻩ ‪o‬ة )‪ . (Jump if NOT Zero‬ﺡƒ أن ‪o03 ecx‬ﺹ ‪ Q‬ر‪-....3‬ر ‪Q‬ﺹ*ﺡ ‪o‬ﻩ ﺹ) ‪Á‬ن ‪P.‬‬
‫ا‪‚/C‬م ا‪3 zero flag 5‬ﺡ‪-‬ل ا‪ 5‬ا‪ set -‬أي ‪Q‬ﺹ*ﺡ ‪o‬ﻩ واﺡ د ‪ 5/‬أن ‪  ‚.‬ا‪‚.‬ت‬
‫‪Q Q o‬ﺹ)‪Q ...W‬ﻩ ‪ ˆQ‬ا‪6‬ة ه‪ -‬ا‪ )—0‬ا‪ P. 5‬ا‪‚/C‬م ه‪E‬ا )ا*‡ ‪-63‬ل اـ "را‪  "3‬ل ‪P.‬‬
‫ا‪‚/C‬م ( ه‪ P‬ه‪ set -‬؟ أي ه‪o P‬ﻩ ‪1‬؟ اذا آن   ‪ 
P...6Q  m‬ا*) ‪ +‬وآŸ ‪-T- )œ m‬دة‪...‬أ‬
‫اذا آن  أي ان ‪ P.‬ا‪‚/C‬م ‪  zero flag‬و ‪ reset‬أي ‪o‬ﻩ ‪...6
m “ ، 0‬ا‪ 5‬ا‪3‬؟ ا‪ 5‬اـ ‪label‬‬
‫ا‪ . begin 5‬و
 اـ ‪) loop‬ة أ‪)S‬ى‪ )
...‬ه‪ WE‬ا ورة ا‪ 5‬ان ‪ m03‬ا و‪3‬ﺹ‪ ecx P‬ا‪5‬‬
‫اﺹ)‪...‬‬
‫ا|) ‪ / 3 21‬دا ‪-6Q ... wsprintfA‬م ﻩ ه‪ WE‬ا ا ه‪ -‬أ•*ﻩ  ˆ ا<) إن ﺹﺡ‬
‫ا*)‪...0 o m| ...‬و |‪ :3) Format Control m‬أن ‪-6Q‬ل ‪ P :‬ا<) ‪ ، ( (:‬ه‪E‬ا اـ ‪Format‬‬
‫‪ Control‬ه‪ 0ŸQ ) %d -‬ذا ‪ *Q ،‬ا*) ‪ +‬و
‪ .‬ا*)‪ o +‬ا‪S‬ر‪( ...W‬‬
‫)؟‬SÂ 
‫ر أي ا‬S‫ˆ ا‬0:3 : ‫ل‬-o‫ أن أ‬.3 P‫ )ه‬str3 -‫وه‬...‫ ﻩ‬.0‫ن ا‬0
‫ي‬E‫ن ا‬:‫ ا‬-‫ ه‬m )‫أول را‬
( :(
‫  ﻩ‬edx 0‫<)ه" ان ﺹﺡ ا*) وه ه‬Q ˆ" ‫د‬- ‫ ا‬6‫ ا‬-‫ وا« ه‬Format Contro ‫ اـ‬-‫ را) ه‬l
. Loop ‫ˆ اـ‬Q . ‫ي‬-‫ﺡ‬3 0o ‫آ‬
.( FIT- ‫ل )ا* وء ـ‬3)‫ ا‬5‫ ا‬str3  W S‫ و‬- ‫ﻩ‬/ 0‫  ﺡﺹ‬y23 22 )|‫ا‬
.m‫ •)ﺡ‬Q 24 ‫ و‬23 )|‫ا‬
. procedure ‫ اـ‬3m -‫ ه‬25 )|‫ا‬

: 5‫*‰ ﺡج ا‬...+ )*‫ ا‬m0 ‫ أن‬.3 ‫ن‬t‫و ا‬


end start
!! 
‫)ب وا‬T ‫ن‬t‫وا‬... (+ )*‫ ا‬. –  P23‫ Ÿي ا
 )و‬+ )*‫اﺡƒ ت ا‬. Go All ‫ زر‬Us‫ا‬

: !"#$%‫إ( '& ا‬

.*‫)ف ا‬/‫ و أ‬mod ‫ و–  ت‬U6 xm ‫  ت‬: ‫ﺡ‬. ‫ و‬63)|‫ ا‬ª)T...ˆE ‫ن‬63)‰ ‫ك‬0‫ه‬
!!! U6 )|
‫ أ‬6 ‫ أو‬5 ‫ر‬...‫اد آ)ة‬-‫ آ أآ‬5‫ﺡج ا‬Q ‫ و‬Pm
C‫ واﺡ ة وه ا‬63)‰ ‫
Ÿ•)ح‬
: ‫ ا‬y‫( أ‬include windows.inc P
‫ردة )أ‬-‫ ات ا‬
include ufmodapi.inc
includelib ufmod.lib
: ‫ ا‬y‫ أ‬.code |6  ‫ن‬t‫ا‬
include allko.inc
xmSize equ $ - table

)|‫ا‬...0‫ • ء ه‬: ªo-‫ﺡن ا‬...œ‫ ر‬WM_INITDIALOG 


) ‫د اص‬-:‫ن ا‬: 0‫)آ‬Q 0 ‫آ) أ‬EQ
.ˆ. ) 5‫ ا‬56
- ‫ إ‬ª**‫ ا)
 آ أﺡ‬WE‫ أﻩ  ه‬U6 ، ‫ﺹﻩ‬Q ) /‫ا  دا‬

invoke uFMOD_PlaySong,addr table,xmSize,XM_MEMORY

‫ﻩ‬3  ‫ا‬E‫ه‬...56
-‫ء ا‬m ¥ ‫دا‬-‫ آ‬2 ‫ أن‬WM_CLOSE 
) ‫ن اص‬:‫ن  ا|* أ ﻩ  ا‬t‫وا‬
: ‫ا|) ا‬
invoke uFMOD_PlaySong,0,0,0

‫*ت‬:‫ك ‡ ات وا‬0‫ ه‬. winasm .  ‫ ا<)وع‬ª—‫ﻩ ˆ وﺡ‬o  ª*Q‫
Ÿ)ض أ ˆ ا‬، 0‫ﺡ‬
‫ و‬ufmodapi.inc ‫ و‬ufmod.lib : ‫ وه‬.‫ ا<)وع ﻩ‬ª—‫ي ﺡ‬E‫ ا‬.‫  – ا‬m‫ و‬.3 ‫ا‬
chiptune.inc
y ‫ ا‬5/ Q 063)‰ ‫؟‬y‫ !! آ‬56
-‫ ا‬y -m «‫ أ ا‬. Ä• m )sQ  ‫ول وا‬C‫ا‬
‫ل‬-‫ﺡ‬0
y‫ آ‬: —/ . array of bytes ‫ آـ‬P (  ‫ ا‬63)|‫*ﻩ ا‬Q  ‫ا‬E‫ )ه‬resource ‫ – آـ‬56
-‫ا‬
 l + )*‫ اﺡ ا‬.(thx THigo !)ˆE ‫ﺹ‬S . ) ‫  ا رس‬ª6‫ ؟ أر‬array of bytes 5‫ ا‬56
-‫ ا‬y
.‫)œ ﻩ‬Q 6
- y ‫) أي‬S‫ وا‬load )S‫ ا‬file (o
: 0‫ ه‬W‫)ا‬Q  5‫ ادات ا‬/¥‫ œ) ا‬y‫ ا‬P‫ﺡ‬Q  ‫ن‬t‫ا‬
 16 ‫ و‬0 6‫ أ ا‬.o)‫ – ا‬ª*‫ آ‬size  S  ˆE 27E8 ‫ﻩ‬.‫ ﺡ‬W‫ر‬S  ‫ أ‬ªo ‫ي‬E‫ ا‬y‫ﺡƒ أن ا‬
. go )S‫ن ا‬t‫ وا‬، dump to file ‫ر‬S 5/ ‫‚ ﺹﺡ‬/ ‫ و‬50Q  23‫ أ‬، asm : s‫ر ا‬S‫ ا‬5‫ ا *ﻩ ا‬. ‫)ا‬sQ
(5/C 
‫ا ا‬E‫)  ه‬S‫ ا‬0 C) allko.inc 
 ‫ اﺡ—ﻩ‬l ‫ اﺡﻩ‬table.txt 
 y 5/ P‫ء
ﺡﺹ‬m ‫ ا‬
!!! 56
- 
‫ ا‬. GO all Us‫ن ا‬t‫وا‬

Arab Team for Reverse Engineering


αλλκο
September - 2006
‫دورة ‪ 
ATRE‬ا

   ﻡ ا ‬
‫ا
رس ا – إ  ار )‪ ( jpg & bmp‬ا' & ا‪ $%‬ا‪#‬ﺱ! ‬

‫درس ا م ه ارس ا
  دورة ‪   ! ATRE‬ا  اآز‪...‬ه)ا ارس  !('ول ‪$%‬ث‬
‫‪'+,‬ط ‪:‬‬
‫‪ -‬آ ‪ 0 4‬إ‪/ 01'2‬ر  ‪,‬ع ‪ ، bmp‬وه)‪8' !9 :‬ة و>= <‪0‬‬
‫‪ -‬آ ‪ 0 4‬إ‪/ 01'2‬ر  ‪,‬ع ‪ ، jpg‬وه)‪'!D9 :‬ج ا‪ B‬أآاد  (‪ 0‬ودوال
'‪) 4(! 0/‬ه'‪...‬‬
‫‪ -‬آ ‪ 0 4‬إ‪ Fade In  %E9 01'2‬و ‪. Fade Out‬‬

‫آ ‪ 0 4‬ا‪/ 01'2‬رة ه ‪!1E...0O'P 0Q R> 0 S‬ض أ‪U [!4> WX \,‬وح ‪ OY‬و‪'U,V> WX‬ء‬
‫‪ ...OY dialog‬وا‪d‬ن  ‪O8‬ﻁ اـ ‪) tool box‬ان  ‪'g O‬ها ‪'<g'> +1‬ر‪( view  toolbox  :‬‬
‫ا
! زر ا‪k‬رة‬

‫وا‪p‬ن ﺡك ا‪1 8m‬ق اـ ‪ dialog‬و!‪$‬ﺡ‪ r‬أن ا‪ \(O q D>  P9 8m‬ر ﺡود ا‪k‬رة‪...‬ار‬
‫ﺡودا آ' ‪...O9‬ه)ا ‪:$s‬‬

‫وا‪d‬ن ا‪P2‬ﻁ ‪ BS‬زر اـ ‪: resources‬‬

‫ ‪x‬ج \ >‪ w‬ﺡار ‪ ، OY‬ا‪P2‬ﻁ ‪ add‬وﺡد ‪/‬رة ' ‪ 0>'!> X %‬ا و ‪... '< ID‬ه)ا ‪: $s‬‬
‫‪ %‬ا‪P2‬ﻁ ‪ . ok‬وا‪d‬ن ا‪P2‬ﻁ ‪9 ' BS‬ا‪k'> :‬رة ‪:‬‬

‫‪: %‬‬

‫وا‪d‬ن !‪$‬ﺡ‪ r‬أن ا‪k‬رة ‪<g X‬ت ‪:‬‬

‫‪'R!9 X‬ءل‪ '...‬اا‪ w1‬ا‪  9 B‬آ ‪ 0 4‬ا‪/ 01'2‬ر اـ ‪ ' jpg‬د(' ‪'X‬در‪ BS O‬ا‪/ 01'2‬ر اـ ‪bmp‬‬
‫و>= >‪ 0}'R‬؟  ‪+,‬م >'‪ 01'2‬أآاد ا‪ 0 1'2‬؟‬
‫ﺡ‪ '(R‬ه('ك ~ >‪ R‬ﻁ‪/...‬ر ‪) 0}P€ jpg‬ا ‪'1‬ن ﺡ<' ‪O‬ن ا‪/   s> P/‬ر ‪$s ، bmp‬‬
‫اﺡى ا‪k‬ر ي آ'ن ﺡ<' )‪ †4,  ، 197kb : (bmp‬ا‪k‬رة >‪. 23kb : jpg 0P k‬‬
‫'درا‬X ‫ن‬O  winasm ‫ – وه ان‬jpg ‫ر‬/ ‫ام‬x!‫( ا‬S ‫ – أي‬0'D‫ ا‬:)‫ ه‬1 0Q R> 0U ‫ه('ك‬
0+OQ> p‫ ا‬$s ‹, w> ‫ زر او‬01'2‫ ا‬w Q!R9  '!'>‫ و‬visual Š‫ ا‬w2‫ = ا‬PU9 BS
.‫ ه)ا ارس‬1 '+‫ﺡ‬p :‫ذآ‬E =‫ آ ة وه('ك ﺡ‬0U> WR  :)‫' ه‬S...0O‫و‬O

. Project  add new RC % file  new  standard exe...OY ‫وع‬U ‫'ء‬U,V> X ‫ن‬d‫وا‬
‫ ا'ن‬B‫'ت ا ول ا‬O!D R(> X ، testRC ,'s‫ وا‬test ‫ ا ول‬، ‫ 'ن‬k, ‫'ن‬4 ‫'ت ه('ك‬+1‫ ا‬1
. ‫‹ ﻩ‬kx‫ ا'ن ا‬B‫ ا‬,'s‫'ت ا‬O!D‫ و‬، ‫‹ ﻩ‬kx‫ا‬

: ‫ى‬R ‫ ا  ' ا‬0O‫ ا“او‬1 '!‫ !ى ا‬Go All ‫ﻁ زر‬P2‫ن ا‬d‫وا‬
w€9 ‫ ان‬BR(9 p ، ‫وع‬U‫ ا‬r4D> ‫م‬+9 ‫ ان‬winasm \( ~Q  08'U‫ ا‬:)‫ ه‬:9 ‫= أن‬X ' })
(. ‫وع‬U‫'ت ا‬4 ‫ ﻩ‬1 r4D! ‫† ا ا)ي‬4, 1 image ‫'ة‬R‫رة ا‬k‫ا‬

...O‫(ى ' ا‬

386.
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\Comctl32.inc
include \masm32\include\comdlg32.inc
include \masm32\include\shell32.inc
include \masm32\include\oleaut32.inc
include \masm32\include\ole32.inc

includelib \masm32\lib\masm32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\Comctl32.lib
includelib \masm32\lib\comdlg32.lib
includelib \masm32\lib\shell32.lib
includelib \masm32\lib\oleaut32.lib
includelib \masm32\lib\ole32.lib
:  > YO ‫(ى 'ذا‬1...'<( \S‫س د‬E> p...'(‫ ه‬.lib ‫ واـ‬.inc ‫   اـ‬s‫(' ه('ك ا‬R‫ﺡ‬

dlgproc proto :DWORD ,:DWORD ,:DWORD ,:DWORD

.data
msg db "hi",0

.data?
hInstance HINSTANCE?
hBmp dd?

.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,1001 ,NULL,addr dlgproc ,NULL
invoke ExitProcess,NULL

: 0 '!‫ ا‬Q ‫ى ا‬, '(S‫د‬...'Š‫!<' دا‬, Q ‫ ا‬:)‫ه‬...OY p ‫ن‬d‫ ا‬B!‫ﺡ‬

dlgproc proc hWnd:HWND ,uMsg:UINT ,wParam:WPARAM, lParam:LPARAM


LOCAL hDC :DWORD, LOCAL hOld :DWORD, LOCAL memDC :DWORD,
LOCAL ps:PAINTSTRUCT
.if uMsg == WM_COMMAND
.if wParam==1002
invoke MessageBox,hWnd,addr msg,addr msg,MB_OK
.endif
.elseif uMsg==WM_INITDIALOG
invoke BitmapFromResource, hInstance, 1003
mov hBmp, eax
invoke BitBlt,hDC,0,1,550,175,memDC,0,0,SRCCOPY
.elseif uMsg == WM_PAINT
invoke BeginPaint,hWnd,ADDR ps
mov hDC, eax
invoke CreateCompatibleDC,hDC
mov memDC, eax
invoke SelectObject,memDC,hBmp
mov hOld, eax
invoke BitBlt,hDC,0,1,550,175,memDC,0,0,SRCCOPY
invoke SelectObject,hDC,hOld
invoke DeleteDC,memDC
invoke EndPaint,hWnd,ADDR ps
.elseif uMsg == WM_CLOSE
invoke EndDialog, hWnd, 0
.endif
xor eax,eax
Ret
dlgproc EndP

end start
‫<(' ' ه‬O D(1 ، ‫  = آ   أو آاآ‬0R('> ...Q ‫ =  ا‬+‫ ه ا‬O‫(' ا‬R‫ﺡ‬
=4‫أ‬
if uMsg == WM_COMMAND
‫ زر‬BS ‫ﻁ‬P€‫ ا‬w =' ! 0‫ز‬$‫ ا‬Q ‫(' ا‬42‫'ل أ‬s‫ ه)ا ا‬1 $s1...kX‫ ف ' أ‬9 \,‫ أ‬+! S‫و أ‬
: š,‫أ‬...\) ' 9 messagebox ‫ج‬x! q ‫ ﺡ‬allko
.if wParam==1002
invoke MessageBox,hWnd,addr msg,addr msg,MB_OK
.endif

... Š'g‫ ا‬X' Q‫ أ‬01'2‫(\ إ‬O =s'>‫و‬


( 
¡ k(S ‫ ا“ر ) أو أي‬ O !> ‫م‬+,   ‫ ا“ر  آ‬w =' !,   ‫(' آ‬1S ‫ ؟‬.rc RX S ‫ 'ذا‬
‫' ؟‬O‫و‬O
   ‫ آاآ أو آ‬0>'!> ‫م‬+9 ‫ ﻩ ه أن‬1 \ S ' =‫)\ آ‬...~'(  ¢ ‫ا = ا وي‬
‫ وه‬0O‫ ا ر ا€ور‬R(> ‫م‬+, %...''9 ‫! 'دي‬S‫= ا‬U> bmp ‫رة‬/ ‫ام‬x!'>
( .cons ‫ و‬.data? ‫ و‬.data =4‫ أ‬YO ' ‫ ) أي‬ O‫ ا! 'ر‬-1
if uMsg == WM_COMMAND =4‫ أ‬YO ' -2
R(> ‫م‬+9... generate 0 Š‫ا‬Y‫'ء أ‬S!‫! ا‬O generate ‫ زر‬BS ‫ﻁ‬P€‫( ا‬S $s ... ‫اŠ 'ت‬Y¥‫ ا‬-3
...‫ آ' ه‬0 Š‫ا‬Yp‫ا‬
. ‫ة‬O‫'ت ا‬O!D'> 0O+‫ ا‬.rc ‫'ت اـ‬O!D ‫ ا!ال‬-4

. fade out ‫ واـ‬fade in ‫  اـ‬%E9 01'2‫ة ا


ة ه إ‬Qx‫ن ا‬d‫وا‬
: '!‫ ه ا‬O %E!‫ ا‬O)‫ ه‬01'2¥ ‫ ﻩ‬1 \ S ' =‫'§ أ آ‬,> ‫ أي‬1
: '!‫ ا‬ 2‫'§( أ‬,‫ ا‬0O‫ >ا‬.lib ‫ و‬.inc) ‫ ا!'ت‬ O 9 =4‫ أ‬-1
FadeIn proto :DWORD
FadeOut proto :DWORD
: '!‫ ا‬QR‫ ا‬ 2‫ أ‬.data? =4‫ أ‬-2
Transparency dd ?

 '!‫ ا‬OQR‫ ا‬ 2‫ أ‬.const =4‫ أ‬-3


DELAY_VALUE equ 10
LWA_ALPHA equ 2

: '!‫ ا‬QR‫ ا‬ 2‫ أ‬uMsg==WM_INITDIALOG =4‫ وأ‬dlgproc proc ‫ اـ‬ O 9 1 -4


(‫!<' >ﻩ‬1S ‫ ا)ي‬p‫اآ!~ ا‬...\',> 1 
¡ '> '<!1S ‫ن‬9 X ، hWnd ‫د‬Y‫ و‬r‫ﺡ‬p)
invoke FadeIn,hWnd

: '!‫ ا‬ 2‫ أ‬uMsg == WM_CLOSE =4‫ أ‬-5


invoke FadeOut,hWnd

w2 ( !!! ' 0 Š‫ا‬Y‫ وﻁ إ‬1 ‫€ ﻩ‬9 p wQ'> ...‫~ >ﻩ‬¢9 ‫ أي 'ن‬1 ‫'§ ) أو‬,‫ ¡
 ا‬1
:  ! '!‫اŠ !  ا‬Y¥‫ا‬

FadeIn proc hWnd:HWND


invoke ShowWindow,hWnd,SW_SHOW
mov Transparency,75
:@@
invoke SetLayeredWindowAttributes,hWnd,0,Transparency,LWA_ALPHA
invoke Sleep,DELAY_VALUE
add Transparency,5
cmp Transparency,255
jne @b
ret
FadeIn endp

FadeOut proc hWnd:HWND


mov Transparency,255
:@@
invoke SetLayeredWindowAttributes,hWnd,0,Transparency,LWA_ALPHA
invoke Sleep,DELAY_VALUE
sub Transparency,5
cmp Transparency,0
jne @b
ret
FadeOut endp

...‫ث‬DO ‫ ' ا)ي‬ U!‫\ واآ‬R4(> '‫ ه‬¢...\  +‫  ا‬P9 ‫ك‬9E

O tamplete 0>'s> ‫  وه‬k,  4 ‫ >ﻩ‬final '>  ‫'ت‬+1‫ ا‬1 ! ، ‫!'م‬x‫ ا‬1‫و‬
.   ‫ا<' ي آ‬x!‫ا‬

http://www.at4re.com

Arab Team for Reverse Engineering


αλλκο
September - 2006

You might also like