爆破vcrkme01(已补上注册机)
系统 : 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(已补上注册机)的更多相关文章
- 爆破unabexcm5fl(已补上注册机)
系统 : Windows xp 程序 : unabexcm5fl 程序下载地址 :http://pan.baidu.com/s/1pJYaNUV 要求 : 爆破 使用工具 :OD 可在“PEDIY C ...
- Bxm做的第一个CrackMe(已补上注册机)
系统 : Windows xp 程序 : Bxm_CrackMe1 程序下载地址 :http://pan.baidu.com/s/1pK0a0xt 要求 : 分析算法 使用工具 :OD 可在看雪论坛中 ...
- WSMBT Modbus & WSMBS Modbus 控件及注册机
先上注册机 点击下载 How to add the WSMBT control to the toolbox: On the Tools menu, click Choose Toolbox Item ...
- 【转】破解Source Insight 3.5.0072过程 附:安装软件+注册机
转载地址:http://blog.csdn.net/qs_hud/article/details/8884867 注册机及软件下载地址:http://download.csdn.net/detail/ ...
- 菜鸟 学注册机编写之 Android app
0x00前言 环境及工具: 手机 Nexus 4(己root) 系统版本 Android 5.01 工具 AndroidKiller_V1.2 关于Android平台app注册机的编 ...
- PostSharp 4.0注册机实现过程
PostSharp是基于.NET平台设计的比较强调易学易用的AOP框架. 什么是AOP? http://wayfarer.cnblogs.com/articles/241024.html 新版的已失效 ...
- RockWare RockWorks的Ollydbg调试过程及注册机(破解)思路
最近拿到了RockWorks15的安装包,可惜没有破解,试用也只能用14天.用PEiD工具察看了一下,Delphi编写的程序,竟然没加壳.本想用OllyDBG调试进去爆破一下,不意发现注册码很简单,如 ...
- AutoCAD 2013官方简体中文破解版(32 / 64位),带激活码和注册机
AutoCAD 2014下载地址:http://ideapad.zol.com.cn/61/160_603697.html 安装及破解方法:(注册机下载在下方) 1.安装Autodesk AutoCA ...
- Navicat11全系列激活(注册机)
Navicat是一款数据库管理工具, 用于简化, 开发和管理MySQL, SQL Server, SQLite, Oracle 和 PostgreSQL 的数据库: Navicat数据模型工具以图形化 ...
随机推荐
- Binary Tree Level Order Traversal [LeetCode]
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- 解决li在ie,firefox中行高不一致问题
转载 http://www.cnblogs.com/jikey/archive/2011/11/13/2247543.html li在ie与firefox的高度是不一样的,解决办法是li font-s ...
- eclipse中 起动tomcat时报Multiple Contexts have a path of "/shopping"
eclipse中 启动tomcat时报Multiple Contexts have a path of "/shopping". 这个是由于你的server服务器中的server. ...
- BOM初始状态配置
一个很简单的东西:有些公司在建BOM的时候,可能不是一次性建好,或者是想需要审核或者什么的,先不让使用. 其实这是SPRO里面配置的...路径:生产->基本物料->物料清单->物料单 ...
- 解决qt5在ubuntu下无法调用fcitx输入中文的问题
如题,在以前安装qt5.2.1的时候就遇到了这个问题.当时上网搜了很多资料,结果都解决不了,发现都是复制来复制去. 这次因为要用qt5.3.0在ubuntu下写个程序,所以不解决这个问题不行了.就继续 ...
- 减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)
在网站开发过程中,对于页面的加载效率一般都想尽办法求快.那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法.上一篇博文我们讲解了 “利用将小图标合成一张背景图来减少HTTP请求”, ...
- Error in Android Studio - "Default Activity Not Found"
Make sure you have specified the default activity in your AndroidManisfest.xml file. Within your def ...
- 铁人系列 (1) uva 10385
uva 10385 列出n-1个一元方程,对应成单峰函数,所以用三分求解即可. #include <cstdio> #include <cstring> #include & ...
- 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...
- wp8.1 Study7: ListView 和GridView应用
对于列表控件,WP8.1常用的是ListView.GridView.ListBox控件.其中前两个是从第三个继承来的. 1.ListView控件 它是展示垂直列表的,如下图所示.它十分适合展示数据. ...