首页
社区
课程
招聘
[求助]在反汇编中,实现一个创建文件的功能
发表于: 2009-12-2 09:27 5805

[求助]在反汇编中,实现一个创建文件的功能

2009-12-2 09:27
5805
准备给一个EXE文件添加一个在c:\创建LOG.dat文件的功能,我是这样实现的,有C32Asm在文件的空白处写一段UNICODE字符串“c:\log.dat",然后用OD在EXE里以下这段子程序并调用他,就能在创建文件了。但是现在有个问题就是这个EXE不能加壳了,因加了壳字符串地址就变化了,所以也就不能创建文件了,请问应该怎么写这段代码加壳后也能正常运行。
pushad
push    0
push    80
push    2
push    0
push    2
push    40000000
push    004014ED ; UNICODE "c:/log.dat"
call    dword ptr [<&KERNEL32.CreateFile>; kernel32.CreateFileW
popad
retn

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 445
活跃值: (52)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
动态获取地址就行了,病毒经常这样写的~
ShellStart:
           pushad                    ; 外壳入口点
           call        next0
next0:
          pop       ebp
          sub        ebp,5
2009-12-2 09:55
0
雪    币: 81
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼上的朋友,麻烦你写详细点,我没有看懂,谢谢
2009-12-2 10:16
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
4
        push    0
        push    80
        push    2
        push    0
        push    2
        push    40000000
        call    $F
        UNICODE "c:/log.dat"
@@:     call    dword ptr [<&KERNEL32.CreateFile>]
        ret
2009-12-2 10:21
0
雪    币: 81
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
call    $F
        UNICODE "c:/log.dat"
先谢谢楼上的各位朋友,这两条是什么意思?怎么我用OD写 call    $F 提示“未认可的操作数”,麻烦各位写详细点,我笨呀我,
2009-12-2 11:34
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
6
call    401020
        UNICODE "c:/log.dat"           <- 你自己写的文件名
401020:
        call    dword ptr [<&KERNEL32.CreateFile>]
2009-12-2 12:03
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
sessiondiy大牛,请问
UNICODE "c:/log.dat"
这句是什么意思?没见过。。。
call    $F
这句不是已经跳过了UNICODE "c:/log.dat吗?
2009-12-2 12:32
0
雪    币: 421
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
call    401020
应该类似Jmp的效果了
2009-12-2 13:45
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
上楼的哥们,可能加壳程序会把UNICODE "c:/log.dat这句代码放到它指定的位置。这样写可能是遵循一种规定吧!因为楼主说:
准备给一个EXE文件添加一个在c:\创建LOG.dat文件的功能,我是这样实现的,有C32Asm在文件的空白处写一段UNICODE字符串“c:\log.dat",然后用OD在EXE里以下这段子程序并调用他,就能在创建文件了。但是现在有个问题就是这个EXE不能加壳了,因加了壳字符串地址就变化了,所以也就不能创建文件了,请问应该怎么写这段代码加壳后也能正常运行。
2009-12-2 14:10
0
雪    币: 445
活跃值: (52)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
这就已经动态定位了你要createfile的文件名~
2009-12-2 14:10
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
请问哥们,这是一种动态定位的格式吗?有相关的资料吗?谢谢
2009-12-2 14:15
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
010073D3  push    0
010073D5  push    740061
010073DA  push    64002E
010073DF  push    67006F
010073E4  push    6C005C
010073E9  push    3A0043
010073EE  mov     ebx, esp
010073F0  push    0
010073F2  push    80
010073F7  push    2
010073F9  push    0
010073FB  push    2
010073FD  push    4000000
01007402  push    ebx                         ;字符串在堆栈中
01007403  call    dword ptr [<&KERNEL32.CreateFileW>]
01007408  add     esp, 18                   ; 将压入的字符串弹出  6 个 DWORD
2009-12-3 22:15
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
虽然对汇编不太了解,不过两位大牛的意思我大概明白了,就是给创建文件的指令或是文件名所在的位置前加上标号,就像BAT和BASIC里的GOTO xx一个意思,这样虽然地址变了,标号的名字是不会变的,就可以找到了,楼主明白了吗
2009-12-3 23:53
0
雪    币: 391
活跃值: (135)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
14
将字符串压入到堆栈中
参考shellcode的编写
2009-12-4 20:14
0
雪    币: 95
活跃值: (419)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
15
注意call的作用,它会先将下条指令进栈,实际这里不是指令了,就是字符串c:/log.dat的起始地址
2009-12-5 21:37
0
雪    币: 81
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
不好意思,最近没来论坛,感谢各位大牛的解答,
2009-12-24 09:34
0
游客
登录 | 注册 方可回帖
返回
//