-
-
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期)