首页
社区
课程
招聘
[原创]crackme2.0简单破解(非常适合新手)
发表于: 2006-3-15 22:51 8598

[原创]crackme2.0简单破解(非常适合新手)

2006-3-15 22:51
8598

【文章标题】: crackme2简单破解


【软件大小】: 132K


【下载地址】:


【编写语言】: DELPHI


【使用工具】: OLLYDBG,IDA


【难    度】: 简单,适合刚入门的新手


----------------------------------------------------------------------------------------------------------------------------


终于又和大家见面了,这几天由于考网络工程师,忙于复习,所以有好几天都没有发帖子了,终于在今天晚上抽出了一点时间来写点东西,这个CRACKME的确比较简单,只是让我郁闷的是,作者竟然给他加了UPX的壳,好象大多的CRACKME都没有壳,但是为了尊重作者,我还是亲手脱掉


他了,好了不废话了开始吧..


****************************************************************************************************************************


一):用PEID载入,显示UPX 0.89.6 - 1.02 / 1.05 - 1.22 (Delphi) stub -> Markus & Lazlo,很明显是UPX的壳,DELPHI写的。


二):脱壳:先简单说下这个壳吧,等在过几个月真正功壳的时候在仔细研究他.


壳的加载过程:


1)获取壳自己所需要使用的API地址



如果你用PE查看工具看看加壳后的程序文件,会发现未加壳的程序文件和加壳后的程序文件的Import Table不太一样,


加壳后的Import Table一般所引入的DLL和API很少,甚至只有Kernel32.dll以及GetProcAddress这个API。


壳还需要很多其他的API来完成它的工作。


当然他并不想让你知道他想用哪个API,所以一般他只是在壳的代码中动态加载这些API,而只把一些你嗅不出什么味道的几个API放在Import Table中。



当然这其中壳可能会用到一些Anti技术,不过这和本文主旨无关,所以就不说了。



2)解密原程序的各个节区(Section)的数据



壳出于保护原程序代码和数据的目的,一般都会加密原程序文件的各个节区。既然是加密保存,那么在程序执行时你总不能也保持加密状态吧,所以解密是壳必做的工作之一。


一般壳按节区加密的,那么在解密时也按节区解密,并且把解密的节区数据按照节区的定义放在合适的内存位置。



如果加壳时用到了压缩技术,那么在解密之前还有一道工序,当然是解压缩。


这也是一些壳的特色之一,比如说原来的程序文件未加壳时1-2M大小,加壳后反而只有几百K,这种瘦身技术当然会吸引了不少眼球。



3)重定位


我想大家都明白ImageBase吧,即程序的基地址,当然这只是程序文件中声明的,程序运行时能够保证系统一定满足你的要求吗?


对于EXE的程序文件来说,Windows系统会尽量满足你的要求。


比如一般EXE文件的基地址为0x400000,而运行时Windows系统提供给程序的基地址也同样是0x400000。在这种情况下就不需要进行地址"重定位"了。



由于不需要对EXE文件进行"重定位",所以很多壳在加壳时把原程序文件中用于保存重定位信息的节区干脆也去掉了,这样使得加壳后的文件更加小巧。有些工具提供Wipe Reloc的功能,其实就是这个作用。



不过对于DLL的动态链接库文件来说,Windows系统没有办法保证每一次DLL运行时提供相同的基地址。这样"重定位"就很重要了。



此时壳中也需要提供进行"重定位"的代码,否则原程序中的代码是无法正常运行起来的。从这点来说,加壳的DLL比加壳的EXE更难修正。



4)HOOK-API


我们知道程序文件中的Import Table的作用是让Windows系统在程序运行时提供API的实际地址给程序使用。


在程序的第一行代码执行之前,Windows系统就完成了这个工作。



而壳一般都修改了原程序文件的Import Table,那么原程序文件的Import Table由谁来处理呢?


这当然由壳来自己处理了,因此壳不得不模仿Windows系统的工作来填充Import Table中相关的数据。


Import Table结构中与实际运行相关的主要是IAT结构,


这个结构中用于保存API的实际地址,因此壳所需要的就是填充这个结构中的数据。


不过壳不是填充这些实际的API地址,而是填充壳中用来HOOK-API的代码的地址。



这样壳中的代码一旦完成了加载工作,在进入原程序的代码之后,仍然能够间接地获得程序的控制权。


因为程序总是需要与系统打交道,与系统交道的途径是API,而API的地址已经替换成了壳的HOOK-API的地址,那么每一次程序与系统打交道,都会让壳的代码获得一次控制权,一来壳可以进行反跟踪继续保护软件,二来可以完成某些特殊的任务。


其实这就是所谓HOOK技术。



5)最后当然是跳转到程序原入口点。


这个大家比较熟悉,找的就是它。脱壳时大多数也是在这个时候。从这个时候起壳要把控制权交还给原程序了。



以上是一个简单的总结。因为以前研究过一段时间,算是让大家对壳的一个初步了解吧。


三)用OD载入,跳过入口点警告,来分析他的代码.


---------------------------------------------------


00455690 >  60              PUSHAD                                                     ---壳的入口


00455691    BE 00604300     MOV ESI,CrackMe2.00436000


00455696    8DBE 00B0FCFF   LEA EDI,DWORD PTR DS:[ESI+FFFCB000]


0045569C    C787 D0340400 9>MOV DWORD PTR DS:[EDI+434D0],5F46D95


004556A6    57              PUSH EDI


004556A7    83CD FF         OR EBP,FFFFFFFF


004556AA    EB 0E           JMP SHORT CrackMe2.004556BA


004556AC    90              NOP


004556AD    90              NOP


004556AE    90              NOP


004556AF    90              NOP


004556B0    8A06            MOV AL,BYTE PTR DS:[ESI]


004556B2    46              INC ESI


004556B3    8807            MOV BYTE PTR DS:[EDI],AL                                     ---解压后的数据放到00442E44(程序的OEP)


004556B5    47              INC EDI


004556B6    01DB            ADD EBX,EBX


004556B8    75 07           JNZ SHORT CrackMe2.004556C1


004556BA    8B1E            MOV EBX,DWORD PTR DS:[ESI]


004556BC    83EE FC         SUB ESI,-4


004556BF    11DB            ADC EBX,EBX


004556C1  ^ 72 ED           JB SHORT CrackMe2.004556B0


004556C3    B8 01000000     MOV EAX,1


004556C8    01DB            ADD EBX,EBX


004556CA    75 07           JNZ SHORT CrackMe2.004556D3


004556CC    8B1E            MOV EBX,DWORD PTR DS:[ESI]


004556CE    83EE FC         SUB ESI,-4


004556D1    11DB            ADC EBX,EBX


004556D3    11C0            ADC EAX,EAX


004556D5    01DB            ADD EBX,EBX


004556D7  ^ 73 EF           JNB SHORT CrackMe2.004556C8


004556D9    75 09           JNZ SHORT CrackMe2.004556E4


004556DB    8B1E            MOV EBX,DWORD PTR DS:[ESI]


004556DD    83EE FC         SUB ESI,-4


004556E0    11DB            ADC EBX,EBX


004556E2  ^ 73 E4           JNB SHORT CrackMe2.004556C8


004556E4    31C9            XOR ECX,ECX


004556E6    83E8 03         SUB EAX,3


004556E9    72 0D           JB SHORT CrackMe2.004556F8


004556EB    C1E0 08         SHL EAX,8


004556EE    8A06            MOV AL,BYTE PTR DS:[ESI]


004556F0    46              INC ESI


004556F1    83F0 FF         XOR EAX,FFFFFFFF


004556F4    74 74           JE SHORT CrackMe2.0045576A


004556F6    89C5            MOV EBP,EAX


004556F8    01DB            ADD EBX,EBX


004556FA    75 07           JNZ SHORT CrackMe2.00455703


004556FC    8B1E            MOV EBX,DWORD PTR DS:[ESI]


004556FE    83EE FC         SUB ESI,-4


00455701    11DB            ADC EBX,EBX


00455703    11C9            ADC ECX,ECX


00455705    01DB            ADD EBX,EBX


00455707    75 07           JNZ SHORT CrackMe2.00455710


00455709    8B1E            MOV EBX,DWORD PTR DS:[ESI]


0045570B    83EE FC         SUB ESI,-4


0045570E    11DB            ADC EBX,EBX


00455710    11C9            ADC ECX,ECX


00455712    75 20           JNZ SHORT CrackMe2.00455734


00455714    41              INC ECX


00455715    01DB            ADD EBX,EBX


00455717    75 07           JNZ SHORT CrackMe2.00455720


00455719    8B1E            MOV EBX,DWORD PTR DS:[ESI]


0045571B    83EE FC         SUB ESI,-4


0045571E    11DB            ADC EBX,EBX


00455720    11C9            ADC ECX,ECX


00455722    01DB            ADD EBX,EBX


00455724  ^ 73 EF           JNB SHORT CrackMe2.00455715


00455726    75 09           JNZ SHORT CrackMe2.00455731


00455728    8B1E            MOV EBX,DWORD PTR DS:[ESI]


0045572A    83EE FC         SUB ESI,-4


0045572D    11DB            ADC EBX,EBX


0045572F  ^ 73 E4           JNB SHORT CrackMe2.00455715


00455731    83C1 02         ADD ECX,2


00455734    81FD 00F3FFFF   CMP EBP,-0D00


0045573A    83D1 01         ADC ECX,1


0045573D    8D142F          LEA EDX,DWORD PTR DS:[EDI+EBP]


00455740    83FD FC         CMP EBP,-4


00455743    76 0F           JBE SHORT CrackMe2.00455754


00455745    8A02            MOV AL,BYTE PTR DS:[EDX]


00455747    42              INC EDX


00455748    8807            MOV BYTE PTR DS:[EDI],AL


0045574A    47              INC EDI


0045574B    49              DEC ECX


0045574C  ^ 75 F7           JNZ SHORT CrackMe2.00455745


0045574E  ^ E9 63FFFFFF     JMP CrackMe2.004556B6


00455753    90              NOP


00455754    8B02            MOV EAX,DWORD PTR DS:[EDX]


00455756    83C2 04         ADD EDX,4


00455759    8907            MOV DWORD PTR DS:[EDI],EAX


0045575B    83C7 04         ADD EDI,4


0045575E    83E9 04         SUB ECX,4


00455761  ^ 77 F1           JA SHORT CrackMe2.00455754


00455763    01CF            ADD EDI,ECX


00455765  ^ E9 4CFFFFFF     JMP CrackMe2.004556B6


0045576A    5E              POP ESI


0045576B    89F7            MOV EDI,ESI


0045576D    B9 25210000     MOV ECX,2125


00455772    8A07            MOV AL,BYTE PTR DS:[EDI]


00455774    47              INC EDI


00455775    2C E8           SUB AL,0E8


00455777    3C 01           CMP AL,1


00455779  ^ 77 F7           JA SHORT CrackMe2.00455772


0045577B    803F 15         CMP BYTE PTR DS:[EDI],15


0045577E  ^ 75 F2           JNZ SHORT CrackMe2.00455772


00455780    8B07            MOV EAX,DWORD PTR DS:[EDI]


00455782    8A5F 04         MOV BL,BYTE PTR DS:[EDI+4]


00455785    66:C1E8 08      SHR AX,8


00455789    C1C0 10         ROL EAX,10


0045578C    86C4            XCHG AH,AL


0045578E    29F8            SUB EAX,EDI


00455790    80EB E8         SUB BL,0E8


00455793    01F0            ADD EAX,ESI


00455795    8907            MOV DWORD PTR DS:[EDI],EAX


00455797    83C7 05         ADD EDI,5


0045579A    89D8            MOV EAX,EBX


0045579C  ^ E2 D9           LOOPD SHORT CrackMe2.00455777


0045579E    8DBE 00200500   LEA EDI,DWORD PTR DS:[ESI+52000]


004557A4    8B07            MOV EAX,DWORD PTR DS:[EDI]


004557A6    09C0            OR EAX,EAX


004557A8    74 3C           JE SHORT CrackMe2.004557E6


004557AA    8B5F 04         MOV EBX,DWORD PTR DS:[EDI+4]


004557AD    8D8430 4C600500 LEA EAX,DWORD PTR DS:[EAX+ESI+5604C]


004557B4    01F3            ADD EBX,ESI


004557B6    50              PUSH EAX


004557B7    83C7 08         ADD EDI,8


004557BA    FF96 EC600500   CALL DWORD PTR DS:[ESI+560EC]


004557C0    95              XCHG EAX,EBP


004557C1    8A07            MOV AL,BYTE PTR DS:[EDI]


004557C3    47              INC EDI


004557C4    08C0            OR AL,AL



[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

收藏
免费 7
支持
分享
最新回复 (10)
雪    币: 236
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
支持楼主支持楼主支持楼主
2006-4-6 09:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我是菜鸟
看起来好费劲,呵呵
2006-4-8 12:46
0
雪    币: 174
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我跟完了..脱壳特简单..找POPAD之后下断就可以了..UPX的出口

脱壳完成跟..居然没算法..序列号是固定的...

相对简单点~!可以采用三种方法破解..
第一种..是内存补丁..读固定内存00442BE8(序列号就再这)
第二种..暴力破解..把代码段00442B5D的JNZ改成JZ
第三种..把序列号抄下来..

搞定收工~!
2006-4-8 21:50
0
雪    币: 1022
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
收藏
2006-4-9 00:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
说的很详细,谢谢了
2006-4-9 19:13
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看了
很受启发,刚刚入门中,
所以。谢谢了
2006-4-10 17:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
加壳的啊~汗~~现在还没那么高技术~~

不过谢楼主啊!先收了慢慢研究!
2006-4-10 19:02
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我一点都不懂 什么都不懂 如何开始
2006-4-11 08:08
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习了!!!!!!!!!!!!!!
2006-4-26 18:34
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
呵呵,学习了
我用"我的第一次破解“QQ聊天记录读取器”适合新手 "这篇文章来解你这个,行了!!!呵呵
2006-4-26 20:02
0
游客
登录 | 注册 方可回帖
返回