首页
社区
课程
招聘
[旧帖] [原创]破解NTS之路(一) 0.00雪花
发表于: 2008-9-4 15:08 2768

[旧帖] [原创]破解NTS之路(一) 0.00雪花

2008-9-4 15:08
2768
【文章标题】: 破解NTS之路(一)
【文章作者】: 我本寂寞
【作者主页】: hi.baidu.negcit/negcit_k
【软件名称】: NTS Crackme系列 1
【使用工具】: OD
【操作平台】: WIN XP
【作者声明】: 愿能帮新手点忙。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
引入原作者的话:
.What is NTS ?
	
		Newbie Training Series is a Series of crackmes with different protection systems
 	in the wild. It all started when one of my friend asked me to find some simple crackmes
 	so that he can start Reverse Code Engineering. Then i thought, "why cant i write some
	crackmes?" And yes, i thought upon some basic cracking steps and written some crackmes.
	And here it is, NTS. This can be used as a "Complete_Newbies" Cracking target.

来看看我们要破解的第一个程序CRACKME1,破文如下,为了更加体现原作者的用意,我将尽我最大努力使这破文易懂,争取使没有多大汇编及破解经验的朋友也能看懂。

先双击运行程序,弹出一个窗口显示"UnRegistered"。用OD载入,程序停在401000处,然后上下查看代码段,呵,发现总的才18条语句,太好了,相当简单的一个CRACKME,太适合新手了(The easiest crackme i have ever seen),因此我就一次性张贴出来,一句一句分析,呵,也不费劲。

00401000 >/$  8D0D 1B304000 lea     ecx, dword ptr [40301B]
00401006  |.  833D 40304000>cmp     dword ptr [403040], 1
0040100D  |.  75 13         jnz     short 00401022
0040100F  |.  8D15 00304000 lea     edx, dword ptr [403000]
00401015  |.  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
00401017  |.  51            push    ecx                              ; |Title => "Project PolyPhemous - NTS - Crackme1"
00401018  |.  52            push    edx                              ; |Text => "Registered!!!"
00401019  |.  6A 00         push    0                                ; |hOwner = NULL
0040101B  |.  E8 14000000   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
00401020  |.  EB 11         jmp     short 00401033
00401022  |>  8D15 0E304000 lea     edx, dword ptr [40300E]
00401028  |.  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
0040102A  |.  51            push    ecx                              ; |Title
0040102B  |.  52            push    edx                              ; |Text => "UnRegistered"
0040102C  |.  6A 00         push    0                                ; |hOwner = NULL
0040102E  |.  E8 01000000   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
00401033  \>  C3            retn
00401034   $- FF25 00204000 jmp     dword ptr [<&user32.MessageBoxA>>;  user32.MessageBoxA

确实很简单,两条LEA指令,一条判断指令,两条跳转指令,两个函数调用。大概浏览一下,也挺易懂,将地址403040处的值与1相比,不等就跳转到00401022调用"BAD FUNCTION",显示"UnRegistered";若相等就调用第一个MessageBoxA,显示Registered!!!,呵,简单吧。因此我们只要把JNZ改成JZ就可以了,或是干脆把这指令NOP掉。

程序很简单,确实。不过下面我们来详析这程序。
第一:LEA指令:LEA指令的功能是将源操作数、即存储单元的有效地址(偏移地址)传送到目的操作数
我们来看这条语句lea     ecx, dword ptr [40301B]
[40301B]为40301B的内容,也就是说若内存地址40301B的内容是0xBAADFEEE的话,那么[40301B]=0xBAADFEEE,有人或会说那ECX不就等于BAADFEEE了吗?不是的,因为这是LEA指令,把源操作数的有效地址给ECX,而0xBAADFEEE所在的地址就是40301B,也就是说把40301B传给了ECX,晕,绕了一个圈子,相当于C里的 ecx = &(*40301B). 此是ECX=40301B
LEA指令还有一个很有意思的地方举例如下:
lea     eax, dword ptr [ecx+ecx*2]
所以此时EAX = ECX + ECX*2,嘿,简结多了吧。

第二,这里只出现了一个函数MessageBoxA,
The MessageBox function creates, displays, and operates a message box. The message box contains an application-defined message and title, plus any combination of predefined icons and push buttons. 

int MessageBox(

    HWND hWnd,	// handle of owner window
    LPCTSTR lpText,	// 窗口名称字符串的地址
    LPCTSTR lpCaption,	// 要显示的字符串的地址
    UINT uType 	// style of message box
   );	
  
这函数将创建一窗口,并显示指定的字符串。uType将指示窗口的样式,有好多,具体可参考WINDOWS编程方面的书。

这破文就到这,很适合新手。写的不好还请赐批。
  
--------------------------------------------------------------------------------
                                                       2008年09月04日 15:04:17

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//