怎样把目标DLL中的类无人原样而归第二季不动地新增到一个另外的DLL文件里面去

如何在DLL中调用另一个DLL?????????????????????????_百度知道
该问题可能描述不清,建议你
如何在DLL中调用另一个DLL?????????????????????????
我有更好的答案
调用DLL有两种方法:静态调用和动态调用.(一).静态调用其步骤如下:1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下;2.把你的youApp.lib拷到你目标工程(需调用youApp.DLL的工程)目录下;3.把你的youApp.h(包含输出函数的定义)拷到你目标工程(需调用youApp.DLL的工程)目录下;4.打开你的目标工程选中工程,选择Visual C++的Project主菜单的Settings菜单;5.执行第4步后,VC将会弹出一个对话框,在对话框的多页显示控件中选择Link页。然后在Object/library modules输入框中输入:youApp.lib6.选择你的目标工程Head Files加入:youApp.h文件;7.最后在你目标工程(*.cpp,需要调用DLL中的函数)中包含你的:#include &youApp.h&注:youApp是你DLL的工程名。(二).动态调用其程序如下:动态调用时只需做静态调用步骤1.01 {02
HINSTANCE hDllInst = LoadLibrary(&youApp.DLL&);03
if(hDllInst)04
typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD);06
MYFUNC youFuntionNameAlias = NULL;07
// youFuntionNameAlias 函数别名08
youFuntionNameAlias = (MYFUNC)GetProcAddress(hDllInst,&youFuntionName&);09
// youFuntionName 在DLL中声明的函数名10
if(youFuntionNameAlias)11
youFuntionNameAlias(param1,param2);13
FreeLibrary(hDllInst);15
}16 }显式(静态)调用:LIB + DLL + .H,注意.H中dllexport改为dllimport隐式(动态)调用:DLL + 函数原型声明,先LoadLibrary,再GetProcAddress(即找到DLL中函数的地址),不用后FreeLibrary
编译好的dll对外只有公共接口了,你这种想法是不切实际的!你只能调用该dll的属性(就是公共变量)和方法(就是函数)。要想全调用,我建议你干脆把该dll的源码加到这个dll中,编译一个新的合成的dll
我做了一个主程序,两个DLL,其中一是公用函数,一个是子窗体子窗体如何调用公用函数??????????????????我做时老是出错????????????????????
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。c#如何把配置文件封装在dll文件中_百度知道
c#如何把配置文件封装在dll文件中
我有更好的答案
尝试这样的思路:创建类库项目配置文件(config.xml)的各种元素 以connectionstring为例 写成为一个类ConfigClass,ConfigClass里面的成员 string connectionstring=&&;将类库项目生成就是dll文件 使用时 引用该类库项目即可。不过 推荐这一种做法:就使用配置文件config.xml 将里面的value加密为DES或RSA等长字符串使用时 读取xml文件 或者value密文,然后用密钥解密即可。这样当配置需要更新时 只需更新xml文件 更容易维护
采纳率:62%
来自团队:
骚年,你想多了,web.config倒是可以加密,这里有一个相关的例子:
为您推荐:
其他类似问题
dll文件的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。xenroll.dll下载 5.131.3686.0_xenroll.dll win7 64 - pc6下载站温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(24320)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_095065',
blogTitle:'在Windows中实现Java调用DLL(转载)',
blogAbstract:'本文提供调用本地 C 代码的 Java 代码示例,包括传递和返回某些常用的数据类型。本地方法包含在特定于平台的可执行文件中。就本文中的示例而言,本地方法包含在 Windows 32 位动态链接库 (DLL) 中。 不过我要提醒您,对 Java 外部的调用通常不能移植到其他平台上,在 applet 中还可能引发安全异常。实现本地代码将使您的 Java 应用程序无法通过 100% 纯 Java 测试。但是,如果必须执行本地调用,则要考虑几个准则: 将您的所有本地方法都封装在单个类中,这个类调用单个 DLL。对于每种目标操作系统,都可以用特定于适当平台的版本替换这个 DLL。这样就可以将本地代码的影响减至最小,并有助于将以后所需的移植问题包含在内。 本地方法要简单。尽量将您的 DLL 对任何第三方(包括 Microsoft)运行时 DLL',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:6,
publishTime:4,
permalink:'blog/static/',
commentCount:2,
mainCommentCount:2,
recommendCount:2,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}您还可以使用以下方式登录
当前位置:&>&&>& > 决战反外挂系统之秘密通讯原理
决战反外挂系统之秘密通讯原理
作者:Shawn (L. Spiro) Wilcoxen译者:riusksk(泉哥)&前言逃避反外挂系统的检测是当今新生游戏黑客最大的障碍,而存活最久的逃避方法当属DLL注入。在外面流传的黑客技术/工具是最容易被封杀的,这仅在与目标游戏进行频繁交互的系统函数上挂钩即可实现。本文涵盖了这些技术及工具绕过检测的方法,仅通过向目标进程注入DLL来避免调用挂钩的系统函数,进而使这些黑客工具可以访问任何目标进程,如果直接调用的话就可能会被反外挂系统发现,进而被查杀。在本文中有两份独立代码:一份是用于注入到游戏进程的DLL文件,一份是与DLL交互的工具,主要用于秘密获取目标进程的相关信息。&创建DLL&&&&&& DLL文件是整个进程的最基本的组成部分。我们先创建出一个DLL的基本框构,然后将其注入到进程中。关于DLL代码也没有什么特别之处,其源码如清单1所示:通过简单地调用函数::Beep()以便让我们知道此DLL是否被注入到目标进程了,这个可借助DLL注入工具,对任意进程注入我们的DLL,如果听到响声就说明DLL已经被成功注入并执行了。&&&&&& 注意:在Windows 7中,Beep()函数使用默认声卡,不像其它版本的Windows,将声音中继到主板喇叭上。&&&&&& 注意:为了使用Microsoft& Visual Studio&调试DLL,需先打开工程属性(Alt+F7),然后选择“Debugging”属性页,将“Command”设置为“winmine.exe”(Windows XP)或者“Minesweeper.exe”(Windows Vista或Windows 7)(译注:此为扫雷程序,必须输入完整路径才能执行,可通过浏览文件选择程序),以上都是在Debug build下创建的(读者可自行选择Release build)。在Debug版本下按F5启动Minesweeper,然后使用任意软件(比如内存搜索修改工具MHS、CheatEngine等等)注入创建的DLL。如果此时在DLLMain()上下断,你就可以看到当DLL被注入后即被断下。接着你可以从这里进行单步或普通调试。&注入DLL在准备测试DLL注入前,需要先找出一种可偷偷注入所有进程的方法。下面有几种可将DLL注入目标的方法,当DLL一注入进程后,DLL即可正常工作而不会被检测到。反外挂软件通常是检测使用CreateRemoteThread()和SetWindowsHookEx()暴力注入的方法,但如果你想随意地使用这些注入进程,可以看看本文所揭露的方法:频繁被非侵入式(non_intrusive)程序所使用的Applnit_DLLs注册表键值(译注:AppInit_DLLs 表值是用于初始化动态链接库,它可以为任一进程调用一个dll列表,当进程启动后,AppInit_DLLs中的dll文件就会注入到该程序里面去启动)。测试这种方法最简单地方式是手动将DLL文件路径添加到注册表中的HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionWindowsAppInit_DLLs,然后加载一个进程,比如记事本或计算器。注意:在Windows XP中,这项工作甚是简单,但在Windows Vista中,由于各项安全机制的保护,这种方法可能会受到限制。而在Windows 7上虽可实现,但只能通过一些循环跳转来修改注册表中的相同键值(LoadAppInit_DLLs和RequireSignedAppInit_DLLs)。对于这些系统,最好是使用一些替代DLL注入的方法。在将AppInit_DLLs设置为“F:empMyDll.dll”(没有引号)时,由于此值是通过空格进行分隔的,因此只能使用不包含空格的路径。更改注册表后,打开Windows系统上的计算器即可听到响声了,可见DLL已经被加载了。若想恢复原样,只需删除注册表中的此值然后重启即可。&通讯原理DLL文件需要向系统中的每一个进程广播它的存在,如果有一个(或者更多)进程响应,它将会去“连接”此进程,并进行更多的通讯。有很多方法可以建立一个私用通信网络,这里所谓的“私用(Private)”是指通讯网络不会在软件内部引发警告。如果你使用附带HWND_BROADCAST和(WM_USER+0x100)参数的SendMessage(),那么反外挂系统就会捕获此消息,并假设你的通讯网络正处于活动状态,接着将会终止游戏进程。&&&&&& 有许多方法可用来掩盖网络通信,其中一个方法是基于LAN通讯来侦测通信网络;其它方法可根本不发送消息到目标窗口。但由于你的DLL文件名应该随机的,因此只有DLL本身和客户端软件真正地知道DLL名称。如果客户端软件卸载了此DLL,那么该DLL需要向其它未加载此DLL的进程发送秘密信息,以实现进一步的通讯,这也是本文所选择的方法。客户端软件不能以其它方法进行通讯,因为这可能会破坏游戏中某些保护机制。与此同时该DLL事先并不知道给定的进程是否是客户端进程,因此进行数据共享的地址也是无法预先确定的。此种方法可先通过SendMessage()进行首次连接,然后再使用ReadProcessMemory()和WriteProcessMemory()进行后续的通讯。&做好准备&&&&&& 在实现通信层前有几个关键问题需要处理。首先至关重要的是,先创建一个用于与目标打交道的类。这个类里面封装了一些系统函数,便于后面进行重写和修改。例如,为了直接替代了函数ReadProcess(),可通过类中某实例来调用封装函数,它会转而来调用函数ReadProcess()。接着,当你想添加一个内核驱动程序来改变读取进程内存的方式时,你只需简单地重写类函数,并创建一个该类的实例即可,那么使用该类中封装函数的代码均会自动得到更正。下面的代码即是这样的一个类:&建立连接最后我们通过DLL与客户端程序建立连接,并使用一个类来管理每次的连接。然而,为了到达这一点,我们必须先检测一下客户端程序。这似乎很简单,只是简单地将消息发送给每个进程,并判断进程是否响应。这种方法只分配一个缓冲区用于存放客户端响应信息,然后将此地址发送到每个进程中。若其中某进程的缓冲区被响应信息给填充了,那么它就是客户端进程。然而不幸的是,我们可以打开多个客户端程序实例,如果他们同时将响应信息发送到同一个缓冲区,那么就有一份响应信息会丢失,而DLL只能与其中一个实例进行连接。因此我们需要为每个可能会响应的进程(基本上都有可能)提供一个缓冲区。一旦发现响应,我们将缓冲区发送给其受理的类,该类会处理所有与DLL间的通讯,并对客户端程序进行响应。&通讯缓冲区&&&&&& 我们的通讯系统的工作原理是让每个程序(DLL和客户端)将信息写入RAM内部指定的接收地址,此接收地址会被持续监测。每条消息以能够被DLL和客户端软件解析的特定格式来发送的,这个我们可以通过结构体、联合体和枚举来构造这样的格式。首先,实际的消息类型需要被枚举,如清单3所示:其次,每条消息格式的定义如清单4所示:最后使用一个联合体让单个结构体以清单4中所示的格式来包含数据。具体见代码清单5:注意,在客户端和DLL中均将使用这种结构体。&首次连接当DLL想盯梢未注入DLL的程序时,就需要先尝试初始化连接。由于DLL欲注入到每一个启动进程中(但并局限于此),因此我们可以假设未被注入DLL的进程会有意地从其自身卸载DLL,并有可能成为我们想要建立连接的客户端软件。此外,假设游戏进程受反外挂系统保护,那么恶意程序将很难发送可疑的探测消息给游戏进程。一般来说所有的连接工作都是相同的。客户端软件将有一个内存区域,此内存受到DLL的严格监管,当检测到有变更时,就会利用同一缓冲区来回应消息,然而初始化连接就需要发送一个Windows消息来设置这一切。更为复杂的是,DLL并不知道哪个客户端窗口是首次连接的窗口,因此它必须发送消息给每一个由客户端线程创建的窗口。这代码虽简单,但很长,关于代码解释参见清单6中的注释:调用::EnumThreadWindows()需要以下辅助函数,这个函数实际是用于发送消息给客户端,以请求获得响应,代码见清单7:其中m_lpcbBuffers是一个由std::vector&LPHITB_COMMUNICATION_BUFFER& m_lpcbBuffers定义的类成员。我们用它记录下每一次的初始化连接,并用它来判断是否就爱阅读www.92to.com网友整理上传,为您提供最全的知识大全,期待您的分享,转载请注明出处。
欢迎转载:
推荐:    
4【原】初步认识电脑

我要回帖

更多关于 php 原样输出 的文章

 

随机推荐