<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>零度x&#039;s blog &#187; 逆向学习</title>
	<atom:link href="http://www.lingdux.com/category/reverse-learning/feed" rel="self" type="application/rss+xml" />
	<link>http://www.lingdux.com</link>
	<description>Take it slowly,it&#039;s OK,it&#039;s OK.</description>
	<lastBuildDate>Tue, 06 Jul 2010 03:50:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PE头变形~~</title>
		<link>http://www.lingdux.com/2010/190.html</link>
		<comments>http://www.lingdux.com/2010/190.html#comments</comments>
		<pubDate>Fri, 28 May 2010 05:50:28 +0000</pubDate>
		<dc:creator>零度x</dc:creator>
				<category><![CDATA[逆向学习]]></category>
		<category><![CDATA[PE头]]></category>
		<category><![CDATA[变形]]></category>

		<guid isPermaLink="false">http://www.lingdux.com/?p=190</guid>
		<description><![CDATA[思路来自小鱼的文章

show图纪念~！~

]]></description>
			<content:encoded><![CDATA[<p>思路来自小鱼的文章</p>
<p>show图纪念~！~</p>
<p><img class="aligncenter size-full wp-image-192" title="pe_header" src="http://www.lingdux.com/wp-content/uploads/2010/05/pe_header.jpg" alt="" width="535" height="165" /></p>
<p><span id="more-190"></span></p>
<p><a href="http://www.lingdux.com/wp-content/uploads/2010/05/1.jpg"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lingdux.com/2010/190.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>手工给PE文件添加区块</title>
		<link>http://www.lingdux.com/2010/184.html</link>
		<comments>http://www.lingdux.com/2010/184.html#comments</comments>
		<pubDate>Mon, 24 May 2010 03:55:57 +0000</pubDate>
		<dc:creator>零度x</dc:creator>
				<category><![CDATA[逆向学习]]></category>
		<category><![CDATA[PE]]></category>
		<category><![CDATA[区块]]></category>
		<category><![CDATA[手工]]></category>
		<category><![CDATA[添加]]></category>

		<guid isPermaLink="false">http://www.lingdux.com/?p=184</guid>
		<description><![CDATA[1.在区块表(section table)中最后一个IMAGE_SECTION_TABLE后面添加一个IMAGE_SECTION_TABLE

IMAGE_SECTION_TABLE 结构如下

typedef struct _IMAGE_SECTION_HEADER {

<span class="readmore"><a href="http://www.lingdux.com/2010/184.html" title="手工给PE文件添加区块">阅读全文——共718字</a></span>]]></description>
			<content:encoded><![CDATA[<p>1.在区块表(section table)中最后一个IMAGE_SECTION_TABLE后面添加一个IMAGE_SECTION_TABLE<br />
IMAGE_SECTION_TABLE 结构如下<br />
typedef struct _IMAGE_SECTION_HEADER {<br />
    BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];<br />
    union {<br />
            DWORD   PhysicalAddress;<br />
            DWORD   VirtualSize;<br />
    } Misc;<br />
    DWORD   VirtualAddress;<br />
    DWORD   SizeOfRawData;<br />
    DWORD   PointerToRawData;<br />
    DWORD   PointerToRelocations;<br />
    DWORD   PointerToLinenumbers;<br />
    WORD    NumberOfRelocations;<br />
    WORD    NumberOfLinenumbers;<br />
    DWORD   Characteristics;<br />
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;<br />
按照结构添加一个长度为1000h名为.<a href="http://www.lingdux.com" target="_blank">lingdux</a>的区块：</p>
<p><span id="more-184"></span><br />
名称：.<a href="http://www.lingdux.com" target="_blank">lingdux</a><br />
真实长度：1000h<br />
RVA地址：290000h<br />
文件中对齐后的尺寸：1000h<br />
在文件中的偏移：0028d730<br />
其他00填充<br />
区块属性：E0200000(可读可写可执行)</p>
<p>添加好后修改PE头处NumberOfSections,从4改为5</p>
<p>修正SizeOfImage，文件大小发生变化，故修改之</p>
<p style="text-align: center;"><a href="http://www.lingdux.com/wp-content/uploads/2010/05/section1.jpg"><img class="size-full wp-image-185 aligncenter" title="section1" src="http://www.lingdux.com/wp-content/uploads/2010/05/section1.jpg" alt="" width="540" height="455" /></a></p>
<p>2.在文件末尾插入1000h的数据块</p>
<p style="text-align: center;"><a href="http://www.lingdux.com/wp-content/uploads/2010/05/section2.jpg"><img class="size-full wp-image-186 aligncenter" title="section2" src="http://www.lingdux.com/wp-content/uploads/2010/05/section2.jpg" alt="" width="402" height="205" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lingdux.com/2010/184.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EZ VIDEO TO AVI Converter注册码分析</title>
		<link>http://www.lingdux.com/2010/169.html</link>
		<comments>http://www.lingdux.com/2010/169.html#comments</comments>
		<pubDate>Fri, 07 May 2010 04:01:01 +0000</pubDate>
		<dc:creator>零度x</dc:creator>
				<category><![CDATA[逆向学习]]></category>
		<category><![CDATA[分析]]></category>
		<category><![CDATA[注册码]]></category>

		<guid isPermaLink="false">http://www.lingdux.com/?p=169</guid>
		<description><![CDATA[Eztoo AVI Video Converter 是一个功能强大的AVI格式转换工具，可以将MPEG(MPG)、WMV(ASF、ASX)、AVI(DivX、XviD)、VCD格式转换为AVI格式的文件。它使用方便，鼠标点击就可以完成转换，转换速度很快，质量也很好，支持进行批量和自动转换，也可以自己设定相应的参数来输出AVI文件。在它的帮助下，转换工作变得非常轻松。 

下载地址：http://www.newhua.com/soft/56777.htm

安装后运行，提示注册，随意输入提示“invalid register code! please retry!”

<span class="readmore"><a href="http://www.lingdux.com/2010/169.html" title="EZ VIDEO TO AVI Converter注册码分析">阅读全文——共9021字</a></span>]]></description>
			<content:encoded><![CDATA[<p>Eztoo AVI Video Converter 是一个功能强大的AVI格式转换工具，可以将MPEG(MPG)、WMV(ASF、ASX)、AVI(DivX、XviD)、VCD格式转换为AVI格式的文件。它使用方便，鼠标点击就可以完成转换，转换速度很快，质量也很好，支持进行批量和自动转换，也可以自己设定相应的参数来输出AVI文件。在它的帮助下，转换工作变得非常轻松。 </p>
<p>下载地址：http://www.newhua.com/soft/56777.htm</p>
<p>安装后运行，提示注册，随意输入提示“invalid register code! please retry!”</p>
<p>然后找字符串的调用位置如下：</p>
<p>004B03F6   .  55            push    ebp<br />
004B03F7   .  68 FE054B00   push    004B05FE<br />
004B03FC   .  64:FF30       push    dword ptr fs:[eax]<br />
004B03FF   .  64:8920       mov     dword ptr fs:[eax], esp<br />
004B0402   .  C605 9C7D4B00&gt;mov     byte ptr [4B7D9C], 1             ;  全局变量<br />
004B0409   .  FF05 987D4B00 inc     dword ptr [4B7D98]               ;  &#8212;&#8212;&#8212;-3次输入限制&#8212;&#8212;&#8212;&#8212;-</p>
<p><span id="more-169"></span><br />
004B040F   .  833D 987D4B00&gt;cmp     dword ptr [4B7D98], 3<br />
004B0416      7E 07         jle     short 004B041F<br />
004B0418   .  8BC7          mov     eax, edi<br />
004B041A   .  E8 B907FDFF   call    00480BD8                         ;  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
004B041F   &gt;  8D55 F4       lea     edx, dword ptr [ebp-C]<br />
004B0422   .  8B87 1C030000 mov     eax, dword ptr [edi+31C]<br />
004B0428   .  E8 0342FBFF   call    00464630                         ;  取用户名<br />
004B042D   .  8B45 F4       mov     eax, dword ptr [ebp-C]<br />
004B0430   .  8D55 FC       lea     edx, dword ptr [ebp-4]<br />
004B0433   .  E8 7C82F5FF   call    004086B4<br />
004B0438   .  8D55 F0       lea     edx, dword ptr [ebp-10]<br />
004B043B   .  8B45 FC       mov     eax, dword ptr [ebp-4]<br />
004B043E   .  E8 A582F5FF   call    004086E8                         ;  strcpy复制用户名<br />
004B0443   .  8B55 F0       mov     edx, dword ptr [ebp-10]<br />
004B0446   .  8D45 FC       lea     eax, dword ptr [ebp-4]<br />
004B0449   .  E8 763EF5FF   call    004042C4<br />
004B044E   .  BB 15000000   mov     ebx, 15                          ;  &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;比较用户名&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
004B0453   .  BE CC5A4B00   mov     esi, 004B5ACC<br />
004B0458   &gt;  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  用户名<br />
004B045B   .  8B16          mov     edx, dword ptr [esi]             ;  真正的用户名<br />
004B045D   .  E8 D641F5FF   call    00404638                         ;  比较<br />
004B0462   .  75 09         jnz     short 004B046D<br />
004B0464   .  C605 9C7D4B00&gt;mov     byte ptr [4B7D9C], 0             ;  相等则全局变量置0<br />
004B046B   .  EB 06         jmp     short 004B0473<br />
004B046D   &gt;  83C6 04       add     esi, 4<br />
004B0470   .  4B            dec     ebx<br />
004B0471   .^ 75 E5         jnz     short 004B0458<br />
004B0473   &gt;  803D 9C7D4B00&gt;cmp     byte ptr [4B7D9C], 0<br />
004B047A   .  74 1A         je      short 004B0496<br />
004B047C   .  6A 00         push    0<br />
004B047E   .  66:8B0D 0C064&gt;mov     cx, word ptr [4B060C]<br />
004B0485   .  B2 02         mov     dl, 2<br />
004B0487   .  B8 18064B00   mov     eax, 004B0618                    ;  invalid register code! please retry!<br />
004B048C   .  E8 7B55F8FF   call    00435A0C<br />
004B0491   .  E9 2D010000   jmp     004B05C3                         ;  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
004B0496   &gt;  8D55 EC       lea     edx, dword ptr [ebp-14]<br />
004B0499   .  8B87 20030000 mov     eax, dword ptr [edi+320]<br />
004B049F   .  E8 8C41FBFF   call    00464630                         ;  取序列号<br />
004B04A4   .  8B45 EC       mov     eax, dword ptr [ebp-14]<br />
004B04A7   .  8D55 F8       lea     edx, dword ptr [ebp-8]<br />
004B04AA   .  E8 0582F5FF   call    004086B4<br />
004B04AF   .  8D55 E8       lea     edx, dword ptr [ebp-18]<br />
004B04B2   .  8B45 F8       mov     eax, dword ptr [ebp-8]<br />
004B04B5   .  E8 2E82F5FF   call    004086E8                         ;  strcpy复制序列号<br />
004B04BA   .  8B55 E8       mov     edx, dword ptr [ebp-18]<br />
004B04BD   .  8D45 F8       lea     eax, dword ptr [ebp-8]<br />
004B04C0   .  E8 FF3DF5FF   call    004042C4<br />
004B04C5   .  837D FC 00    cmp     dword ptr [ebp-4], 0             ;  用户名是否为空<br />
004B04C9   .  0F84 F4000000 je      004B05C3<br />
004B04CF   .  837D F8 00    cmp     dword ptr [ebp-8], 0             ;  序列号是否为空<br />
004B04D3   .  0F84 EA000000 je      004B05C3<br />
004B04D9   .  8B45 F8       mov     eax, dword ptr [ebp-8]<br />
004B04DC   .  E8 0B40F5FF   call    004044EC                         ;  取序列号长度<br />
004B04E1   .  85C0          test    eax, eax<br />
004B04E3   .  7E 35         jle     short 004B051A<br />
004B04E5   .  BA 01000000   mov     edx, 1                           ;  &#8212;&#8212;&#8212;&#8211;判断序列号每一位是不是数字&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
004B04EA   &gt;  8B4D F8       mov     ecx, dword ptr [ebp-8]<br />
004B04ED   .  0FB64C11 FF   movzx   ecx, byte ptr [ecx+edx-1]        ;  序列号数组<br />
004B04F2   .  83F9 30       cmp     ecx, 30<br />
004B04F5   .  7C 05         jl      short 004B04FC<br />
004B04F7   .  83F9 39       cmp     ecx, 39<br />
004B04FA   .  7E 1A         jle     short 004B0516<br />
004B04FC   &gt;  6A 00         push    0<br />
004B04FE   .  66:8B0D 0C064&gt;mov     cx, word ptr [4B060C]<br />
004B0505   .  B2 02         mov     dl, 2<br />
004B0507   .  B8 18064B00   mov     eax, 004B0618                    ;  invalid register code! please retry!<br />
004B050C   .  E8 FB54F8FF   call    00435A0C<br />
004B0511   .  E9 AD000000   jmp     004B05C3<br />
004B0516   &gt;  42            inc     edx<br />
004B0517   .  48            dec     eax<br />
004B0518   .^ 75 D0         jnz     short 004B04EA                   ;  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
004B051A   &gt;  33F6          xor     esi, esi<br />
004B051C   .  8B45 FC       mov     eax, dword ptr [ebp-4]<br />
004B051F   .  E8 C83FF5FF   call    004044EC                         ;  取用户名长度<br />
004B0524   .  85C0          test    eax, eax<br />
004B0526   .  7E 13         jle     short 004B053B<br />
004B0528   .  BB 01000000   mov     ebx, 1                           ;  &#8212;&#8212;&#8212;-用户名ASC求和&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
004B052D   &gt;  8B55 FC       mov     edx, dword ptr [ebp-4]<br />
004B0530   .  0FB6541A FF   movzx   edx, byte ptr [edx+ebx-1]<br />
004B0535   .  03F2          add     esi, edx<br />
004B0537   .  43            inc     ebx<br />
004B0538   .  48            dec     eax<br />
004B0539   .^ 75 F2         jnz     short 004B052D                   ;  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
004B053B   &gt;  69C6 90B70B00 imul    eax, esi, 0BB790                 ;  (用户名ASC和*0&#215;0bb790+0&#215;314)/2<br />
004B0541   .  05 14030000   add     eax, 314<br />
004B0546   .  D1F8          sar     eax, 1<br />
004B0548   .  79 03         jns     short 004B054D<br />
004B054A   .  83D0 00       adc     eax, 0<br />
004B054D   &gt;  8BF0          mov     esi, eax<br />
004B054F   .  8B45 F8       mov     eax, dword ptr [ebp-8]<br />
004B0552   .  E8 B183F5FF   call    00408908                         ;  序列号转换成十进制数<br />
004B0557   .  3BF0          cmp     esi, eax<br />
004B0559   .  75 53         jnz     short 004B05AE<br />
004B055B   .  6A 00         push    0<br />
004B055D   .  66:8B0D 0C064&gt;mov     cx, word ptr [4B060C]<br />
004B0564   .  B2 02         mov     dl, 2<br />
004B0566   .  B8 48064B00   mov     eax, 004B0648                    ;  congratuation! you have successfully registered!<br />
004B056B   .  E8 9C54F8FF   call    00435A0C<br />
004B0570   .  A1 9C5E4B00   mov     eax, dword ptr [4B5E9C]<br />
004B0575   .  C600 01       mov     byte ptr [eax], 1<br />
004B0578   .  A1 945F4B00   mov     eax, dword ptr [4B5F94]<br />
004B057D   .  8B00          mov     eax, dword ptr [eax]<br />
004B057F   .  33C9          xor     ecx, ecx<br />
004B0581   .  BA 04000000   mov     edx, 4<br />
004B0586   .  8B18          mov     ebx, dword ptr [eax]<br />
004B0588   .  FF53 14       call    dword ptr [ebx+14]<br />
004B058B   .  8B15 9C5E4B00 mov     edx, dword ptr [4B5E9C]          ;  EZ_VIDEO.004B7DAC<br />
004B0591   .  A1 945F4B00   mov     eax, dword ptr [4B5F94]<br />
004B0596   .  8B00          mov     eax, dword ptr [eax]<br />
004B0598   .  B9 01000000   mov     ecx, 1<br />
004B059D   .  E8 A2E3F6FF   call    0041E944<br />
004B05A2   .  A1 947D4B00   mov     eax, dword ptr [4B7D94]<br />
004B05A7   .  E8 2C06FDFF   call    00480BD8<br />
004B05AC   .  EB 15         jmp     short 004B05C3<br />
004B05AE   &gt;  6A 00         push    0<br />
004B05B0   .  66:8B0D 0C064&gt;mov     cx, word ptr [4B060C]<br />
004B05B7   .  B2 02         mov     dl, 2<br />
004B05B9   .  B8 18064B00   mov     eax, 004B0618                    ;  invalid register code! please retry!<br />
004B05BE   .  E8 4954F8FF   call    00435A0C<br />
004B05C3   &gt;  33C0          xor     eax, eax<br />
004B05C5   .  5A            pop     edx<br />
004B05C6   .  59            pop     ecx<br />
004B05C7   .  59            pop     ecx<br />
004B05C8   .  64:8910       mov     dword ptr fs:[eax], edx<br />
004B05CB   .  68 05064B00   push    004B0605<br />
004B05D0   &gt;  8D45 E8       lea     eax, dword ptr [ebp-18]<br />
004B05D3   .  E8 543CF5FF   call    0040422C<br />
004B05D8   .  8D45 EC       lea     eax, dword ptr [ebp-14]<br />
004B05DB   .  E8 4C3CF5FF   call    0040422C<br />
004B05E0   .  8D45 F0       lea     eax, dword ptr [ebp-10]<br />
004B05E3   .  E8 443CF5FF   call    0040422C<br />
004B05E8   .  8D45 F4       lea     eax, dword ptr [ebp-C]<br />
004B05EB   .  E8 3C3CF5FF   call    0040422C<br />
004B05F0   .  8D45 F8       lea     eax, dword ptr [ebp-8]<br />
004B05F3   .  BA 02000000   mov     edx, 2<br />
004B05F8   .  E8 533CF5FF   call    00404250<br />
004B05FD   .  C3            retn<br />
004B05FE   .^ E9 8935F5FF   jmp     00403B8C<br />
004B0603   .^ EB CB         jmp     short 004B05D0<br />
004B0605   .  5F            pop     edi<br />
004B0606   .  5E            pop     esi<br />
004B0607   .  5B            pop     ebx<br />
004B0608   .  8BE5          mov     esp, ebp<br />
004B060A   .  5D            pop     ebp<br />
004B060B   .  C3            retn</p>
<p> 用户名用数组存放，是给定的，只要满足：</p>
<p>序列号=(用户名ASC和*0&#215;0bb790+0&#215;314)/2</p>
<p>就可以注册成功</p>
<p>用户名和注册码如下：</p>
<p>用户名:                                               序列号:<br />
VqhfwqY-VI3fg486                     517556906<br />
Perf7gJ-T8ydwt86                       529843114<br />
tawer98-SYrw3w76                    533298610<br />
TqervDR-S1e2feP6                       516405074<br />
OafegD6-LVrs5eU1                      509878026<br />
Taqevq9-S7el9qT1                       529075226<br />
rdgtrp6-ZV1m8ynN                     559406802<br />
BqredCw-VQvWVdB1                  536754106<br />
BsdewfA-VKmVBaB1                   517172962<br />
BMertyD-VAwkEBKB                   522548178<br />
Ouijnsr-AKzO0u47                      539057770<br />
Oftyuf8-KO109vf1                        504886754<br />
iknfEML-VKdiMPO1                     515253242<br />
Ipdwwa6-VEJ6yvU1                   527923394<br />
IgvcdJT-BBYsrYX1                     526771562<br />
DawqaUl-tqeLwlV1                      575916394<br />
SsegbT6-DVlrmf99                      531378890<br />
erswqwS-AKfnlp41                      569005402<br />
SweNrvQ-TTdtgjN1                     560174690<br />
gaeuprE-MIrgbnN3                    561326522<br />
ZsfdeS6-M9ofvpN3                     535986218</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lingdux.com/2010/169.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>加密解密中的一个crackme分析</title>
		<link>http://www.lingdux.com/2010/137.html</link>
		<comments>http://www.lingdux.com/2010/137.html#comments</comments>
		<pubDate>Tue, 05 Jan 2010 13:13:03 +0000</pubDate>
		<dc:creator>零度x</dc:creator>
				<category><![CDATA[逆向学习]]></category>

		<guid isPermaLink="false">http://www.lingdux.com/?p=137</guid>
		<description><![CDATA[最近在看加密解密，看到了第五章序列号保护方式的crackme，分析了一下。

在输入用户名和序列号的地方随便输入，弹出错误对话框。

用lordPE查看输入表发现user32模块中有GetDlgItemTextA，直接OD加载对其下断，运行回到程序领空：

<span class="readmore"><a href="http://www.lingdux.com/2010/137.html" title="加密解密中的一个crackme分析">阅读全文——共5420字</a></span>]]></description>
			<content:encoded><![CDATA[<p>最近在看加密解密，看到了第五章序列号保护方式的crackme，分析了一下。</p>
<p>在输入用户名和序列号的地方随便输入，弹出错误对话框。</p>
<p>用lordPE查看输入表发现user32模块中有GetDlgItemTextA，直接OD加载对其下断，运行回到程序领空：</p>
<p>004012B5  |.  6A 0B         |push    0B                              ; /Count = B (11.)<br />
004012B7  |.  68 8E214000   |push    0040218E                        ; |Buffer = serial.0040218E<br />
004012BC  |.  68 E8030000   |push    3E8                             ; |ControlID = 3E8 (1000.)<br />
004012C1  |.  FF75 08       |push    dword ptr [ebp+8]               ; |hWnd<br />
004012C4  |.  E8 07020000   |call    &lt;jmp.&amp;USER32.GetDlgItemTextA&gt;   ; \GetDlgItemTextA    得到用户名</p>
<p><span id="more-137"></span><br />
004012C9  |.  83F8 01       |cmp     eax, 1                          ;  判断得到用户名是否为空<br />
004012CC  |.  C745 10 EB030&gt;|mov     dword ptr [ebp+10], 3EB<br />
004012D3  |.^ 72 CC         \jb      short 004012A1<br />
004012D5  |.  6A 0B         push    0B                               ; /Count = B (11.)<br />
004012D7  |.  68 7E214000   push    0040217E                         ; |Buffer = serial.0040217E<br />
004012DC  |.  68 E9030000   push    3E9                              ; |ControlID = 3E9 (1001.)<br />
004012E1  |.  FF75 08       push    dword ptr [ebp+8]                ; |hWnd<br />
004012E4  |.  E8 E7010000   call    &lt;jmp.&amp;USER32.GetDlgItemTextA&gt;    ; \GetDlgItemTextA    得到序列号<br />
004012E9  |.  B8 01000000   mov     eax, 1<br />
004012EE  |.  EB 07         jmp     short 004012F7<br />
004012F0  |&gt;  B8 00000000   mov     eax, 0<br />
004012F5  |.^ EB 8D         jmp     short 00401284<br />
004012F7  |&gt;  50            push    eax                              ; /Result<br />
004012F8  |.  FF75 08       push    dword ptr [ebp+8]                ; |hWnd<br />
004012FB  |.  E8 B2010000   call    &lt;jmp.&amp;USER32.EndDialog&gt;          ; \EndDialog    关闭输入对话框<br />
00401300  |.  B8 01000000   mov     eax, 1<br />
00401305  \.^ E9 7AFFFFFF   jmp     00401284</p>
<p>继续跟来到这里</p>
<p>00401228   .  68 8E214000   push    0040218E                         ;  ASCII &#8220;lingdux&#8221;<br />
0040122D   .  E8 4C010000   call    0040137E                         ;  用户名算法call<br />
00401232   .  50            push    eax                              ;  保存用户名加密后的值<br />
00401233   .  68 7E214000   push    0040217E                         ;  ASCII &#8220;123456&#8243;<br />
00401238   .  E8 9B010000   call    004013D8                         ;  序列号的算法call<br />
0040123D   .  83C4 04       add     esp, 4<br />
00401240   .  58            pop     eax                              ;  从堆栈中取出之前保存的用户名加密后的结果<br />
00401241   .  3BC3          cmp     eax, ebx                         ;  序列号算完保存在ebx中，与用户名比较<br />
00401243   .  74 07         je      short 0040124C</p>
<p>nop掉这处je就可以爆破了，然后分析两个算法call</p>
<p>第一个call    0040137E是加密用户名的，跟进去分析。。</p>
<p>0040137E  /$  8B7424 04     mov     esi, dword ptr [esp+4]<br />
00401382  |.  56            push    esi<br />
00401383  |&gt;  8A06          /mov     al, byte ptr [esi]<br />
00401385  |.  84C0          |test    al, al                 ;  检测是不是到了字符串结尾<br />
00401387  |.  74 13         |je      short 0040139C<br />
00401389  |.  3C 41         |cmp     al, 41                 ;  小于字符A跳<br />
0040138B  |.  72 1F         |jb      short 004013AC<br />
0040138D  |.  3C 5A         |cmp     al, 5A                 ;  大于字符Z跳<br />
0040138F  |.  73 03         |jnb     short 00401394<br />
00401391  |.  46            |inc     esi<br />
00401392  |.^ EB EF         |jmp     short 00401383<br />
00401394  |&gt;  E8 39000000   |call    004013D2               ;  小写字母转换成大写字母call<br />
00401399  |.  46            |inc     esi                    ;  serial.0040218E<br />
0040139A  |.^ EB E7         \jmp     short 00401383         ;  如果字符串中有小写字母转换为大写，如果有数字则直接跳出<br />
0040139C  |&gt;  5E            pop     esi<br />
0040139D  |.  E8 20000000   call    004013C2                ;  求字母asc码值的和call<br />
004013A2  |.  81F7 78560000 xor     edi, 5678               ;  结果和5678异或<br />
004013A8  |.  8BC7          mov     eax, edi                ;  结果保存在eax中作为返回值<br />
004013AA  |.  EB 15         jmp     short 004013C1<br />
004013AC  |&gt;  5E            pop     esi<br />
004013AD  |.  6A 30         push    30                      ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL<br />
004013AF  |.  68 60214000   push    00402160                ; |Title = &#8220;Error!  &#8221;<br />
004013B4  |.  68 69214000   push    00402169                ; |Text = &#8220;Incorrect!,Try Again&#8221;<br />
004013B9  |.  FF75 08       push    dword ptr [ebp+8]       ; |hOwner<br />
004013BC  |.  E8 79000000   call    &lt;jmp.&amp;USER32.MessageBox&gt;; \MessageBoxA<br />
004013C1  \&gt;  C3            retn</p>
<p>004013C2  /$  33FF          xor     edi, edi<br />
004013C4  |.  33DB          xor     ebx, ebx<br />
004013C6  |&gt;  8A1E          /mov     bl, byte ptr [esi]<br />
004013C8  |.  84DB          |test    bl, bl                 ;  检测是否到字符串尾<br />
004013CA  |.  74 05         |je      short 004013D1<br />
004013CC  |.  03FB          |add     edi, ebx               ;  循环加和到edi中<br />
004013CE  |.  46            |inc     esi<br />
004013CF  |.^ EB F5         \jmp     short 004013C6<br />
004013D1  \&gt;  C3            retn</p>
<p>004013D2  /$  2C 20         sub     al, 20                  ;  小写字母asc值加0&#215;20就是对应的大写<br />
004013D4  |.  8806          mov     byte ptr [esi], al<br />
004013D6  \.  C3            retn</p>
<p>用户名中不能有数字，小写字母均转换成大写并所有字母的数值加和与0&#215;5678异或得出的值用来做比较</p>
<p>下面分析序列号加密。。</p>
<p>004013D8  /$  33C0          xor     eax, eax<br />
004013DA  |.  33FF          xor     edi, edi<br />
004013DC  |.  33DB          xor     ebx, ebx<br />
004013DE  |.  8B7424 04     mov     esi, dword ptr [esp+4]<br />
004013E2  |&gt;  B0 0A         /mov     al, 0A<br />
004013E4  |.  8A1E          |mov     bl, byte ptr [esi]<br />
004013E6  |.  84DB          |test    bl, bl                 ;  判断是否到字符串结尾<br />
004013E8  |.  74 0B         |je      short 004013F5<br />
004013EA  |.  80EB 30       |sub     bl, 30                 ;  数字的asc减0&#215;30相当于把字符转换成值<br />
004013ED  |.  0FAFF8        |imul    edi, eax               ;  edi用于保存结果，每次相加前edi乘以0&#215;0A，相当于进位<br />
004013F0  |.  03FB          |add     edi, ebx               ;  和数值相加<br />
004013F2  |.  46            |inc     esi<br />
004013F3  |.^ EB ED         \jmp     short 004013E2<br />
004013F5  |&gt;  81F7 34120000 xor     edi, 1234               ;  执行循环后结果和0&#215;1234异或<br />
004013FB  |.  8BDF          mov     ebx, edi                ;  最终结果保存在ebx中<br />
004013FD  \.  C3            retn</p>
<p> 序列号的加密方法就是：把输入的字符串转换成一个数然后和0&#215;1324异或</p>
<p>由于异或是可逆的，非常容易写出算法注册机。</p>
<p>char name[256];<br />
 cin&gt;&gt;name;<br />
 CharUpper(name);<br />
 int s=0;<br />
 int i=0;<br />
 while(name[i])<br />
 {<br />
  s+=name[i];<br />
  i++;<br />
 }<br />
 s^=0&#215;5678;<br />
 s^=0&#215;1234;<br />
 cout&lt;&lt;s&lt;&lt;endl;</p>
<p>上面代码编译执行，输入用户名就输出序列号了～！～</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lingdux.com/2010/137.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
