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£©
|