首页
社区
课程
招聘
[注意]这代码如何修改能将WriteFile函数的参数修改为指定的某块区域?
发表于: 2007-9-3 23:52 5532

[注意]这代码如何修改能将WriteFile函数的参数修改为指定的某块区域?

2007-9-3 23:52
5532
某一程序需要写入一段数据到另外一个数据文件中,代码如下:

0040123F  push    0                                对应WriteFile的pOverlapped参数
00401241  lea     eax, dword ptr [ebp-18]           
00401244  push    eax                              pBytesWritten参数
00401245  push    dword ptr [ebp-54C]              nBytesToWrite参数 写入的字节数
0040124B  push    dword ptr [ebp-550]              Buffer指针
00401251  push    dword ptr [ebp-530]              被写数据文件的句柄
00401257  call    004014B2                          此处调用 jmp 到 kernel32.WriteFile 函数

我如果想修改其buffer指针的内容,使其指向程序中我指定的另外一个区域,达到写入我指定的数据,那应该怎么做才可以呢?
这个buffer指针是指向程序内存空间中的地址,还是文件缓冲区呢?文件中我指定的区域应该被PE加载器映射到虚拟内存,也就是页面文件中,那么如何修改能达到要求呢?
如果这条路行不通,有其他方法解决这个问题吗?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 324
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我再表述一下我的目的! 我现在手上有一个程序,比如a.exe,a.exe在执行的过程中会调用上述那一段代码来执行写操作,写的对象就是另外一个数据文件,假设为b.dat;写的内容就是a.exe在WriteFile函数之前申请的内存空间,大小为调用WriteFile函数参数指定的大小,内容是通过读取自身指定数据段并通过一系列解密生成的. 我现在的目的是想绕过其解密这一块,修改其在WriteFile函数中buffer的指针,指向我准备写入的内容. 我的问题也在这里,这个准备写入的内容我应该怎么组织,我目前的想法是通过PE工具在这个程序的数据段增加我准备写入大小的0字段,并用我准备写入的数据填充它,然后在WriteFile函数中直接将我增加的内容的指针提交给函数,不知道这样能否行~ 请各位大大,赐教!
2007-9-4 00:36
0
雪    币: 196
活跃值: (96)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
看不懂你的意思,你要写的东西是什么?固定的还是动态生成的
如果只是要绕过解密,只要把writefile字符串那个参数地址改成未解密之前的地址就ok,还有写入长度
2007-9-4 16:40
0
雪    币: 488
活跃值: (3149)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
4
楼上的正解。
补充一下,直接把加密解密的操作跳掉,就不用管WriteFile了
2007-9-7 17:27
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NIU
5
0040124B  push    dword ptr [ebp-550]
;把这句改在你的数据的地址就行了。比如
push xxxxxxxx    ; 这里的xxxxxxxx是你的数据所在地址(VA)

至于数据块的大小,改这句00401244  push    eax    ;pBytesWritten参数
2007-9-8 20:21
0
游客
登录 | 注册 方可回帖
返回
//