吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4391|回复: 9
收起左侧

[原创] CrackMe分析记录

[复制链接]
Liquor 发表于 2013-8-20 16:29
本帖最后由 Liquor 于 2013-8-20 23:51 编辑

【文章标题】: CrackMe破解记录
【文章作者】: Crack_Qs
【作者邮箱】: qs#ff0000.cc(#换@)
【软件名称】: CrackMe1.2
【下载地址】: http://www.unpack.cn/thread-92953-1-1.html
【编写语言】: 汇编
【使用工具】: OllyDbg
【操作平台】: Win Xp Sp3
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  软件运行后,生成一个dll,那么就先从dll入手。
  
  字符串里有明显可以利用的信息,“\unpack.ini”,从此处入手
  00A71075   $  55            push ebp
  00A71076   .  8BEC          mov ebp,esp
  00A71078   .  83C4 FC       add esp,-0x4
  00A7107B   .  53            push ebx
  00A7107C   .  56            push esi
  00A7107D   .  57            push edi
  00A7107E   .  6A 20         push 0x20                                ; /Length = 20 (32.)
  00A71080   .  68 4930A700   push dll.00A73049                        ; |1111
  00A71085   .  E8 04030000   call <jmp.&kernel32.RtlZeroMemory>       ; \RtlZeroMemory
  00A7108A   .  6A 20         push 0x20                                ; /Count = 20 (32.)
  00A7108C   .  68 4930A700   push dll.00A73049                        ; |1111
  00A71091   .  FF75 0C       push dword ptr ss:[ebp+0xC]              ; |ControlID
  00A71094   .  FF75 08       push dword ptr ss:[ebp+0x8]              ; |hWnd
  00A71097   .  E8 C2020000   call <jmp.&user32.GetDlgItemTextA>       ; \GetDlgItemTextA;取用户名长度
  00A7109C   .  68 4930A700   push dll.00A73049                        ; /1111
  00A710A1   .  E8 FA020000   call <jmp.&kernel32.lstrlenA>            ; \lstrlenA
  00A710A6   .  8945 FC       mov dword ptr ss:[ebp-0x4],eax           ;  用户名长度传送到ebp-0x4
  00A710A9   .  837D FC 06    cmp dword ptr ss:[ebp-0x4],0x6           ;  长度与0x6比较
  00A710AD   .  73 0E         jnb Xdll.00A710BD                        ;  长度为6位即跳,不是即不跳
  00A710AF   .  B8 00000000   mov eax,0x0
  00A710B4   .  5F            pop edi
  00A710B5   .  5E            pop esi
  00A710B6   .  5B            pop ebx
  00A710B7   .  C9            leave
  00A710B8   .  C2 0800       retn 0x8
  00A710BB   .  EB 07         jmp Xdll.00A710C4
  00A710BD   >  5F            pop edi
  00A710BE   .  5E            pop esi
  00A710BF   .  5B            pop ebx
  00A710C0   .  C9            leave
  00A710C1   .  C2 0800       retn 0x8                                 ;  返回到 00A71320
  
  00A71320   .  0BC0          or eax,eax                               ;  返回到此处,或运算EAX
  00A71322   .  75 09         jnz Xdll.00A7132D
  00A71324   .  5F            pop edi
  00A71325   .  5E            pop esi
  00A71326   .  5B            pop ebx
  00A71327   .  C9            leave
  00A71328   .  C2 1000       retn 0x10
  00A7132B   .  EB 0B         jmp Xdll.00A71338
  00A7132D   >  FF75 14       push dword ptr ss:[ebp+0x14]
  00A71330   .  FF75 08       push dword ptr ss:[ebp+0x8]
  00A71333   .  E8 22FEFFFF   call dll.00A7115A                        ;  调用MessageBox“注册信息已经保存,请重启软件检测”
  00A71338   >  5F            pop edi
  00A71339   .  5E            pop esi
  00A7133A   .  5B            pop ebx
  00A7133B   .  C9            leave
  00A7133C   .  C2 1000       retn 0x10
  
  00A7115A   $  55            push ebp                                 ;  第二次来到此处
  00A7115B   .  8BEC          mov ebp,esp
  00A7115D   .  83C4 F8       add esp,-0x8
  00A71160   .  53            push ebx
  00A71161   .  56            push esi
  00A71162   .  57            push edi
  00A71163   .  FF75 0C       push dword ptr ss:[ebp+0xC]
  00A71166   .  FF75 08       push dword ptr ss:[ebp+0x8]
  00A71169   .  E8 56FFFFFF   call dll.00A710C4                        ;  进
  00A7116E   .  0BC0          or eax,eax
  00A71170   .  75 09         jnz Xdll.00A7117B
  00A71172   .  5F            pop edi
  00A71173   .  5E            pop esi
  00A71174   .  5B            pop ebx
  00A71175   .  C9            leave
  00A71176   .  C2 0800       retn 0x8
  
  00A710C4   $  55            push ebp                                 ;  第二次
  00A710C5   .  8BEC          mov ebp,esp
  00A710C7   .  83C4 FC       add esp,-0x4
  00A710CA   .  53            push ebx
  00A710CB   .  56            push esi
  00A710CC   .  57            push edi
  00A710CD   .  6A 20         push 0x20                                ; /Length = 20 (32.)
  00A710CF   .  68 6930A700   push dll.00A73069                        ; |Destination = dll.00A73069
  00A710D4   .  E8 B5020000   call <jmp.&kernel32.RtlZeroMemory>       ; \RtlZeroMemory
  00A710D9   .  6A 20         push 0x20                                ; /Count = 20 (32.)
  00A710DB   .  68 6930A700   push dll.00A73069                        ; |Buffer = dll.00A73069
  00A710E0   .  FF75 0C       push dword ptr ss:[ebp+0xC]              ; |ControlID
  00A710E3   .  FF75 08       push dword ptr ss:[ebp+0x8]              ; |hWnd
  00A710E6   .  E8 73020000   call <jmp.&user32.GetDlgItemTextA>       ; \GetDlgItemTextA;取注册码长度
  00A710EB   .  68 6930A700   push dll.00A73069                        ; /String = "1234567890"
  00A710F0   .  E8 AB020000   call <jmp.&kernel32.lstrlenA>            ; \lstrlenA
  00A710F5   .  8945 FC       mov dword ptr ss:[ebp-0x4],eax           ;  注册码长度传送到ebp-0x4
  00A710F8   .  837D FC 06    cmp dword ptr ss:[ebp-0x4],0x6           ;  长度与0x6比较
  00A710FC   .  73 0E         jnb Xdll.00A7110C                        ;  长度不为6位即跳,为6即不跳
  00A710FE   .  B8 00000000   mov eax,0x0
  00A71103   .  5F            pop edi
  00A71104   .  5E            pop esi
  00A71105   .  5B            pop ebx
  00A71106   .  C9            leave
  00A71107   .  C2 0800       retn 0x8
  
  CK发帖时已经注明,是重启验证。既然已经生成出来ini了,那就接着日重启。
  
  bp GetPrivateProfileStringA
  
  0012FC34   7C8337BF  /CALL 到 GetPrivateProfileStringA 来自 kernel32.7C8337BA
  0012FC38   00000000  |Section = NULL
  0012FC3C   00000000  |Key = NULL
  0012FC40   00000000  |Default = NULL
  0012FC44   00A73199  |ReturnBuffer = dll.00A73199
  0012FC48   00000020  |BufSize = 20 (32.)
  0012FC4C   00A73089  \IniFileName = "C:\Documents and Settings\Administrator\桌面\unpack.ini"
  
  00A711DE   .  0BC0          or eax,eax                               ;  返回到此处
  00A711E0   .  75 0C         jnz Xdll.00A711EE
  00A711E2   .  5F            pop edi
  00A711E3   .  5E            pop esi
  00A711E4   .  5B            pop ebx
  00A711E5   .  C9            leave
  00A711E6   .  C2 1000       retn 0x10
  00A711E9   .  E9 09010000   jmp dll.00A712F7
  00A711EE   >  68 8930A700   push dll.00A73089                        ; /C:\Documents and Settings\Administrator\桌面\unpack.ini
  00A711F3   .  6A 20         push 0x20                                ; |BufSize = 20 (32.)
  00A711F5   .  68 B931A700   push dll.00A731B9                        ; |ReturnBuffer = dll.00A731B9
  00A711FA   .  68 9931A700   push dll.00A73199                        ; |Section = "1250962585096peace"
  00A711FF   .  E8 78010000   call <jmp.&kernel32.GetPrivateProfileSec>; \GetPrivateProfileSectionA
  00A71204   .  BE B931A700   mov esi,dll.00A731B9                     ;  ASCII "crack0=1234567890"
  00A71209   .  BF 4930A700   mov edi,dll.00A73049                     ;  1111
  00A7120E   .  EB 07         jmp Xdll.00A71217
  00A71210   >  B9 01000000   mov ecx,0x1                              ;  运算注册名
  00A71215   .  F3:A4         rep movs byte ptr es:[edi],byte ptr ds:[>
  00A71217   >  803E 3D       cmp byte ptr ds:[esi],0x3D
  00A7121A   .^ 75 F4         jnz Xdll.00A71210                        ;  循环6次
  00A7121C   .  46            inc esi                                  ;  取注册码“=”+“注册码”
  00A7121D   .  8975 FC       mov dword ptr ss:[ebp-0x4],esi
  00A71220   .  56            push esi                                 ; /Text
  00A71221   .  FF75 10       push dword ptr ss:[ebp+0x10]             ; |ControlID
  00A71224   .  FF75 08       push dword ptr ss:[ebp+0x8]              ; |hWnd
  00A71227   .  E8 3E010000   call <jmp.&user32.SetDlgItemTextA>       ; \SetDlgItemTextA
  00A7122C   .  68 4930A700   push dll.00A73049                        ; /1111
  00A71231   .  FF75 0C       push dword ptr ss:[ebp+0xC]              ; |ControlID
  00A71234   .  FF75 08       push dword ptr ss:[ebp+0x8]              ; |hWnd
  00A71237   .  E8 2E010000   call <jmp.&user32.SetDlgItemTextA>       ; \SetDlgItemTextA
  00A7123C   .  68 2430A700   push dll.00A73024                        ; /1250962585096peace
  00A71241   .  E8 5A010000   call <jmp.&kernel32.lstrlenA>            ; \lstrlenA
  00A71246   .  8945 F8       mov dword ptr ss:[ebp-0x8],eax
  00A71249   .  33D2          xor edx,edx
  00A7124B   .  33C9          xor ecx,ecx
  00A7124D   .  EB 0D         jmp Xdll.00A7125C
  00A7124F   >  BE 2430A700   mov esi,dll.00A73024                     ;  字串“1250962585096peace”跳位取数
  00A71254   .  8A0431        mov al,byte ptr ds:[ecx+esi]             ;  “1”“5”“9”“2”“8”“0”“6”“e”“c”
  00A71257   .  03D0          add edx,eax
  00A71259   .  83C1 02       add ecx,0x2
  00A7125C   >  3B4D F8       cmp ecx,dword ptr ss:[ebp-0x8]
  00A7125F   .^ 72 EE         jb Xdll.00A7124F
  00A71261   .  3155 F8       xor dword ptr ss:[ebp-0x8],edx
  00A71264   .  68 4930A700   push dll.00A73049                        ; /1111
  00A71269   .  E8 32010000   call <jmp.&kernel32.lstrlenA>            ; \lstrlenA
  00A7126E   .  8945 F4       mov dword ptr ss:[ebp-0xC],eax
  00A71271   .  33C9          xor ecx,ecx
  00A71273   .  33D2          xor edx,edx
  00A71275   .  EB 0B         jmp Xdll.00A71282
  00A71277   >  BE 4930A700   mov esi,dll.00A73049                     ;  1111;循环运算用户名
  00A7127C   .  8B1431        mov edx,dword ptr ds:[ecx+esi]
  00A7127F   .  03D2          add edx,edx
  00A71281   .  41            inc ecx
  00A71282   >  3B4D F4       cmp ecx,dword ptr ss:[ebp-0xC]
  00A71285   .^ 72 F0         jb Xdll.00A71277
  00A71287   .  3155 F8       xor dword ptr ss:[ebp-0x8],edx           ;  edx=60
  00A7128A   .  8B45 FC       mov eax,dword ptr ss:[ebp-0x4]           ;  假码传送到eax
  00A7128D   .  8B00          mov eax,dword ptr ds:[eax]               ;  EAX值传送到EAX?这句本菜屌看寄存器里面的变化是没懂
  00A7128F   .  3945 F8       cmp dword ptr ss:[ebp-0x8],eax           ;  假码值与计算后的真码值比较,即EAX与ebp-0x8比较
  00A71292   .  75 63         jnz Xdll.00A712F7                        ;  此处修改即可爆破
  00A71294   .  FF75 10       push dword ptr ss:[ebp+0x10]             ; /ControlID
  00A71297   .  FF75 08       push dword ptr ss:[ebp+0x8]              ; |hWnd
  00A7129A   .  E8 B9000000   call <jmp.&user32.GetDlgItem>            ; \GetDlgItem
  00A7129F   .  6A 00         push 0x0                                 ; /Enable = FALSE
  00A712A1   .  50            push eax                                 ; |hWnd
  00A712A2   .  E8 AB000000   call <jmp.&user32.EnableWindow>          ; \EnableWindow
  00A712A7   .  BE D931A700   mov esi,dll.00A731D9                     ;  打我PG我不乖,开始解码,两句反汇编解码一个字
  00A712AC   .  8006 05       add byte ptr ds:[esi],0x5
  00A712AF   .  C646 01 A7    mov byte ptr ds:[esi+0x1],0xA7           ;  解码正确后出现“恭”
  00A712B3   .  C646 02 CF    mov byte ptr ds:[esi+0x2],0xCF
  00A712B7   .  C646 03 B2    mov byte ptr ds:[esi+0x3],0xB2           ;  解码正确后出现“喜”
  00A712BB   .  8046 04 76    add byte ptr ds:[esi+0x4],0x76
  00A712BF   .  C646 05 C6    mov byte ptr ds:[esi+0x5],0xC6           ;  解码正确后出现“破”
  00A712C3   .  C646 06 BD    mov byte ptr ds:[esi+0x6],0xBD
  00A712C7   .  C646 07 E2    mov byte ptr ds:[esi+0x7],0xE2           ;  解码正确后出现“解”
  00A712CB   .  C646 08 B3    mov byte ptr ds:[esi+0x8],0xB3
  00A712CF   .  C646 09 C9    mov byte ptr ds:[esi+0x9],0xC9           ;  解码正确后出现“成”
  00A712D3   .  C646 0A B9    mov byte ptr ds:[esi+0xA],0xB9
  00A712D7   .  C646 0B A6    mov byte ptr ds:[esi+0xB],0xA6           ;  解码正确后出现“功”
  00A712DB   .  56            push esi                                 ; /取解码后正确文字“恭喜破解成功”字串
  00A712DC   .  FF75 08       push dword ptr ss:[ebp+0x8]              ; |hWnd
  00A712DF   .  E8 8C000000   call <jmp.&user32.SetWindowTextA>        ; \传送到标题
  00A712E4   .  FF75 14       push dword ptr ss:[ebp+0x14]             ; /ControlID
  00A712E7   .  FF75 08       push dword ptr ss:[ebp+0x8]              ; |hWnd
  00A712EA   .  E8 69000000   call <jmp.&user32.GetDlgItem>            ; \GetDlgItem
  00A712EF   .  6A 00         push 0x0                                 ; /Enable = FALSE
  00A712F1   .  50            push eax                                 ; |hWnd
  00A712F2   .  E8 5B000000   call <jmp.&user32.EnableWindow>          ; \EnableWindow,把注册按钮禁用
  00A712F7   >  5F            pop edi
  00A712F8   .  5E            pop esi                                  ;  CrackMe1.0040103F
  00A712F9   .  5B            pop ebx
  00A712FA   .  C9            leave
  00A712FB   .  C2 1000       retn 0x10
  
  至此全部分析完成
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于Crack_Qs, 转载请注明作者并保持文章的完整, 谢谢!
                                                       2013年05月01日 12:10:47

点评

2013年05月01日 12:10:47 求解释  发表于 2013-8-20 16:33

免费评分

参与人数 4热心值 +4 收起 理由
Chief + 1 欢迎分析讨论交流[吾爱破解论坛]有你更精彩.
LShang + 1 欢迎分析讨论交流,[吾爱破解论坛]有你更精.
小叨 + 1 加分鼓励
小试锋芒 + 1 分析的不错哦!看好你!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

吾爱扣扣 发表于 2013-8-20 16:32
有点怀疑了!这不是QS本人看结尾
 楼主| Liquor 发表于 2013-8-20 16:46
吾爱扣扣 发表于 2013-8-20 16:32
有点怀疑了!这不是QS本人看结尾

确实是我本人,可以邮箱联系我,qs#ff0000.cc
吾爱扣扣 发表于 2013-8-20 17:06

RE: CrackMe破解记录

Liquor 发表于 2013-8-20 16:46
确实是我本人,可以邮箱联系我,qs#ff0000.cc

错怪大大了。。
惜颜 发表于 2013-8-20 17:10
菜菜表示目前只会改个je啥的...
小雨细无声 发表于 2013-8-20 17:39
膜拜大神{:1_930:}
montana 发表于 2013-8-21 12:27
膜拜大神,算法帝啊。
1354669803 发表于 2013-8-21 20:53
Qs师傅不是在红客待么
 楼主| Liquor 发表于 2013-8-21 23:44
1354669803 发表于 2013-8-21 20:53
Qs师傅不是在红客待么

我没在红客呆过,那是红黑

amulin 发表于 2013-8-22 07:47
吾爱扣扣 发表于 2013-8-20 16:32
有点怀疑了!这不是QS本人看结尾

unpack转帖过来的
发帖的时候是5.1
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-10 15:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表