首页
社区
课程
招聘
BCG的一个crackme破解教程
发表于: 2006-10-13 16:48 9394

BCG的一个crackme破解教程

2006-10-13 16:48
9394

【破解作者】 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,要不人多了,你可就要排队了。。。
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
2
BCG ?需要排队?
2006-10-13 16:51
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
3
这可是BCG的通关证啊,不过是三年前的了。
要是三年前偶就破了它,咳咳咳。。。
2006-10-13 16:56
0
雪    币: 2943
活跃值: (1788)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
4
好文一定要顶。

的确有趣,当年的BCG入门好像很简单呀,而且这个Crackme,开始要求读入0xA个大写的X,但是在比较的时候,却是以是否读到的ASCII为0而结束的。这样,就只要是大写的X,却不管多少了,就算只写一个X也会注册成功的。
……
00401113    80B0 F3204000 58   xor byte ptr ds:[eax+4020F3],58             ; 读出的字符ASC码,77 xor 0x58
0040111A    40                 inc eax
0040111B    80B8 F3204000 00   cmp byte ptr ds:[eax+4020F3],0              ; 直到为零,真到ASCII码为0时,结束
00401122  ^ 75 EF              jnz short dumped_.00401113
00401124    68 F3204000        push dumped_.004020F3                       ; ASCII "/7>96"
00401129    68 FD204000        push dumped_.004020FD                       ; d 004020fd看到这一内存区域全为零,可见:Keyfile 中的字符的ASCII就是0x58
0040112E    E8 77000000        call <jmp.&kernel32.lstrcmp>                ; 真假比较
00401133    83F8 00            cmp eax,0                                   ; 不相等,则返回-1,即FFFFFFFF

……
2006-10-13 18:08
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
5
最初由 springkang[DFCG 发布
【破解作者】 springkang[DFCG]
【作者主页】 www.chinadfcg.com
【使用工具】 OD,Your BrAin
【破解平台】 XP
【软件名称】 BCG早期的crackme
........


确实,晚辈仍需努力革命.............
2006-10-13 22:30
0
雪    币: 244
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
追踪到BCG了,赶紧注册了一个用户。
2006-10-14 05:32
0
游客
登录 | 注册 方可回帖
返回
//