⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lesson813.htm

📁 为所有对破解感兴趣的朋友准备的礼物。希望大家能够喜欢。
💻 HTM
字号:
<html>
<head>
<title>看雪学苑</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
.p8 {  font-size: 8pt}
.p9 {  font-size: 9pt}
a:hover {  color: #00FF00}
a {  text-decoration: none}
.p12 {  font-size: 12pt; font-weight: bold; color: #FF3333}
-->
</style>
</head>

<body bgcolor="#FFFFFF" vlink="#0033CC">
<table width="80%" border="1" cellspacing="0" cellpadding="0" align="center" bgcolor="#99CCFF" bordercolorlight="#99CCFF" bordercolordark="#99CCFF">
  <tr> 
    <td width="72%" class="p9"><a href="javascript:if(confirm('http://toye.yeah.net/  \n\n这个文件不能通过 Teleport Pro 取回, 因为 它被访问于一个域或在它的起始地址边界外部的路径上.  \n\n你想从服务器打开它吗?'))window.location='http://toye.yeah.net/'" tppabs="http://toye.yeah.net/">看雪教学</a></td>
    <td width="10%" class="p9">&nbsp; </td>
    <td width="10%"><a href="index.htm" tppabs="http://toye.dihou.org/index.htm" class="p9">返回<br>
      首页 <br>
      </a></td>
    <td width="8%"><a href="molu.htm" tppabs="http://toye.dihou.org/molu.htm" class="p9">返回<br>
      目录 </a></td>
  </tr>
</table>
<table width="80%" cellspacing="0" cellpadding="0" align="center" bordercolorlight="#99CCFF" bordercolordark="#99CCFF">
  <tr bgcolor="#E1F1F1"> 
    <td> 
      <table width="100%" cellspacing="0" cellpadding="0">
        <tr bgcolor="#FFFF33"> 
          <td> 
            <div align="center" class="p12">第八课 静态反汇编</div>
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table width="80%" cellspacing="0" align="center">
  <tr bgcolor="#CCFFFF" class="p9"> 
    <td width="20%" bgcolor="#CCFFFF"> 
      <div align="center"><a href="lesson811.htm" tppabs="http://toye.dihou.org/lesson811.htm">W32Dasm简介</a></div>
    </td>
    <td width="20%" bgcolor="#CCFFFF"> 
      <div align="center"><a href="lesson812.htm" tppabs="http://toye.dihou.org/lesson812.htm">HIEW使用说明</a></div>
    </td>
    <td width="20%" bgcolor="#FFFFFF"> 
      <div align="center">IDA使用手册</div>
    </td>
    <td width="20%"> 
      <div align="center"><a href="lesson814.htm" tppabs="http://toye.dihou.org/lesson814.htm">折解教程</a></div>
    </td>
    <td width="20%"> 
      <div align="center"><a href="lesson815.htm" tppabs="http://toye.dihou.org/lesson815.htm">习题</a></div>
    </td>
  </tr>
</table>
<table width="80%" cellspacing="0" align="center">
  <tr> 
    <td width="20%"><img src="lesson81301.gif" tppabs="http://toye.dihou.org/img/lesson81301.gif" width="164" height="165"></td>
    <td width="80%"> 
      <p><span class="p9"><a href="javascript:if(confirm('http://toye.dihou.org/started.pdf  \n\n这个文件不能通过 Teleport Pro 取回, 因为 服务器报告找不到这个文件.  \n\n你想从服务器打开它吗?'))window.location='http://toye.dihou.org/started.pdf'" tppabs="http://toye.dihou.org/started.pdf"><br>
        </a></span></p>
      <p><span class="p9"><a href="javascript:if(confirm('http://toye.dihou.org/IDAPro38x.pdf  \n\n这个文件不能通过 Teleport Pro 取回, 因为 没有遇到方案的文件类型说明.  \n\n你想从服务器打开它吗?'))window.location='http://toye.dihou.org/IDAPro38x.pdf'" tppabs="http://toye.dihou.org/IDAPro38x.pdf" target="_blank"> <span class="p9">IDA 
        Pro 3.8x 操作手册</span></a><span class="p9">(PDF格式、英文)</span></span></p>
      <p><span class="p9"><a href="javascript:if(confirm('http://www.datarescue.com/idabase/ida.htm  \n\n这个文件不能通过 Teleport Pro 取回, 因为 它被访问于一个域或在它的起始地址边界外部的路径上.  \n\n你想从服务器打开它吗?'))window.location='http://www.datarescue.com/idabase/ida.htm'" tppabs="http://www.datarescue.com/idabase/ida.htm" target="_blank">IDA 
        Pro主页</a></span></p>
      <p class="p9"><br>
      </p>
    </td>
  </tr>
</table>
<hr size="1" width="80%" align="center">
<p class="p9"><span class="p9"><span class="p9">附:一篇IDA与W32Dasm的比较教学</span></span></p>
<p><span class="p9"><span class="p9"><font face="Verdana, Courier" size="+2" color="black"><span class="p9"><b>IDA 
  Pro Advanced 4.0x</b></span></font></span></span></p>
<p><span class="p9"><span class="p9">程式猎人翻译 <br>
  (译者注:欢迎访问程式猎人的主页:<a href="javascript:if(confirm('http://programhunter.126.com/  \n\n这个文件不能通过 Teleport Pro 取回, 因为 它被访问于一个域或在它的起始地址边界外部的路径上.  \n\n你想从服务器打开它吗?'))window.location='http://programhunter.126.com/'" tppabs="http://programhunter.126.com/" target="_blank">http://programhunter.126.com</a>) 
  <br>
  对象:IDA Pro反汇编软件 <br>
  目标: N/A <br>
  URL: <a href="javascript:if(confirm('http://www.datarescue.com/  \n\n这个文件不能通过 Teleport Pro 取回, 因为 它被访问于一个域或在它的起始地址边界外部的路径上.  \n\n你想从服务器打开它吗?'))window.location='http://www.datarescue.com/'" tppabs="http://www.datarescue.com/" target="_blank">http://www.datarescue.com</a> 
  <br>
  作者: BlackB <br>
  日期: 2000-06-05 <br>
  使用工具: Your brain <br>
  难度等级(级 1-5): 1 <br>
  <br>
  开始前 <br>
  </span></span><span class="p9"><span class="p9"><br>
  &nbsp; IDA Pro Avanced是一个极好的反汇编工具,它大的胜过了w32dasm。近来它的盗版已经在网上传播开了,你可以很轻松得到它。对于这方面的观点有如下几种:一些人认为这是好的,是自由的;而另一些人认为是可耻的,那些认为是可耻的人通常是这个软件的老用户,事实上他们买了那个程序,如果你花了$500买了那个程序的话,你就可以理解他们的反应了。&nbsp; 
  对于读者来说,你们做什么不是我的问题及我所关心的。而我的观点是如果认为非法的winzip软件同IDA Pro 4.0x一样好或坏。如果你使用非法的winzip,你就不应当使用非法的IDA 
  Pro。 <br>
  <br>
  <b>I 介绍 <br>
  </b></span></span><span class="p9"><span class="p9"><br>
  &nbsp; 几天前我烈军属了一篇关于解密程序的教程,而这篇也是一个对于高效的,极好的IDA Pro 4.0x教程。通常菜鸟不喜欢,而高手又崇拜它。不喜欢的原因是因为IDA相对于w32dasm来说有更多的附加功能和作用,有更大的复杂性 
  <br>
  &nbsp; 在下面的教程中由于你过去可能喜欢使用w32dasm,我将尽力给出一个简单和清楚的解释来介绍如何使用IDA。也将试差回答"什么是最好的反汇编?"这里其实没有一个简单的回答。对于更多的高手来说可以读这个:向菜鸟100%解释IDA的使用过程。 
  <br>
  <br>
  <b>II. IDA: 一个高效的反汇编工具 </b><br>
  <br>
  当你运行IDA Pro时,你所最先注意到的是它的界面比w32dasm更加专业,这里比w32dasm有更多的选项或更先进的地方。它的优点是可以更好的反汇编和更有深层分析。而缺点是使用IDA更困难。 
  <br>
  实际上IDA同w32dasm有很多相同的功能:可以快速到达指定的代码位置;可以看到跳到指定的位置的jmp的命令位置;可以看参考字符串;可以保存静态汇编等。 
  <br>
  现在让我们运行和反汇编一个小程序(我使用starclean.exe)一个窗口弹出来,那里有很多选项,不要动它,仅仅点击OK。让IDA来分析,当它结束后在name的选项中同w32dasm中参考字符串一样,查找"a"字符。在name窗口中搜索栏中按a,然后开始查找,一旦找到,按enter或双击它,它就将到达正确的位置。按ctrl+enter将到达下一个位置。参考字符串就在光标附近。IDA就可以到达相应的位置了。 
  <br>
  另一个同w32dasm相同的:jmp和call参考在IDA也是有效的。在w32dasm反汇编的代码同IDA中相同的。 </span></span></p>
<p><span class="p9"><span class="p9"><span class="p9"><b><font color="#FF3300">代码开始<font color="#0000FF">(w32dasm)</font></font></b></span></span></span></p>
<pre><span class="p9"><span class="p9"><span class="p9">* 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 ->"<program name unknown>"
                                  |
: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<br></span></span></span><span class="p9"><span class="p9"><span class="p9"><font color="#FF3300"><b><font color="#FF3300">结束结束</font></b></font></span></span></span><br>
</pre>
<p><span class="p9"><span class="p9"><span class="p9"><span class="p9"><b><font color="#FF3300">代码开始</font></b></span><b><font color="#FF3300"><font color="#0000FF">(IDA 
  Pro 4.0x)</font></font></b></span></span></span></p>
<pre><span class="p9"><span class="p9"><span class="p9">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 ; "<program name unknown>"
00403B8B                 lea     edi, [esp+1B8h+var_104]
00403B92                 mov     ecx, 5
00403B97                 repe movsd
00403B99                 movsw
00403B9B                 movsb
</span></span></span><span class="p9"><span class="p9"><span class="p9"><font color="#FF3300"><b><font color="#FF3300">代码结束</font></b> 
  </font></span></span></span></pre>
<p><span class="p9"><span class="p9"><span class="p9">你在这里看到,IDA提供了更多的细节信息,它是更加清楚,用一个参考作为例子。 
  <br>
  在<b>w32dasm</b>中如下: <br>
  <font color="#0000FF">* Referenced by a (U)nconditional or (C)onditional Jump 
  at Address: <br>
  |:00403B50(C) </font></span></span></span></p>
<p><span class="p9"><span class="p9"><span class="p9">在<b>IDA Pro</b>中如下:<br>
  <font color="#0000FF">CODE XREF: sub_403B00+50j </font></span></span></span></p>
<p><span class="p9">IDA provides 使用更短的行来提供更多的信息。 <br>
  1. 用一个jump (j) <br>
  2. jump到代码的位置位于00403B50 (=403B00+50) <br>
  3. 函数/call本身在403B00(403B00+50) <br>
  4. jump在.code section <br>
  <br>
  如果参考的是一个call那么它将如下: <br>
  CODE XREF: sub_403B00+50p <br>
  <br>
  另一个大的优点是IDA可以转换变量。你可以双击变量以找到它们保存的地址处: lea edi, [esp+1B8h+var_104]。 <br>
  功能中最有用的之一是使用近似查找。很容易解释:IDA尽力记住寄存器所关联的库函数。如下: <br>
  <br>
  <font color="#FF3300"><b>代码开始 </b></font>(<font color="#0000FF"><b>IDA Pro</b></font>) 
  <br>
  </span></p>
<pre><span class="p9"><span class="p9"><span class="p9">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 <br>                                                 ; string
004012DC                 cmp     byte ptr [eax], 0
004012DF                 jnz     short loc_4012D2
</span></span></span><span class="p9"><span class="p9"><span class="p9"><font color="#FF3300"><b><font color="#FF3300">代码结束</font></b> 
  </font></span></span></span></pre>
<p><span class="p9"><span class="p9"><span class="p9"><b><font color="#FF3300"><b>代码开始</b> 
  <font color="#0000FF">(w32dasm)</font></font></b></span></span></span></p>
<pre><span class="p9"><span class="p9"><span class="p9">* 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<br></span></span></span><span class="p9"><span class="p9"><span class="p9"><span class="p9"><font color="#FF3300"><b><font color="#FF3300">代码结束</font></b> 
  </font></span></span></span></span></pre>
<p><span class="p9">你注意到它们的不同了吗?IDA将向解释每一件事情。 <br>
  在IDA中另一个同w32dasm近似的是十分简单的,如:"Goto code location" 等同于在IDA"Jump - Jump to adress" 
  . 或者 "Goto entrypoint" 等同于在IDA"Jump - Jump to entry point" . <br>
  <br>
  那些就是在你了解IDA开始使用它前最为重要的东西。有时 ,IDA显示大量的"db",参考字符串,仅有代码。仅仅可以设好光标,按"c"键,IDA转换代码如下 
  <br>
  </span></p>
<p><span class="p9"><span class="p9"><span class="p9"><b><font color="#FF3300">开始 
  <font color="#0000FF">(在按'C'之前) </font></font></b></span></span></span></p>
<pre><span class="p9"><span class="p9"><span class="p9">00401228                 dd offset unk_406130
0040122C                 db  8Bh ; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -