【易语言】【OD】关于写dll劫持(也可叫做静态补丁)的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【易语言】【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)
如果有什么不懂的地方可以提问 最好是完整写法 也可提供思路 不过必须切实有效 问题解决后会追加悬赏
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,同样涉及对齐问题,自行研究吧。追问
请认真审题 要的是易语言的写法或思路 您所说的都已经研究过了 如果可以自行研究那提问就没有价值了
参考技术A 回答驴唇不对马嘴,都回答的什么傻逼玩野? 麻烦先百度一下DLL劫持是什么好不好?DLL劫持 https://baike.baidu.com/item/dll劫持/223198?fr=aladdin
经常被用作劫持的DLL:msimg32.dll;riched20.dll;riched32.dll;version.dll;winmm.dll;ws2_32.dll;ws2help.dll
如果你是XP系统还有一个lpk.dll
先查看原来系统这些DLL的函数,并自己构建相同的DLL指向系统的这个DLL,然后通常是在DLL的启动函数处加入写补丁的代码,劫持补丁一般需要配合hook使用(因为读入这个DLL的时候有可能程序还没有从壳段中解压出来)
如果你仅仅是用来打补丁可以用DLL劫持补丁生成工具,网上有很多的,推荐飘云阁的补丁
易语言怎么调用DLL文件?
比如我有两个EXE文件,我把EXE的后缀改成DLL,然后把两个文件放在和我写的文件一个地方,但是我的文件要怎么写才能别人双击我写的那个文件就会同时打开那两个EXE文件呢?
参考技术A 不用改后缀名,改了之后就不能运行了,直接用“运行()”这个命令就可以了,dll和可执行文件是不同的,dll动态链接库有程序接口可供其他程序调用里面的子程序,调用的时候只需要在易语言的dll列表里填好相关信息,然后像调用其他子程序一样调用就行了,也可以用dll注入以上是关于【易语言】【OD】关于写dll劫持(也可叫做静态补丁)的方法的主要内容,如果未能解决你的问题,请参考以下文章