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

资源表重建代码

2005-4-15 22:58
8735
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

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

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

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

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


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