破解Windows 程序技巧(2)

/ns/hk/crack/data/20020822033734.htm


嗯,先申明,我不是破解高手啦,我也是刚刚玩破解,
才 3 个星期喔 ^______&
写这篇文章的目的是为了活跃版面气氛,而且希望各位高手也多多的
把自己的心得 post 出来, 让大家都会一点基础的破解知识啦
下面是我这 3 个星期里破解 windows 程序中关于去处对话框的一些
方法, 写出来呢,让还不会的人了解一下 windows 程序的破解, 让高
手给我挑一挑错. 嗯, 希望高手看了不要把下巴笑掉的啦

windows 的众多 shareware 中最普遍的方式就是跳出一个对话框让你
交上钱来, 如果不能按他的要求去做,嘿嘿,你就不要想舒舒服服的用
它啦 ^___& 所以去除对话框就是 windows 程序破解的最基础,也是最
有用的方法啦

要除掉一般的 windows 程序的对话框并不是很难, 只要你懂一点点汇
编语言( 也只要能认识 jmp jz call jnz 这几个指令啦 ) 然后,嘻嘻
英文或者是 windows SDK 了解一点就可以了

下面呢,我就以去除 gifcon.exe 的对话框为例来说明去掉对话框的一般
方法, gifcon.exe 是一个处理 gif 图的好工具, 可以组合几张 gif 图
gifcon.exe 从 ftp://ftp.bd748.pku.edu.cn/pub/graphics/gifcon.exe
得到,这东西用到是好用,可是每次用完后不能直接退出,要弹出一个对话框
向你宣告一下版权法, 嗯,不是很爽啦, 我只好让它闭上它的鸟嘴啦 ^_&

过程如下:

1. 退出 windows, 启动 softice for windows
2. 用 wldr ( softice windows loader ) 加栽要破解的程序,
就是 gifcon.exe 啦
3. 用 load 来运行程序, 这是会激活 softice, 进入调试窗口
此时敲入以下的内容
bpx createdialog
bpx createdialogindirect
bpx createdialogindirectparam
bpx createdialogparam
bpx dialogbox
bpx dialogboxindirect
bpx dialogboxindirectparam
bpx dialogboxparam
bpx messagebox
为什么? 嘿嘿,这就是 windows SDK 调对话框的常用的函数啦
现在是把他们统统设成一执行就激活的断点
( bpx softice 命令之一,后面接要中断的函数或代码地址 )
4. 轻轻的摁一下 F5 让程序继续执行, 如果是开始是出现对话框
的一类程序,这时就会给中断掉, 但是 gifcon 是属于结束时出
对话框的, 所以这时程序正常执行
( F5 softice 的命令啦, 让程序继续的 另外 F4 可以看程序的
画面, 按一键后退回 , 嗯,命令是很多的啦,可以用 F1 看在线
帮助, 当然啦,你的英文要好的喔, 也可以参考 softice for DOS
的中文说明 )
5. 我们要让那锅该死的对话框出现,所以我们现在什么也不干,直接
退出 , 按下 EXIT 按钮, 这时, 由于要产生对话框,所以调对话框
的函数执行, softice 被激活, 我们看到如下的信息:
Break Due to BPX USER!DIALOGBOX C=01
这就是说, 系统调用了 dialogbox 这一函数来产生对话框
这时我们还可以看到 softice 画面的最下面的窗口上的绿线上写着
, 喔? 写着什么呀,我给忘记了喔, 不过不要紧,一般是什么 user(xx)
之类的东西, 就是说还在 windows 的系统调用之下,没有返回主程序
于是,最麻烦的事开始了,我们开始跟踪, 不管中间有什么事件发生,
比如这里会有跳回 windows 让你按一下 OK 按钮,不过不用怕,按完了
还是回到 softice 里执行的啦. 我们按 F10 一直到绿线上的字变成
主程序的名字,例如 gifcon 呀什么的,反正是和程序有关的字符串
或者是改程序调的 DLL ( 动态库 ) 的名字时,我们马上停下来, 这时
呢,我们是刚刚跳出产生对话框的函数 ( 刚刚说的那么麻烦其实就是
跟踪到调对话框的函数的返回啦 ) 在 gifcon 中是停在 abou.dll 中
所以那锅绿线上的字是 abou ,这时候呢,我们可以看到加亮的上面的指
令就是那个 dialogbox 啦
6. 唉, 5 写了好长,换成 6 啦 :) ,我们记下 dialogbox 的地址, 然后呢,
我们上下找找看有没有 jmp jz jnz 的指令, 方法是 按一下 F6 ,光标
会上到代码窗口, 用箭头键上下移动来查看指令, 咦,怎么下面 012d 处
是一个 jmp 指令跳到好后面, 喔? 上面 010a 怎么是一个 jz 的指令,
而且刚刚跳到 012d, 哇赛,如果它是一个 jmp 012d 不就不会有那个对话
框了吗? 嘻嘻,别急,先敲入指令 bc * 去除所以的断点, 再把光标移到
010a 的上面一跳指令上,按一下 F9, 为什么?唉,不就是在这条指令处做
一个断点吗?
( F9 在光标所在行设一个断点 , bc * 去除所以的断点 )
7. 这时我们按 F5 让程序继续执行, 也就是结束.
8. 在一次运行 gifcon ( 可以直接运行, 不用用 wldr 加栽 ), 这次会在上面
做的断点处 , 也就是 010a 前停下来, 我们为了怕改错,先看一下以前的
指令, 敲入命令 db cs:010a 看一下程序的机器码,并记下来, 应该是这样
7421ff3610131e6857
然后我们用 a cs:010a 来改变一下程序
:a ds:10a
1A6F:0000010A jmp 12d
1A6F:0000010C
把 jz 改成 jmp 试试, 然后在看一下改后的机器码 应该是只改了 74 为 eb
9. 按下 F5 继续执行程序, 哇赛, 怎么这次没有对话框了说, 看来是改对地方
了喔.
10. 刚刚看到了那个绿线上的字是 abou ,然后到程序的目录下看看,哇, 有一个
abou.dll 很可疑的说, 嗯,用能编辑二进制文件的编辑器来 search 一下吧
嗯,找到了,先不要急,把文件先 save as 成另一个名字, 然后再改 74 为 eb
存盘退出,这时再运行 gifcon.exe 哈哈,怎么弄对话框也不出来了喔

嗯,写了这么多,终于去掉了对话框, 上面的方法呢,就是去对话框的一般的方法,再总
结一下, 先把调对话框的函数全设成断点,运行程序激活断点, 跟踪至对话框函数
结束, 找到此函数上面的 jmp 到函数之后的代码,改变之就可以了, 如果还是破
不掉怎么办呢? 可能是你的功力还不够,多跟踪几次,多找几个 jmp 的地方改一下
如果还是破不了呢? 那就是程序很难破啦,在版上请高手出马吧 :)

唉,好久没有写这么长的东东了,竟花了一个小时
有什么不对的地方请告诉我啦



--
快乐啦喔, 别问我为什么快乐, 我只是想让你知道我很快乐



发信人: Alex (阿飞), 信区: Hacker
标 题: 破戒 Windows 程序技巧 [转载]
日 期: Wed Apr 17 20:57:52 1996

==> bigmouth (大嘴) 提到:
> bpx createdialog
> bpx createdialogindirect
> bpx createdialogindirectparam
> bpx createdialogparam
> bpx dialogbox
> bpx dialogboxindirect
> bpx dialogboxindirectparam
> bpx dialogboxparam
> bpx messagebox
补充一点
如果是Win32的程序的话,函数后面要加个A,表示是32bit函数
如bpx messageboxA之类

上面说的第5点,在对话框函数内跟踪比较麻烦,要耐心,如果是winice 1.3的话
用F10(即p)来单步,如果熟悉的话,用F7(go here)会快一些
如果是winice1.95或2.0的话,可以用p ret 来直接跳到函数ret处

--