首页
社区
课程
招聘
LINUX的crackme的逆向小记(全文完)
发表于: 2005-2-20 14:11 32554

LINUX的crackme的逆向小记(全文完)

2005-2-20 14:11
32554

一个简单的linux crackme的逆向



前言



    最不喜欢的就是写破解教程,酒后一时冲动,老夫卿发少年狂,许下将写一篇linux平台逆向的文章的诺言,作此文实非颇不得已。


   

在此申明:本文在技术上非常初级,并没有用到什么高深的技术,本人水平亦有限,如有差错,还请见谅!


   


开始之前的准备



    正如C语言教程从 hello world 开始,我们也由一个 crackme 说开去。本文的例子程序你可以到这来下载:


eb4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4J5j5h3y4C8L8h3g2K6i4K6u0W2k6r3g2Q4x3V1k6#2M7$3g2J5M7#2)9J5c8Y4k6W2L8X3g2@1j5g2)9J5c8X3y4J5j5h3y4C8L8h3g2K6i4K6u0r3L8r3W2F1N6i4S2Q4y4h3k6U0M7X3q4U0K9$3#2W2i4K6g2X3N6U0t1`.

。古人云“工欲善其事,必先利其器”,本文中所用到的工具及操作平台罗列如下:


        操作平台: gentoo 2004.3 #  kernel 2.6.9


        逆向工具:


                反汇编 -- objdump (这个工具基本上每个LINUX上都有)、lida(

8ecK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3I4A6k6r3q4Q4x3X3g2K6L8%4g2J5j5$3g2X3L8%4u0Y4k6g2)9J5k6h3&6W2N6q4)9J5c8R3`.`.

)


                调试器 -- gdb


                十六进制编辑器 -- hexedit


                文本编辑器 -- vim


                压缩工具 -- upx  (

e3cK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4g2H3P5q4)9J5k6i4y4G2N6i4u0U0k6h3k6G2M7X3N6W2i4K6u0W2L8X3g2@1i4K6t1&6


                计算器 -- gcalctool(gnome计算器)


               


开始逆向之旅



首先我们看看程序基本信息:


    打开控制台,切换到程序所在目录。运行“ objdump -x cm2 ”,显示如下:


    
[ncc2008@localhost]$ objdump -x cm2

cm2:     file format elf32-i386
cm2
architecture: i386, flags 0x00000102:
EXEC_P, D_PAGED
start address 0x08048080

程序头:
    LOAD off    0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
         filesz 0x000005b8 memsz 0x000005b8 flags r-x
    LOAD off    0x000005b8 vaddr 0x080495b8 paddr 0x080495b8 align 2**12
         filesz 0x0000002c memsz 0x0000002c flags rw-

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
SYMBOL TABLE:
no symbols

       


    我们可以看到start address是0x08048080,但有一个问题是Sections下面却什么都没有。这不是一个正常的程序?


   


    接下来,使用十六进制工具 hexedit 查看程序信息。运行命令:hexedit cm2 ,显示如下:


00000000   7F 45 4C 46  01 01 01 00  4C 69 6E 75  78 00 00 00  .ELF....Linux...

00000010   02 00 03 00  01 00 00 00  80 80 04 08  34 00 00 00  ............4...

00000020   00 00 00 00  00 00 00 00  34 00 20 00  02 00 00 00  ........4. .....

00000030   00 00 00 00  01 00 00 00  00 00 00 00  00 80 04 08  ................

00000040   00 80 04 08  B8 05 00 00  B8 05 00 00  05 00 00 00  ................

00000050   00 10 00 00  01 00 00 00  B8 05 00 00  B8 95 04 08  ................

00000060   B8 95 04 08  2C 00 00 00  2C 00 00 00  06 00 00 00  ....,...,.......

00000070   00 10 00 00  77 6C EA 93  7F 55 50 58  E4 05 0B 0A  ....wl...[COLOR=blue]UPX....

00000080   31 ED 58 89  E1 8D 54 81  04 50 83 E4  F8 52 51 E8  1.X...T..P...RQ.

00000090   FE 01 00 00  F4 0A 00 24  49 6E 66 6F  3A 20 54 68  .......$Info: Th

000000A0   69 73 20 66  69 6C 65 20  69 73 20 70  61 63 6B 65  is file is packe

000000B0   64 20 77 69  74 68 20 74  68 65 20 55  50 58 20 65  d with the UPX e

000000C0   78 65 63 75  74 61 62 6C  65 20 70 61  63 6B 65 72  xecutable packer

000000D0   20 68 74 74  70 3A 2F 2F  75 70 78 2E  73 66 2E 6E   6a0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4g2H3P5q4)9J5k6i4y4X3i4K6u0W2L8R3`.`.

000000E0   65 74 20 24  0A 00 24 49  64 3A 20 55  50 58 20 31  et $..$Id: UPX 1

000000F0   2E 32 34 20  43 6F 70 79  72 69 67 68  74 20 28 43  .24 Copyright (C

00000100   29 20 31 39  39 36 2D 32  30 30 32 20  74 68 65 20  ) 1996-2002 the

00000110   55 50 58 20  54 65 61 6D  2E 20 41 6C  6C 20 52 69  UPX Team. All Ri

00000120   67 68 74 73  20 52 65 73  65 72 76 65  64 2E 20 24  ghts Reserved. [/COLOR]$


    从上面的信息中可以看到程序被UPX压缩了,接下来请确信你系统中已有UPX,如果没有请到上面给出的程序链接中下载。


    运行命令“ upx -d cm2 ”把程序解压缩,显示如下:


[ncc2008@localhost crack]$ upx -d cm2
                     Ultimate Packer for eXecutables
   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
UPX 1.25         Markus F.X.J. Oberhumer & Laszlo Molnar        Jun 29th 2004

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
     10584 <-      4870   46.01%    linux/386    cm2

Unpacked 1 file.


    接下来,我们再使用命令“ objdump -x cm2 ”来查看程序信息。如下:


[ncc2008@localhost crack]$ objdump -x cm2

cm2:     file format elf32-i386
cm2
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x080488b0

程序头:
    PHDR off    0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2
         filesz 0x000000c0 memsz 0x000000c0 flags r-x
  INTERP off    0x000000f4 vaddr 0x080480f4 paddr 0x080480f4 align 2**0
         filesz 0x00000013 memsz 0x00000013 flags r--
    LOAD off    0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
         filesz 0x0000109c memsz 0x0000109c flags r-x
    LOAD off    0x00002000 vaddr 0x0804a000 paddr 0x0804a000 align 2**12
         filesz 0x00000398 memsz 0x00000ff0 flags rw-
 DYNAMIC off    0x00002248 vaddr 0x0804a248 paddr 0x0804a248 align 2**2
         filesz 0x000000e0 memsz 0x000000e0 flags rw-
    NOTE off    0x00000108 vaddr 0x08048108 paddr 0x08048108 align 2**2
         filesz 0x00000020 memsz 0x00000020 flags r--

动态节:
  NEEDED      libgtk-1.2.so.0
  NEEDED      libgdk-1.2.so.0
  NEEDED      libglib-1.2.so.0
  NEEDED      libc.so.6
  INIT        0x8048758
  FINI        0x8049074
  HASH        0x8048128
  STRTAB      0x804841c
  SYMTAB      0x80481fc
  STRSZ       0x225
  SYMENT      0x10
  DEBUG       0x0
  PLTGOT      0x804a33c
  PLTRELSZ    0x98
  PLTREL      0x11
  JMPREL      0x80486c0
  REL         0x80486b8
  RELSZ       0x8
  RELENT      0x8
  VERNEED     0x8048688
  VERNEEDNUM  0x1
  VERSYM      0x8048642

版本引用:
  required from libc.so.6:
    0x0d696911 0x00 03 GLIBC_2.1
    0x0d696910 0x00 02 GLIBC_2.0

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .interp       00000013  080480f4  080480f4  000000f4  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .note.ABI-tag 00000020  08048108  08048108  00000108  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .hash         000000d4  08048128  08048128  00000128  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .dynsym       00000220  080481fc  080481fc  000001fc  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .dynstr       00000225  0804841c  0804841c  0000041c  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 .gnu.version  00000044  08048642  08048642  00000642  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  6 .gnu.version_r 00000030  08048688  08048688  00000688  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  7 .rel.dyn      00000008  080486b8  080486b8  000006b8  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  8 .rel.plt      00000098  080486c0  080486c0  000006c0  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  9 .init         00000017  08048758  08048758  00000758  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 10 .plt          00000140  08048770  08048770  00000770  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 11 .text         000007c4  080488b0  080488b0  000008b0  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 12 .fini         0000001b  08049074  08049074  00001074  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 13 .rodata       00000008  08049090  08049090  00001090  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 14 .eh_frame     00000004  08049098  08049098  00001098  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 15 .data         00000248  0804a000  0804a000  00002000  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 16 .dynamic      000000e0  0804a248  0804a248  00002248  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 17 .ctors        00000008  0804a328  0804a328  00002328  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 18 .dtors        00000008  0804a330  0804a330  00002330  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 19 .jcr          00000004  0804a338  0804a338  00002338  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 20 .got          0000005c  0804a33c  0804a33c  0000233c  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 21 .bss          00000c58  0804a398  0804a398  00002398  2**2
                  ALLOC
 22 .comment      00000119  00000000  00000000  00002398  2**0
                  CONTENTS, READONLY
SYMBOL TABLE:
no symbols


    从上面的信息中可以看出,程序使用gtk编写,程序入口start address=0x080488b0。


    我们再进一步的查看程序信息,运行命令“objdump -T cm2 >iat.txt”,下面的信息将会保存到iat.txt文件中。


   


[ncc2008@localhost crack]$ objdump -T cm2

cm2:     file format elf32-i386

DYNAMIC SYMBOL TABLE:
00000000      DF *UND*  0000013d              gtk_widget_show
0804a248 g    DO *ABS*  00000000  Base        _DYNAMIC
08048780      DF *UND*  000000e4              gtk_widget_show_all
00000000      DF *UND*  00000027              gtk_dialog_new
08048790      DF *UND*  000001db              gtk_container_add
08048758 g    DF .init  00000000  Base        _init
080487a0      DF *UND*  000000d1              gtk_window_set_default_size
080487b0      DF *UND*  00000056              gtk_label_new
080487c0      DF *UND*  00000085              gtk_window_new
080487d0      DF *UND*  00000213              gtk_widget_set_uposition
080487e0      DF *UND*  0000010d              gtk_window_set_title
080487f0      DF *UND*  0000010c              gtk_entry_get_text
08048800      DF *UND*  00000242              gtk_box_pack_start
08048810      DF *UND*  00000067              gtk_init
08048820      DF *UND*  0000010d              g_print
08048830      DF *UND*  0000007c              gtk_main_quit
08048840      DF *UND*  000001d3              gtk_main
0804a398 g    D  *ABS*  00000000  Base        __bss_start
08048850      DF *UND*  000000e0  GLIBC_2.0   __libc_start_main
08049074 g    DF .fini  00000000  Base        _fini
08048860      DF *UND*  000000c7  GLIBC_2.0   exit
0804a398 g    D  *ABS*  00000000  Base        _edata
0804a33c g    DO *ABS*  00000000  Base        _GLOBAL_OFFSET_TABLE_
0804aff0 g    D  *ABS*  00000000  Base        _end
00000000      DF *UND*  00000028  GLIBC_2.1   fopen
08049094 g    DO .rodata        00000004  Base        _IO_stdin_used
00000000      DF *UND*  0000012e  GLIBC_2.0   fwrite
08048870      DF *UND*  00000027              gtk_entry_new
00000000  w   D  *UND*  00000000              _Jv_RegisterClasses
08048880      DF *UND*  00000157              gtk_signal_connect
08048890      DF *UND*  0000006d              gtk_button_new_with_label
080488a0      DF *UND*  00000044              gtk_vbox_new
00000000  w   D  *UND*  00000000              __gmon_start__


    我们再一次运行命令“objdump -d cm2 >disasm.txt”,对程序进行反汇编,并把结果保存到disasm.txt中。


接下来,用VI打开disasm.txt文件。显示如下:



   


相对WINDOW平台的反汇编器,objdump 的反汇编结果在没有调试符号的情况下,不显示API的名字。下一步API调用手工的加上。


我们打开iat.txt文件,把disasm.txt文件中的地址全部转换成函数名,例如:


 8048979:       68 00 00 00 00          push   $0x0
 804897e:       68 03 00 00 00          push   $0x3
 8048983:       e8 88 fe ff ff          call   0x8048810



转换成




这样将好看多了。这一点你可以写个脚本自动完成,而不用手工一个一个的替换。或者你也可以使用更强大的反汇编工器lida来自动显示API调用名。为了方便初学者,下面使用LIDA来作为反汇编工具。用lida 载入程序,如下图:



    好了,前期的工作都做了。下面让我们来运行一下程序,看看有没有什么值得参考的。运行后,出现一个窗口。如下:



    如图,提示我们的CRACK任务之一就是NOP掉这个窗口。点击关闭按钮,出现第二个窗口,如下图




[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (40)
雪    币: 102419
活跃值: (201669)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
Authorship.I support.
2005-2-20 14:15
0
雪    币: 238
活跃值: (250)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
强!
支持你!!
2005-2-20 14:16
0
雪    币: 3686
活跃值: (1036)
能力值: (RANK:760 )
在线值:
发帖
回帖
粉丝
4
学习~
2005-2-20 14:53
0
雪    币: 898
活跃值: (4044)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
5
采臣・宁 的第一篇精华  
2005-2-20 14:55
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
?害..??
2005-2-20 15:09
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
7
采臣大哥功力愈加深厚来。以后要是学linux,就找你混脸熟  
2005-2-20 15:13
0
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
8
好文!看雪论坛开天辟地第一篇Linux下的完整逆向~
采臣・宁 要的就是这种酒劲~
2005-2-20 16:30
0
雪    币: 208
活跃值: (376)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
9
支持,顶!
2005-2-20 17:24
0
雪    币: 257
活跃值: (369)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
10
采臣的第一篇精华,硬是与众不同,(顶)**n
李白酒后诗千篇,采臣酒后精华半篇,呵呵,还没有完哈
我觉得采臣还是以前的那个叫鸡鸡图案好看
2005-2-20 20:03
0
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
11
采臣真是厚积薄发阿

linux偶不熟,看个热闹,等待下文:)
2005-2-20 21:38
0
雪    币: 250
活跃值: (103)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
看雪论坛开天辟地第一篇好文!
2005-2-20 22:12
0
雪    币: 219
活跃值: (391)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
前半篇完工
2005-2-20 22:34
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
14
Linux下的解密终于浮出水面了,顶啊~
2005-2-20 22:38
0
雪    币: 107
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
支持一下
2005-2-20 23:25
0
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
16
酒后灌水,开“精罚”一张
祝百尺竿头,更进一步
2005-2-20 23:29
0
雪    币: 272
活跃值: (470)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
17
厉害,装过Linux,怪麻烦的,能在Linux下破解,厉害!虽然看不懂,赞一个!
2005-2-21 09:04
0
雪    币: 295
活跃值: (506)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
支持LINUX下的逆向
2005-2-21 13:20
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
19
好大的一只虾啊,高手
2005-2-21 15:48
0
雪    币: 219
活跃值: (391)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
2005-2-21 16:24
0
雪    币: 219
活跃值: (391)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
21
全文完,后面的越写越不行了。凑和着吧
2005-2-21 16:25
0
雪    币: 265
活跃值: (430)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
22
虽是“采”的第一篇精华,非常有专业水准的!
2005-2-21 17:20
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
23
学习学习啊
2005-2-21 19:07
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
学习学习,不过有一个问题,为什么不用IDA for Linux做汇编的部分?
2005-2-21 19:43
0
雪    币: 219
活跃值: (391)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
25
最初由 you_known 发布
学习学习,不过有一个问题,为什么不用IDA for Linux做汇编的部分?

使用基本的东西我想传递的信息应该会更多一些。不然,在WINDOWS平台上用ida也可以破解这个CRACKME的。
2005-2-21 20:46
0
游客
登录 | 注册 方可回帖
返回