中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 看雪学院专区 > CrackMe
BCG的一个crackme破解教程
作者:佚名 时间:2006-12-14 21:09 出处:pediy.com 责编:月夜寒箫
              摘要:BCG的一个crackme破解教程
【破解作者】 springkang[DFCG]
【作者主页】 www.chinadfcg.com
【使用工具】 OD,Your BrAin
【破解平台】 XP
【软件名称】 BCG早期的crackme
【加壳方式】 aspack2.11
【软件简介】 娃娃[CCG]高手亲自编写,通过你就可以成为BCG正式成员了
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】


先看两个函数createfile,readfile

函数ReadFile
作用:从文件中读出数据 
参数:其中Long,非零表示成功,零表示失败。

BOOL ReadFile(
HANDLE hFile, // Long,文件的句柄
LPVOID lpBuffer, // Any,用于保存读入数据的一个缓冲区 
DWORD nNumberOfBytesToRead, //Long,要读入的字符数 
LPDWORD lpNumberOfBytesRead, // Long,从文件中实际读入的字符数
LPOVERLAPPED lpOverlapped // address of structure for data 
); 
 

函数CreateFileA 
作用:可打开和创建文件、管道、邮槽、通信服务、设备以及控制台


HANDLE CreateFileA(

LPCTSTR lpFileName, // String,要打开的文件的名字
DWORD dwDesiredAccess, // 允许对设备进行读写访问;
DWORD dwShareMode, // 共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes// 指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(如果操作系统支持的)
DWORD dwCreationDistribution, // 如何创建文件
DWORD dwFlagsAndAttributes, // file attributes 
HANDLE hTemplateFile //Long,如果不为零,则指定一个文件句柄。新文件将从这个文件中复制 扩展属性
 
一、脱壳
       过程从略
二、用OD载入脱壳后的文件1_original.exe。向下拉动几行,来到:
00401098   > \6A 00         push    0                                ; /hTemplateFile = NULL
0040109A   .  68 EF204000   push    004020EF                         ; |Attributes = READONLY|HIDDEN|SYSTEM|ARCHIVE|NORMAL|402048
0040109F   .  6A 03         push    3                                ; |Mode = OPEN_EXISTING
004010A1   .  6A 00         push    0                                ; |pSecurity = NULL
004010A3   .  6A 03         push    3                                ; |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
004010A5   .  68 000000C0   push    C0000000                         ; |Access = GENERIC_READ|GENERIC_WRITE
004010AA   .  68 E5204000   push    004020E5                         ; |FileName = "[BCG].Key"      //创建的文件名
004010AF   .  E8 DE000000   call    <jmp.&kernel32.CreateFileA>      ; \CreateFileA        //F2下断
004010B4   .  A3 00204000   mov     [402000], eax
004010B9   .  833D 00204000>cmp     dword ptr [402000], -1
004010C0   .  0F84 92000000 je      00401158           //如果没有[BCG].Key,跳转到失败处
004010C6   .  6A 00         push    0                                ; /pOverlapped = NULL
004010C8   .  68 07214000   push    00402107                         ; |pBytesRead = 1_origin.00402107
004010CD   .  6A 0A         push    0A                               ; |BytesToRead = A (10.)        //文件里面的字符数
004010CF   .  68 F3204000   push    004020F3                         ; |Buffer = 1_origin.004020F3   //存放真正密码的地址
004010D4   .  FF35 00204000 push    dword ptr [402000]               ; |hFile = NULL
004010DA   .  E8 C5000000   call    <jmp.&kernel32.ReadFile>         ; \ReadFile

004010E3   .  6A 00         push    0                                ; /pOverlapped = NULL
004010E5   .  68 07214000   push    00402107                         ; |pBytesRead = 1_origin.00402107
004010EA   .  6A 0A         push    0A                               ; |BytesToRead = A (10.)      //字符长度
004010EC   .  68 FD204000   push    004020FD                         ; |Buffer = 1_origin.004020FD   //存放你创建的文件里的字符
004010F1   .  FF35 00204000 push    dword ptr [402000]               ; |hFile = FFFFFFFF
004010F7   .  E8 A8000000   call    <jmp.&kernel32.ReadFile>         ; \ReadFile


00401124   .  68 F3204000   push    004020F3                         ; /String2 = "X"     //哈哈,真正的密码
00401129   .  68 FD204000   push    004020FD                         ; |String1 = ""      //没有创建文件,或文件为空
0040112E   .  E8 77000000   call    <jmp.&kernel32.lstrcmp>          ; \lstrcmpA


理清一下思路:
程序在启动的时侯或点注册的时候,会寻找当前目录下是否有[BCG].key文件,同时,再比较文件里的字符,如果相等,则
提示成功,否则你要继续革命。。。。
所以,创建一个[BCG].key,里面输入10个大写的X,保存。

--------------------------------------------------------------------------------
【破解总结】


赶紧去加入BCG,要不人多了,你可就要排队了。。。
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
所上传文件
娃娃的crackme.rar (上传时间2006-10-13,16:48,56.4 KB,25 次点击)
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有