吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3240|回复: 1
收起左侧

[CrackMe] 【吾爱2013CM大赛解答】--TempCrackme2013--Rookietp分析

[复制链接]
h_one 发表于 2013-12-17 00:44
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

【文章标题】: 吾爱2013CM大赛解答--TempCrackme2013--Rookietp分析
【文章作者】:zxcfvasd
【作者主页】: 无
【操作平台】: win xp
【工具】 OD,IDA

【博客地址】http://honeblog.duapp.com/
ps:博客中有本Crackme,crc校验保护源码

详细分析:
此程序是MFC写的,所以对次下按钮事件断:

00402100   .  8379 20 7B    cmp dword ptr ds:[ecx+0x20],0x7B   
00402104      75 0E         jnz XTempCrac.00402114   这是程序的关键跳,将nop掉就可以爆破成功了。
00402106   .  6A 00         push 0x0
00402108   .  6A 00         push 0x0
0040210A   .  68 28F85400   push TempCrac.0054F828
0040210F   .  E8 9F030000   call TempCrac.004024B3
00402114   >  C3            retn


但是怎么不爆破也成功注册啊,,我就跟了下程序
cmp dword ptr ds:[ecx+0x20],0x7B     12fe60 保存的值是怎么得到的喃?
发现在让程序跑起后下断,程序就退出了。我就猜测肯定是在WM_INITDIALOG消息处理中断点检查(或CRC32)

对于mfc程序我想最关键的就是跟中到WM_INITDIALOG处理,和按钮事件函数了
MFC中寻找OnInitDialog
1,可以使用IDA静态分析,在左边FuntionName窗口输入CDialog::OnInit定位
2,直接在OD里ctrl+n 找到CreateDialogIndirectParam完成非模态对话框的创建,之后找到DlgPrco函数
这里我用第二种放法
0040695D   > \53            push ebx                                 ; /lParam
0040695E   .  68 2C624000   push TempCrac.0040622C                   ; |pDlgProc = TempCrac.0040622C 转到反汇编
00406963   .  50            push eax                                 ; |hOwner
00406964   .  57            push edi                                 ; |pTemplate
00406965   .  FF75 10       push dword ptr ss:[ebp+0x10]             ; |hInst
00406968   .  FF15 B4575200 call dword ptr ds:[<&USER32.CreateDialog>; \CreateDialogIndirectParamW

0040623A  |.  FF75 08       push [arg.1]                             ;  HWND   次句发现12fe60 保存的值是窗口句柄,
0040623D  |.  E8 44740000   call TempCrac.0040D686
00406242  |.  50            push eax
00406243  |.  68 30665200   push TempCrac.00526630
00406248  |.  E8 5EB90000   call TempCrac.00411BAB
0040624D  |.  59            pop ecx
0040624E  |.  59            pop ecx
0040624F  |.  85C0          test eax,eax
00406251  |.  74 0C         je XTempCrac.0040625F
00406253  |.  8B10          mov edx,dword ptr ds:[eax]
00406255  |.  8BC8          mov ecx,eax
00406257  |.  FF92 74010000 call dword ptr ds:[edx+0x174]

关键call,,利RtlComputeCrc32函数对断点检查
0040625D  |.  EB 07         jmp XTempCrac.00406266
00401193  |.  68 4CF45400   push TempCrac.0054F44C                   ; /FileName = "ntdll.dll"
00401198  |.  FF15 FC535200 call dword ptr ds:[<&KERNEL32.LoadLibrar>; \LoadLibraryW
0040119E  |.  68 7CF45400   push TempCrac.0054F47C                   ; /ProcNameOrOrdinal = "RtlComputeCrc32"
004011A3  |.  50            push eax                                 ; |hModule
004011A4  |.  FF15 28545200 call dword ptr ds:[<&KERNEL32.GetProcAdd>; \GetProcAddress
004011AA  |.  68 27010000   push 0x127        检测大小
004011AF  |.  68 00104000   push TempCrac.00401000  检查地址
004011B4  |.  8BF0          mov esi,eax
004011B6  |.  6A 00         push 0x0
004011B8  |.  FFD6          call esi
004011C6  |.  3D 71196895   cmp eax,0x95681971
004011CB      74 07         je XTempCrac.004011D4     将je,给成jmp 就可以了
004011CD  |.  6A FF         push -0x1                                ; /ExitCode = FFFFFFFF (-1.)
004011CF  |.  FFD3          call ebx                                 ; |[GetCurrentProcess
004011D1  |.  50            push eax                                 ; |hProcess
004011D2  |.  FFD7          call edi                                 ; \TerminateProcess
004011D4  |>  68 27010000   push 0x127
004011D9  |.  68 40104000   push TempCrac.00401040
004011DE  |.  6A 00         push 0x0
004011E0  |.  FFD6          call esi
004011E2  |.  3D 84DC625E   cmp eax,0x5E62DC84
004011E7      74 07         je XTempCrac.004011F0
CRC检查还没完,之后创建线程对代码块,和Kernel32.dl模块进行断点检查,具体实现代码请见博客

004011F6  |.  6A 00         push 0x0                                 ; /pModule = NULL
004011F8  |.  FFD6          call esi                                 ; \GetModuleHandleW
004011FA  |.  50            push eax
004011FB  |.  E8 50FEFFFF   call TempCrac.00401050
00401200  |.  83C4 04       add esp,0x4
00401203  |.  68 60F45400   push TempCrac.0054F460                   ;  UNICODE "kernel32.dll"
00401208  |.  FFD6          call esi
0040120A  |.  50            push eax
0040120B  |.  E8 40FEFFFF   call TempCrac.00401050
00401210  |.  83C4 04       add esp,0x4   全部nop 不进行CRC校验


进过分析00406257  |.  FF92 74010000 call dword ptr ds:[edx+0x174]就是通过RtlComputeCrc32函数对断点检查,我们直接可以将内部检查函数nop掉就好了

在这个过程中12fe60 保存的值一直都是窗口句柄值
之后让程序跑起来,发现12fe60让然没有改变看来只有爆破了




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 1热心值 +1 收起 理由
Chief + 1 吾爱破解2013CM大赛,有你更精彩!

查看全部评分

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

头像被屏蔽
Ylca 发表于 2013-12-17 01:21
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 16:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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