Linux 版 (精华区)
发信人: netiscpu (夜☆星光点点☆), 信区: Linux
标 题: Linux下破解实战(1)
发信站: 紫 丁 香 (Mon Oct 12 00:28:01 1998), 转信
发信人: I007 (阿健), 信区: Linux
标 题: Linux下破解实战(1)
发信站: BBS 水木清华站 (Wed Sep 30 22:13:49 1998) m2mWWW-POST0m0m
其实自已也只破解过一个Linux的程序: MTV Player 1.0.6.6, 所以
这只是个人的一点经验,欢迎大家交流, 我的email是: jesse@263.net
那就言归正传罗:
linux的破解(i386)相对于其它unix下的破解自然要容易一些,因为
大家对于8086系列的结构以及汇编多少都有些了解。不过对于第一次做
linux下的破解,还是让人感到富有挑战而又令人兴奋的.
要动手破解,除了破解本身的乐趣外,动力多半还是来自被破解对象
--应用程序的诱惑, 我就是被mtv player的功能给吸引了,又不满它每次
只放一小会就静音了, 于是乎我抄起了家伙---gdb
老实说,原来没怎么用过gdb, 经常是通过xwpe间接的用,于是当时
就抱了抱佛脚。
gdb主要是针对源程序的调试除错的,对汇编级的支持的并不好(最
不好的就是没有类似debug中的a命令,没法汇编),对于破解,gdb常用的命令
有:
info target 显示当前目标的一些信息,包括一些分段的信息
info functions 可以列出所有定义的函数名和数据类型,相当有用,
有的程序检查系列号和License会在一个名称明确的函数里
info functions REGEXP 可以列出匹配正规表达表的函数
info registers 列出所有寄存器(除浮点)的值, 这个跟踪时自然
常用到
info all-registers 列出所有寄存器(包括浮点)的值
info registers REGNAME... 列出所指出的所有寄存器的值
info break 列出所有的断点和观察点
break *ADDR 在地址ADDR处设置断点
break FUNCTION 在函数FUNCTION处设置断点
clear FUNCTION 删除在函数FUNCTION入口处的断点
delete BNUMS 删除BNUMS指定序点的断点或观察点
backtrace(bt) 显示堆栈中的信息,也很有用,可以在调试中搞清楚当前
的调用关系
x/NFU ADDR 这个也是常用,N:重复数, F:显示格式,s字串,i机器码,
缺省是x十六进制数, U:单元大小,b字节,h半字(两字节),w字(四字节,缺省)
ADDR为地址,如 x/3uh 0x54320
set $REGNAME=VALUE 设定寄存器REGNAME的值为VALUE,还可以是
set $sp += 4这样的让sp加4
set {TYPE}ADDR=VALUE 将地址ADDR的TYPE类型的值设为VALUE,例
如:set {int}0x83040=4
nexti(ni) 执行一行机器码,如果是函数调用,则执行到函数返回
stepi(si) 执行一行机器码,如果是函数调用,则进入函数
disassemble FUNCTION 反汇编FUNCTION函数
disassemble ADDR1 ADDR2 反汇编ADDR1和ADDR2间的机器码
disassemble ADDR 反汇编ADDR所在的函数
run(r) 开始执行程序到第一个断点或程序结束
continue(c) 继续程序的执行到下一断点或程序结束
continue(c) IGNORE-COUNT 继续程序的执行并忽略掉IGNORE-COUNT个断
点,在第IGNORE-COUNT+1个断点停下或程序结束
(未完待续)
--
~0 (_| 6m. - ' - . _ . - ' - . _ . - ' - .7m |_) O
|(_~|^~~| |~~^|~_)|
TT/_ T"T 网络连着你我她 T"T _\HH
3m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^7m
m※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: sun.swjtu.edu.cn] m
--
Enjoy Linux!
-----It's FREE!-----
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.223毫秒