系统 : Windows xp

程序 : vcrkme01

程序下载地址 :http://pan.baidu.com/s/1mh1n33y

要求 : 爆破

使用工具 :OD

可在“PEDIY CrackMe 2007”中查找关于此程序的破文,标题为“标志位法爆破实例”。

OD载入程序根据字串提示找出关键算法:

   .   FF000000   push    0FF                              ; /Count = FF (255.)
. push ; |Buffer = vcrkme01.00406930
0040122D . E8030000 push 3E8 ; |ControlID = 3E8 (1000.)
. push eax ; |hWnd => 00490736 ('[v0!d] Crackme - v0.01',class='#32770')
. FFD6 call esi ; \GetDlgItemTextA
. 8B0D mov ecx, dword ptr []
0040123B . FF000000 push 0FF ; /Count = FF (255.)
. 306A4000 push 00406A30 ; |Buffer = vcrkme01.00406A30
. EA030000 push 3EA ; |ControlID = 3EA (1002.)
0040124A . push ecx ; |hWnd => 00490736 ('[v0!d] Crackme - v0.01',class='#32770')
0040124B . FFD6 call esi ; \GetDlgItemTextA
0040124D . 306A4000 push 00406A30
. push
. E8 A4FDFFFF call
0040125C . 83C4 add esp,
0040125F . 83F8 cmp eax, ; eax 是否为1?
. A3 646C4000 mov dword ptr [406C64], eax
jnz short 004012CE ; 不是则跳转出错
. 8B15 mov edx, dword ptr []
0040126F . 6A push ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
. push ; |good job! - cracked!
. push ; |send your solution to : v0id2k1@hotmail.com
0040127B . push edx ; |hOwner => 00490736 ('[v0!d] Crackme - v0.01',class='#32770')
0040127C . FF15 C4504000 call dword ptr [<&USER32.MessageBoxA>>; \MessageBoxA

这里F7进入标志eax的子程序:

      8B5424      mov     edx, dword ptr [esp+]          ;  对edx的最后一次赋值
B9 mov ecx,
0040118C |. 33C0 xor eax, eax
0040118E |. BF 446B4000 mov edi, 00406B44
|. F3:AB rep stos dword ptr es:[edi]
|. 5F pop edi
|. 5E pop esi
|. 5D pop ebp
8BC2 mov eax, edx ; 最后将edx的值传入标志eax
0040119A 5B pop ebx
0040119B C3 retn

程序最后对eax的值进行了设置,我们也在最后将赋值的指令(地址401198)改成:

inc eax

效果如下:

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

分析标志eax的子程序:

  /$              push    ebx
|. 8B5C24 0C mov ebx, dword ptr [esp+C]
|. push ebp
|. push esi
|. 8B7424 mov esi, dword ptr [esp+]
0040100B |. 8A0B mov cl, byte ptr [ebx] ; 取出密钥首字符
0040100D |. 33ED xor ebp, ebp
0040100F |. push edi
|. 8A06 mov al, byte ptr [esi] ; 取出用户名首字符
|. 3AC1 cmp al, cl ; 首字符是否相同?
|. 0F85 jnz ; 不同则注册失败
0040101A |. 8BFE mov edi, esi
0040101C |. 83C9 FF or ecx, FFFFFFFF
0040101F |. 33C0 xor eax, eax
|. F2:AE repne scas byte ptr es:[edi]
|. F7D1 not ecx
|. dec ecx ; 求用户名子串长度
|. 83F9 cmp ecx, ; 长度低于5?
|. 0F82 jb ; 低于则注册失败
0040102F |. 807B 2D cmp byte ptr [ebx+], 2D ; 密钥第二个字符是-吗?
|. 0F85 4A010000 jnz ; 不是则注册失败
|. 8BFE mov edi, esi
0040103B |. 83C9 FF or ecx, FFFFFFFF
0040103E |. 33C0 xor eax, eax
|. 33D2 xor edx, edx
|. F2:AE repne scas byte ptr es:[edi]
|. F7D1 not ecx
|. dec ecx ; 求用户名子串长度
|. je short ; 并没有什么卵用的jump
|> 0FBE0C32 /movsx ecx, byte ptr [edx+esi] ; 循环迭代用户名字符串
0040104D |. 03E9 |add ebp, ecx ; 累加
0040104F |. 8BFE |mov edi, esi
|. 83C9 FF |or ecx, FFFFFFFF
|. 33C0 |xor eax, eax
|. |inc edx ; 循环变量自增
|. F2:AE |repne scas byte ptr es:[edi]
|. F7D1 |not ecx
0040105B |. |dec ecx ; 求用户名子串长度
0040105C |. 3BD1 |cmp edx, ecx ; 是否迭代完毕?
0040105E |.^ E9 \jb short
|> 81C5 add ebp, ; 累加结果加上0x6064
|. push ebp
|. push ; ASCII "%lu"
0040106C |. 306B4000 push 00406B30 ; ASCII "25215"
|. E8 B6030000 call 0040142C ; 将数值转换成 对应的无符号长整形 ”字符串“
|. 8A16 mov dl, byte ptr [esi] ; 取出用户名首字符
|. 8BFE mov edi, esi
0040107A |. 83C9 FF or ecx, FFFFFFFF
0040107D |. 33C0 xor eax, eax
0040107F |. 446B4000 mov byte ptr [406B44], dl ; 保存用户名首字符
|. C605 456B4000>mov byte ptr [406B45], 2D ; 添上-字符
0040108C |. F2:AE repne scas byte ptr es:[edi]
0040108E |. F7D1 not ecx
|. dec ecx ; 求用户名子串长度
|. 0FBE4431 FF movsx eax, byte ptr [ecx+esi-] ; 取用户名子串尾字符
|. push eax ; 入栈
|. E8 C4020000 call ; 小写转大写
0040109C |. A2 466B4000 mov byte ptr [406B46], al ; 添入大写字符
004010A1 |. BF 306B4000 mov edi, 00406B30 ; ASCII "25215"
004010A6 |. 83C9 FF or ecx, FFFFFFFF
004010A9 |. 33C0 xor eax, eax
004010AB |. F2:AE repne scas byte ptr es:[edi]
004010AD |. F7D1 not ecx
004010AF |. 2BF9 sub edi, ecx
004010B1 |. 81C5 add ebp, ; 循环结果再加上0x6064
004010B7 |. 8BF7 mov esi, edi
004010B9 |. 8BD1 mov edx, ecx
004010BB |. BF 446B4000 mov edi, 00406B44 ; ASCII "p-"
004010C0 |. 83C9 FF or ecx, FFFFFFFF
004010C3 |. F2:AE repne scas byte ptr es:[edi]
004010C5 |. 8BCA mov ecx, edx
004010C7 |. 4F dec edi
004010C8 |. C1E9 shr ecx, ; 逻辑右边移动两位
004010CB |. F3:A5 rep movs dword ptr es:[edi], dword ptr [esi] ; 添上长整形字符串1
004010CD |. 8BCA mov ecx, edx
004010CF |. push ebp
004010D0 |. 83E1 and ecx,
004010D3 |. push ; ASCII "%lu"
004010D8 |. F3:A4 rep movs byte ptr es:[edi], byte ptr [esi] ; 添上长整形字符串2
004010DA |. BF mov edi,
004010DF |. 83C9 FF or ecx, FFFFFFFF
004010E2 |. F2:AE repne scas byte ptr es:[edi]
004010E4 |. F7D1 not ecx
004010E6 |. 2BF9 sub edi, ecx
004010E8 |. 306B4000 push 00406B30 ; ASCII "25215"
004010ED |. 8BF7 mov esi, edi
004010EF |. 8BD1 mov edx, ecx
004010F1 |. BF 446B4000 mov edi, 00406B44 ; ASCII "p-"
004010F6 |. 83C9 FF or ecx, FFFFFFFF
004010F9 |. F2:AE repne scas byte ptr es:[edi] ; 求贴好的序列号子串长度
004010FB |. 8BCA mov ecx, edx
004010FD |. 4F dec edi
004010FE |. C1E9 shr ecx,
|. F3:A5 rep movs dword ptr es:[edi], dword ptr [esi]
|. 8BCA mov ecx, edx
|. 83E1 and ecx,
|. F3:A4 rep movs byte ptr es:[edi], byte ptr [esi]
0040110A |. E8 1D030000 call 0040142C ; 将数值转换成 对应的无符号长整形 ”字符串“
0040110F |. BF 306B4000 mov edi, 00406B30 ; ASCII "25215"
|. 83C9 FF or ecx, FFFFFFFF
|. 33C0 xor eax, eax
|. 83C4 1C add esp, 1C
0040111C |. F2:AE repne scas byte ptr es:[edi]
0040111E |. F7D1 not ecx
|. 2BF9 sub edi, ecx
|. 8BF7 mov esi, edi
|. 8BD1 mov edx, ecx
|. BF 446B4000 mov edi, 00406B44 ; ASCII "p-"
0040112B |. 83C9 FF or ecx, FFFFFFFF
0040112E |. F2:AE repne scas byte ptr es:[edi]
|. 8BCA mov ecx, edx
|. 4F dec edi
|. C1E9 shr ecx,
|. F3:A5 rep movs dword ptr es:[edi], dword ptr [esi] ; 添上长整形字符串3
|. 8BCA mov ecx, edx
0040113A |. 8BC3 mov eax, ebx
0040113C |. 83E1 and ecx,
0040113F |. F3:A4 rep movs byte ptr es:[edi], byte ptr [esi] ; 添上长整形字符串4
|. BE 446B4000 mov esi, 00406B44 ; ASCII "p-"
|> 8A10 /mov dl, byte ptr [eax] ; 循环迭代密钥
|. 8A1E |mov bl, byte ptr [esi] ; 循环迭代序列号
0040114A |. 8ACA |mov cl, dl
0040114C |. 3AD3 |cmp dl, bl ; 是否相同?
0040114E |. |jnz short
|. 84C9 |test cl, cl ; 是否为0?
|. |je short 0040116A ; 是则结束循环
|. 8A50 |mov dl, byte ptr [eax+] ; 循环迭代密钥
|. 8A5E |mov bl, byte ptr [esi+] ; 循环迭代序列号
0040115A |. 8ACA |mov cl, dl
0040115C |. 3AD3 |cmp dl, bl ; 是否相同?
0040115E |. |jnz short
|. 83C0 |add eax,
|. 83C6 |add esi,
|. 84C9 |test cl, cl
|.^ DC \jnz short
0040116A |> 33C0 xor eax, eax ; 清空eax
0040116C |. 33D2 xor edx, edx ; 清空edx
0040116E |. 85C0 test eax, eax
|. 0F94C2 sete dl ; dl为1
|. EB jmp short
|> 1BC0 sbb eax, eax ; eax=ffffffff
|. 83D8 FF sbb eax, -
0040117A |. 33D2 xor edx, edx
0040117C |. 85C0 test eax, eax
0040117E |. 0F94C2 sete dl ; dl为0
|. EB jmp short
|> 8B5424 mov edx, dword ptr [esp+]
|> B9 mov ecx,
0040118C |. 33C0 xor eax, eax
0040118E |. BF 446B4000 mov edi, 00406B44 ; ASCII "p-"
|. F3:AB rep stos dword ptr es:[edi] ; 清空序列号
|. 5F pop edi
|. 5E pop esi
|. 5D pop ebp
|. 8BC2 mov eax, edx ; eax取edx的值
0040119A |. 5B pop ebx
0040119B \. C3 retn

那么长的代码段实现的功能却是很简单,我们动手实现一下注册机。

我们直接打开之前搭建的框架,并修改OnBtnDecrypt函数如下:

void CKengen_TemplateDlg::OnBtnDecrypt()
{
// TODO: Add your control notification handler code here
CString str;
GetDlgItemText( IDC_EDIT_NAME,str ); //获取用户名字串基本信息。
int len = str.GetLength(); if ( len != ){ //格式控制。
unsigned int sum = ;
for ( int i = ; i != len ; i++ ) //循环累加
sum += str[i];
sum += 0x6064; //转化大小写
if ( (str[len-] >= 0x61) && (str[len-] <= 0x7A) )
str.SetAt( len-,str[len-] - 0x20 ); CString PassWord;
PassWord.Format( "%c-%c%lu-%lu",str[],str[len-],sum,sum+0x6064 ); SetDlgItemText( IDC_EDIT_PASSWORD,PassWord );
}
else
MessageBox( "用户名格式错误!" );
}

再在OnInitDialog中添加此代码修改标题:SetWindowText(_T("wind-vcrkme01_Keygen"));

运行效果:

爆破vcrkme01(已补上注册机)的更多相关文章

  1. 爆破unabexcm5fl(已补上注册机)

    系统 : Windows xp 程序 : unabexcm5fl 程序下载地址 :http://pan.baidu.com/s/1pJYaNUV 要求 : 爆破 使用工具 :OD 可在“PEDIY C ...

  2. Bxm做的第一个CrackMe(已补上注册机)

    系统 : Windows xp 程序 : Bxm_CrackMe1 程序下载地址 :http://pan.baidu.com/s/1pK0a0xt 要求 : 分析算法 使用工具 :OD 可在看雪论坛中 ...

  3. WSMBT Modbus & WSMBS Modbus 控件及注册机

    先上注册机 点击下载 How to add the WSMBT control to the toolbox: On the Tools menu, click Choose Toolbox Item ...

  4. 【转】破解Source Insight 3.5.0072过程 附:安装软件+注册机

    转载地址:http://blog.csdn.net/qs_hud/article/details/8884867 注册机及软件下载地址:http://download.csdn.net/detail/ ...

  5. 菜鸟 学注册机编写之 Android app

    0x00前言 环境及工具: 手机    Nexus 4(己root) 系统版本    Android 5.01 工具    AndroidKiller_V1.2 关于Android平台app注册机的编 ...

  6. PostSharp 4.0注册机实现过程

    PostSharp是基于.NET平台设计的比较强调易学易用的AOP框架. 什么是AOP? http://wayfarer.cnblogs.com/articles/241024.html 新版的已失效 ...

  7. RockWare RockWorks的Ollydbg调试过程及注册机(破解)思路

    最近拿到了RockWorks15的安装包,可惜没有破解,试用也只能用14天.用PEiD工具察看了一下,Delphi编写的程序,竟然没加壳.本想用OllyDBG调试进去爆破一下,不意发现注册码很简单,如 ...

  8. AutoCAD 2013官方简体中文破解版(32 / 64位),带激活码和注册机

    AutoCAD 2014下载地址:http://ideapad.zol.com.cn/61/160_603697.html 安装及破解方法:(注册机下载在下方) 1.安装Autodesk AutoCA ...

  9. Navicat11全系列激活(注册机)

    Navicat是一款数据库管理工具, 用于简化, 开发和管理MySQL, SQL Server, SQLite, Oracle 和 PostgreSQL 的数据库: Navicat数据模型工具以图形化 ...

随机推荐

  1. PowerDesigner生成SQL脚本时,对象带有双引号的问题解决

    在pdm查看脚本时,发现表名和字段名带有双引号: 1.create table"cfg_user_card_account"  ( 2.  "user_card_acco ...

  2. UB单修改

    FUNCTION Z_SD_UB_CHANGE. *"-------------------------------------------------------------------- ...

  3. ios基础篇(七)——UISwich、UISlider、UIProgressView的用法总结

    一.UISlider UIslider滑块控件在IOS开发中会常用到,可用于调节音量,字体大小等UI方面的交互:UISlider实例提供一个控件,让用户通过左右拖动一个滑块(可称其为“缩略图”)来选择 ...

  4. tomcat 下虚拟机部署导致应用filter失效的问题

    遇到一个困扰我两天的问题 服务器的tomcat上面挂了3个项目 1个项目在D:\tomcat\\webapps\ROOT下  运行正常 1个项目在D:\heyefan下 运行正常 1个项目在D:\MA ...

  5. 修改linux 文件权限命令 chmod

    [转载自:http://www.cnblogs.com/avril/archive/2010/03/23/1692809.html] Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以 ...

  6. B’QConf(北京软件质量大会)记

    下午从公司加班回来,顺路到淘宝(大望路)参加B'QConf(北京软件质量大会).淘宝所在的国家广告产业园原来是一个菜市场,已经有大约6年没有到那一带活动了.之所以记得这么清楚,是因为6年前曾经从那里的 ...

  7. P264练习题1.2题

    package 集合; import java.util.*; public class fourteen { public static void main(String[] args) { //1 ...

  8. 从ajax获取的数据无法通过Jquery选择器来调用事件

    如果标签是动态生成的,比如说div.tr.td等,若需通过Jquery来获取事件,那么需要用live来绑定相应的事件. 比如说绑定div的click事件 $("div").live ...

  9. IT公司100题-12-求1+2+…+n

    问题描述: 求1+2+…+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句(A?B:C).   分析: 利用类的静态变量实现: new一含有n ...

  10. jsp:useBean标准动作

    1.bean法则 JavaBean和企业JavaBean是完全不相干的两个东西.普通的非企业JavaBean需要满足一定的规范才能被JSP和servlet使用: 1)必须有一个无参数的公共构造函数: ...