AccelerateX5.0DEMO版之破解心得
PXE2
|
1#
PXE2 发表于 2005-02-21 16:07
AccelerateX5.0DEMO版之破解心得
AccelerateX5.0DEMO版之破解心得
网管中心的bbs服务器是基于RedHat5.1的Linux系统。作为临时bbs管理员,一天坐 在那里上比比哀思真的是很无聊。于是想用Xwindows来上万维网。但着台服务器偏偏是 讨厌的Sis 6236显卡,Xwindows根本就用不起,于是在沉淀的ftp上下了一个AccelerateX5. 0DEMO版。安装倒是非常的顺利,但讨厌的DEMO版非要在99年1月4号以前用。我把服务器的日 期调到1月4号之前则可以用,且效果很好!但作为bbs服务器,日期之重要,日期一变非但发 表文章不正常,每日排行榜也不能正常工作。那如何解决这个问题呢?把它搞定!!这么多 程序都是我可以轻松搞定的,区区一个AX算得了什么!在重起了N次gdb,重设了N次break *0x804bxxx之后终于找到了关键的地方!千万不要以为断点是很好找的,特别是在Linux下。 找断点的功力需要在实践中长期练就,想当年的LOCK 89,90,91,95 NT,BitLOK,KeyMake ,LockMaster......都是在反跟踪措施非常严密的情况下步步跟踪到核心的。现在的程序有 个暴好的优点,那就是统统没有反跟踪代码!可以说是去除了破解软件的最大的困难,难度 从而降低了95%!那在Linux破解还有什么难度呢?难度是大大的,那就是:在Linux这种不太 成熟的操作系统下,连调试软件也是极其的难用!哪像Win95/DOS下大名鼎鼎的Soft-ice, Turbo Debugger......像察看内存,修改内存这样的基本功能都没有!TMD!还有就是gdb下的 反汇编太伤脑筋了,看惯了Soft-ice和Debug下的汇编,看gdb下的真是像天书!还好,我功力 深厚,办法多:-) 来吧,切入正题,试试身手! 先启动Linux(废话),登录(又是废话),取得一定权限(如果你是root,那就方便多了, 俗话说得好“我是root我怕谁” xxx语)! 先看看你的AX50DEMO和我的一不一样!跟着作吧:-) [~/]#cd /usr/X11R6/lib/X11/AccelerateX/bin [/usr/X11R6/lib/X11/AccelerateX/bin]#gdb Xaccel-glibc ;用gdb调入AX50DEMO主程序 GNU gdb 4.17 Copyright 1998 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux"... (no debugging symbols found)... (gdb)disass _start 反汇编函数 _start(Linux下的程序基本上都是以_start 或_init开始的) Dump of assembler code for function _start: 0x804b520 <_start>: xorl %ebp,%ebp 0x804b522 <_start+2>: testl %edx,%edx 0x804b524 <_start+4>: je 0x804b52d <_start+13> 0x804b526 <_start+6>: pushl %edx 0x804b527 <_start+7>: call 0x804b214 <atexit> 0x804b52c <_start+12>: popl %eax 0x804b52d <_start+13>: call 0x804ae24 <__libc_init_first> 0x804b532 <_start+18>: popl %esi 0x804b533 <_start+19>: leal 0x4(%esp,%esi,4),%eax 0x804b537 <_start+23>: movl %eax,0x80d33d8 0x804b53c <_start+28>: movl %esp,%edx 0x804b53e <_start+30>: andl $0xfffffff8,%esp 0x804b541 <_start+33>: pushl %eax 0x804b542 <_start+34>: pushl %eax 0x804b543 <_start+35>: pushl %edx 0x804b544 <_start+36>: pushl %esi 0x804b545 <_start+37>: call 0x804a750 <_init> 0x804b54a <_start+42>: pushl $0x80c3bb0 0x804b54f <_start+47>: call 0x804b214 <atexit> 0x804b554 <_start+52>: popl %eax 0x804b555 <_start+53>: call 0x804c96c <_start+5196> 0x804b55a <_start+58>: pushl %eax 0x804b55b <_start+59>: call 0x804b324 <exit> 0x804b560 <_start+64>: hlt 0x804b561 <_start+65>: nop 0x804b562 <_start+66>: nop 0x804b563 <_start+67>: nop 0x804b564 <_start+68>: pushl %ebp 0x804b565 <_start+69>: movl %esp,%ebp 0x804b567 <_start+71>: cmpl $0x0,0x80cdd8c 0x804b56e <_start+78>: jne 0x804b5a3 <_start+131> 0x804b570 <_start+80>: jmp 0x804b585 <_start+101> 0x804b572 <_start+82>: movl %esi,%esi 0x804b574 <_start+84>: addl $0x4,0x80cdd88 0x804b57b <_start+91>: movl 0x80cdd88,%eax 0x804b580 <_start+96>: movl 0xfffffffc(%eax),%eax 0x804b583 <_start+99>: call *%eax 0x804b585 <_start+101>: movl 0x80cdd88,%eax 0x804b58a <_start+106>: cmpl $0x0,(%eax) 0x804b58d <_start+109>: jne 0x804b574 <_start+84> 0x804b58f <_start+111>: pushl $0x80d2bd4 0x804b594 <_start+116>: call 0x80c397c <cbrt+3660> 0x804b599 <_start+121>: movl $0x1,0x80cdd8c 0x804b5a3 <_start+131>: leave 0x804b5a4 <_start+132>: ret 0x804b5a5 <_start+133>: leal 0x0(%esi),%esi 0x804b5a8 <_start+136>: pushl %ebp 0x804b5a9 <_start+137>: movl %esp,%ebp 0x804b5ab <_start+139>: leave 0x804b5ac <_start+140>: ret 0x804b5ad <_start+141>: leal 0x0(%esi),%esi ....... ....... ....... 0x804b776 <_start+598>: movl $0x63,0xffffef5c(%ebp) 0x804b780 <_start+608>: movl $0x3,0xffffef58(%ebp) 0x804b78a <_start+618>: movl $0x1,0xffffef54(%ebp) 0x804b794 <_start+628>: movl $0x0,0xffffef50(%ebp) 0x804b79e <_start+638>: movl $0x0,0xffffef4c(%ebp) 0x804b7a8 <_start+648>: movl $0x1,0xffffef48(%ebp) 0x804b7b2 <_start+658>: movl $0xffffffff,0xffffef68(%ebp) 0x804b7bc <_start+668>: pushl %eax 0x804b7bd <_start+669>: call 0x804ade4 <mktime> ;获得时间 0x804b7c2 <_start+674>: addl $0x4,%esp 0x804b7c5 <_start+677>: cmpl $0xffffffff,%eax ;调用成功否?eax为返回值 0x804b7c8 <_start+680>: je 0x804b7d2 <_start+690> 0x804b7ca <_start+682>: cmpl %eax,0xffffeaec(%ebp) 0x804b7d0 <_start+688>: jle 0x804b7dc <_start+700> ;小于则转到_start+700 0x804b7d2 <_start+690>: pushl $0xffffffff ;失败标志'-1'入栈 0x804b7d4 <_start+692>: call 0x804c948 <_start+5160> ;失败处理并退出 0x804b7d9 <_start+697>: addl $0x4,%esp 0x804b7dc <_start+700>: pushl $0x13880000 ;进入主程序 0x804b7e1 <_start+705>: call 0x804ed80 <_start+14432> 0x804b7e6 <_start+710>: addl $0x4,%esp 0x804b7e9 <_start+713>: testl %eax,%eax 0x804b7eb <_start+715>: jne 0x804b7fa <_start+730> 0x804b7ed <_start+717>: pushl $0x80c3ce4 0x804b7f2 <_start+722>: call 0x8092674 <ffs+221348> 0x804b7f7 <_start+727>: addl $0x4,%esp ....... ....... ....... q 这是退出命令 [/usr/X11R6/lib/X11/AccelerateX/bin]# 既然关键的地方找到了!那就该改原代码了。在dos/win95下要改代码很简单,先获得 指令的16进制代码,在调试器或16进制编辑器中查找到直接改掉即可!但在Linux下就进vi用%!xxd -r 也可以用M$ 的dos [/usr/X11R6/lib/X11/AccelerateX/bin]#mount /dev/hda5 -tvfat /mnt/d ; 蟒上(在目录/mnt/d) [/usr/X11R6/lib/X11/AccelerateX/bin]#cp Xaccel-glibc /mnt/d ;把主文件考到D:盘上 [/usr/X11R6/lib/X11/AccelerateX/bin]#umount /dev/hda5 ;卸下 (或直接把dos/win95的分区mount上,拷贝之,如果管理员给了你这个权限) 启动Soft-ice(千万不要告诉我你不会启动Soft-ice,我cow,信不信我一刀 捅死你)!用Soft-ice的装入器(一般是Symbol Loader.exe)随便调入一个32为的程序(如calc. exe).用a命令(汇编)把关键部分的指令(就是上面写的,但要翻译成一般的汇编格式)输入: xxxxxxxx:cmp [ebp+0ffffeaec],eax ;就是cmpl %eax,0xffffeaec(%ebp)啦 xxxxxxxx:jle XXXXXXXX ;XXXXXXXX乱填 xxxxxxxx:jge XXXXXXXX ;XXXXXXXX乱填 在用code on命令把指令的16进制代码显示出来! xxxxxxxx:3985eceaffff cmp [ebp+0ffffeaec],eax ~~~~~~~~~~~~记下该16进制代码 xxxxxxxx:7exx jle XXXXXXXX ~~~~~~~~~~~~记下该16进制代码 xxxxxxxx:7dxx jgl XXXXXXXX ~~~~~~~~~~~~记下该16进制代码 用exit命令强行退出(会获得一个非法指令错误,不理它) 看到这里,看官们都知道了,只要把jle 0x804b7dc <_start+700>改成 jge 0x804b7dc <_start+700>就可以了! 也就是把7e改成7d即可! 有人会说原理好~简单,但步骤好~复杂!我也没更好~办法,其实破解Linux程序的一般步 骤就只有这样了,将就用吧!但是看官你需要作的很简单: 1。把主程序Xaccel-glibc考到硬盘上 2。用不管什么编辑器修改,查找3985eceaffff7e,改为3985eceaffff7d,存盘。 3。把Xaccel-glibc考回去,覆盖之 |