首页
社区
课程
招聘
破解linux内核前所未有的问题
发表于: 2006-11-17 11:39 6218

破解linux内核前所未有的问题

2006-11-17 11:39
6218
有一个linux软件。它是根据硬盘序列号进行加密。用户空间的程序通过ioctl将读取的硬盘信息传到内核中,然后内核对这段信息进行计算和比较,如果注册码正确,则内核中的某个功能会激活,否则会失效。

现在问题来了:
1、怎样反编译这个内核?
2、怎么知道内核中这个函数的地址?
3、怎样修改这个内核文件?
4、修改了这个内核后怎样封装回去?

对linux感兴趣的交流一下。

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 197
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
反汇编那个内核module不就可以了么
找到file_operations
2006-11-17 21:54
0
雪    币: 3
活跃值: (704)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
它没有内核模块,只有单纯一个内核文件.
2006-11-18 10:28
0
雪    币: 267
活跃值: (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
如果修改了Linux内核
源码是一定要放出来的
不知道你的软件是什么?
2006-11-18 21:21
0
雪    币: 3
活跃值: (704)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
;
; 赏屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯?
; ?This file is generated by The Interactive Disassembler (IDA)	    ?
; ?Copyright (c) 2006 by DataRescue sa/nv,	<ida@datarescue.com>	    ?
; ?Licensed to: Paul Ashton - Blue Lane Technologies (1-user Advanced 03/2006)	?s
; 韧屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯?
;



sub_C01E0DF0 proc near

var_118= dword ptr -118h
var_114= dword ptr -114h
var_110= dword ptr -110h
var_108= dword ptr -108h
arg_0= dword ptr  0Ch

push	ebp
mov	eax, 0FFFFE000h
push	edi
mov	edi, 0C05430A0h
push	esi
push	ebx
sub	esp, 110h
mov	ebx, 360h
mov	esi, [esp+118h+arg_0]
and	eax, esp
mov	edx, esi
add	edx, ebx
sbb	ecx, ecx
cmp	[eax+0Ch], edx
sbb	ecx, 0
test	ecx, ecx
jnz	loc_C01E1292
mov	ecx, 0D8h

loc_C01E0E2B:
rep movsd
mov	ebx, ecx

loc_C01E0E2F:
test	ebx, ebx
mov	eax, 0FFFFFFF2h
jnz	loc_C01E1110
mov	eax, 10h
mov	ecx, 0C05433C0h
xor	ebx, ebx
mov	ds:0C054B700h, eax
xor	esi, esi
mov	edi, 38h

loc_C01E0E54:
movzx	edx, byte ptr [ecx]
inc	ecx
add	esi, 8
movzx	eax, byte ptr [ecx]
inc	ecx
shl	eax, 8
or	edx, eax
movzx	eax, byte ptr [ecx]
inc	ecx
shl	eax, 10h
or	edx, eax
movzx	eax, byte ptr [ecx]
inc	ecx
shl	eax, 18h
or	edx, eax
mov	[esp+ebx*4+118h+var_108], edx
inc	ebx
movzx	edx, byte ptr [ecx]
inc	ecx
movzx	eax, byte ptr [ecx]
inc	ecx
shl	eax, 8
or	edx, eax
movzx	eax, byte ptr [ecx]
inc	ecx
shl	eax, 10h
or	edx, eax
movzx	eax, byte ptr [ecx]
inc	ecx
shl	eax, 18h
or	edx, eax
mov	[esp+ebx*4+118h+var_108], edx
inc	ebx
cmp	esi, edi
jle	short loc_C01E0E54
mov	eax, 0B7E15163h
mov	edx, 0C054B704h
add	edx, 4
mov	ds:0C054B704h, eax
mov	esi, 21h
lea	esi, [esi+0]

loc_C01E0EC0:
mov	eax, [edx-4]
sub	eax, 61C88647h
mov	[edx], eax
add	edx, 4
dec	esi
jnz	short loc_C01E0EC0
mov	eax, 10h
cmp	eax, 22h
mov	ebx, 22h
cmovge	ebx, eax
xor	edi, edi
lea	eax, [ebx+ebx*2]
xor	edx, edx
xor	ebp, ebp
xor	ebx, ebx
test	eax, eax
jz	short loc_C01E0F38
mov	esi, eax

loc_C01E0EF1:
mov	eax, ds:0C054B704h[edx*4]
mov	ecx, 3
add	edi, eax
lea	eax, [ebp+edi+0]
rol	eax, cl
mov	ds:0C054B704h[edx*4], eax
lea	ecx, [ebp+eax+0]
mov	edi, eax
mov	eax, [esp+ebx*4+118h+var_108]
inc	edx
add	eax, edi
add	eax, ebp
rol	eax, cl
cmp	edx, 22h
mov	ebp, eax
mov	[esp+ebx*4+118h+var_108], eax
mov	eax, 0
cmovge	edx, eax
inc	ebx
cmp	ebx, 10h
cmovge	ebx, eax
dec	esi
jnz	short loc_C01E0EF1

loc_C01E0F38:
xor	ebp, ebp
lea	ebx, [esp+118h+var_110]
mov	esi, esi

loc_C01E0F40:
movzx	edx, byte ptr [ebp-3FABCF60h]
lea	edi, [ebp-3FABCF60h]
lea	ecx, [edi+1]
mov	[esp+118h+var_114], ecx
movzx	eax, byte ptr [edi+1]
shl	eax, 8
or	edx, eax
movzx	eax, byte ptr [edi+2]
shl	eax, 10h
or	edx, eax
movzx	eax, byte ptr [edi+3]
shl	eax, 18h
or	edx, eax
mov	[esp+118h+var_110], edx
mov	ecx, edx
movzx	eax, byte ptr [edi+5]
movzx	edx, byte ptr [edi+4]
shl	eax, 8
or	edx, eax
movzx	eax, byte ptr [edi+6]
shl	eax, 10h
or	edx, eax
movzx	eax, byte ptr [edi+7]
shl	eax, 18h
or	edx, eax
mov	eax, ecx
mov	[ebx+4], edx
mov	esi, ds:0C054B700h
mov	[esp+118h+var_118], edx
cmp	esi, 10h
jz	loc_C01E11A0
cmp	esi, 0Ch
jz	loc_C01E1120

loc_C01E0FB4:
mov	edx, ds:0C054B748h
mov	ecx, eax
mov	esi, ds:0C054B744h
sub	[esp+118h+var_118], edx
mov	edx, [esp+118h+var_118]
ror	edx, cl
xor	edx, eax
sub	eax, esi
mov	esi, ds:0C054B734h
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B740h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
mov	ecx, ds:0C054B73Ch
xor	edx, eax
sub	eax, ecx
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B738h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
xor	edx, eax
sub	eax, esi
mov	esi, ds:0C054B724h
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B730h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
mov	ecx, ds:0C054B72Ch
xor	edx, eax
sub	eax, ecx
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B728h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
xor	edx, eax
sub	eax, esi
mov	esi, ds:0C054B714h
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B720h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
mov	ecx, ds:0C054B71Ch
xor	edx, eax
sub	eax, ecx
add	ebp, 8
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B718h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
xor	edx, eax
sub	eax, esi
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B710h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
mov	ecx, ds:0C054B70Ch
xor	edx, eax
mov	[esp+118h+var_118], edx
sub	eax, ecx
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B704h
sub	eax, edx
mov	[ebx], eax
mov	eax, ds:0C054B708h
sub	ecx, eax
mov	[ebx+4], ecx
mov	edx, [esp+118h+var_110]
mov	[edi], dl
shr	edx, 8
mov	edi, [esp+118h+var_114]
mov	[edi], dl
shr	edx, 8
inc	edi
mov	[edi], dl
shr	edx, 8
inc	edi
mov	[edi], dl
inc	edi
mov	edx, [ebx+4]
mov	[edi], dl
shr	edx, 8
inc	edi
mov	[edi], dl
shr	edx, 8
inc	edi
mov	[edi], dl
shr	edx, 8
cmp	ebp, 320h
mov	[edi+1], dl
mov	dword ptr [ebx+4], 0
mov	[esp+118h+var_110], 0
jl	loc_C01E0F40
xor	eax, eax

loc_C01E1110:
add	esp, 110h
pop	ebx
pop	esi
pop	edi
pop	ebp
retn
align 10h

loc_C01E1120:
mov	ecx, ds:0C054B768h
mov	esi, ds:0C054B764h
sub	edx, ecx
mov	ecx, eax
ror	edx, cl
xor	edx, eax
sub	eax, esi
mov	esi, ds:0C054B754h
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B760h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
mov	ecx, ds:0C054B75Ch
xor	edx, eax
sub	eax, ecx
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B758h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
xor	edx, eax
sub	eax, esi
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B750h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
mov	ecx, ds:0C054B74Ch
xor	edx, eax
mov	[esp+118h+var_118], edx
sub	eax, ecx
mov	ecx, edx
ror	eax, cl

loc_C01E1197:
xor	eax, ecx
jmp	loc_C01E0FB4
align 10h

loc_C01E11A0:
mov	esi, ds:0C054B788h
sub	edx, esi
mov	esi, ds:0C054B77Ch
ror	edx, cl
xor	edx, ecx
mov	ecx, ds:0C054B784h
sub	eax, ecx
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B780h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
xor	edx, eax
sub	eax, esi
mov	esi, ds:0C054B76Ch
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B778h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
mov	ecx, ds:0C054B774h
xor	edx, eax
sub	eax, ecx
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B770h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
xor	edx, eax
sub	eax, esi
mov	esi, ds:0C054B75Ch
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B768h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
mov	ecx, ds:0C054B764h
xor	edx, eax
sub	eax, ecx
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B760h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
xor	edx, eax
sub	eax, esi
mov	esi, ds:0C054B74Ch
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B758h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
mov	ecx, ds:0C054B754h
xor	edx, eax
sub	eax, ecx
mov	ecx, edx
ror	eax, cl
xor	eax, edx
mov	edx, ds:0C054B750h
sub	ecx, edx
mov	edx, ecx
mov	ecx, eax
ror	edx, cl
xor	edx, eax
sub	eax, esi
mov	ecx, edx
ror	eax, cl
mov	[esp+118h+var_118], edx
jmp	loc_C01E1197

loc_C01E1292:
xor	eax, eax
mov	ecx, 0D8h
rep stosd
jmp	loc_C01E0E2F
sub_C01E0DF0 endp



这是从linux内核中反编译出来的关键函数的代码.
这段代码把从用户空间传来的0x360字节的注册信息文件内容进行计算,然后把结果保存在某个地方.
然后在另外的函数中根据计算的结果开启特定的功能.
但是我在这段代码中完全看不出什么来.
不知道ds:0C054B700h这个有没有问题?
2006-11-18 21:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
把程序放到网上让大家下载研究.不能谁也不能帮你
2006-11-19 20:49
0
雪    币: 458
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
  如果是硬盘很小的那种。工控设备之类的。可以考虑直接用  复制硬盘所有底层信息的方式绕过...也就是每个硬盘都是同一个编号
2020-1-7 16:46
0
游客
登录 | 注册 方可回帖
返回