轉貼一個,linux 解密,www.zoudan.com (8千字)

看雪資料發表於2001-04-14

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下就......
還好我還沒把我的M$ dos和Win95丟掉。跟著我作吧!
[/usr/X11R6/lib/X11/AccelerateX/bin]#mount /dev/fd0 -tvfat /mnt/fd ;插入軟盤把軟碟機
    蟒上(在目錄/mnt/fd)
[/usr/X11R6/lib/X11/AccelerateX/bin]#cp Xaccel-glibc /mnt/fd    ;把主檔案考到軟盤上
[/usr/X11R6/lib/X11/AccelerateX/bin]#umount /dev/fd0          ;卸下
        (或直接把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考回去,覆蓋之
   
    好了好了!寫這麼多字,好辛苦喲(我打字極慢,用全拼,還分不清前鼻音後鼻音,卷
舌音,翹舌音......痛苦異常,速度可想而知,!)這全是為了全xx類,為了我國的xx技術,為
了早日實現xx的現代化......
    上篇大作不知各位看了沒有,沒看?那肯定4月26日遭慘了!還不看?“Cih1.4病毒之
中文詳解”,快去下吧:ftp://202.115.32.2/incoming/tpo/cih14.asm或到我的主頁上去瞧瞧:
http://bbs.scu.edu.cn/~tpo好東西多多喲(Email:zd_dan@263.net)!
    鑑於cih病毒再次的爆發流行和4月26日的慘痛教訓,我決定把cih病毒的發作模組好身
剖析一下,再把遭cih清洗的硬碟的恢復方法好好研究一下,寫成文章張貼出來!
    各位看官,敬請期待我的大作吧!下次再見咯!

相關文章