系统 : Windows xp

程序 : Rith's CrackMe #1

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

要求 : 注册机编写

使用工具 : IDA Pro & OD

可在“PEDIY CrackMe 2007”中查找关于此程序的破文,标题为“WAKU的第二个破文----Rith's CrackMe #1(非常简单)”。

使用IDA载入程序,在字串表中找出正确注册的提示“Well done cracker!”,并双击交叉参考来到关键代码处:

   .   B81B4000   push    00401BB8                         ;  SE handler installation
. :A1 >mov eax, dword ptr fs:[]
0040158D . push eax
0040158E . : >mov dword ptr fs:[], esp
. 83EC 0C sub esp, 0C
. push ebx
. push ebp
0040159A . push esi
0040159B . 8BF1 mov esi, ecx
0040159D . push edi
0040159E . push ; ASCII "31415926535897932384"
004015A3 . 8D4C24 lea ecx, dword ptr [esp+]
004015A7 . 1C mov dword ptr [esp+1C], esi
004015AB . E8 FA020000 call <jmp.&MFC42.#>
004015B0 . 6A push
004015B2 . 8BCE mov ecx, esi
004015B4 . C74424 >mov dword ptr [esp+],
004015BC . E8 E3020000 call <jmp.&MFC42.#> ; MFC函数,此时,函数正在获取对话框的数据
004015C1 . 8B7E mov edi, dword ptr [esi+] ; 执行完此指令,edi存着用户名地址
004015C4 . 8B5F F8 mov ebx, dword ptr [edi-] ; 用户名长度
004015C7 . 83FB cmp ebx, ; 长度不能小于5
004015CA . 7C 7E jl short 0040164A
004015CC . 8B46 mov eax, dword ptr [esi+] ; eax存着序列号地址
004015CF . mov dword ptr [esp+], eax
004015D3 . F8 cmp dword ptr [eax-], ebx ; 用户名序列号长度是否相同?
004015D6 . jnz short 0040164A
004015D8 . 83FB cmp ebx, ; 用户名长度大于0x14?
004015DB . 7F 6D jg short 0040164A
004015DD . 33C9 xor ecx, ecx
004015DF . 85DB test ebx, ebx ; 长度为0,则跳转。并没有用的一条指令
004015E1 . 7E jle short
004015E3 . 8B7424 mov esi, dword ptr [esp+] ; 取密钥
004015E7 > 8A040F mov al, byte ptr [edi+ecx] ; 迭代用户名字串
004015EA . 0FBE2C31 movsx ebp, byte ptr [ecx+esi] ; 迭代密钥
004015EE . 0FBEC0 movsx eax, al
004015F1 . cdq ; 扩展指令
004015F2 . F7FD idiv ebp ; 用户名字符除以密钥字符
004015F4 . 8BC2 mov eax, edx ; 保留余数
004015F6 . D1E0 shl eax, ; 左移1位
004015F8 . 83F8 7B cmp eax, 7B ; 小于等于7B?
004015FB . 7E jle short
004015FD . 83E8 1A sub eax, 1A ; 大于7B则减去-1A
> 83F8 cmp eax, ; 大于等于41?
. 7D jge short 0040160E ; 是则进入下一cmp
. BA mov edx,
0040160A . 2BD0 sub edx, eax ; edx-=eax
0040160C . 8BC2 mov eax, edx ; 保留edx
0040160E > 83F8 5B cmp eax, 5B ; 小于等于5B?
. 7E jle short ; 是则直接去序列号进行对比
. 83F8 cmp eax, ; 大于等于61?
. 7D 0D jge short ; 是则直接去序列号进行对比
. cdq ; 否则eax除以10
. BD 0A000000 mov ebp, 0A
0040161E . F7FD idiv ebp
. 83C2 add edx, ; 余数+30
. 8BC2 mov eax, edx ; 存入eax
> 8B5424 mov edx, dword ptr [esp+] ; 取序列号
. 38040A cmp byte ptr [edx+ecx], al ; 序列号与处理结果是否相同?
0040162C . 1C jnz short 0040164A
0040162E . inc ecx ; 循环变量自增
0040162F . 3BCB cmp ecx, ebx ; 迭代结束?
.^ 7C B4 jl short 004015E7
. 8B7424 mov esi, dword ptr [esp+]
> 6A push
. push ; ASCII "Congratulations!"
0040163E . push ; ASCII "Well done cracker!"
. 8BCE mov ecx, esi
. E8 call <jmp.&MFC42.#> ; MessageBox函数

以上就是注册的关键代码了,发现该程序调用了MFC函数,函数名并没有在OD中显示,不要紧,对比IDA中相同的地址就可以看到具体用了什么函数。快速破解这个程序需要对MFC有一定的了解。好了,仔细跟踪代码,发现程序采用了F(用户名)=序列号的判断形势,我们用高级语言实现F(用户名)即可。

打开http://www.cnblogs.com/ZRBYYXDM/p/5115596.html中搭建的框架,并修改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 >= && len <= 0x14 ){ //格式控制。
CString Serial = ""; //密钥
CString PassWord = str; //序列号 for ( int i = ; i != len ; i++ ){
PassWord.SetAt( i,( PassWord[i] % Serial[i] ) << );
if ( PassWord[i] > 0x7B )
PassWord.SetAt( i,PassWord[i] - 0x1A );
if ( PassWord[i] < 0x41 )
PassWord.SetAt( i,0x82 - PassWord[i] ); if ( PassWord[i] > 0x5B && PassWord[i] < 0x61 )
PassWord.SetAt( i,PassWord[i] % + 0x30 );
} SetDlgItemText( IDC_EDIT_PASSWORD,PassWord );
}
else
MessageBox( "用户名格式错误!" );
}

再在OnInitDialog中添加此代码修改标题:SetWindowText(_T("Rith's CrackMe #1_Keygen"));

运行效果:

破解 Rith's CrackMe #1(对比IDA查看动态分析中的MFC函数名)的更多相关文章

  1. 查看局域网中连接的主机名和对应的IP地址

    1.查看局域网中的所有主机名 2.通过主机名解析IP地址:-4选项 3.通过IP地址解析主机名:-a选项

  2. dumpbin 查看dll中的导出函数

    C:\Program Files (x86)\Microsoft Visual Studio 14.0>dumpbin -exports E:\20171110\Release\aa.dll h ...

  3. 查看局域网其它电脑的计算机名和IP

    一.下面脚本可查看局域网中的电脑计算机名和IP,保存下面文本至记事本.后缀改成bat COLOR 0A CLS @ECHO Off Title 查询局域网内在线电脑IP :send @ECHO off ...

  4. IDA在内存中dump出android的Dex文件

    转载自http://drops.wooyun.org/tips/6840 在现在的移动安全环境中,程序加壳已经成为家常便饭了,如果不会脱壳简直没法在破解界混的节奏.ZJDroid作为一种万能脱壳器是非 ...

  5. 查看linux中的TCP连接数【转】

     转自:http://blog.csdn.net/he_jian1/article/details/40787269 查看linux中的TCP连接数 本文章已收录于:   计算机网络知识库  分类: ...

  6. 查看SQL SERVER 加密存储过程,函数,触发器,视图

    原文:查看SQL SERVER 加密存储过程,函数,触发器,视图 create  PROCEDURE sp_decrypt(@objectname varchar(50))ASbeginset noc ...

  7. 使用strings查看二进制文件中的字符串

    使用strings查看二进制文件中的字符串 今天介绍的这个小工具叫做strings,它实现功能很简单,就是找出文件内容中的可打印字符串.所谓可打印字符串的涵义是,它的组成部分都是可打印字符,并且以nu ...

  8. 查看linux中某个端口(port)是否被占用(netstat,lsof)

    查看linux中某个端口(port)是否被占用(netstat,lsof) netstat命令可以显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组等信息.命令格式:netstat [ ...

  9. 查看jquery绑定的事件函数

    作为技术狂热分子的职业本能,看到一个技术产品的功能,总会忍不住想知道它是怎么被实现的.比如我每每看到别人网站一个很炫的界面或者很酷的功能,就忍不住打开了浏览器的控制台... 好,不扯远,说说当你想看到 ...

随机推荐

  1. LINUX 硬盘命令

    1. 查看硬盘情况fdisk -l 每个Disk 为一个硬盘2. 挂在新硬盘fdisk /dev/sdb #硬盘地址Command (m for help):n #新建立分区Command actio ...

  2. 用XmlSerializer进行xml反序列化的时候,程序报错: 不应有 <xml xmlns=''>

    原因 一,类型错误: 比如xml本来是UserInfo类型 用XmlSerializer进行反序列化传入的类型是MemberInfo这就会报错 二,xml根节点和对象的类名不一致,而又没有对类加入[X ...

  3. poj2284 That Nice Euler Circuit(欧拉公式)

    题目链接:poj2284 That Nice Euler Circuit 欧拉公式:如果G是一个阶为n,边数为m且含有r个区域的连通平面图,则有恒等式:n-m+r=2. 欧拉公式的推广: 对于具有k( ...

  4. struts2视频学习笔记 15-17 (访问或添加request属性,文件上传)

    课时15 访问或添加request/session/application属性 1.简单说 page指当前页面.在一个jsp页面里有效 2.request 指从http请求到服务器处理结束,返回响应的 ...

  5. PHP获取指定时间的上个月

    主要用strtotime()这个函数 php 获得前一个月的月份 date("Y-m-d",strtotime("last month")); php获得给定时 ...

  6. JDE隐藏Constant等(Hide Object)

    Grid中隐藏列,列值可以使用属性配置,但是列表头Constant需要用函数修改,如下所示:

  7. AudioManager音频管理器控制手机音频实例

    import android.media.AudioManager;import android.media.MediaPlayer;import android.os.Bundle;import a ...

  8. 如何在 Linux 中整理磁盘碎片

    有一个神话是 linux 的磁盘从来不需要整理碎片.在大多数情况下这是真的,大多数因为是使用的是优秀的日志文件系统(ext3.4等等)来处理文件系统.然而,在一些特殊情况下,碎片仍旧会产生.如果正巧发 ...

  9. 获取手机通讯录放入PinnedSectionListView中,按名字首字母排序,并且实现拨打电话功能。

    package com.lixu.tongxunlu; import java.util.ArrayList; import com.lixu.tongxunlu.PinnedSectionListV ...

  10. bzoj 2440: [中山市选2011]完全平方数

    #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #defin ...