EBPIG
̽Ë÷ÔÓÖ¾
MHJDQ
֪ʶ¹²Ïí ×ÊÔ´¹²Ïí ×ÊÁϹ²Ïí
¡¾ÖÆ×÷³ÉÔ±¡¿³ÌʽÁÔÈË
¡¾·¢ÐÐʱ¼ä¡¿2000-10-11
¡¾ÆÚ¿¯ºÅÂë¡¿Ôö¿¯Ê®ËÄ
¡¾ÍøÕ¾µØÖ·¡¿http://programhunter.com

¡¾±à¼­¼ÄÓï¡¿

    
    {~._.~} 
     ( Y )  
    ()~*~() 
    (_)-(_) 
ÿÕâ¸öÔö¿¯µÄ·¢ÐÐÖ÷ÒªÊÇ·­Òë¿´Ñ©½Ì³ÌÖеÄһƪÎÄÕ£¬ÖÁÓÚÄÚÈÝ´ó¼Ò¿´Ò»¿´¾ÍÖªµÀÁË¡£¶ÔÓÚѧϰ½âÃÜÄãÓÐʲôÌå»áÄØ£¿Äã´Ó½âÃÜÖÐѧϰÁËʲô¶«Î÷ÄØ£¿ÎÒΪʲôҪѧϰ½âÃÜÄØ£¿½âÃÜÕæµÄÊǿɳܵÄÂ𣿲»ÖªµÀ´ó¼ÒÊÇ·ñÕâÑù×ÔÎʹý£¬Èç¹ûûÓдó¼Ò¿ÉÒÔÏëÒ»Ïë½âÃÜ¿ÉÒÔ¸ø×Ô¼º´øÀ´Ê²Ã´¡£
¡¾Ä¿ ÿÿ ¼¡¿
ÿÿÿÿ&ÆƽâÐĵÃ
1¡­¡­IDA Pro Advanced 4.0x£¨Ô­ÎÄ£© BlackB
2¡­¡­IDA Pro Advanced 4.0x£¨·­Ò룩 ³ÌʽÁÔÈË·­Òë
3¡­¡­  
     
ÿÿÿÿ%³õѧÌìµØ
ÿÿÿÿOÎÊÌâ´ðÒÉ
ÿÿÿÿ4ÍøÕ¾½éÉÜ
ÿÿÿÿ,ÔÓÖ¾ÐÅÏä
&¡¾ÆƽâÐĵá¿
IDA Pro 3.8x ²Ù×÷ÊֲᣨPDF¸ñʽ¡¢Ó¢ÎÄ£©

IDA Pro Advanced 4.0x

Subject: IDA Pro disassembling
Target: N/A
URL: http://www.datarescue.com
Author: BlackB
Date: 2000-06-05
Tools used: Your brain
Difficulty (scale 1-5): 1

Before starting! 
IDA Pro Advanced is a superb disassembler that surpasses with ease w32dasm. Rece
ntly a pirated copy has been released on the web which you can easily get. Opini
ons about this are divided: some people thinks it's great it's out, some people 
think it's a shame. Those people that think it's a shame are most of the time 'o
ld elite' reversers that acutally bought the program. 
An understandable reaction if you paid 500$ for it.

What you do, reader, is not my problem and not of my concern, but in my opinion,
 an illegal version of Winzip is as bad or as good as an illegal version of IDA 
Pro 4.0x . Just as you shouldn't use Winzip illegally, you shouldn't use IDA Pro
 illegally

I. Introduction 

Hi! Some time ago I wrote a lesson on a cracking program. So, here it is: a less
on on the powerful, superb, great, IDA Pro Advanced v4.0x . Disliked by newbies 
and adored by elite reversers. Disliked because IDA has much more extended funct
ions and features and is much more complex then w32dasm.
In following lesson, I'll try to give a short and clear explanation on how to us
e IDA when you're used to w32dasm, and will try to answer on the question: "What
 is the best disassembler?". A simple question with a not-so-straight-answer.

For more advanced reversers reading this: note that this lesson is intended for 
100 % IDA newbies!

II. IDA: a powerful disassembler

The first thing you will notice when running IDA Pro is that its interface looks
 way more professional then w32dasm's. There are much more options and advanced 
features available then in w32dasm. This has the advantage that you can disassem
ble better and more profound, but has the disadvantage that it makes IDA much mo
re difficult to work with

Now, in fact, IDA has exactly the same features as w32dasm: you can goto a certa
in code location, you can see where a jump to a certain portion of code is locat
ed, you can see string references, you can save the dead listing, etc... . 
The first difficulty IDA newbies have are finding string references. In w32dasm 
you have a button with which you can view directly all string references. In IDA, 
this feature is located at scrollmenu View - Names. 
Let's jump right into action and disassemble a small .exe (I used startclean.exe
). A screen pops which offers you a lot of options. Don't touch it, just click '
OK'. Let IDA do its (beautiful) analysis and when it's done, take a look at the 

names.
String references, as called in w32dasm, are preceeded by an 'a' in IDA. To sear
ch for a string press 'a' in the names window, then followed by the string you l
ook for. Once found, press enter or double click on it. This will take you to th
ed near the string, looking like this: DATA XREF: _WinMain@16+13o . Double clic
king on it will make IDA go to the reference location.

Another feature of w32dasm: the jump and call references are also (of course) av
ailable in IDA. What follows is a portion of code disassembled in w32dasm follow
ed by the same portion of code disassembled by IDA:

Start partial code (w32dasm)

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403B50(C)
|
:00403B5F 81FAFC000000            cmp edx, 000000FC
:00403B65 0F8478010000            je 00403CE3
:00403B6B 8D8424B4000000          lea eax, dword ptr [esp+000000B4]
:00403B72 6804010000              push 00000104
:00403B77 50                      push eax

* Reference To: KERNEL32.GetModuleFileNameA, Ord:00E9h
                                  |
:00403B78 8B2D88924000            mov ebp, dword ptr [00409288]
:00403B7E 6A00                    push 00000000
:00403B80 FFD5                    call ebp
:00403B82 85C0                    test eax, eax
:00403B84 7516                    jne 00403B9C

* Possible StringData Ref from Data Obj ->""
                                  |
:00403B86 BE206A4000              mov esi, 00406A20
:00403B8B 8DBC24B4000000          lea edi, dword ptr [esp+000000B4]
:00403B92 B905000000              mov ecx, 00000005
:00403B97 F3                      repz
:00403B98 A5                      movsd
:00403B99 66A5                    movsw
:00403B9B A4                      movsb
End partial code 

Start partial code (IDA Pro 4.0x)

00403B5F loc_403B5F:                             ; CODE XREF: sub_403B00+50j
00403B5F                 cmp     edx, 0FCh
00403B65                 jz      loc_403CE3
00403B6B                 lea     eax, [esp+1B8h+var_104]
00403B72                 push    104h
00403B77                 push    eax
00403B78                 mov     ebp, ds:GetModuleFileNameA
00403B7E                 push    0
00403B80                 call    ebp ; GetModuleFileNameA
00403B82                 test    eax, eax
00403B84                 jnz     short loc_403B9C
00403B86                 mov     esi, offset aProgramNameUnk ; ""
00403B8B                 lea     edi, [esp+1B8h+var_104]
00403B92                 mov     ecx, 5
00403B97                 repe movsd
00403B99                 movsw
00403B9B                 movsb

End partial code 

As you can see, IDA provides much more detailed information, and it's even more clear. 
Take as example the reference: 
In w32dasm it looks like this: 
* Referenced by a (U)nconditional or (C)onditional Jump at Address: 
|:00403B50(C) 

In IDA Pro it looks like this:
CODE XREF: sub_403B00+50j 

IDA provides much more info in even a shorter line:
1. It's a jump (j)
2. The jump to the portion of code is located at adress 00403B50 (=403B00+50)
3. The function/ call itself is located at 403B00(403B00+50)
4. The jump is located in the .code section

If the reference would be a call, then it would look like this: CODE XREF: sub_403B00+50p

Another great advantage is that IDA translates variables. You can even double cl
ick them to go to the adress where they are stored: lea edi, [esp+1B8h+var_104]
One of the most powerful features is the use of flirt signatures. Easy explained
: IDA tries to recognize compiler-related library functions. Like this: 

Start partial code (IDA Pro) 

004012D2 loc_4012D2:                             ; CODE XREF: sub_401280+5Fj
004012D2                 movsx   ecx, byte ptr [eax]
004012D5                 push    eax
004012D6                 lea     ebp, [ebp+ecx*2+0]
004012DA                 call    edi ; CharNextA ; Return a pointer to the next character in a
                                                  ; string
004012DC                 cmp     byte ptr [eax], 0
004012DF                 jnz     short loc_4012D2

End partial code 

Start partial code (w32dasm)

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004012DF(C)
|
:004012D2 0FBE08                  movsx ecx, byte ptr [eax]
:004012D5 50                      push eax
:004012D6 8D6C4D00                lea ebp, dword ptr [ebp+2*ecx]
:004012DA FFD7                    call edi
:004012DC 803800                  cmp byte ptr [eax], 00
:004012DF 75F1                    jne 004012D2
End partial code 

You notice the great difference? IDA tells you everything!
Other features similar to w32dasm's are quite easy, like "Goto code location" eq
uals "Jump - Jump to adress" in IDA. Or "Goto entrypoint" equals "Jump - Jump to
 entry point" in IDA.

Voil¨¤, that are about the most important things you have to know to start out w
ith IDA. Ah, maybe, before I forget. Sometimes, IDA displays a lot of 'db' -s th
at are no string references, but code. Just set your cursor and push the 'C' but
ton on your keyboard, IDA will immediately translate it into code. Example:

Start partial code (before 'C') 

00401228                 dd offset unk_406130
0040122C                 db  8Bh ; ?0040122D                 db  35h ; 5
0040122E                 dd offset RegSetValueExA
00401232                 db  6Ah ; j
00401233                 db    1 ;  
00401234                 db  6Ah ; j
00401235                 db    0 ;  
00401236                 db  68h ; h
00401237                 dd offset aName         ; "Name"
0040123B                 db  51h ; Q
0040123C                 db 0FFh ;  
0040123D                 db 0D6h ; ?0040123E                 db  8Bh ; ?0040123F
                 db  4Ch ; L
00401240                 db  24h ; $
00401241                 db    8 ;  
00401242                 db  68h ; h

End partial code 

Start partial code (after 'C') 

0040122C                 mov     esi, ds:RegSetValueExA
00401232 ; ---------------------------------------------------------------------------
00401232                 push    1
00401234                 push    0
00401236                 push    offset aName    ; "Name"
0040123B ; ---------------------------------------------------------------------------
0040123B                 push    ecx
0040123C                 call    esi ; RegSetValueExA
0040123E                 mov     ecx, [esp+8]
00401242                 push    100h
00401247                 push    offset unk_406030
0040124C ; ---------------------------------------------------------------------------
0040124C                 push    1
0040124E                 push    0
00401250                 push    offset aCode    ; "Code"
00401255 ; ---------------------------------------------------------------------------
00401255                 push    ecx
00401256                 call    esi ; RegSetValueExA
00401258                 mov     eax, [esp+8]
0040125C                 push    eax
0040125D                 call    ds:RegCloseKey

End partial code 

Other (fast summarised) advantages of IDA Pro are:

1. Ability to disassemble even the most difficult programs that w32dasm can't ha
ndle (like packed programs)
2. Ability to export the dead listing into a .asm file a .sym file and even a .e
xe file and many other output files
3. The dead listing is compressed, saving a lot of diskspace
4. Possibility to rename functions
5. Ability to program macro's.

etc.... ;-)

III. w32dasm??

  

After you saw all this you may ask yourself: "Why should I keep using w32dasm if
 IDA is so good?". Well, believe it or not, there are still reasons to do so:

First of all there's speed. IDA is very very fast if you take into account what 
it all does to clarify the code, but if you disassemble real big .exe's you'll n
otice that it can take 3 hours or longer to disassemble and analyse it for a 100
 %. 
Secondly , if you have to specifically search for an instruction, IDA will be da
rn slow, while w32dasm is fast in text searching.
Third : w32dasm is preferred when it's supposed to be an easy protection. If so,
 you don't need all that additional info IDA Pro is giving.

And with these three reasons everything is said! :-) If you should know other re
asons to use w32dasm instead of IDA, let me know. 

IV. In the end

Another lesson finished. Enjoy IDA and w32dasm, and above all.....enjoy reversin
g and keep learning and contribute to the reversing / cracking scene. Not with c
racks, but with tutorials, stuff you write, knowledge you spread! That's the imp
ortance of cracking. Not making cracks. 

Greetings 

The Blackbird 

Endnote: 
Essay written by The Blackbird ? 1999-2000
This essay can be freely distributed/ published/ printed etc... as long as no mo
difications are made. 

·µ»Ø
         IDA Pro Advanced 4.0x
                         ³ÌʽÁÔÈË·­Òë
£¨ÒëÕß×¢£º»¶Ó­·ÃÎʳÌʽÁÔÈ˵ÄÖ÷Ò³£ºhttp://programhunter.126.com£©
¶ÔÏó£ºIDA Pro·´»ã±àÈí¼þ
Ä¿±ê: N/A
URL: http://www.datarescue.com
×÷Õߣº BlackB
ÈÕÆÚ£º 2000-06-05
ʹÓù¤¾ß: Your brain
ÄѶȵȼ¶(¼¶ 1-5): 1

¿ªÊ¼Ç°
  IDA Pro AvancedÊÇÒ»¸ö¼«ºÃµÄ·´»ã±à¹¤¾ß£¬Ëü´óµÄʤ¹ýÁËw32dasm¡£½üÀ´ËüµÄµÁ°æÒѾ­ÔÚ
ÍøÉÏ´«²¥¿ªÁË£¬Äã¿ÉÒÔºÜÇáËɵõ½Ëü¡£¶ÔÓÚÕâ·½ÃæµÄ¹ÛµãÓÐÈçϼ¸ÖÖ£ºÒ»Ð©ÈËÈÏΪÕâÊǺõÄ
£¬ÊÇ×ÔÓɵģ»¶øÁíһЩÈËÈÏΪÊǿɳܵģ¬ÄÇЩÈÏΪÊǿɳܵÄÈËͨ³£ÊÇÕâ¸öÈí¼þµÄÀÏÓû§£¬ÊÂ
ʵÉÏËûÃÇÂòÁËÄǸö³ÌÐò£¬Èç¹ûÄ㻨ÁË$500ÂòÁËÄǸö³ÌÐòµÄ»°£¬Äã¾Í¿ÉÒÔÀí½âËûÃǵķ´Ó¦ÁË¡£
  ¶ÔÓÚ¶ÁÕßÀ´Ëµ£¬ÄãÃÇ×öʲô²»ÊÇÎÒµÄÎÊÌâ¼°ÎÒËù¹ØÐĵġ£¶øÎҵĹ۵ãÊÇÈç¹ûÈÏΪ·Ç·¨µÄwi
nzipÈí¼þͬIDA Pro 4.0xÒ»ÑùºÃ»ò»µ¡£Èç¹ûÄãʹÓ÷Ƿ¨µÄwinzip£¬Äã¾Í²»Ó¦µ±Ê¹Ó÷Ƿ¨µÄID
A Pro¡£

I ½éÉÜ
   ¼¸ÌìÇ°ÎÒÁÒ¾üÊôÁËһƪ¹ØÓÚ½âÃܳÌÐòµÄ½Ì³Ì£¬¶øÕâƪҲÊÇÒ»¸ö¶ÔÓÚ¸ßЧµÄ£¬¼«ºÃµÄIDA P
ro 4.0x½Ì³Ì¡£Í¨³£²ËÄñ²»Ï²»¶£¬¶ø¸ßÊÖÓÖ³ç°ÝËü¡£²»Ï²»¶µÄÔ­ÒòÊÇÒòΪIDAÏà¶ÔÓÚw32dasm
À´ËµÓиü¶àµÄ¸½¼Ó¹¦ÄܺÍ×÷Óã¬Óиü´óµÄ¸´ÔÓÐÔ
   ÔÚÏÂÃæµÄ½Ì³ÌÖÐÓÉÓÚÄã¹ýÈ¥¿ÉÄÜϲ»¶Ê¹ÓÃw32dasm£¬ÎÒ½«¾¡Á¦¸ø³öÒ»¸ö¼òµ¥ºÍÇå³þµÄ½âÊÍ
À´½éÉÜÈçºÎʹÓÃIDA¡£Ò²½«ÊÔ²î»Ø´ð"ʲôÊÇ×îºÃµÄ·´»ã±à£¿"ÕâÀïÆäʵûÓÐÒ»¸ö¼òµ¥µÄ»Ø´ð
¡£¶ÔÓÚ¸ü¶àµÄ¸ßÊÖÀ´Ëµ¿ÉÒÔ¶ÁÕâ¸ö£ºÏò²ËÄñ100£¥½âÊÍIDAµÄʹÓùý³Ì¡£

II. IDA: Ò»¸ö¸ßЧµÄ·´»ã±à¹¤¾ß

µ±ÄãÔËÐÐIDA Proʱ£¬ÄãËù×îÏÈ×¢Òâµ½µÄÊÇËüµÄ½çÃæ±Èw32dasm¸ü¼Óרҵ£¬ÕâÀï±Èw32dasmÓÐ
¸ü¶àµÄÑ¡Ïî»ò¸üÏȽøµÄµØ·½¡£ËüµÄÓŵãÊÇ¿ÉÒÔ¸üºÃµÄ·´»ã±àºÍ¸üÓÐÉî²ã·ÖÎö¡£¶øȱµãÊÇʹÓÃ
IDA¸üÀ§ÄÑ¡£
ʵ¼ÊÉÏIDAͬw32dasmÓкܶàÏàͬµÄ¹¦ÄÜ£º¿ÉÒÔ¿ìËÙµ½´ïÖ¸¶¨µÄ´úÂëλÖ㻿ÉÒÔ¿´µ½Ìøµ½Ö¸¶¨
µÄλÖõÄjmpµÄÃüÁîλÖ㻿ÉÒÔ¿´²Î¿¼×Ö·û´®£»¿ÉÒÔ±£´æ¾²Ì¬»ã±àµÈ¡£
ÏÖÔÚÈÃÎÒÃÇÔËÐкͷ´»ã±àÒ»¸öС³ÌÐò£¨ÎÒʹÓÃstarclean.exe£©Ò»¸ö´°¿Úµ¯³öÀ´£¬ÄÇÀïÓкÜ
¶àÑ¡Ï²»Òª¶¯Ëü£¬½ö½öµã»÷OK¡£ÈÃIDAÀ´·ÖÎö£¬µ±Ëü½áÊøºóÔÚnameµÄÑ¡ÏîÖÐͬw32dasmÖвÎ
¿¼×Ö·û´®Ò»Ñù£¬²éÕÒ"a"×Ö·û¡£ÔÚname´°¿ÚÖÐËÑË÷À¸Öа´a£¬È»ºó¿ªÊ¼²éÕÒ£¬Ò»µ©ÕÒµ½£¬°´en
ter»òË«»÷Ëü£¬Ëü¾Í½«µ½´ïÕýÈ·µÄλÖᣰ´ctrl+enter½«µ½´ïÏÂÒ»¸öλÖᣲο¼×Ö·û´®¾ÍÔÚ
¹â±ê¸½½ü¡£IDA¾Í¿ÉÒÔµ½´ïÏàÓ¦µÄλÖÃÁË¡£
ÁíÒ»¸öͬw32dasmÏàͬµÄ£ºjmpºÍcall²Î¿¼ÔÚIDAÒ²ÊÇÓÐЧµÄ¡£ÔÚw32dasm·´»ã±àµÄ´úÂëͬIDA
ÖÐÏàͬµÄ¡£
¿ªÊ¼Êµ¼ù´úÂë (w32dasm)

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403B50(C)
|
:00403B5F 81FAFC000000            cmp edx, 000000FC
:00403B65 0F8478010000            je 00403CE3
:00403B6B 8D8424B4000000          lea eax, dword ptr [esp+000000B4]
:00403B72 6804010000              push 00000104
:00403B77 50                      push eax

* Reference To: KERNEL32.GetModuleFileNameA, Ord:00E9h
                                  |
:00403B78 8B2D88924000            mov ebp, dword ptr [00409288]
:00403B7E 6A00                    push 00000000
:00403B80 FFD5                    call ebp
:00403B82 85C0                    test eax, eax
:00403B84 7516                    jne 00403B9C

* Possible StringData Ref from Data Obj ->""
                                  |
:00403B86 BE206A4000              mov esi, 00406A20
:00403B8B 8DBC24B4000000          lea edi, dword ptr [esp+000000B4]
:00403B92 B905000000              mov ecx, 00000005
:00403B97 F3                      repz
:00403B98 A5                      movsd
:00403B99 66A5                    movsw
:00403B9B A4                      movsb
End partial code 

¿ªÊ¼Êµ¼ù´úÂë (IDA Pro 4.0x)

00403B5F loc_403B5F:                             ; CODE XREF: sub_403B00+50j
00403B5F                 cmp     edx, 0FCh
00403B65                 jz      loc_403CE3
00403B6B                 lea     eax, [esp+1B8h+var_104]
00403B72                 push    104h
00403B77                 push    eax
00403B78                 mov     ebp, ds:GetModuleFileNameA
00403B7E                 push    0
00403B80                 call    ebp ; GetModuleFileNameA
00403B82                 test    eax, eax
00403B84                 jnz     short loc_403B9C
00403B86                 mov     esi, offset aProgramNameUnk ; ""
00403B8B                 lea     edi, [esp+1B8h+var_104]
00403B92                 mov     ecx, 5
00403B97                 repe movsd
00403B99                 movsw
00403B9B                 movsb

½áÊøʵ¼ù´úÂë

ÄãÔÚÕâÀï¿´µ½£¬IDAÌṩÁ˸ü¶àµÄϸ½ÚÐÅÏ¢£¬ËüÊǸü¼ÓÇå³þ£¬ÓÃÒ»¸ö²Î¿¼×÷ΪÀý×Ó¡£
ÔÚw32dasmÖÐÈçÏ£º
* Referenced by a (U)nconditional or (C)onditional Jump at Address: 
|:00403B50(C) 

ÔÚIDA ProÖÐÈçÏ£º
CODE XREF: sub_403B00+50j 

IDA provides ʹÓøü¶ÌµÄÐÐÀ´Ìṩ¸ü¶àµÄÐÅÏ¢¡£
1. ÓÃÒ»¸öjump (j)
2. jumpµ½´úÂëµÄλÖÃλÓÚ00403B50 (=403B00+50)
3. º¯Êý/call±¾ÉíÔÚ403B00(403B00+50)
4. jumpÔÚ.code section

Èç¹û²Î¿¼µÄÊÇÒ»¸öcallÄÇôËü½«ÈçÏ£º
CODE XREF: sub_403B00+50p

ÁíÒ»¸ö´óµÄÓŵãÊÇIDA¿ÉÒÔת»»±äÁ¿¡£Äã¿ÉÒÔË«»÷±äÁ¿ÒÔÕÒµ½ËüÃDZ£´æµÄµØÖ·´¦: lea edi, 
[esp+1B8h+var_104]¡£
¹¦ÄÜÖÐ×îÓÐÓõÄÖ®Ò»ÊÇʹÓýüËƲéÕÒ¡£ºÜÈÝÒ×½âÊÍ£ºIDA¾¡Á¦¼Çס¼Ä´æÆ÷Ëù¹ØÁªµÄ¿âº¯Êý¡£
ÈçÏ£º

¿ªÊ¼Êµ¼ù´úÂë (IDA Pro) 

004012D2 loc_4012D2:                             ; CODE XREF: sub_401280+5Fj
004012D2                 movsx   ecx, byte ptr [eax]
004012D5                 push    eax
004012D6                 lea     ebp, [ebp+ecx*2+0]
004012DA                 call    edi ; CharNextA ; Return a pointer to the next character in a
                                                  ; string
004012DC                 cmp     byte ptr [eax], 0
004012DF                 jnz     short loc_4012D2

½áÊø´úÂë

¿ªÊ¼´úÂë (w32dasm)

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004012DF(C)
|
:004012D2 0FBE08                  movsx ecx, byte ptr [eax]
:004012D5 50                      push eax
:004012D6 8D6C4D00                lea ebp, dword ptr [ebp+2*ecx]
:004012DA FFD7                    call edi
:004012DC 803800                  cmp byte ptr [eax], 00
:004012DF 75F1                    jne 004012D2
½áÊø´úÂë

Äã×¢Òâµ½ËüÃǵIJ»Í¬ÁËÂð£¿IDA½«Ïò½âÊÍÿһ¼þÊÂÇé¡£
ÔÚIDAÖÐÁíÒ»¸öͬw32dasm½üËƵÄÊÇÊ®·Ö¼òµ¥µÄ£¬È磺"Goto code location" µÈͬÓÚÔÚIDA"J
ump - Jump to adress" . »òÕß "Goto entrypoint" µÈͬÓÚÔÚIDA"Jump - Jump to entry 
point" .

ÄÇЩ¾ÍÊÇÔÚÄãÁ˽âIDA¿ªÊ¼Ê¹ÓÃËüÇ°×îΪÖØÒªµÄ¶«Î÷¡£ÓÐʱ £¬IDAÏÔʾ´óÁ¿µÄ"db"£¬²Î¿¼×Ö
·û´®£¬½öÓдúÂë¡£½ö½ö¿ÉÒÔÉèºÃ¹â±ê£¬°´"c"¼ü£¬IDAת»»´úÂëÈçÏÂ

¿ªÊ¼(ÔÚ°´'C'֮ǰ) 

00401228                 dd offset unk_406130
0040122C                 db  8Bh ; ?0040122D                 db  35h ; 5
0040122E                 dd offset RegSetValueExA
00401232                 db  6Ah ; j
00401233                 db    1 ;  
00401234                 db  6Ah ; j
00401235                 db    0 ;  
00401236                 db  68h ; h
00401237                 dd offset aName         ; "Name"
0040123B                 db  51h ; Q
0040123C                 db 0FFh ;  
0040123D                 db 0D6h ; ?0040123E                 db  8Bh ; ?0040123F
                 db  4Ch ; L
00401240                 db  24h ; $
00401241                 db    8 ;  
00401242                 db  68h ; h

½áÊø´úÂë 

¿ªÊ¼´úÂë (°´'C'ºó) 

0040122C                 mov     esi, ds:RegSetValueExA
00401232 ; ---------------------------------------------------------------------------
00401232                 push    1
00401234                 push    0
00401236                 push    offset aName    ; "Name"
0040123B ; ---------------------------------------------------------------------------
0040123B                 push    ecx
0040123C                 call    esi ; RegSetValueExA
0040123E                 mov     ecx, [esp+8]
00401242                 push    100h
00401247                 push    offset unk_406030
0040124C ; ---------------------------------------------------------------------------
0040124C                 push    1
0040124E                 push    0
00401250                 push    offset aCode    ; "Code"
00401255 ; ---------------------------------------------------------------------------
00401255                 push    ecx
00401256                 call    esi ; RegSetValueExA
00401258                 mov     eax, [esp+8]
0040125C                 push    eax
0040125D                 call    ds:RegCloseKey

½áÊø´úÂë 

IDAÁíÒ»¸öÓŵ㣨¿ìËÙÏà¼Ó£©:

1. Äܹ»¶Ôw32dasmÎÞ·¨·´»ã±àµÄ×îÄѵÄÈí¼þ½øÐз´»ã±à£¨Èç¼Ó¿Ç³ÌÐò£©
2. Äܹ»ÒÔ.asm .sym ºÍÉõÖÁÊÇ .exe¼°ÆäËüÎļþÐÎʽ±£´æ 
3. ѹËõµÄ¾²Ì¬»ã±à£¬¿ÉÒÔ½ÚÊ¡´óÁ¿µÄ´ÅÅ̿ռ䡣
4. ¿ÉÒÔÖØÃüÃûº¯Êý
5. Äܹ»·ÖÎö¾Þ´óµÄ³ÌÐò
µÈµÈ.... ;-)

III. w32dasm??

  

Äã¿´ÍêÁ˺óÄãÏÖÔÚ¿ÉÒÔ×ÔÎÊ"Èç¹ûIDAÕâôºÃ¿´£¬ÎªÊ²Ã´ÎÒ»¹ÒªÊ¹ÓÃw32dasm£¿"ÏÂÃæ¾ÍÊǶÔÓÚ
Õâ¸öµÄ½âÊÍ£º

Ê×ÏÈÊÇËٶȣ¬¶ÔÓÚIDAÀ´·ÖÎöÒ»¸öС³ÌÐòÊǷdz£·Ç³£µÄ¿ì£¬µ«ÊÇÈç¹û·ÖÎöÒ»¸ö´óµÄexeËü¾ÍÒª
»¨·Ñ3¸öСʱ»ò¸ü¶àµÄʱ¼äÀ´È«Ãæ·ÖÎöexe¡£ 
Æä´Î£¬Èç¹ûÄã¶ÔÓÚÒ»¸öÖ¸¶¨µÄËÑË÷£¬IDA½«ºÜÂýµÄ£¬¶øÔÚw32dasmÖÐÔÚÎı¾·½ÃæÖÐËÑË÷ÊǺܿì
µÄ¡£
µÚÈý£ºµ±·ÖÎöÒ»¸ö½öÓмòµ¥µÄ±£»¤µÄ³ÌÐòʱ£¬w32dasm¾ÍΪÊ×Ñ¡¡£ÒòΪÄã¾Í²»ÐèÒªÔÚIDAÄÇЩ
¸½¼ÓµÄ¹¦ÄÜÁË¡£
ÉÏÃæµÄÈý¸öÒòËØ¿ÉÒÔ˵Ã÷Ò»ÇÐÁË :-) Èç¹ûÄãÖªµÀÆäËüµÄʹÓÃw32dasmÔ­ÒòµÄ»°£¬Çë¸æËßÎÒ¡£

IV. ½áÊø

ÓÖÒ»¸ö½Ì³Ì½áÊøÁË¡£ÏíÊÜIDA and w32dasmÒÔ¼°ËùÓÐ.....ÏíÊÜÑо¿ºÍ±£³ÖѧϰºÍ¼ÌÐøÑо¿ºÍ
Æƽâ°É¡£²»ÊÇΪÁ˽âÃÜ£¬½öÊÇÎÄÕ£¬Ð´ÏÂÄãµÄÎÄÕ£¬´«²¥ÄãµÄ֪ʶ¡£¶ÔÓÚ½âÃÜÕâÊÇÖØÒªµÄÀ´
˵¡£²»ÒªÓÃÓÚ½âÃÜ°É¡£

¸Ðл´ó¼Ò

The Blackbird 

Endnote: 
The Blackbird ´´×÷ÓÚ1999-2000
´ËÎÄÕ¿ÉÒÔ×ÔÓÉ·Ö·¢£¬³ö°æ£¬´òÓ¡¡­¡­µÈ¾¡¿ÉÄܳ¤µÄÐÞÊΡ£


£¨ÒëÕß×¢£º»¶Ó­·ÃÎʳÌʽÁÔÈ˵ÄÖ÷Ò³£ºhttp://programhunter.126.com£©

·µ»Ø
 
·µ»Ø
 
·µ»Ø
%¡¾³õѧÌìµØ¡¿
                 
·µ»Ø
O¡¾ÎÊÌâ´ðÒÉ¡¿
 
·µ»Ø
4¡¾ÍøÕ¾½éÉÜ¡¿
 
 
·µ»Ø
,¡¾ÔÓÖ¾ÐÅÏä¡¿
Ͷ¸åÐÅÏ䣺discoveredit@china.com
´ðÒÉÐÅÏ䣺discoveranswer@china.com
°ßÖñÐÅÏ䣺programhunter@china.com
·µ»Ø