⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dfcg破解入门.txt

📁 几篇非常不错的东西
💻 TXT
📖 第 1 页 / 共 5 页
字号:
bpx GetWindowText(A)  获取窗口文本

拦截消息框:

bpx MessageBox(A) 创建消息框 
bpx MessageBoxExA  创建消息框 
bpx MessageBoxIndirect(A)  创建定制消息框

拦截警告声:

bpx MessageBeep   发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)

拦截对话框:










bpx DialogBox   创建模态对话框 
bpx DialogBoxParam(A)   创建模态对话框 
bpx DialogBoxIndirect   创建模态对话框 
bpx DialogBoxIndirectParam(A)  创建模态对话框 
bpx CreateDialog        创建非模态对话框 
bpx CreateDialogParam(A)    创建非模态对话框 
bpx CreateDialogIndirect    创建非模态对话框 
bpx CreateDialogIndirectParam(A)  创建非模态对话框 
bpx GetDlgItemText(A)  获取对话框文本 
bpx GetDlgItemInt     获取对话框整数值

拦截剪贴板:

bpx GetClipboardData   获取剪贴板数据


拦截注册表: 


bpx RegOpenKey(A)打开子健 ( 例:bpx RegOpenKey(A) if *(esp+8)=='****' ) 
bpx RegOpenKeyEx 打开子健 ( 例:bpx RegOpenKeyEx if *(esp+8)=='****' ) 
bpx RegQueryValue(A) 查找子健 ( 例:bpx RegQueryValue(A) if *(esp+8)=='****' ) 
bpx RegQueryValueEx 查找子健 ( 例:bpx RegQueryValueEx if *(esp+8)=='****' ) 
bpx RegSetValue(A) 设置子健 ( 例:bpx RegSetValue(A) if *(esp+8)=='****' ) 
bpx RegSetValueEx(A) 设置子健 ( 例:bpx RegSetValueEx(A) if *(esp+8)=='****' ) 
“****”为指定子键名的前4个字符,如子键为“Regcode”,则“****”= “Regc” 



功能限制拦截断点:

bpx EnableMenuItem 
bpx EnableWindow 
bmsg hMenu wm_command 
bpx K32Thk1632Prolog 

禁止或允许菜单项 
禁止或允许窗口 
拦截菜单按键事件,其中hMenu为菜单句柄 
配合bmsg hMenu wm_command使用,可以通过这个断点进入菜单处理程序 
应用示例: 
CALL [KERNEL32!K32Thk1632Prolog] 
CALL [......]                    <-- 由此跟踪进入菜单处理程序 
CALL [KERNEL32!K32Thk1632Epilog]


拦截时间:

bpx GetLocalTime 
bpx GetSystemTime 
bpx GetFileTime 
bpx GetTickCount 
bpx GetCurrentTime 
bpx SetTimer 
bpx TimerProc
获取本地时间 
获取系统时间 
获取文件时间 
获得自系统成功启动以来所经历的毫秒数 
获取当前时间(16位) 
创建定时器 
定时器超时回调函数

拦截文件:

bpx CreateFileA 
bpx OpenFile 
bpx ReadFile 
bpx WriteFile 
bpx _lcreat 
bpx _lopen 
bpx _lread 
bpx _lwrite 
bpx _hread 
bpx _hwrite
创建或打开文件 (32位) 
打开文件       (32位) 
读文件         (32位) 
写文件         (32位) 
创建或打开文件 (16位) 
打开文件       (16位) 
读文件         (16位) 
写文件         (16位) 
读文件         (16位) 
写文件         (16位)




拦截驱动器:

bpx GetDrivetype(A) 
bpx GetLogicalDrives 
bpx GetLogicalDriveStringsA

获取磁盘驱动器类型 
获取逻辑驱动器符号 
获取当前所有逻辑驱动器的根驱动器路径



拦截狗:

bpio -h 378(或278、3BC) R 
bpio -h 3F8(或2F8、3E8、2E8) R

378、278、3BC是并行打印端口 
3F8、2F8、3E8、2E8是串行端口



VB程序专用断点:

bpx msvbvm50!__vbaStrCmp 
bpx msvbvm50!__vbaStrComp 
bpx msvbvm50!__vbaVarTstNe 
bpx msvbvm50!__vbaVarTstEq 
bpx msvbvm50!__vbaStrCopy 
bpx msvbvm50!__vbaStrMove 
bpx MultiByteToWideChar 
bpx WideCharToMultiByte 

比较字符串是否相等 
比较字符串是否相等 
比较变量是否不相等 
比较变量是否相等 
复制字符串 
移动字符串 
ANSI字符串转换成Unicode字符串 
Unicode字符串转换成ANSI字符串 
上面的断点对应VB5程序,如果是VB6程序则将msvbvm50改成msvbvm60即可


 
    ★注意:上面断点中括号内的(A)表示Win32 API函数,现在的软件大多采用Win32 API函数,所以通常应该优先设置末尾带字母A的断 
 



DFCG破解入门第五课 
日期:2003年9月2日 作者: 人气:2919 出处:赢政天下整理收藏 
--------------------------------------------------------------------------------
 
 

破解注意事项

  下面谈到了一些在学习解密过程中经常遇到的问题,本人根据自己的经验简单给大家谈一谈。这些问题对于初学者来说常常是很需要搞明白的,根据我自己的学习经历,如果你直接照着很多破解教程去学习的话,多半都会把自己搞得满头的雾水,因为有很多的概念要么自己不是很清楚,要么根本就不知道是怎么一回事,所以希望通过下面的讨论给大家一定的帮助:

1. 断点:所谓断点就是程序被中断的地方,这个词对于解密者来说是再熟悉不过了。那么什么又是中断呢?中断就是由于有特殊事件(中断事件)发生,计算机暂停当前的任务(即程序),转而去执行另外的任务(中断服务程序),然后再返回原先的任务继续执行。打个比方:你正在上班,突然有同学打电话告诉你他从外地坐火车过来,要你去火车站接他。然后你就向老板临时请假,赶往火车站去接同学,接着将他安顿好,随后你又返回公司继续上班,这就是一个中断过程。我们解密的过程就是等到程序去获取我们输入的注册码并准备和正确的注册码相比较的时候将它中断下来,然后我们通过分析程序,找到正确的注册码。所以我们需要为被解密的程序设置断点,在适当的时候切入程序内部,追踪到程序的注册码,从而达到crack的目的。

2. 领空:这是个非常重要的概念,但是也初学者是常常不明白的地方。我们在各种各样的破解文章里都能看到领空这个词,如果你搞不清楚到底程序的领空在哪里,那么你就不可能进入破解的大门。或许你也曾破解过某些软件,但那只是瞎猫碰到死老鼠而已(以前我就是这样的^_^,现在说起来都不好意思喔!)。所谓程序的领空,说白了就是程序自己的地方,也就是我们要破解的程序自己程序码所处的位置。也许你马上会问:我是在程序运行的时候设置的断点,为什么中断后不是在程序自己的空间呢?因为每个程序的编写都没有固定的模式,所以我们要在想要切入程序的时候中断程序,就必须不依赖具体的程序设置断点,也就是我们设置的断点应该是每个程序都会用到的东西。在DOS时代,基本上所有的程序都是工作在中断程序之上的,即几乎所有的DOS程序都会去调用各种中断来完成任务。但是到了WINDOWS时代,程序没有权力直接调用中断,WINDOWS系统提供了一个系统功能调用平台(API),就向DOS程序以中断程序为基础一样,WINDOWS程序以API为基础来实现和系统打交道,从而各种功能,所以WINDWOS下的软件破解其断点设置是以API函数为基础的,即当程序调用某个API函数时中断其正常运行,然后进行解密。例如在SOFTICE中设置下面的断点:bpx GetDlgItemText(获取对话框文本),当我们要破解的程序要读取输入的数据而调用GetDlgItemText时,立即被SOFTICE拦截到,从而被破解的程序停留在GetDlgItemText的程序区,而GetDlgItemText是处于WINDWOS自己管理的系统区域,如果我们擅自改掉这部分的程序代码,那就大祸临头了^_^!所以我们要从系统区域返回到被破解程序自己的地方(即程序的领空),才能对程序进行破解。对于每个程序都会调用的程序段,我们可能从那里找到什么有用的东西吗?(怎么样去加密是程序自己决定的,而不是调用系统功能实现的!)

3. API:即Application Programming Interface的简写,中文叫应用程序编程接口,是一个系统定义函数的大集合,它提供了访问操作系统特征的方法。 API包含了几百个应用程序调用的函数,这些函数执行所有必须的与操作系统相关的操作,如内存分配、向屏幕输出和创建窗口等,用户的程序通过调用API接口同WINDOWS打交道,无论什么样的应用程序,其底层最终都是通过调用各种API函数来实现各种功能的。通常API有两中基本形式:Win16和Win32。 Win16是原来的、API的16位版本,用于Windows 3.1;Win32是现在的、API的32位版本,用于Windows 95/98/NT/ME/2000。Win32包括了Win16,是Win16的超集,大多数函数的名字、用法都是相同的。16位的API函数和32位的API函数的区别在于最后的一个字母,例如我们设置这样的断点:bpx GetDlgItemText、bpx GetDlgItemTextA和bpx GetDlgItemTextW,其中 GetDlgItemText是16位API函数,GetDlgItemTextA和GetDlgItemTextW是32位API函数,而GetDlgItemTextA表示函数使用单字节,GetDlgItemTextW表示函数使用双字节。现在我们破解中常用到的是Win32单字节API函数,就是和GetDlgItemTextA类似的函数,其它的两种(Win16 API和Win32双字节API函数)则比较少见。 Win32 API函数包含在动态链接库(Dynamic Link Libraries,简称DLLs)中,即包含在kernel32.dll、user32.dll、gdi32.dll和comctl32.dll中,这就是为什么我们要在softice中用exp=C:\windows\system\kernel32.dll等命令行将这些动态链接库导入softice中的原因。因为不这样做的话,我们就无法拦截到系统Win32 API函数调用了。

4. 关于程序中注册码的存在方式:破解过程中我们都会去找程序中将输入的注册码和正确的注册码相比较的地方,然后通过对程序的跟踪、分析找到正确的注册码。但是正确的注册码通常在程序中以两种形态存在:显式的和隐式的,对于显式存在的注册码,我们可以直接在程序所处的内存中看到它,例如你可以直接在SOFTICE的数据窗口中看到类似“297500523”这样存在的注册码(这里是随意写的),对于注册码显式存在的软件破解起来比较容易;但是有些软件的程序中并不会直接将我们输入的注册码和正确的注册码进行比较,比如有可能将注册码换算成整数、或是将注册码拆开,然后将每一位注册码分开在不同的地方逐一进行比较,或者是将我们输入的注册码进行某种变换,再用某个特殊的程序进行验证等等。总之,应用程序会采取各种不同的复杂运算方式来回避直接的注册码比较,对于这类程序,我们通常要下功夫去仔细跟踪、分析每个程序功能,找到加密算法,然后才能破解它,当然这需要一定的8086汇编编程功底和很大的耐心与精力。

5. 关于软件的破解方式:本人将破解方式分为两大类,即完全破解和暴力破解。所谓完全破解主要是针对那些需要输入注册码或密码等软件来说的,如果我们能通过对程序的跟踪找到正确的注册码,通过软件本身的注册功能正常注册了软件,这样的破解称之为完全破解;但如果有些软件本身没有提供注册功能,只是提供试用(DEMO),或是注册不能通过软件本身进行(例如需要获取另外一个专用的注册程序,通过INTERNET的注册等等),或者是软件本身的加密技术比较复杂,软件破解者的能力、精力、时间有限,不能直接得到正确的注册码,此时我们需要去修改软件本身的程序码,即人为改变软件的运行方向,这样的破解称之为暴力破解。

6. 关于破解教程中程序代码地址问题:破解教程中都会放上一部分程序代码以帮助讲解程序的分析方法,例如下面的一段程序代码:
......
0167:00408033 PUSH 00
0167:00408035 PUSH EBX
0167:00408036 CALL [USER32!EndDialog]
0167:0040803C JMP 0040812C
......

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -