📄 program-crack-mtv-detail.html
字号:
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Author" content="Edward Fu">
<meta name="GENERATOR" content="Mozilla/4.05 [zh-CN] (X11; I; Linux 2.1.127 i686) [Netscape]">
<title>Freesoft Linux FAQ -- Linux下破解实战--Crack MTV</title>
</head>
<body>
发信人: I007 (阿健), 信区:
Linux
<br>标 题: Linux下破解实战
<br>发信站: BBS 水木清华站 (Wed Sep 30 22:13:49 1998) WWW-POST
<br>
<p>其实自已也只破解过一个Linux的程序: MTV Player 1.0.6.6, 所以
<br>这只是个人的一点经验,欢迎大家交流, 我的email是: <a href="mailto:jesse@263.net">jesse@263.net</a>
<p>那就言归正传罗:
<p> linux的破解(i386)相对于其它unix下的破解自然要容易一些,因为
<br>大家对于8086系列的结构以及汇编多少都有些了解。不过对于第一次做
<br>linux下的破解,还是让人感到富有挑战而又令人兴奋的.
<br> 要动手破解,除了破解本身的乐趣外,动力多半还是来自被破解对象
<br>--应用程序的诱惑, 我就是被mtv player的功能给吸引了,又不满它每次
<br>只放一小会就静音了, 于是乎我抄起了家伙---gdb
<p> 老实说,原来没怎么用过gdb, 经常是通过xwpe间接的用,于是当时
<br>就抱了抱佛脚。
<br> gdb主要是针对源程序的调试除错的,对汇编级的支持的并不好(最
<br>不好的就是没有类似debug中的a命令,没法汇编),对于破解,gdb常用的命令
<br>有:
<br> info target 显示当前目标的一些信息,包括一些分段的信息
<br> info functions 可以列出所有定义的函数名和数据类型,相当有用,
<br>有的程序检查系列号和License会在一个名称明确的函数里
<br> info functions REGEXP 可以列出匹配正规表达表的函数
<br> info registers 列出所有寄存器(除浮点)的值,
这个跟踪时自然常用到
<br> info all-registers 列出所有寄存器(包括浮点)的值
<br> info registers REGNAME... 列出所指出的所有寄存器的值
<br> info break 列出所有的断点和观察点
<br> break *ADDR 在地址ADDR处设置断点
<br> break FUNCTION 在函数FUNCTION处设置断点
<br> clear FUNCTION 删除在函数FUNCTION入口处的断点
<br> delete BNUMS 删除BNUMS指定序点的断点或观察点
<br> backtrace(bt) 显示堆栈中的信息,也很有用,可以在调试中搞清楚当前的调用关系
<br> x/NFU ADDR 这个也是常用,N:重复数, F:显示格式,s字串,i机器码,
<br>缺省是x十六进制数, U:单元大小,b字节,h半字(两字节),w字(四字节,缺省)
<br>ADDR为地址,如 x/3uh 0x54320
<br> set $REGNAME=VALUE 设定寄存器REGNAME的值为VALUE,还可以是
<br>set $sp += 4这样的让sp加4
<br> set {TYPE}ADDR=VALUE 将地址ADDR的TYPE类型的值设为VALUE,例
<br>如:set {int}0x83040=4
<br> nexti(ni) 执行一行机器码,如果是函数调用,则执行到函数返回
<br> stepi(si) 执行一行机器码,如果是函数调用,则进入函数
<br> disassemble FUNCTION 反汇编FUNCTION函数
<br> disassemble ADDR1 ADDR2 反汇编ADDR1和ADDR2间的机器码
<br> disassemble ADDR 反汇编ADDR所在的函数
<br> run(r) 开始执行程序到第一个断点或程序结束
<br> continue(c) 继续程序的执行到下一断点或程序结束
<br> continue(c) IGNORE-COUNT 继续程序的执行并忽略掉IGNORE-COUNT个断
<br>点,在第IGNORE-COUNT+1个断点停下或程序结束
<br>
<p>正式开工了:
<p> 运行mtv,首先出现的是对话框,要求"Enter Key"或是"Try
it!",选"Enter Key",
<br>填写了资料后,提示注册信息不正确, 显然这其中做了Key的合法性检查,于时选中这
<br>里做突破口:
<p>$ gdb mtv
<br>GNU gdb 4.17
<br>Copyright 1998 Free Software Foundation, Inc.
<br>GDB is free software, covered by the GNU General Public License, and
you are
<br>welcome to change it and/or distribute copies of it under certain
<br>conditions.
<br>Type "show copying" to see the conditions.
<br>There is absolutely no warranty for GDB. Type "show warranty"
for details.
<br>This GDB was configured as "i386-redhat-linux"...
<br>(no debugging symbols found)...
<br>(gdb)
<p>通常第一个断点可以设在_start函数处,也可以先运行,中途送中断信号让它停下来
<br>(一般可以 kill -18 pid, 18是SIGCONT)做这些之前还可以先看看程序中的函数
<br>(包括使用到的共享库的函数),特别对于Xwindows应用程序,这点十分重要:
<br>(gdb)info functions
<br>All defined functions:
<p>Non-debugging symbols:
<br> 08049cf0 _init
<br> 08049d34 fl_set_object_lstyle
<br> 08049d44 fl_set_object_gravity
<br> 08049d54 fl_add_browser
<br> 08049d64 waitpid
<br> 08049d74 printf
<br> 08049d84 __strtod_internal
<br> 08049d94 fl_set_slider_bounds
<br> 08049da4 fl_set_form_atclose
<br> 08049db4 ungetc
<br> 08049dc4 sigemptyset
<br> 08049dd4 strerror
<br> 08049de4 fl_end_group
<br> 08049df4 hsearch
<br> 08049e04 fl_show_question
<br> 08049e14 fl_add_roundbutton
<br> 08049e24 XCloseDisplay
<br> 08049e34 getenv
<br> 08049e44 fl_add_text
<br> 08049e54 fl_set_input_filter
<br> 08049fd4 fl_hide_object
<br> 08049fe4 lseek
<br> 08049ff4 abort
<br> 0804a004 fl_end_form
<br> 0804a014 fl_remove_io_callback
<br> 0804a024 pipe
<br> 0804a034 fl_set_object_color
<br> 0804a044 fl_set_object_posthandler
<br> 0804a054 calloc
<br> 0804a064 fl_bgn_form
<br> 0804a074 rindex
<br> 0804a084 write
<br> 0804a094 fprintf
<br> 0804a0a4 kill
<br> 0804a0b4 ctime
<br> 0804a0c4 fl_get_menu
<br> 0804a0d4 strcat
<br> 0804a0e4 fl_bgn_group
<br> 0804a0f4 fl_set_atclose
<br> 0804a104 chdir
<br> 0804a114 fl_invalidate_fselector_cache
<br> 0804a124 XCreateBitmapFromData
<br> 0804a134 fseek
<br> 0804a144 mktime
<br> 0804a154 fl_show_fselector
<br> 0804a164 __libc_init_first
<br> 0804a174 fl_do_forms
<br> 0804a184 signal
<br> 0804a194 read
<br> 0804a1a4 fl_get_fselector_form
<br> 0804a1b4 fl_set_form_icon
<br> 0804a1c4 fl_set_slider_value
<br> 0804a1d4 fl_set_timer
<br> 0804a1e4 XParseGeometry
<br> 0804a1f4 fl_show_object
<br> 0804a204 strncpy
<br> 0804a214 unlink
<br> 0804a224 strcasecmp
<br> 0804a234 fl_set_form_geometry
<br> 0804a244 fl_get_menu_item_mode
<br> 0804a254 fl_add_input
<br> 0804a264 fl_get_input
<------------------好显眼啊..:P
<br> 0804a274 _IO_getc
<br> 0804a284 fork
<br> 0804a294 sscanf
<br> 0804a2a4 fl_hide_oneliner
<br> 0804a2b4 sigaction
<br> 0804a2c4 fl_set_focus_object
<br> 0804a2d4 strdup
<br> 0804a2e4 gettimeofday
<br> 0804a2f4 fl_add_slider
<br> 0804a304 fopen
<br> 0804a314 memset
<br> 0804a324 ftell
<br> 0804a334 fl_set_menu
<br> 0804a344 fl_get_pattern
<br> 0804a354 fl_set_oneliner_color
<br> 0804a364 fclose
<br> 0804a374 time
<br> 0804a384 fl_add_valslider
<br> 0804a394 fl_set_object_lcol
<br> 0804a3a4 fl_set_object_label
<br> 0804a3b4 fl_set_counter_step
<br> 0804a3c4 fl_library_version
<br> 0804a3d4 fl_show_oneliner
<br> 0804a3e4 sprintf
<br> 0804a3f4 fl_set_border_width
<br> 0804a404 atexit
<br> 0804a414 fl_mapcolor
<br> 0804a424 fl_initialize
<br> 0804a434 fl_set_menu_item_mode
<br> 0804a444 fl_set_input_maxchars
<br> 0804a454 fl_set_browser_fontstyle
<br> 0804a464 fl_get_button
<br> 0804a474 fl_hide_form
<br> 0804a484 fl_set_counter_bounds
<br> 0804a494 fl_set_object_lsize
<br> 0804a4a4 fl_add_checkbutton
<br> 0804a4b4 fl_set_object_callback
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -