【易语言】【OD】关于写dll劫持(也可叫做静态补丁)的方法

令一个软件的执行流程(OD方法)如下(用易语言写):
1.Ctrl+B搜索一大堆00 然后记录地址(称为address1) 将OEP改到此处

2.在数据窗口搜索一大堆00 然后记录地址 第一行写dll名(称地址为address2) 第二行写子程序名(称地址为address2)

3.开始写代码
00483AF9 68 D0CE4900 push 0049CED0 ; ①
00483AFE E8 9C0ED474 call kernel32.LoadLibraryA
00483B03 68 E0CE4900 push 0049CEE0 ; ②
00483B08 50 push eax
00483B09 E8 14D7D374 call kernel32.GetProcAddress
00483B0E FFD0 call eax
00483B10 - E9 A78BBDFF jmp 0005C6BC ; ③
其中①为(2)中记录的address2,②为(2)中记录的address3,③为(1)中记录的address1(即OEP)

如果有什么不懂的地方可以提问 最好是完整写法 也可提供思路 不过必须切实有效 问题解决后会追加悬赏

改文件我觉得不如dll注入来的优雅。

VirtualAllocEx申请内存,
WriteProcessMemory将你的装载dll的shellcode写过去,
CreateRemoteThread创建线程,指向你的shellcode。
简单愉快,完全不需要改OEP,更不用搜索00。

如果你那么固执要用你的静态补丁方法,
其实我觉得你也不需要用什么易语言了,直接把你用OD修改的DLL,保存并替代原文件,
就可以了,何须那么麻烦,当然除非你这个DLL还是EXE有什么特殊的地方不能这样。

易语言用汇编比较蛋疼,而且我对易语言也不太了解,
如果你那么固执要用编程来解决,我就大概提一下思路。

一、搜00,找个足够大的空的地方
二、通过读PE结构获取OEP,不懂的话请自行百度PE结构。
三、OEP改成你步骤一找到的空地,
这一块涉及到文件虚拟地址对齐问题(好像是这么叫的),比较复杂,而且我也不太清楚,
交给你自己解决。

四、空地里写入你的shellcode。你的shellcode有个问题,call LoadLibrary用的是相对偏移跳 转,当你这句汇编的位置483AFE,那么你就会call到别的地方去了,可以改成如下代码:
mov eax,LoadLibrary地址

call eax

五、shellcode末尾jmp回原OEP,同样涉及对齐问题,自行研究吧。追问

请认真审题 要的是易语言的写法或思路 您所说的都已经研究过了 如果可以自行研究那提问就没有价值了

温馨提示:答案为网友推荐,仅供参考
相似回答