首页
社区
课程
招聘
[原创]适合新手学习的crackme
2006-10-6 09:49 14098

[原创]适合新手学习的crackme

2006-10-6 09:49
14098
【文章标题】: 适合新手学习的crackme
【文章作者】: coldpine
【软件名称】: crackme2.exe
【下载地址】: http://www.crackmes.de/users/mucki/crackme2/
【作者声明】: 失误之处敬请诸位大侠赐教!(最近学习seh感觉头有点大,找个简单的解解气:))
--------------------------------------------------------------------------------
【详细过程】
  直接运行,弹出对话框输入
  name:heminrui
  serial:123456789很容易找到下面这个地方
  004011BE  |.  57            PUSH    EDI
  004011BF  |.  56            PUSH    ESI
  004011C0  |.  53            PUSH    EBX
  004011C1  |>  6A 32         /PUSH    32                              ;
  004011C3  |.  68 84624000   |PUSH    crackme2.00406284               ;
  004011C8  |.  6A 01         |PUSH    1                               ;
  004011CA  |.  FF75 08       |PUSH    DWORD PTR SS:[EBP+8]            ;
  004011CD  |.  E8 16020000   |CALL    <JMP.&user32.GetDlgItemTextA>   ; 取用户名函数   
  004011D2  |.  64:8B15 18000>|MOV     EDX, DWORD PTR FS:[18]
  004011D9  |.  8B52 30       |MOV     EDX, DWORD PTR DS:[EDX+30]
  004011DC  |.  0FB652 02     |MOVZX   EDX, BYTE PTR DS:[EDX+2]
  004011E0  |.  83F8 00       |CMP     EAX, 0
  004011E3  |.  7F 11         |JG      SHORT crackme2.004011F6
  004011E5  |.  68 D8604000   |PUSH    crackme2.004060D8               ; /Text = "nameless"
  004011EA  |.  6A 01         |PUSH    1                               ; |ControlID = 1
  004011EC  |.  FF75 08       |PUSH    DWORD PTR SS:[EBP+8]            ; |hWnd
  004011EF  |.  E8 0C020000   |CALL    <JMP.&user32.SetDlgItemTextA>   ; \SetDlgItemTextA
  004011F4  |.^ EB CB         \JMP     SHORT crackme2.004011C1
  004011F6  |>  8D35 84624000 LEA     ESI, DWORD PTR DS:[406284]       ;取name的地址到esi
  004011FC  |.  33C9          XOR     ECX, ECX             ;清空累加器
  004011FE  |>  0FBE06        /MOVSX   EAX, BYTE PTR DS:[ESI]          ;逐位取出name的字符ascii码值运算
  00401201  |.  8BD8          |MOV     EBX, EAX            ;放在ebx
  00401203  |.  2BF2          |SUB     ESI, EDX                        
  00401205  |.  C1E0 04       |SHL     EAX, 4             ;将每位ascii码值左移四位
  00401208  |.  C1EB 05       |SHR     EBX, 5                          ;将每位ascii码值右移五位
  0040120B  |.  33C3          |XOR     EAX, EBX            ;异或以上的两个结果
  0040120D  |.  83C0 26       |ADD     EAX, 26             ;以上的结果加26
  00401210  |.  33C1          |XOR     EAX, ECX                        ;先和累加器异或
  00401212  |.  03C8          |ADD     ECX, EAX            ;再累加到累加器上
  00401214  |.  46            |INC     ESI               ;将地址减一
  00401215  |.  803E 00       |CMP     BYTE PTR DS:[ESI], 0      ;取完了没有,没有的话,再继续取
  00401218  |.^ 75 E4         \JNZ     SHORT crackme2.004011FE     
  0040121A  |.  B8 EF0D0C00   MOV     EAX, 0C0DEF           
  0040121F  |.  2BC1          SUB     EAX, ECX                         ;用C0DEF减去累加器
  00401221  |.  0FAFC0        IMUL    EAX, EAX             ;将结果平方
  00401224  |.  50            PUSH    EAX                              ; /<%lX>
  00401225  |.  51            PUSH    ECX                              ; |<%lX>
  00401226  |.  68 E1604000   PUSH    crackme2.004060E1                ; |Format = "CM2-%lX-%lX"
  0040122B  |.  68 B6624000   PUSH    crackme2.004062B6               
  00401230  |.  E8 9B010000   CALL    <JMP.&user32.wsprintfA>          ;格式化函数
  00401235  |.  6A 4B         PUSH    4B                               ;
  00401237  |.  68 B1604000   PUSH    crackme2.004060B1                ;
  0040123C  |.  6A 02         PUSH    2                                ;
  0040123E  |.  FF75 08       PUSH    DWORD PTR SS:[EBP+8]             ;
  00401241  |.  E8 A2010000   CALL    <JMP.&user32.GetDlgItemTextA>    ; 取序列号
  00401246  |.  68 B1604000   PUSH    crackme2.004060B1                ; 用户输入的序列号
  0040124B  |.  68 B6624000   PUSH    crackme2.004062B6                ; 用户名计算出来的序列号
  00401250  |.  E8 DB010000   CALL    <JMP.&kernel32.lstrcmpA>         ; 比较序列号,决定跳向
  00401255  |.  75 16         JNZ     SHORT crackme2.0040126D     ;
  00401257  |.  6A 00         PUSH    0                                ; /Style = MB_OK|MB_APPLMODAL
  00401259  |.  68 00604000   PUSH    crackme2.00406000                ; |Title = "crackme2"
  0040125E  |.  68 3D604000   PUSH    crackme2.0040603D                ; |Text = "Valid serial - now write a keygen!"
  00401263  |.  FF75 08       PUSH    DWORD PTR SS:[EBP+8]             ; |hOwner
  00401266  |.  E8 89010000   CALL    <JMP.&user32.MessageBoxA>        ; \MessageBoxA
  0040126B  |.  EB 14         JMP     SHORT crackme2.00401281
  0040126D  |>  6A 10         PUSH    10                               ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
  0040126F  |.  68 00604000   PUSH    crackme2.00406000                ; |Title = "crackme2"
  00401274  |.  68 60604000   PUSH    crackme2.00406060                ; |Text = "Wrong serial - try again!"
  00401279  |.  FF75 08       PUSH    DWORD PTR SS:[EBP+8]             ; |hOwner
  0040127C  |.  E8 73010000   CALL    <JMP.&user32.MessageBoxA>        ; \MessageBoxA
  00401281  |>  5B            POP     EBX
  00401282  |.  5E            POP     ESI
  00401283  |.  5F            POP     EDI
  00401284  |.  C9            LEAVE
  00401285  \.  C2 0400       RET     4
  
  
--------------------------------------------------------------------------------
【经验总结】
  算法总结:将用户名每位取出ascii码值计算,设每位为x,C为ecx的值
              
       A=shl(x)
            B=shr(x)
       A=A XOR B
            A=A+26
            A=A XOR C
            C=C+A
            然后在用户名长度之内进行循环计算
       A=0C0DEF
            A=A-C
            A=A*A
            最后将CM2,A,C连解成注册码,一组可行的注册码:
       name:heminrui
            serial:CM2-11739-33FA4964
           稍微将以上的过程改改就可以写成注册机了,因为时间关系,以后再补上 ,花了半个多小时,感觉比较简单.     
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年10月06日 9:47:01

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (19)
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
zcg 2006-10-6 10:46
2
0
冒昧问一下,这个???
怎么和 http://bbs.pediy.com/showthread.php?s=&threadid=32914 的有点相像呀???
你们是同一个人??? 晕!!!
雪    币: 256
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
coldpine 6 2006-10-6 11:02
3
0
最初由 zcg 发布
冒昧问一下,这个???
怎么和 http://bbs.pediy.com/showthread.php?s=&threadid=32914 的有点相像呀???
你们是同一个人??? 晕!!!


不是一个人,呵呵,因为刚上http://www.crackmes.de/users/mucki/crackme2/
个这个网站的时候看见并没有解答,没想到看雪已经有人破解了,
呵呵!不好意思!!!
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
zcg 2006-10-6 11:09
4
0
厉害呀!不光比技术,还要拼速度!
雪    币: 256
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
coldpine 6 2006-10-6 11:14
5
0
最初由 zcg 发布
厉害呀!不光比技术,还要拼速度!

我也没想到
昨天才出的crackme
昨晚凌晨就破解了!
晕!!!!!!!!
雪    币: 380
活跃值: (101)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
llydd 9 2006-10-6 12:38
6
0
呵呵,不好意思, 我也不想,只是昨天玩的太疯了没事做,所以就去crackmes.de下载了个crackeme玩,哪晓的。。。。。。我们对上号了
原来我们是老乡哦
雪    币: 359
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leiyihui 2006-10-6 14:14
7
0
顶下,等下慢慢看!
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
bfqyygy 1 2006-10-6 15:11
8
0
支持!!!!!
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
binbinbin 28 2006-10-6 22:30
9
0
中秋节快乐。

支持学习学习
雪    币: 256
活跃值: (478)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wyqzm 1 2006-10-7 00:36
10
0
最初由 llydd 发布
呵呵,不好意思, 我也不想,只是昨天玩的太疯了没事做,所以就去crackmes.de下载了个crackeme玩,哪晓的。。。。。。我们对上号了
原来我们是老乡哦


    呵呵,这个CrackMe的确是比较简单的了,想不到玩得这么疯!支持一下

随便说一句,我可是真宗的湖北老乡哦,湖北鄂州樊口
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
龙的传人 2006-10-14 00:18
11
0


看看。。。。。。
雪    币: 256
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
coldpine 6 2006-10-14 07:59
12
0
初学vb,但是用vb编的注册机出了问题!
请高手指点!

一共三个字符串:
"CM2-" X1  X2
计算x2转换为16进制数的时候发现了数据溢出的问题,想了半天没有办法,
我将注册的第三位X2用10进制数来表示的,做了一个假注册机.
上传的附件:
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
张大善人 2006-11-8 13:49
13
0
虽然看不懂,估计还是适合我这样的新手学习。

谢谢lz的辛勤劳动

雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
icelei 2006-11-15 10:47
14
0
谢谢楼主
学习了
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
CaperBoy 2012-1-18 00:51
15
0
谢谢楼主,收藏
雪    币: 101
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
北纬 2012-1-18 01:39
16
0
00040124B  |.  68 B6624000   push crackme2.004062B6                   ; |此处提示正确的注册码
00401250  |.  E8 DB010000   call <jmp.&kernel32.lstrcmpA>            ; \lstrcmpA
00401255  |.  75 16         jnz short crackme2.0040126D
00401257  |.  6A 00         push 0x0                                 ; /Style = MB_OK|MB_APPLMODAL
00401259  |.  68 00604000   push crackme2.00406000                   ; |crackme2
0040125E  |.  68 3D604000   push crackme2.0040603D                   ; |Valid serial - now write a keygen!
00401263  |.  FF75 08       push [arg.1]                             ; |hOwner
00401266  |.  E8 89010000   call <jmp.&user32.MessageBoxA>           ; \MessageBoxA
0040126B  |.  EB 14         jmp short crackme2.00401281
0040126D  |>  6A 10         push 0x10                                ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
0040126F  |.  68 00604000   push crackme2.00406000                   ; |crackme2
00401274      68 60604000   push crackme2.00406060                   ;  此处提示注册码错误
00401250  |.  E8 DB010000   call <jmp.&kernel32.lstrcmpA>            ; \lstrcmpA

呵呵  我只有一个最简单的思路

因为带注册的软件本身就是一个 注册机  改的方法如下:
00040124B  |.  68 B6624000   push crackme2.004062B6                   ; |此处提示正确的注册码
00401274       68 60604000   push crackme2.00406060                   ;  此处提示注册码错误

00040124B  |.  68 B6624000   push crackme2.004062B6                   ; |此处提示正确的注册码
00401274       68 B6624000   push crackme2.004062B6                   ;  提示错误时直接显示正确注册码
雪    币: 101
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
北纬 2012-1-18 01:43
17
0
呵呵 没办法  初中都没毕业 算法我肯定不会 但不想爆破  只好自己研究一套思路   大家见解下
雪    币: 101
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
北纬 2012-1-18 01:46
18
0
软件传上 请教大家 能否 让注册码直接显示在注册框呢
上传的附件:
雪    币: 2
活跃值: (159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zgyknight 2012-1-18 04:50
19
0
mark一下
雪    币: 5
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋风辞 2015-10-1 17:06
20
0
新手,请教大神一下这个Crackme的简单反调试是什么原理,在00401029 处push 00401060。我直接在第一条指令jmp 00401060就可以过反调试,但没看明白他的反调试原理是什么。请大神批点
游客
登录 | 注册 方可回帖
返回