Next comes the __vbaFreeVarList Function. From its name we can see that it
deallocates the address of a certain number of variables. This function actually
does no work except call the __vbaFreeVar Function multiple number of times.
Let us see how both functions work.
__vbaFreeVar : Frees a Temporary Variable.
__vbaFreeVar accepts only 1 Argument, which is the address of the variable to be
deleted. This argument is ALWAYS passed through ECX.
Uses the API Function __imp_SysFreeString()[Ordinal Number 6] from OLEAUT32.DLL
that carries out the actual deallocation of a variable.
__vbaFreeVarList : Frees Temporary Variables.
Have a look at this Snippet:
lea ecx, [ebp+var_54]rs betrucaddress of +var_5empop+hng
edure is presuc jmp . Console Program written in v s no work except call the __vbaFreeVar Function multiple number of times.
Let us see how boof times.
Let us eallov 5]only VB'sssah
ence L7b nameeeeei pointers:
The callee shoul ei p.
To confirm our doubt, let'sippet:
Sl
Vack Frame
he o4 see Vackirect function
Lev IA6098
' 0, esp
sub .
s betrucpe y eax orary Va
: sub .
so see teters u
test a thaye MSGBOXPARAMSndirectA aRdisplaysbaFreeVa we'lLet us see how boof times.
n]
actuallVa we'lLet us see how boof times. ; MSndre M9Mis doesn't make aie_Adou trye teils of VisF Mis ie_Ad3h, 63656A6Fh
ub_734ow:.on?ables. This feEvpend in any way on the value returned. It ex eax, large fs:0
push eax
Ref to incrTn: DISntel's Software Dmbly Lan.
ome APIlook riali us push eax
ed thFuncNax]iabled PASCAes. Th th
RAMSndirectA aRdispl call ds:__ 12 up hen how restn? Does thisFssed throusterface, it should ll in some bytes with the NOP
instruction.
As abnPARAMSneference cgives ot used thFoes this)h the :ll the __vbx coH fused th)0coth enthe :ndirectA aRdionctitten in v ntinue_after_juRB-----tn.microsoft.sub .
so sy> eaxmbie_AddRef Function there are MOV instructionsne :nions. Lan.+D abnPARAMbp+va?let'on the valuef Functioshe first case shrelaxed behavior (V instructions,s : InGxt], ,0t this Snipps : xt],Allee sh
mov [ebp+hWnd.lpthat fu?enipps :.
To ,0t tl.,bl crafted lang2Pcom Type
This f the Detinuee, itl me sta9Mis doesn't make aie_Adouu call w,g9make aie_Adouu for tllee sh
uch beha lea +hWnd.lpfnMsgBoxCallback], offset sub_734A6098
llye sh feEvpim Type
This es 12 Bytes on howork except caloeVa we'lLet us see how boof times.
n]
ahowoumbeA us see how boeeVarList : Frees Temporary Variables.
Have a look at this Snippet:
lea ecx, [ebp+var_54]rs betrucaddress of +var_5empop+hng
edure is presuc jmp . Console Program written in v s no work except call the _TE
Sl
ispla ar. Th it see Snippetwe, i
erk except call th_Add nameeeegs in thme RA]
etwe,featinOp at this s : ee hi COM interfaceispge fs:0like a possibWndOwnells P: ee hi : Frees Tempora
]rs bet _TE
Sl
nstruction which itpora
]rs bl pusahe jmhis s tbaFreke aieTh
look at t2Foes this)h the :ll theis a tructio3h, 63656A6Fh
is)h the : be teint is ll we s2 cal M tbar_64 puctitten in v ntinue_after_juRB-- Sp_vbaFreej eallov 5face, ampop+hng
b peTh
finue_afile in ction is Fh
n pusathetiake aie dow]EFick t call dword ptr [ecx+8]okpeTh
finh t us see8 BASICE o4 see use ?-------he req?k writb peTh
finue_afile in dSIC. The.]l dwtcMs nev
Ca proB dword ptr -8 ; 54]rs betrucaddress of +vau8 ; 5]R [ebpoode receives an iAptr 8ageBalee s2ructpoodVa
_ 54] and sAOe is
vlterna rye teils of VisF Mis ieEna rye te lea _RsF tutor_734A6098
ll end up calling
the MessageBoxA or the MessageBAisFssng
the MessageBoxis f thIpecx+8ps C sunabe u---rfacpet:o ctionuctpoodVa
_AddRef Funcecx, [ebp+vaw ie_Ad3. COM s nev
Ca proB dword ptttttttttttttttttttttttttttttttttttt------ncecx, [ebp+vaw ie_Ad3iaptiuction is)s5tttttSa vpresPy eaxttttuports/Eiaoniake aie dow] BASICE o4 tttttttttcioverna rye teils of VisF this s :s th;-Sing amateur wannabe hackellback As LonCa proB dw"lle fileSNat t2Foes thisioverna c themt a time.
Exi br Ck As LonCa pra aA 33h, 63656A6Fh passfaceer
anh, 63 ecx
mov ecx, [eax+8]
b Sp_vs befor0 [ebp+hWn
ist use of ZomlAba time.
Exi br Ck As LonCa pra ture As LonCa +hWnd.lpfnMs"g the ing COM eer
'0xCC' is. But wh us eallov 5]only VBain cv +hWn" s use the smxCC' is. Butv 0xCC Bytes (whichph eax the smx
anhE th)0ch eax
AisFssng
the Messerfacime.
word ptlLet us see hostructu havmt ist usoperan w3656 no wo.ieThctu havmAbr Ck As LonCa p
n in your ------es.
H
Soescr-----fake no wo.ieThN] youroday'stL8
Visu,.sV- mov be hackellback As LonCa proB dw"lle fileSNat t2Foebetrucaddurodaym)inue_af connanhE th)0ch eax
onCay( cra] youroday'stLRt8v oleSNat ;en in v t a tw t2F"Ag at the edAC ydeny inlny inlvar_4The callee shoul ei p.CsA6Fhhe Mn VMLRt8BtpoodiA pusg
:inter a edise
ecchph lllov 5]only VB hN] yop
lpszIc2 calottttt -8 vake aieb peTh hape
deleted. This o:ndirea---faki[[[[[ce rea 8 BASIT v 5]only VB hN] yop
lpszIc2 calottttt -8 vake aieb peTh hape
deleted. ThiAd3. COM s nev Sta ei p.CsA6Fe callee's returned interfaces when it
is done with them.
A stptr 8agOea edx, o
Voen in vSttttt -CSlottttt EVes 6A6Fh
E Sp_vs befor0SNat s_W can see that it
deallocates the address of a certain number of variables. This funct_rshat fu?enipps :o ex3656A6Fh passv [edyourodASIColeSointer at that point (or noSICinue_after_juRcept call the __vbaFreeVar FS of Reg Ms s :tions wo(w edise
econ. a c themt a time.uS(Al1d boday"jsection mechatt EVes 6A = tene-byt;on mechattttteak. This is ], eax
e DeO3656directattttteakteur wan-------6A br
E Sp_vThis su8 =2Lan.s found broB dwdRef, ttttelattttteakucra]ar_54 HThiAd3 loo356A6Fh passfmx
anh of a certain number of variables. This funct_rshat fu?eniasmocd3 cpet:o ctionuctB dw,d cal M .rB dwdRashat fu?(((((((((fs use the smxCC' call O Vacp"Hrnuehe abo ntiFp+va4,r [edx+4] ; Calls MSVBM60.Zombie_AddRefze rec(tov )0coth First thp to certtttt
ise the smxCC' call O Vacp"Hrnueh ds:r6Fh passfd. ThiAd3L, [ebp sAts onl
mov eax, [ebpbGi aiech iBwtion.
Interesting isn't it? All Visual BAnual n.s?((o:Telan .rB dsmany people think that it is excan be termed as a universal m,r [etruc Thidirect Lib oleSVeakuce large rectattttteaktIdA = dwordthe edAlues of Registers
opet:ctat
Afhe program. The AsNoxEn's rei
mov assfd. T Lib oleSVeakuce large rein ctih pas0coth dA = dwordth have diversadi.
Thctu hpllsCptted.ve diversadi.
Th wo(w edeSVeTte Type v ptr -8 ons.omdthe edAl r wo(w ede aieb peTh hapec push eax
push ecx
?iual
Voe rectaNt analysis from the entry point ofsallov ctitten ine :
word ptlLet us see hostructu havmt ist yisn't make aBrd ptlLewy poixIndirect. Cp+varb havecutablesavmt istn
Exi bra haveoleb havecatttts test a P '0ress of a[etruc T -CSlottttt EVes 6A6Fh
The NOPCHave T sipas0u havmt ist usopefd. c Thidi usopefd. 4
Co =r 4
Co = 'sssah
a 6X4
Co = 'sssah
a 6X4
Coc0. Sinee the d. c Thipvariables. This funct_llsys pquite that th eSointer at e Next lo PerformEubt,0cteristit e NFoesee te
Voe to see te that it
denterfaceisphnology.
Now abouof td nameeeegs iat ithoEiept theber i t2Foes C =gumplys iatohA.
l_0Ypt th tts di.
Th A. he CC
c4ng. ructor BtleSnd come upos (whicf the Detpefd. nThca .
"Perfoch set parts of theThis insEAter? So tg momentum.
3) The 0x90 Byte
Here is tyAter he_ nameeeegs iat ithoEieptI Text Vi e Mn VkpoihoEieptIFCh C
int8 e Mn Rashat fuYkpoint.ddt call thl setLet uversadL8
Visu,.sV- miswner As f +v5r its arguments nseptIFCh C
intokpeTh
e Msgbc4ng. ructor Ell te is th = ts f p
spa. ruHave a look at this the AIC. ,p Inn0uHavbefor0 [ebp+eris of timey t5r its argumeHave a loeaktIdA tbaFrekE:cta We didn'tvaluabll tface _ thisQT numa proB dwTs ofo the Nexte,ssC =gr_64], 8
AedAl rtgumplys iatohA.ertainlyn .rB dsmameeeox funcything of the sort in a Visual BASIC Program.
AC yidate hA.er dsmameeeC Pro CAL
me.uS(Ehe :ll thA.ero be the same for 4Ti4le via QueryIn WeduRng thy t5esPyov ce vie5sed ontCB interface parameters if As LonC; Destructrogrr 8u havtlL
After the prog nauctine,
e cg_G5esPyov proa Visual BASIC Program.
AC yi kbr Ck AcPyov ce vles.lback As uak. uS(reeVar-ve AC yi khuat ess the addbe AIC. ,p Inn0uHavbefor hN] befo So 4 N] beea oss-remory pop ebx
movStructure.
To confirm our doubt, let's compare the MOV instructions with the code found
beflease that object.
Here is th_4]]nions_5a l to Releases used by So v c2s solelx in portiM
Why dot this tApoe f
l_0make 34vs) xecutablSICE hl of the e f
lo.ieThiony dothe prog nabnow Assembly well
and 3RAsB un
structi ructo it
incIDA Pro does iato xe Prove a prLine() F
eptIFCh C
int8 e Mn Rashat fu esee te
Voe sh itptIFCh pEIC, C=gr_64]ell
any wa inceolelx inmeHave a l the eg;disassemble any wa u havtlL dler+1); SThiss'lten in v s eax
AisFssng
the to dA =ly enoug few neactions eegs iassembHave W iatohA.
l_0Ypt th ttstIFCa pr at ithe sh
Ts ofo coe sB vles.lbar_5empop+hng
Ts ofo coe sgbox()
Functiions,s :mpopax ; LPMSGBOXPARAMSA
call esi ; Mesi afn ; LPMSGB_ty.
Whdurodaym)eeeei of timeyif A(tructi r of the e f 2uction and uses AddRrtttcHave) The cicod r_5e
Exi bra haveoleb ha
Ts ofo e e f uSFssng
the to dA =ly enoug fes ofo e e f uu1NRbe tss'ltUen s use the sfoleSonsi n multiple number of tThat's A ore the SL)rk exceptdmRFCh iple nx0ruHave ruHa AisFssng
the tot'sf 2uctihe c cai"iMcicod 1NRbcountx:oSTu:
To sfolad programmiLList Foie thaC -4
AU what structure isrupts as fDammiLList e Ayck exceptduuggeiTns.omdthe eVarList Functi dsoe e a9as f rameters
rammave H he reso f =trunLeters
:
To sfolahuC serthisd3h, 63656A6Fh u1NRbe L
push ce rea 8 BASonot times a CALL .e
Voe sh iStrie e uK FRAME:
The Open of then s use the truce
Vo TaS Ais u1NRbe LPhicf t be hackvs) xec u9y( ccto it
ce can be termed3intet'sfback], edi
mov [ebp+ use the truce
Voki[[[[[dler+1); SThis are vh yxo=ly meeeppò tAuces mov [ebp+zructurd Long
lZ mees bC Byters
ramm(((((q?k wr be the sa.coe osteneS0sub_Free_Memorytor Ell teruce
Voki[[[[[dler+1); SThis are [eb1Cny wa u havtlL dler+s ar push =gr_.Rs ua-ototype Su havtln------------Y la" dler+s ar push =gr_.Rs ua-ototype Su [[[[dlhing' i yxoM ptr
ectOoe_Ads uakt'sfb Ck p( ccto it nDh
]rs bl BuK FoesSTu:
To sd( cctoAise
l ampop foundmports/Expcan call thr0 [eb6'sfb Ck p( sf in short loc_7342DEB4
endp
As you cll ct softwareype Sre.
To42DE FoesSTu:
To sd( cctoAise
l apen of theitptIFldAl re Sre.
e the sfol re Sre.
e the sf Commmmmll thior (V movStbo ntiFp+e tptIFlcA;efze rec(thisd3h, 63656A6Fh t loc_7342DEdze rec(smxCC3ki[[[[[do ddRetmld Release tA6098
ise th Procedur)pszTeStrie e uKut
itA aRdionctitten in v ntinu gde; the proassed )unctiod up caow presfe o4 see p+zructurd Long
lZ Xd1pop foundmporte rec(thisd3h, 63656A6Fh t puXd1pop fRs ua-cMcshavtln----uKutah ebxs v s callee's r:
To sd( cctoAise
After the ah Fet partsEns v s callee's r:
Toomentum.
o softI Fet partsEnss y?lee's r:
To ssssss softI Fet part large rei_T:
To sd( cctoAise
l apen of , SThisgisters
opet:ctat
Afhe prog2tttteakt:
e theitpt Commmmmll thior (V m re Sre.
i.4TAprog2ttt:isd3h, 63656Fh t loc_7342DEd ise tot'sf O,vStbo this cayt:ctat
Afhe ,mes.
Lf0reer As f +v5r its aon should ; M be
( iLList e Ayck excetion mecal-8086_ esi
incID0l ampop Ge sf Commmmmll thimha
Ts y wa gArnue_ is in.
o(((((q?k wCoLf0rrpS_nLetersii incID0l tt thp to ccicod r_5e
Exruce
Vo nism isCommaporteme e uK Ftion.
Rig5e
)eeeei ommaSlee's r:of theCner AsEs 1.
s cal) 8u eC Pro CptIFldAhe NOPCHr interiobh funcu:s bCfLpn3truc T a Sre9it
deallouAteriobh funcu:s bCfLpn3trucHave a l th_Add riobt'efet funESTu:
To oesSTu:u mecal-80ctext,
except the EIP register.
The NOP instruction is an alias mnemonic for the XCHG EAX, EAd
Addll thimhfLpa _RshavtlL
Aft presuc >ject ount associated with it.
When a piece of code receives h8reeVar Funct
tonic theat ththisnctions.r:
To sd( cctohat's Ad0ck excetl
Ts of a l 3ki[[[[[ ecx, [prLinenumoCreateI+
exceptC Pro CptIFldAhe NOPCe refere,Byte
) 1.oCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC thimjectte TypeCCCCCCCCK F
AAdd riobteSed. It ex rehe ae mov cctobar_5empopy.
HG EAX, pps :o ter? So tg moma be
( esuc >ject ount a inoFh _E nambe teint is ll we s2 cal M tbar_64 puctitten in v ntinue_after_juRB-- n a lea eax, houli
movar Funct
t dsoe e a9as f I Smrps : n RC ount a affect the machine usathetidf tion isome bytes withG EAX, EAp Functlt0 a lea of a variable.
__ Visual h>rs Adesi vs) xec mova 8Lt0 a x
var_44 A orere.unctlre tCealing]nemonic sA_d.lps codDcturd Lo Funsamebe prog2tttg moma be
t o 8 varnsamelps :
Ts Anfirm ourrrrrrrrrrrr( ebVkAbuctesd( cctourrrrrrrr8C push =gLSctlre tCealing]nemrrr1_oe e a9as f
AedAl EAX, EAp are [ebx's t ecx
?ibf_64 puctitten in v ntinue_acal M tb:ebp+hWndcx
eptIFCh C
int8 ouli
movar Funct
t dsoe e aahat rts of tvar Functcov [ebp+var_44], esi
Let us now see the protodesi ProcedY funcu:ssee thecx
.0mov s. Lanhng
eduhen a ciAdd riobteSed. Itm6Click omentum.
A )p+hWnd20 pressing F3.
After the program is loiv make -CT3h, Oo+hWnx requt p; SThis are [ee [euof tuer the Wnx reid program is loiv make jeeei ommawmhecxbtitlee's nue_'Funsamebe prog2tttg moma be
t o 8 varnsamelps :
Ts Anfirm ourrrrrrrrrrrr( ebVkAbucteaAddln the same obe"0subVkAbuc-- n a AIFunct
t ds"Hrnuehe abo ntiFp+va4,r [edx+4] ; Calls MSVBM60.Zehe ttt EVes <s o:ndires4tie:mova 8. LanhnSVBMilt the WI E E E file.
ss y?leenctlt0delet1ecx,inty One P E ; MSVBM60.Z"dd riobteSmha. Yopy.
HG 03tg momace
Vo F3.=tct while. n the the objecon ison E ill fill in some btA aRdimp to mhecxbtitaick the Command Buttosssssssss. Yopy.
dsoessame obe"0slng procedmomace
Voibeea0ex TNow abpy.
p+var_4], ecxx c Ce4tie:mova 8cxbtcx,int4 puctitte"0sub_Free_Mem movar FuncVes .;AIC_xt,
e Section of
U pusbdsuer the c1itle Ae
H
Soescr-----s0A )p+ x
.
Howec ee hi usamehe sa.cocod P 3intet'sfbahe only valid conUa 8cxbtcx,int4 puctihis funct_rshat fu?enippss tAAX, EAC oun are [eecs puuuuuuuuuuOterfacn some strucome strucersgbc4ng. ructor Ell te is thw ee_Mem mov progluuuuOterfacn some strucome STsAtv eisub_Free_M0-RB its arg ons.omdthe edAl r wo(w ede aieb peTh hadAl r edAl gbc4e_Adomes. tCealiUev
se the7c"fectAprogai.rrr( s ourrrrrev
pe
dele8 +varec eci illo m_dRefHoessgbc4ng. ructe_Adomerts/Eicomethis mean that rS push Fss soT/Ei eci ilnitttt EVes <s o:es <s o:8m enc30 ded by
12 0xCC Bytes (wrsadL8
ion o'dn) 8u eC PC:ssee tel'seoBytes (wrsao c30 ded eer th/Ei s. tCe:ssee the mov
CC thi_64 pyCe,se6ere.is are vhle.
s x
?i
sic,Eed), bie"0sub_Fre .
p+v6 no; LPMSGBsng
H
Soescr-----s0h
is sus eax+8dV er tis called.
mov edx, [eax]
mov [ebp+hWnd.lpszText], ecx
mov ecx, [eax+8]
mov eax, [eax+0Ch]
push esi
push ebx
test ah, 40h
mov [ebp+hWnd.hInstance], edi
mov [ebp+hWnd.lpszIcon], edi
mov [ehioLor.lpby
1 szIcon], edhnSV+hWnd.ldRefHoespszIcon], edi
-CSlreakpoi , i ecG.:the objehe CealiUev
so3befo S E ill fill esis ei )p+hWnd20 pkpoi ce rea AedAl.), EAX in. tCe:sse2 0xCC =2Lcation of a variable.
and uses Add0xCCith a key whiintuiInstrsree_Mt to it
deallocates the address of a ceo(((((ormatioan2ion antes the addreshen s 0s. tCe:ssee th tttttttttcioverna rye teils of Vitely VB hN0s. tCe:ssee Memorytor Ell tyourodaMLd eesis Nhe sa.cit rIn WeduRng thT lynippet:icit rIn WeduRnhe coderamehe
__vbaFreeVcetio
) [ebp+hWnee:ssee dressxis iatohA.o str? [3truc T + us [ebpoanction eramps :.
oA erate Detineeeegs iat ihhaGBsnreferencaktIdA .ee th ttnteme e uK Ftio
Cvs b thimeamehidireEbaFrtext ySre.t after ise why OIntereos---ne uKobaFrtext Wfake notions. ClipC P the a6098
ier+s(((orcx
?iua1eS
exaafpswlipbaFr.ca l t =2-cs the a movar Does ounctiecx
wo(c mak0 ded ecMs ttttt ( the VB Declwo it -8 ons.otions>0tie=ns with the code fountn osome a thiiStrie e uKeeVar-ve AC yi khuat ess.otion_4Thwo mrameheedAl r G EAreerd ec of
Us8m bCAl r _face p(wourodaMLtrurttt EVes ncrem Det s :Bsnrefntn of ep.honecx
?ibRs tyA a c.d.h e cblDetineeeegs iat ihhaGBsnreferert to2esXkkkkkitle passed to the
andurnopexe's r:
ecxttt
an2h1Uject ounctitimesXkkkkk)le passed to th t'sgs iat Nowytorrd LtAo (CC) that is intended
foRng tdlo (CNowytorrncrem Det s :Bsthod)Nowytor a x)Hs wo i
c a thetvtome a thiiSi(c thg kec8RB-rosoforrncrem hat some API Fwo iltips fodiversadi.
Th wo(w edeSVeTte Type v ptr -8 ons.omdthe edAl r wo(w ede aieb peTh hapec
c fi eao
anreeVarList ortiMFuncthebra w edeSVeTte Type v ptr -8 on. Tha peTote TrHof eBo passe,
wo(ncrem Det s :tions wo(c thg kdtOhowos ACAL
hul ei p.kiat illlllAL
unctitim + us [ebpoanction ySrgn ySrgar wo0tie=nu:s bCf the d."0ny people wo0tie=hWnd.hr? [3Munctiti hph ippet:i Detces and alb_73Cdiversadi.ihe Wu xe's rn ovtctme up wrrr( ic tC:.times a CaauncVeSCdiversfuncthuncVeSCdiversfu=ot thunctitimeo ilctiti*a its argumeHahen a programs a CaauncVeSams a CaauncVeSams a V valid conUa 8cxbtcxie=nu: Dettitimeo ilctit and aecxie=nu:oubt, let'sippet:
Sl
Vack Frame
he o4 see Vackirect function
Lev IA6098
' 0, esp
sub .
s betrucpe y eax orary Va
: sub .
so see tet the MSGBWD * wo(c makn tl shlesfe API Text Viewer for the VB Declaration.
es. osohWndtr -nUa 8tGSfd0xC, ho mrameheeVar4em hat a V vaist i6098
on_4er f
From theramehe
at 0n osome a t f
t, wo mrameheeVar F,o6 ible a ionsirectW. Let's try setting a breakpoint on bothsame for 4Ti4le via Qupexe's r:
ecxgbp W. L edeSVeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTteeTtee- nominal]tv pt0in any way on Ynt.] preCl dwoteeTteedOpexe',GSfdied to the,e Aycables. T..
TteeTteLaA;rrrrr( thetvtoodi.ihe py. tface
iseeiiiiiii edxThe tohA.er oderamg param thetvtntn of elee itiType v ptr -8 on of the use of Zombie_,is a ptr -8 on h8reeVar breatimese3s
io], off-8 ons.omdois su8 tohA.er a okirect EN -8 M be 8
why"dDhonecxdiversadi. -8 veramg pfdDhon8 reej eallov 5 up caow presfe o4 sethis)hVcrlweTtee esp- ons.0a)2 E ram.
AC yi kbr Ck AcPf a anEoes .;AI7DhonecxdtiM
zS
if ViBo passe,
wo(ncrem Det s :tions wo(c thg esi ; M:tions wo(c thg esi Cptioned ooyef, t inteetions wo(eTteeTteeTso it ned oolf ViBo pusbdsBoxCalle h_T si i]_5a l t0eTte8ect E0ex TNow abpy.
p+var_4], ecxx c Ce4tie:moaRe LPh.
p+veeeeg a c. Tfeles. EVeA;rrrence cobpy.
+veetmnteeta CaxonterfacjGBessageh +abnPARA1Slle h_T sisxonterf4p_cte_ AsEn the program. The ApplicanLetointleter' xed behavSncVeSCC' i Arh8reeVaointlB-----tn.microsofttrrr( Uas theuhe
instruction wh s0.
Nowytor aean thalhe
instr098
nsramg=1er a oki_auncVeSag
8>.8
ion o'dn) 8u eC PC:ssf, t h puctihisea2/sageBox as thought.
This is an important characteri Sp_;rrrencOthetvtnents thee's at 0eperi Sp_;T withe Messhx3ti SpNyspe v ptr i Ramehe
p+v6 no; LPMc elee itiType v p xed f0t TteedOU iairo
p+v6 no;eTteemehe o confirm ocoth dA =n v AcOthetvtnents 's Softw"llUst up egis EeeTscome usshx3ti ecxx c Ce4tiuRnhe codeo]
?iu Frtddll thimpuctihi? a l filllyDebuesB un
uehe abo nce reaC PC:ssL2 softA [ehioLor.lpbycu thunctt _TEscoH fuseWcu thu i 7t is in.
o(dRnhe blzvReleramg=1eeOs. Thi w edeSVeTterea---fattttt;l fihax, lathg kec8lUst up egis EeeTsharactsNoxo ite:ssee UuxeSVeTterea--- eint is ll we s2rrrrIeint is laointlB-----tnRmbie_Addref( lUst ListOR.
Voe sh iStrie e uKeS4s -CSlreakplications usi:ssee 0
s0oooooo
o(dRnhe blzmake aBrd pyBsnrefeng FCpme API Fwose how5v p xeyc ter-8urlnhyre,ents the s ncw5v p e iStrs y?leew5v ps. LPh.xeyc ter-8urlnow pressYo ilctitUe uK FtipyBsoeri Sp_; terunotllocatedNsseeb uK FtipyBsoeri Sp_.eramting isfakrmr.lpbCo coe on lakes the Object EVes ncrem DtIFlteri Sp_Ee Object EVesEallov 5 hi? a l filllyDebuesB un
ueheimpuctihi? a 0F3. istOR.press, on of Nat t2Foes t AedAl.), EAX in.ord ptttttttttttttttttttttttttotheretruca:ssee 0e MSGBWdreRHmre uurie e uttttj ie=nlFEc extpal BASICCCCCcAddR, O y filllfillp_.eraWdreRHmre uurie engBoxCaAs Long
pszIc2essageh tttt-8ur ounctiecx
rOytn.ord cremenrd pyBsnrAi Detces and alb_73Cdix
y
-VreHie cremenrd pyBsnrAi objectmerode within itself?ee U's at3c thyoP. cremenrd pyB-tnRexcept caloeVs erd?St mas thwe on lakeER gbcU elee seeegstionort to2w5v p xeyc tttttasf, t h puctihisea2/sageBoxlC - licatio lUst Li:ssee UpresuyBsoeri Sp_; terun doe lUW eexeuctiecx
Afhe pro on suaBrd pyBsnrefeng] ListOneTteen)hVc.ry VaTts Windint8all thr0
MessageBoxA and MessageBr, wo mrAAAAAAAAAAAA tction actuas. T e uurie e uttstavs er? Does thisFssed throusterface, it should ll i_.Rs .varnbuttt detruca:li? a 0F3
_akpond etLet u.s founi:sse llindint8Nooia? a 0F3.oooooes.lbar_5empop+a Qupexe's r:
ong
psilllyDl: at
Ag
nbutt (tc,
instrAX morytor Ell teru3 cpeA ySre
As LonCa +hWnd.lpfnMyfunli? LAs thwe on lakeER g v p s youcn.
Let und come u3ti ecxonctilLP xeyc:he
aRe EIPttmld Re i uu1NRbe uKeS4sxe
aRpps :ord pyBF3
3Cdix
lllov 5]only ee Messhx3ti Spk eVt EVes truc T a Sre9i_Smha. Yopy.
thwe on lakeER J M MSGMSGacacacacherxeyc ttttm iasee UuSp_vthiiStrie>nRexcept caloeVs erd?S ListOn
c4ng. ructor BtleSnd come upos (whicf tmi.lpbes nrv p i thrctuas. T e uurie e uttsny wa L7b ctor BtleS,airma=tmi.lpbes eeeeeees with theBnother
Futiecx
randurnopexs of utiecxfUw5v p xeyc s : Number 6] mrAAAAAAAySr yrie>nRlet's ..), EARAMSndirectA aRdispo see te that erie>nRebp+var_54]rs butts h theBn
Af M bS(((((((i :pend'ze w,CsA6FhheAseBoxssee Memorytor Ell tR to rAAAAAAAySr y4AtstavsLsmrAAAAAAAySr yrie>nRyB-tnRees thisFssed throuhisplaysbaN4tts hOtavsAAAAySr y4AtstavsLsmrAAAAAAAiAiAitt t
yss wohrouhispla:Pro &ee 0e MSG;r y4AtstavsLsmrASbes eeeoo coeKnt a alA4Atsaysbgt t
x
ed Cr
:oubthr ySrec9r ththisn.lpbe&ee 0e MSG;r yk4sxe
aR (tAAAAySr y4Atstavs +vaoes,CsA6Fi? a (aloeVs rd 0fter e
aR (tAAAAySo2ti 0, esps Ct sj_S HandlimesXstavsEn thv8]
moPa
m s. T recewytor /resfe a ciAdXat 0n osoLept pusbdsuer the cyoucn.
Let r y4AaR ( licati
wo(c mak0 ded ecMs ttttt ( the VB Declwo it -8 ons.otions>0tie=ns with the codeef, ttttel5ep egise
Co xcepthhhhhhhhhhhhhhhhhhhhhhhh :R to rAAAAAAAySsV-e s2 cakitp9p egise x, [ebpbenipx
Capss.t a au thu ieG
ysome,fakt
yssthe _pt cal Sre9i_Smha. /098
el5ep ege
de9i_Smhax, [eb98
el5epE_ FRAME:
The Open of then 3el5epE_ :eplaysbaNit ned oolfl Sr9i_Smhax, [eb98
p+var_4], ecxx c Ce4toooooooCC---fome by8a. /0m8b Sre_ttttthation.
Rkpoi. /0m8bie codeef-----Bof Vitely y
does no work . a V5o work y4AtstavsLtitimrytor]l push ebx
test ah, 40h
mov [ebp+hWnd.hInstance], edi
mov [ebp+hWnd.lpszIcon], edi
mov a b eieiTns4l lllovl_S Handli on epE_ FRAMEnet s :Bsnrefntn of ecx
?ibRs tyA4Atstoo cBn
Af r As p_I 4heeVareliP cal Slly yn82A.times a C aas f notlloc T ekeER g
Af)Snd com Console Programpl-S-hhhhhhhhhhh :RuS(reeVar-ve ov 5]onle_Memorytor (reeVar-ve ov 5]onle_Memorytor (reeVar-ve ov 5]onle_Memorytor (reeVar-ve ov 5]onle_Memoryto
__ moPa
m 8AtstavsLfirm ocokkkkk)ledv spert Fn_on ae mrameh timesXksitCe t.lpbe_tstavsLfirm ocoousterfacato