飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2204|回复: 9

[07版] 第一章:工具篇

[复制链接]

该用户从未签到

发表于 2007-4-11 12:43:37 | 显示全部楼层 |阅读模式
本教程中所涉及到的破解工具下载地址推荐:
看学学院的[工具下载]区(http://www.pediy.com/tools.htm
飘云阁论坛的≮工具探讨≯版块:https://www.chinapyg.com/
一蓑烟雨论坛的『 刀枪剑戟 』版块:http://bbs.unpack.cn/

另外密界的高手Immlep前段时间出版了一本《精通破解工具》,当大家对破解有一定了解后,推荐大家阅读学习下。


1.查壳脱壳
https://www.chinapyg.com/viewthr ... &extra=page%3D1
该帖2楼为该小节的第一部分,1楼为该小节的第二部分.
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-4-11 12:46:15 | 显示全部楼层

2. 反汇编工具

见菜儿的回帖

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

x
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-4-11 12:49:05 | 显示全部楼层

3.调试工具|-爆破简介

3. 调试工具

调试工具:动态调试软件有OllyDbg、SoftICE等。对于破解新手来说,建议大家先从OD来认识和了解调试器。OllyDbg是一个运行在Ring3下的调试器(虽然无法运行在Ring0下 ),但是对普通的程序调试来说足以。在OD的版本选择上,推荐大家使用OllyICE v1.10,就是看雪一直在更新的一个OD汉化修改版。对于VB的程序使用P-Code伪代码方式进行编译的软件,我们使用的是WKT-Debugger进行调试。这里暂不介绍该软件.
OD的使用教程,看雪论坛的CCDebuger斑竹制作过一套OD的教材,该教程对OD的功能做了很详细的讲解,如果现在要再来制作一本OD教程,显然有些多余。如果你对破解有了一定的了解,推荐大家查阅一下本套教程。但是如果你是初次接触破解,相信这套教程对你来说,想要彻底掌握还是需要费不少气力的。这里呢我们结合实际的软件对OD的简单操作做一个讲解。





1.OD中一些常用的快截键:

F2:设置断点,只要在光标定位的位置(上图中灰色条)按F2键即可,再按一次F2键则会删除断点。
F4:运行到选定位置。作用就是直接运行到光标所在位置处暂停。
F7:单步步入。功能同单步步过(F8)类似,区别是遇到 CALL 等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上。
F8:单步步过。每按一次这个键执行一条反汇编窗口中的一条指令,遇到 CALL 等子程序不进入其代码。
F9:运行。按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。
CTRL+F9:执行到返回。此命令在执行到一个 ret (返回指令)指令时暂停,常用于从系统领空返回到我们调试的程序领空。
ALT+F9:执行到用户代码。可用于从系统领空快速返回到我们调试的程序领空。


2.我们可以通过OD的插件来增强OD的调试功能
OD插件下载:http://www.pediy.com/tools/Debuggers/ollydbg/plugin.htm

CleanupEx 清空我们调试软件时候所保存的UDD等数据的一个插件
HideOD v0.17  调试程序时隐藏OD的插件
ODbgScript 一个运行脱壳教程的插件
API断点设置工具 一个不错的API断点插件
ApiBreak   OD的万能断点插件



3.设置OD到右键菜单:



4.作 者: CCDebuger


OllyDBG 入门系列(一)-认识OllyDBG
http://bbs.pediy.com/showthread.php?threadid=21284
OllyDBG 入门系列(二)-字串参考
http://bbs.pediy.com/showthread.php?threadid=21308
OllyDBG 入门系列(三)-函数参考
http://bbs.pediy.com/showthread.php?threadid=21330
OllyDBG 入门系列(四)-内存断点
http://bbs.pediy.com/showthread.php?threadid=21378
OllyDBG 入门系列(五)-消息断点及 RUN 跟踪
http://bbs.pediy.com/showthread.php?threadid=21532
OllyDBG 入门系列(六)——制作中
OllyDBG 入门系列(七)-汇编功能
http://bbs.pediy.com/showthread.php?threadid=23873


5.常用API函数断点自己整理:

VC或其他程序:
一般处理:
BP GetWindowTextA
BP SendMessage
显示信息对话框:
BP MessageBox
BP MessageBoxA
BP MessageBoxEx
BP MessageBoxExA
BP MessageBoxExW  
打开一个现有的注册表项
RegOpenKeyA   
RegOpenKeyExA  
打开和创建文件、读出数据  
CreateFileA
OpenFile  
ReadFile
其他:
bp GetDlgItemInt
bp GetDlgItemText (指定输入框输入字符串)

从资源模板建立一模态对话窗
bp DialogBoxParamA

从资源模板建立一非模态对话窗
bp CreateDialog  
bp CreateDialogParam  
bp CreateDialogParamA (开心小闹钟)

去自效应:
bp ExitProcess  
BP CreateFileA

关机函数:
bp ExitWindowsEx

VB:
拦截对话框
bp rtcMsgBox  
BP __vbaVarTstEq
字符串比较函数:
BP __vbaStrCmp
BP __vbaStrComp
bp __vbaStrCompVar
字符传长度:
BP __vbaLenBstr
bp __vbaLenVar
比较函数:
bp _vbaVarTstEq
截取字符串(包括取硬盘序列号)
rtcMidCharVar
rtcMidCharBstr (英语小精灵)

其他:
__vbaStrMove
__vbaStrCopy

VB自效检(文件大小):
bp rtcFileLen

网络验证:
BP __vbaFreeObjList

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

x
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-4-11 12:57:19 | 显示全部楼层

3.调试工具|-爆破简介(文图见附件)

【破文标题】精装友情通讯录 V2005 Build 11.20 简单分析
【破文作者】Nisy
【作者邮箱】aqiayi@sina.com
【作者主页】bbs.chinapyg.com
【破解工具】PEiD v0.94、ODICEv1.10(汉化第二版)
【破解平台】Win XPsp2
【软件名称】精装友情通讯录 V2005 Build 11.20
【软件大小】1722 KB
【保护方式】注册码
【原版下载】http://www.skycn.com/soft/10355.html

05年时候的软件,两年多未更新了,加密的的强度相对来说不高,我们通过分析这个软件来讲解下该软件的验证方式、暴破。
第一步PEiD插壳:Borland Delphi 6.0 - 7.0 无壳,我们打开软件随意输入注册码,注册看软件给我们什么提示。以来是一个对话框:“注册失败,请重新注册!”

这是一个很关键的信息,通过他就可以有的放矢的来动态调试这个软件。在该程序上右键我们OD载入该软件。


我们观看一下,看到该行有一个红色箭头从上方指下来,我们从该行代码向上找,在上方一个retn语句的下一行PUSH这里下断(这里就是软件注册部分的开始),按F2或者左键双击该行Hex 数据这一部分。该行的地址部分就会以红色表示我们已经成功下断。

我们F8运行到0051539A行代码的时候,可以看到寄存器窗口EAX和EDX进行了真假码的比较。我们F8一下,来到下一行代码。

我们看到这一行的JNZ语句已经实现跳转(以默认的红色显示),这里如果跳走,软件就会执行“注册失败”的代码,我们在这里修改其代码,暴力破解。

在该行点空格,出现汇编于此处的代码。我们在这里将“jnz”修改为“jz” 。点一次汇编后我们看到该行的语句已经变为了“JZ”。

然后在我们修改后的那行点右键,如图操作:

我们为我们修改后的文件重新命名保存即可,到此时暴破完成。



如果不修改该行代码,其实我们也可以达到使其不跳转的目的。我们在寄存器窗口在标志未“Z”上左键双击为“1”(上方的比较处其实修改的就是这里的标志位),这里我们就发现该跳转已经变为了灰色。接着我们继续跟踪,看软件的注册信息保存在哪里。这里大家要注意,软件在注册成功之后的代码一般包含了将注册信息保存在哪里。软件的注册信息我们一定要尽力追到保存位置。

该软件OD简单分析(算法部分省略)

00515264  /.  55            push    ebp                         ;  我们在这里下断点 然后F8一路向下即可。
00515265  |.  8BEC          mov     ebp, esp
00515267  |.  B9 17000000   mov     ecx, 17
0051526C  |>  6A 00         /push    0
0051526E  |.  6A 00         |push    0
00515270  |.  49            |dec     ecx
00515271  |.^ 75 F9         \jnz     short 0051526C
00515273  |.  53            push    ebx
00515274  |.  56            push    esi
00515275  |.  8BD8          mov     ebx, eax
00515277  |.  33C0          xor     eax, eax
00515279  |.  55            push    ebp
0051527A  |.  68 E9545100   push    005154E9
0051527F  |.  64:FF30       push    dword ptr fs:[eax]
00515282  |.  64:8920       mov     dword ptr fs:[eax], esp
00515285  |.  68 80000000   push    80                          ; /BufSize = 80 (128.)
0051528A  |.  8D85 7BFFFFFF lea     eax, dword ptr [ebp-85]     ; |
00515290  |.  50            push    eax                         ; |Buffer
00515291  |.  E8 B220EFFF   call    <jmp.&kernel32.GetSystemDir>; \GetSystemDirectoryA
00515296  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
00515299  |.  8D95 7BFFFFFF lea     edx, dword ptr [ebp-85]
0051529F  |.  B9 81000000   mov     ecx, 81
005152A4  |.  E8 DBF9EEFF   call    00404C84
005152A9  |.  8D95 74FFFFFF lea     edx, dword ptr [ebp-8C]
005152AF  |.  8B83 1C030000 mov     eax, dword ptr [ebx+31C]
005152B5  |.  E8 F2D8F2FF   call    00442BAC                    ;  这里取出我们输入注册码的位数 在EAX寄存器中
005152BA  |.  83BD 74FFFFFF>cmp     dword ptr [ebp-8C], 0       ;  我们输入的注册码位数和0比较
005152C1  |.  74 1A         je      short 005152DD              ;  如果和0相等就跳向“注册信息没有填写齐全”的对话框
005152C3  |.  8D95 70FFFFFF lea     edx, dword ptr [ebp-90]
005152C9  |.  8B83 10030000 mov     eax, dword ptr [ebx+310]
005152CF  |.  E8 D8D8F2FF   call    00442BAC                    ;  这里取我们输入的定单号位数 放EAX寄存器中
005152D4  |.  83BD 70FFFFFF>cmp     dword ptr [ebp-90], 0       ;  和0比较
005152DB  |.  75 0F         jnz     short 005152EC              ;  相等就飞走
005152DD  |>  B8 00555100   mov     eax, 00515500               ;  注册信息没有填写齐全
005152E2  |.  E8 B96AF2FF   call    0043BDA0
005152E7  |.  E9 80010000   jmp     0051546C
005152EC  |>  8D95 6CFFFFFF lea     edx, dword ptr [ebp-94]
005152F2  |.  8B83 1C030000 mov     eax, dword ptr [ebx+31C]
005152F8  |.  E8 AFD8F2FF   call    00442BAC
005152FD  |.  8B85 6CFFFFFF mov     eax, dword ptr [ebp-94]
00515303  |.  50            push    eax
00515304  |.  8D95 60FFFFFF lea     edx, dword ptr [ebp-A0]
0051530A  |.  8B83 10030000 mov     eax, dword ptr [ebx+310]
00515310  |.  E8 97D8F2FF   call    00442BAC
00515315  |.  8B85 60FFFFFF mov     eax, dword ptr [ebp-A0]
0051531B  |.  E8 9042EFFF   call    004095B0
00515320  |.  B9 40080000   mov     ecx, 840
00515325  |.  99            cdq
00515326  |.  F7F9          idiv    ecx
00515328  |.  8BC2          mov     eax, edx
0051532A  |.  8D95 64FFFFFF lea     edx, dword ptr [ebp-9C]
00515330  |.  E8 1742EFFF   call    0040954C
00515335  |.  FFB5 64FFFFFF push    dword ptr [ebp-9C]
0051533B  |.  8D95 54FFFFFF lea     edx, dword ptr [ebp-AC]
00515341  |.  8B83 10030000 mov     eax, dword ptr [ebx+310]
00515347  |.  E8 60D8F2FF   call    00442BAC
0051534C  |.  8B85 54FFFFFF mov     eax, dword ptr [ebp-AC]
00515352  |.  E8 5942EFFF   call    004095B0
00515357  |.  8D95 58FFFFFF lea     edx, dword ptr [ebp-A8]
0051535D  |.  E8 C6FCFFFF   call    00515028
00515362  |.  8B85 58FFFFFF mov     eax, dword ptr [ebp-A8]
00515368  |.  E8 4342EFFF   call    004095B0
0051536D  |.  8D95 5CFFFFFF lea     edx, dword ptr [ebp-A4]
00515373  |.  E8 90FDFFFF   call    00515108
00515378  |.  FFB5 5CFFFFFF push    dword ptr [ebp-A4]
0051537E  |.  68 20555100   push    00515520                    ;  1
00515383  |.  8D85 68FFFFFF lea     eax, dword ptr [ebp-98]
00515389  |.  BA 03000000   mov     edx, 3
0051538E  |.  E8 01FAEEFF   call    00404D94
00515393  |.  8B95 68FFFFFF mov     edx, dword ptr [ebp-98]
00515399  |.  58            pop     eax                         ;  上方的汇编语言是来计算软件正确的注册码 我们这里不做分析
0051539A  |.  E8 79FAEEFF   call    00404E18                    ;  这个Call 用来比较真假注册码 我们看寄存器窗口
0051539F      0F85 A3000000 jnz     00515448                    ;  还记得这个跳转吧 如果跳走 软件注册失败
005153A5  |.  B8 2C555100   mov     eax, 0051552C               ;  注册码正确,感谢你的注册!
005153AA  |.  E8 F169F2FF   call    0043BDA0                    ;  如果不跳走,则向系统写入正确注册信息
005153AF  |.  A1 109C5300   mov     eax, dword ptr [539C10]
005153B4  |.  8B00          mov     eax, dword ptr [eax]
005153B6  |.  8B80 C8040000 mov     eax, dword ptr [eax+4C8]
005153BC  |.  8B80 08020000 mov     eax, dword ptr [eax+208]
005153C2  |.  33D2          xor     edx, edx
005153C4  |.  E8 A79BF5FF   call    0046EF70
005153C9  |.  BA 50555100   mov     edx, 00515550               ;  精装友情-软件已注册
005153CE  |.  E8 F99AF5FF   call    0046EECC                    ;  这里弹出“注册成功”的对话框 点确定后 又返回到OD 我们继续向下分析看注册信息保存到哪里
005153D3  |.  8D85 50FFFFFF lea     eax, dword ptr [ebp-B0]
005153D9  |.  B9 6C555100   mov     ecx, 0051556C               ;  \hdwl21.dll
005153DE  |.  8B55 FC       mov     edx, dword ptr [ebp-4]      ;  OK 这里基本上就可以断定注册信息保存在C:\WINDOWS\system32\hdwl21.dll文件中 我们收工
005153E1  |.  E8 3AF9EEFF   call    00404D20
005153E6  |.  8B8D 50FFFFFF mov     ecx, dword ptr [ebp-B0]     ;   上方注册信息的地址 我们看OD的信息窗口,看到这个:C:\WINDOWS\system32\ 所以才得出这个结论
005153EC  |.  B2 01         mov     dl, 1
005153EE  |.  A1 8C424600   mov     eax, dword ptr [46428C]
005153F3  |.  E8 44EFF4FF   call    0046433C
005153F8  |.  8BF0          mov     esi, eax
005153FA  |.  8D95 4CFFFFFF lea     edx, dword ptr [ebp-B4]
00515400  |.  8B83 10030000 mov     eax, dword ptr [ebx+310]
00515406  |.  E8 A1D7F2FF   call    00442BAC
0051540B  |.  8B85 4CFFFFFF mov     eax, dword ptr [ebp-B4]
00515411  |.  50            push    eax
00515412  |.  B9 80555100   mov     ecx, 00515580               ;  setet567
00515417  |.  BA 94555100   mov     edx, 00515594               ;  sym
0051541C  |.  8BC6          mov     eax, esi
0051541E  |.  8B18          mov     ebx, dword ptr [eax]
00515420  |.  FF53 04       call    dword ptr [ebx+4]
00515423  |.  8D85 48FFFFFF lea     eax, dword ptr [ebp-B8]
00515429  |.  B9 A0555100   mov     ecx, 005155A0               ;  \hdw121.dll
0051542E  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
00515431  |.  E8 EAF8EEFF   call    00404D20
00515436  |.  8B85 48FFFFFF mov     eax, dword ptr [ebp-B8]
0051543C  |.  BA 02000000   mov     edx, 2
00515441  |.  E8 9644EFFF   call    004098DC
00515446  |.  EB 24         jmp     short 0051546C
00515448  |>  B8 B4555100   mov     eax, 005155B4               ;  注册失败,请重新注册!


OK,我们跟出了注册信息保存在哪里(C:\WINDOWS\system32\hdwl21.dll文件中)。现在就去该文件看看,我们用记事本打开该文件(DLL文件还能用记事本打开?呵呵,这里是软件的作者偷懒了,现在更多的软件都会对注册信息先进行加密在保存)

hdwl21.dll文件中内容:
[sym]
setet567=2597758

这里保存的就是我们输入的定单号,那为什么我们修改一个跳转,就达到了软件注册的目的呢?由于时间关系,这里就不再详述,只是简单的把软件验证的思路和大家说一下:软件在重新启动时,肯定要调用软件保存的注册信息来判断软件是否已注册。而该软件判断注册与否的标志呢就是看系统中是否存在hdwl21.dll这个文件,至于文件中有什么信息无所谓。大家把hdwl21.dll文件中的内容删除后,再打开软件,呵呵仍是注册版。这一点也可以说是该软件加密上的一个败笔。

【版权声明】PYG版权所有。未经许可,请勿转载。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

x
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-4-11 13:01:38 | 显示全部楼层

4. 补丁工具

这里先推荐给大家使用刘健英大侠写的这款keymake 1.73, 虽然现在有很多朋友都是使用DUP工具来制作补丁,这里考虑到对破解初学者来说,keymake 1.73的功能已经足够。这里我们通过上文中所涉及的精装友情通讯录来讲解下如何利用keymake来制作文件补丁和内存注册机。
我们打开keymake这款工具,选择“制作文件补丁”,并填入软件的原文件和我们修改后即暴破后的文件。
OK 通过以上几个步骤 我们就完成了文件补丁的制作。

下面我们还对这个软件来讨论,如何制作内存注册机。
0051539A  |.  E8 79FAEEFF   call    00404E18                    我们在该行看到了寄存器中出现了真假注册码的比较
如图所示:

内存器中出现了正确的注册码,我们就可以根据地址来制作内存注册机了。我们通过图片来讲解如何制作内存注册机。

首先,我们先选择上我们要制作的内存注册机的目标文件(即我们对谁做内存注册机),然后点添加。 这里大家可以看到我添加数据如上:

0051539A  |.  E8 79FAEEFF   call    00404E18
中断地址就是:0051539A
中断次数:1
第一个字节:E8(一个字节由两个16进制字符组成)
指令长度:5(E8 79FAEEFF 这里是10个16进制字符 2个16进制为一个字节这里是5个字节)


我们选择的是内存方式——寄存器 EDX 中(因为这个软件在该地址是EDX中保存真码 其他的软件也有是EAX保存)
下方的宽字符串是针对VB程序的 我们这里的目标文件不是VB程序 所以不打勾。
地址指针,非特殊情况,我们在修改数据这里选择上1层
我们看到上图 制作内存注册机面版的右侧注册码部分 我们也需要设置一下
修改成:选择的是内存方式——寄存器 EDX 中
这里的地址指针我们就不需要做修改了保持空白即可。


面版的右下角呢 用户信息 部分就是我们打开内存注册机使用见到的信息

修改内存这里 非特殊情况大家不要使用,以免制作出来的文件杀毒软件报毒。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

x
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-4-11 13:07:02 | 显示全部楼层
工具篇的完善上 还望大家支持~~

在附件的网页中 大家不要使用Word 生成网页 直接发成帖子即可
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-4-12 18:36:47 | 显示全部楼层
OD的讲解上 我们还是多补充些OD插件更合适些~~


OD插件下载:http://www.pediy.com/tools/Debuggers/ollydbg/plugin.htm

HideOD v0.17

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

x
PYG19周年生日快乐!

该用户从未签到

发表于 2007-4-13 09:10:29 | 显示全部楼层

2. 反汇编和反编译工具

反汇编工具:我们借助反汇编工具可以将大部分的Win程序反汇编出他的汇编代码.对与高手来说,借助这些工具反汇编出的汇编语句可以将程序的源码还原出来,我们使用反汇编工具主要的目的就是来静态分析这款软件。找到关键处以方便我们下一步的动态调试。
目前在反汇编工具中,最强大的无疑是IDA Pro,但是该工具对新手来说,快速掌握操不是一件易事,当你对破解有一定认识后推荐选用。W32Dasm以前是大家一直在用的一款工具,由于该软件作者停止更新,加上搜索ASCII的功能我们使用OD的插件即可完成,所以一般很少再使用;在反汇编工具上还是要介绍一款国内密界高手CCG成员PII621的C32ASM,功能相当强大,国人写的软件对中文的支持当然更完美些,当我们使用OD的插件找不到关键字符时,不妨用这款工具试下,可能就会有意外的惊喜。目前OD的功能几乎完善,很多时候我们一款OD就可以搞定问题。


反编译程序都是针对某种语言的,他可以把该程序编写的软件反编译出其结构甚至是部分代码,这样便可以获取该软件的更多信息。
这里我们推荐几种语言的反编译工具:
Delphi程序的反编译工具我们使用的是:DeDe。
.net程序的反编译工具我们推荐的是:.net Reflector 。
易语言的反编译工具我们使用的是ECE(E-Code Explorer)。


C32工具的使用简介:
C32asm是一款密界破解利器,它有强大的字符串解析功能。用C32asm载入分析时首先确认软件已经脱壳。
    1.使用C32asm时首先打开C32asm,然后选择--文件--打开文件进行反汇编:

     2.载入软件后,如果是Borland Delphi 6.0 - 7.0及其他程序(除Microsoft Visual Basic 5.0 / 6.0外),都可以用菜单栏的--查看--字符
      串--直接解析字符串:

    3.载入软件后,如果是Microsoft Visual Basic 5.0 / 6.0程序,则要选择菜单栏的--编辑--使用Unicode分析字符串,加选后再选菜单栏的
    --查看--字符串--直接解析字符串:

  4.字符串导出方便用OD分析:

5.C32asm还有很多强大的功能..大家在使用中发现吧...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

x
PYG19周年生日快乐!

该用户从未签到

发表于 2007-4-14 17:39:33 | 显示全部楼层
C32ASM也可以当简单的16进制工具用
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-4-14 19:31:07 | 显示全部楼层
哪位兄弟能做一下 DUP 的使用教程
所以很少用那个工具 所以就没写这个软件~

哪位兄弟能把HideOD的各选项的作用 简单介绍一下
关于OD的插件 如果大家觉得哪款比较好也可以做一下补充

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

x
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表