鱼C论坛

 找回密码
 立即注册

憔悴心只为你

https://fishc.com.cn/?107996

破解总结

热度 3已有 1676 次阅读2012-4-18 10:23

暗桩:一般是指程序的二次或多次验证,在特定的条件下触发,用来判断文件是否被修改或破解,一般用于反破解保护。
C类语言破解
1、bp MessageBoxA(W)(断对话框)---Ctrl+N
2、Point-H法
3、bp GetDlgItem/GetWindowTextA(W)/GetWindowTextLengthA(W) (断输入框)
4、字符串法---插件/搜索所有参考文本

Delphi/BC++语言破解
1、DEDE结合PE Explorer找按妞事件
2、Point-H法
3、bp GetDlgItem/GetWindowTextA(W)/GetWindowTextLengthA(W) (断输入框)
4、bp MessageBoxA(W)(断对话框)---Ctrl+N
5、字符串法---插件/搜索所有参考文本
6、如果程序界面标题有[未注册/注册/VIP版/标准版/钻石版] 之类字样,可以通过DEDE查找FormCreate/FormShow,找到关键标志位

VB语言破解
1、VBExplorer查找按钮事件
2、有提示框则  bp rtcMsgBox(断对话框)
3、通过bp __vbaStrCmp/__vbaStrComp/__vbaVarTstEq
4、万能断点法(816C24法)
5、字符串法---插件/搜索所有参考文本

易语言破解
1、借助E-Code Explorer查找按钮事件
2、下消息断点,查看堆栈再返回
3、eCode法--断按钮事件
4、字符串法---插件/搜索所有参考文本
易语言的下断方法常用的有如下几种: 
1.OD载入,F9运行程序,填好用户名和序号,alt+M,找到“.ecode”段,F2断了它。 
2.OD载入程序,静态看不出任何破绽。F9运行,Alt+M打开内存镜像,找到程序的区段“=.ecode”,眼睛锁定Ecode段,双击它。易语言要把相关资源读取到代码段里面运行。这时候打开16进制编辑模式,点右键换成反汇编模式,滚动条向下拉不久看到破绽。 
3. 利用函数设断点。对于易语言,其实一个万能断点是GetWindowTextA。因为系统会用这个函数进行其它的*作,所以有可能你在此设断时,并不是你要的东西。还有一个特点就是易语言好像喜欢用浮点运算。如果当程序注册失败时,出现注册失败提示的话,那么它就又暴露了一点,那就是MessageBoxA函数,也可在这个函数上设断。从这里会很容易的走到程序的领空,到了程序的领空我们就利用OD的字符分析插件,分析出很多程序的字符提示(我很偏爱它);等断在这里之后,看看堆栈区里,能发现很多有用的东西。  
4. 设置内存断点,来跟踪达到特殊效果。至于如何设断点,我建议的做法是:当程序运行起来之后,输入用户名跟注册码先注册,要程序不退出(如果是重启验证的程序,我们要先设置断点),在OD中Alt+M,然后再Ctrl+B,输入自己刚才输入的数据,在到数据段后,我们再设置内存访问或者写入断点,5.用TRW破解,下万用断点。命令:“bpx hmemcpy”,断下后,记住断点,再用你喜欢的OD调试去吧。 
  按钮事件固定模式:
  0040EC78     837D F4 00      cmp dword ptr ss:[ebp-C],0         ;关键判断
  0040EC7C     0F84 3B000000   je dcse.0040ECBD                    ;关键跳
  0040EC82     68 04000080     push 80000004
  0040EC87     6A 00           push 0
  0040EC89     68 EC904000     push dcse.004090EC
  0040EC8E     68 01030080     push 80000301
  0040EC93     6A 00           push 0
  00 40EC95     68 00000000     push 0
  0040EC9A     68 04000080     push 80000004
  0040EC9F     6A 00           push 0
  0040ECA1     68 F1904000     push dcse.004090F1
  0040ECA6     68 03000000     push 3
  0040ECAB     BB 00030000     mov ebx,300
  0040ECB0     E8 92000000     call dcse.0040ED47
  0040ECB5     83C4 28         add esp,28
  0040ECB8     E9 36000000     jmp dcse.0040ECF3
  0040ECBD     68 04000080     push 80000004
  0040ECC2     6A 00           push 0
  0040ECC4     68 CC904000     push dcse.004090CC
  0040ECC9     68 01030080     push 80000301
  0040ECCE     6A 00           push 0
  0040ECD0     68 00000000     push 0
  0040ECD5     68 04000080     push 80000004
  0040ECDA     6A 00           push 0
  0040ECDC     68 02914000     push dcse.00409102
  0040ECE1     68 03000000     push 3
  0040ECE6     BB 00030000     mov ebx,300
  0040ECEB     E8 57000000     call dcse.0040ED47
  0040ECF0     83C4 28         add esp,28
  0040ECF3     8BE5            mov esp,ebp
  0040ECF5     5D              pop ebp
  0040ECF6     C3              retn

******************************************************************************************************************************************
按钮事件

1、有注册错误/正确提示
   bp MessageBoxA
   bp rtcMsgBox
如果事先找不到按钮事件,可以通过下消息断点,返回后回溯即可找到按钮事件起始位置

2、无任何提示
   bp GetDlgItem
可以通过bp GetDlgItem获取按钮事件代码

3、未注册一启动或者关闭就跳出个注册框或者提示框
   bp RegOpenKey(A)
   bp CreateFileA
   bp GetPrivateProfileStringA  
文件: reg/ini/dll/其他
至于保存到什么文件,可以使用以下方法
1、查找字符串,看是否有可疑文件名或者注册表键名
2、猜。。。下断点观察
3、按钮事件跟踪

4、未注册一启动或者关闭就打开网页链接
   bp ShellExecuteA
类似的组合
Cmp/test/其他判断
Je/jne/jne/jz XXXXXXXX
软件启动--->判断是否注册--->是否Open
断下后回溯代码即可找到关键点,常用的方法,转存跟踪法

5、未注册就功能使用限制
判断是否注册--->某种功能是否让你使用,如果不能够用,一定会有提示的,或是错误提示或是弹出注册框等,那么从提示入手即可找到解除限制的关键
不完美破解:解除功能限制

6、未注册就日期限制
   bp GetLocalTime 获取本地时间 
   bp GetSystemTime 获取系统时间 
   bp GetFileTime 获取文件时间
一般下这几个断点比较难分析关键
捷径:查找字符串--找可疑文件--一般以DLL多见
只要不让它读取到这个DLL即可解除限制

7、Demo(演示试用版)--功能残缺
这个和上面的功能限制不一样
功能限制是软件本身就有这个功能,对程序而言,相对应的功能代码也存在
Demo即是没这个功能,空架子一个而已
一句话:破解也无用!

8、网络验证
无法登陆有错误提示者:下消息断点回溯代码,找按钮事件,从头来过,从按钮事件开始跟踪,找网络验证CALL(所需要登陆的地址在这个CALL里面),接下来就是分析返回值或者改登陆地址为本地(127.0.0.1),再后面就需要改某些跳转了
无法登陆自动退出者:下bp ExitProcess断下(一般可以断下)回溯代码,找按钮事件,从来来过,从按钮事件开始跟踪,找网络验证CALL(所需要登陆的地址在这个CALL里面),接下来就是分析返回值或者改登陆地址为本地(127.0.0.1),再后面就需要改某些跳转了

9、狗加密
一般狗加密软件,一启动就会检测所需要的狗文件,若没有狗文件,提示错误
这里我们有两个入手点
1、“一启动就会检测所需要的狗文件”,下bp CreateFileA等断点,断下后,回溯
2、“若没有狗文件,提示错误”,下bp MessageBoxA,断下后,回溯

总结:
从上面的介绍说明可以看出,有这么一个共同点---按钮事件,可以这么说,按钮事件是我们的思路之门
按钮事件可以这样得来:
1、通过下相应断点,回溯代码
2、通过辅助工具快捷的得到(VBExplorer、DEDE)

******************************************************************************************************************************************
重启验证
80%-90%的软件基本都是重启验证类型

1、注册表类型
       Bpx RegOpenKeyA(W)
       Bpx RegOpenKeyExA(W)
2、ini文件类型(*.reg/*.ini)
       Bpx GetPrivateProfileStringA
3、其他文件类型(*.dat/*.lic…)
       Bpx CreateFileA(W)
       Bpx ReadFile
4、DLL文件操作类型
如果没有什么有效的拦截函数,不妨试一下Bpx CreateFileA(W).余下的就是通过你的经验去判断了(例如:35课)
注意:建议使用Bpx断点,这样,比较快捷、准确。尚若Bpx失效,再尝试bp
方便断点设置的有以下3个断点插件,APIBreak中国版(不带Point-H),APIBreak英文版(带Point-H)、+BP-Olly

******************************************************************************************************************************************
去nag框的方法

1、若是Delphi&BCB程序,可以通过FormCreate法查找到FormCreate,再单步跟踪,找到窗口的调用CALL,一般它的具体形式是call dword ptr ds:[edx+E8]

2、OD载入程序后,单步跟踪,找到窗口的调用CALL
注意看第37课

******************************************************************************************************************************************
两种经典方法

1、Point-H法
此法类似下断点bp GetWindowText(A/W),但是,在某些Point-H断不下来的情况下,bp GetWindowText(A/W)却可以断下来。Point-H能够断下来的,bp GetWindowTextA基本上都可以顺利断下

2、转存跟踪法
到底是byte/word/Dword断点,一般情况下是byte,其他特殊情况大家临场判断

******************************************************************************************************************************************
一些常规断点

  拦截窗口:
      bp CreateWindow 创建窗口 
      bp CreateWindowEx(A/W) 创建窗口 
      bp ShowWindow 显示窗口 
      bp UpdateWindow 更新窗口 
      bp GetWindowText(A/W) 获取窗口文本 

  拦截消息框:
      bp MessageBox(A/W) 创建消息框 
      bp MessageBoxExA 创建消息框 
      bp MessageBoxIndirect(A/W) 创建定制消息框 

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

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

  拦截剪贴板:  
      bp GetClipboardData 获取剪贴板数据 

  拦截注册表:
      bp RegOpenKey(A/W) 打开子健 
      bp RegOpenKeyEx(A/W) 打开子健
      bp RegQueryValue(A/W) 查找子健
      bp RegSetValue(A/W) 设置子健 
      bp RegSetValueEx(A/W) 设置子健
  功能限制拦截断点:

      bp EnableMenuItem 禁止或允许菜单项 
      bp EnableWindow 禁止或允许窗口 

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

  拦截文件: 
      bp CreateFileA 创建或打开文件 (32位) 
      bp OpenFile 打开文件       (32位) 
      bp ReadFile 读文件         (32位) 
      bp WriteFile 写文件         (32位)
      bp GetPrivateProfileStringA    (ini文件) 

  拦截驱动器:  
      bp GetDriveTypeA 获取磁盘驱动器类型 
      bp GetLogicalDrives 获取逻辑驱动器符号 
      bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径 

★★VB程序专用断点★★
      bp __vbaStrCmp 比较字符串是否相等 
      bp __vbaStrComp 比较字符串是否相等 
      bp __vbaVarTstNe 比较变量是否不相等 
      bp __vbaVarTstEq 比较变量是否相等 
      bp __vbaStrCopy 复制字符串 
      bp __vbaStrMove 移动字符串 
      bp MultiByteToWideChar ANSI字符串转换成Unicode字符串 
      bp WideCharToMultiByte Unicode字符串转换成ANSI字符串

******************************************************************************************************************************************
灰色按钮
有两种情况:通过代码和控件属性

VB语言:
代码:ctrl+b查找 816C24,在JMP下断,然后F2运行程序,把 push ebp 改为 retn,或者把这些代码全NOP掉
控件属性:VBExplorer 辅助工具改属性

Delphi/BC++语言:
代码:通过DEDE找FormCreate,记下地址,改 retn
控件属性:相关辅助工具改属性

易语言
代码:bp EnableWindow,断下后返回,把 push ebp 改为 retn
控件属性:用十六进制工具查找 BOB4C5A5 ,把它后面的 07 改 05

路过

雷人

握手
3

鲜花

鸡蛋

刚表态过的朋友 (3 人)

发表评论 评论 (1 个评论)

回复 夕昕 2012-4-25 09:42
    历害 !!!!

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 23:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部