首页
社区
课程
招聘
资源表重建代码
发表于: 2005-4-15 22:58 9330

资源表重建代码

2005-4-15 22:58
9330

100行之内吧。

; Resource table rebuilder
;                        coded by forgot/iPB
; no optimition yet.                               
                       
                        .386
                        .Model Flat,StdCall
                        Option CaseMap:None

                        .Data

imagebuf                db        1024 dup(0)

resourcebase                dd        0
newresbase                dd        0

                        .code

start:                        mov        eax, 400000h
                        mov        ecx, [eax+3Ch]
                        add        ecx, eax
                        mov        edx, [ecx+88h]
                        add        edx, eax
                        mov        resourcebase, edx

                        lea        edi, imagebuf
                        mov        newresbase, edi
                        call        __move_rsrc

                        retn

; input: edx = offset, edi = stream
; output: edi = new stream

__move_rsrc:                movzx        ecx, word ptr [edx+0Ch]
                        movzx        eax, word ptr [edx+0Eh]
                        add        ecx, eax

                        push        ecx
                        mov        esi, edx
                        mov        edx, edi
                        shl        ecx, 03h
                        add        ecx, 10h
                        call        __memmov
                        pop        ecx

                        add        edx, 10h

__rsrc_cycle:                jecxz        __rsrc_end
                        push        ecx

                        mov        eax, [edx]
                        btr        eax, 31
                        jnc        __skip_copy_name

                        add        eax, resourcebase
                        xchg        esi, eax

                        mov        eax, edi
                        sub        eax, newresbase
                        bts        eax, 31
                        push        eax

__next_char:                lodsb
                        and        byte ptr [esi-1], 0
                        test        al, al
                        jz        __str_end
                        stosb
                        jmp        __next_char
__str_end:       
                        pop        eax
                        mov        [edx], eax

__skip_copy_name:        mov        eax, [edx+04h]
                        btr        eax, 31
                        xchg        esi, eax
                        jnc        __not_dir

                        add        esi, resourcebase

                        mov        eax, edi
                        sub        eax, newresbase
                        bts        eax, 31
                        push        eax

                        push        edx
                        xchg        edx, esi
                        call        __move_rsrc
                        pop        edx

                        pop        eax
                        jmp        __fix_offs

__not_dir:                mov        eax, edi
                        sub        eax, newresbase
                        push        eax

                        add        esi, resourcebase
                        mov        ecx, 10h
                        call        __memmov
                       
                        pop        eax

__fix_offs:                mov        [edx+04h], eax
                        add        edx, 08h

                        pop        ecx
                        dec        ecx
                        jmp        __rsrc_cycle

__rsrc_end:                retn

__memmov:                jecxz        __rsrc_end
                        movsb
                        and        byte ptr [esi-1], 0
                        dec        ecx
                        jmp        __memmov

                        end        start


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

收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 260
活跃值: (167)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
小林子加油多产些这样的好东东。。。
2005-4-15 23:02
0
雪    币: 99
活跃值: (2573)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
虽然代码简单,但是rebuild出来的resource和通常的格式不同,并不是resource dir+resource name+resource data这种形式,而是混合在一起了。要实现通常的格式也不难,只要预计算就可以了。
2005-4-16 00:01
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
4
我的目的只是为了加壳时防止资源无法加载而已
2005-4-16 00:11
0
雪    币: 99
活跃值: (2573)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
最初由 forgot 发布
我的目的只是为了加壳时防止资源无法加载而已

ASPack是无法压缩这种resource格式的。
2005-4-16 00:17
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
6
nonono
系统能找到图标我就满足了
2005-4-16 00:22
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
7
TeLeMan兄,生成标准格式当然最好,但我没找到扫描一遍表就能做到的方法,请指教一二。
2005-4-16 00:24
0
雪    币: 99
活跃值: (2573)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
最初由 forgot 发布
TeLeMan兄,生成标准格式当然最好,但我没找到扫描一遍表就能做到的方法,请指教一二。

当然一遍是不可能做到的。所谓预计算,就是要先遍历一次,得到各个块的实际大小,然后再遍历一遍,copy数据到新buffer。
2005-4-16 00:30
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
9
深了,还看不明白先收藏吧
2005-4-16 16:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
请问一下,你贴的这个是用什么语言写的呀?我一点都看不懂。我只是学C语言,是不是太菜了!唉,真的跟不上时代了
2005-4-18 21:27
0
雪    币: 221
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
呵呵,这个高级语言可是一定要学学的哦,在看雪哪能不学这个语言
2005-4-18 22:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
这是什么高级语言?
2005-4-19 16:02
0
雪    币: 108
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
最初由 48657119 发布
请问一下,你贴的这个是用什么语言写的呀?我一点都看不懂。我只是学C语言,是不是太菜了!唉,真的跟不上时代了


不是汇编嘛?
2005-4-19 18:33
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
离实用性差得太远,不过给你鼓励!
2005-4-19 21:48
0
游客
登录 | 注册 方可回帖
返回
//