📄 进程注入的三种方法 - benny5609的专栏 - csdnblog.htm
字号:
我们假设计算偏移(即查表)并跳到正确的地址需要5个指令。<BR> <BR> 现在,你可能认为上面的情况仅仅是因为case常量选择得比较好,(1,2,3,4,5)。幸运的是,现实生活中的大多数例子都可以应用这个方案,只是偏移的计算复杂了一点而已。但是,有两个例外:<BR> ●如果少于3个case分支,或<BR> ●如果case常量是完全相互无关的。(比如
1, 13, 50, 1000)。<BR> 最终的结果和你使用普通的if-else
if是一样的。<BR> <BR> 有趣的地方:如果你曾经为case后面只能跟常量而迷惑的话,现在你应该知道为什么了吧。这个值必须在编译期间就确定下来,这样才能创建地址表。<BR> <BR> 回到我们的问题!<BR> 注意到0040100C处的JMP指令了吗?我们来看看Intel的文档对十六进制操作码FF的说明:<BR> Opcode
Instruction Description<BR> FF /4 JMP r/m32 Jump near, absolute indirect,
address given in
r/m32<BR> <BR> JMP使用了绝对地址!也就是说,它的其中一个操作数(在这里是0040102C)代表一个绝对地址。还用多说吗?现在远程的ThreadFunc会盲目第在地址表中004101C然后跳到这个错误的地方,马上使远程进程挂掉了。<BR> <BR> F)
到底是什么原因使远程进程崩溃了?<BR> 如果你的远程进程崩溃了,原因可能为下列之一:<BR> 1.
你引用了ThreadFunc中一个不存在的字符串。<BR> 2. ThreadFunc中一个或多个指令使用了绝对寻址(看附录E中的例子)<BR> 3.
ThreadFunc调用了一个不存在的函数(这个函数调用可能是编译器或连接器添加的)。这时候你需要在反汇编器中寻找类似下面的代码:<BR> :004014C0
push EBP ; entry point of ThreadFunc<BR> :004014C1 mov EBP, ESP<BR>
...<BR> :004014C5 call 0041550 ; 在这里崩溃了<BR> ; remote process<BR>
...<BR> :00401502
ret<BR> 如果这个有争议的CALL是编译器添加的(因为一些不该打开的编译开关比如/GZ打开了),它要么在ThreadFunc的开头要么在ThreadFunc接近结尾的地方<BR> <BR> 不管在什么情况下,你使用CreateRemoteThread
&
WriteProcessMemory技术时必须万分的小心,特别是编译器/连接器的设置,它们很可能会给你的ThreadFunc添加一些带来麻烦的东西。 <BR><BR>
<P id=TBPingURL>Trackback:
http://tb.blog.csdn.net/TrackBack.aspx?PostId=1784273</P><BR></DIV>
<DIV class=postFoot>
<SCRIPT src=""></SCRIPT>
[<A title=功能强大的网络收藏夹,一秒钟操作就可以轻松实现保存带来的价值、分享带来的快乐
href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();">收藏到我的网摘</A>]
[<A
href="http://tb.blog.csdn.net/TrackBack.aspx?PostId=1784273">发送Trackback]</A> benny5609发表于
2007年09月13日 21:30:50 </DIV></DIV><LINK
href="http://blog.csdn.net/benny5609/Services/Pingback.aspx" rel=pingback><!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><rdf:Descriptionrdf:about="http://blog.csdn.net/benny5609/archive/2007/09/13/1784273.aspx"dc:identifier="http://blog.csdn.net/benny5609/archive/2007/09/13/1784273.aspx"dc:title="进程注入的三种方法"trackback:ping="http://tb.blog.csdn.net/TrackBack.aspx?PostId=1784273" /></rdf:RDF>-->
<SCRIPT>function hide(){showComment();}</SCRIPT>
<BR><BR><BR><BR>
<DIV class=post id=csdn_zhaig_ad_yahoo></DIV>
<SCRIPT type=text/javascript>document.write("<img src=http://counter.csdn.net/pv.aspx?id=24 border=0 width=0 height=0>");</SCRIPT>
<SPAN class=PreAndNext id=viewpost.ascx_PreviousAndNextEntriesDown>
<DIV align=center><A
href="http://blog.csdn.net/benny5609/archive/2007/09/13/1784434.aspx">上一篇: 浅谈HOOK技术在VC编程中的应用
</A> | <A
href="http://blog.csdn.net/benny5609/archive/2007/09/13/1784051.aspx">下一篇: VC++动态链接库编程之非MFC
DLL</A></DIV></SPAN><SPAN id=Anthem_Comments.ascx_ltlComments__><SPAN
id=Comments.ascx_ltlComments><BR>
<DIV id=comments>
<H3>评论</H3>没有评论。 </DIV></SPAN></SPAN>
<SCRIPT language=javascript>
ad_width=468;
ad_height=60;
adcss=2;
unionuser=19;
ad_type='j';
count=5;
</SCRIPT>
<DIV>
<SCRIPT language=javascript
src="进程注入的三种方法 - benny5609的专栏 - CSDNBlog.files/showads.js"
type=text/javascript></SCRIPT>
<SCRIPT language=javascript
src="进程注入的三种方法 - benny5609的专栏 - CSDNBlog.files/showgm.js"
type=text/javascript></SCRIPT>
</DIV>
<DIV class=CommentForm id=commentform>
<H3>发表评论 </H3>
<DIV id=Anthem_PostComment.ascx_CommentUpdatePanel__>
<DIV id=PostComment.ascx_CommentUpdatePanel>
<TABLE class=CommentForm>
<TBODY>
<TR>
<TD width=69 height=0></TD>
<TD></TD></TR>
<TR>
<TD width=70>大名:</TD>
<TD align=left><INPUT id=PostComment.ascx_tbName style="WIDTH: 300px"
disabled maxLength=32 size=40 name=PostComment.ascx:tbName> <SPAN
id=PostComment.ascx_RequiredFieldValidator2
style="DISPLAY: none; COLOR: red" initialvalue=""
evaluationfunction="RequiredFieldValidatorEvaluateIsValid"
display="Dynamic" errormessage="<br>请输入尊姓大名"
controltovalidate="PostComment.ascx_tbName"><BR>请输入尊姓大名</SPAN> </TD></TR>
<TR>
<TD width=70>网址:</TD>
<TD align=left><INPUT id=PostComment.ascx_tbUrl style="WIDTH: 300px"
disabled maxLength=256 size=40 name=PostComment.ascx:tbUrl> </TD></TR>
<DIV id=PostComment.ascx_AntiBotImageRegion></DIV>
<TR>
<TD width=70>校验码:</TD>
<TD align=left><INPUT id=PostComment.ascx_tbAntiBotImage
style="WIDTH: 75px" name=PostComment.ascx:tbAntiBotImage> <SPAN
id=PostComment.ascx_valAntiBotImage style="DISPLAY: none; COLOR: red"
evaluationfunction="CustomValidatorEvaluateIsValid"
display="Dynamic">检验码无效!</SPAN> <SPAN
id=Anthem_PostComment.ascx_imgAntiBotImage__><IMG
id=PostComment.ascx_imgAntiBotImage alt=""
src="进程注入的三种方法 - benny5609的专栏 - CSDNBlog.files/AntiBotImage.jpg"
align=absMiddle border=0></SPAN> <SPAN
id=Anthem_PostComment.ascx_lbCreateAntiBotImage__><A
id=PostComment.ascx_lbCreateAntiBotImage
onclick="javascript:Anthem_FireCallBackEvent(this,event,'PostComment.ascx:lbCreateAntiBotImage','',false,'','','',true,null,null,null,true,true);return false;"
href="javascript:__doPostBack('PostComment.ascx$lbCreateAntiBotImage','')">看不清,换一张</A></SPAN>
</TD></TR>
<DIV></DIV>
<TR>
<TD colSpan=3>评论 <SPAN id=PostComment.ascx_RequiredFieldValidator3
style="DISPLAY: none; COLOR: red" initialvalue=""
evaluationfunction="RequiredFieldValidatorEvaluateIsValid"
display="Dynamic" errormessage="<br>请输入评论"
controltovalidate="PostComment.ascx_tbComment"><BR>请输入评论</SPAN> <BR><TEXTAREA id=PostComment.ascx_tbComment style="WIDTH: 381px; HEIGHT: 193px" disabled name=PostComment.ascx:tbComment rows=10 cols=50></TEXTAREA>
</TD></TR>
<TR>
<TD colSpan=3><SPAN
id=Anthem_PostComment.ascx_btnSubmit__></SPAN> </TD></TR>
<TR>
<TD colSpan=3><SPAN id=PostComment.ascx_Message
style="COLOR: red">当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击<A
href="http://passport.csdn.net/member/UserLogin.aspx?from=http://blog.csdn.net/benny5609/archive/2007/09/13/1784273.aspx">登录</A></SPAN>
</TD></TR></TBODY></TABLE></DIV></DIV></DIV></DIV>
<P id=footer>Powered by: <BR><A id=Footer1_Hyperlink2
href="http://scottwater.com/blog" name=Hyperlink1><IMG
src="进程注入的三种方法 - benny5609的专栏 - CSDNBlog.files/100x30_Logo.gif" border=0></A> <A
id=Footer1_Hyperlink3 href="http://asp.net/" name=Hyperlink1><IMG
src="进程注入的三种方法 - benny5609的专栏 - CSDNBlog.files/PoweredByAsp.Net.gif"
border=0></A> <BR>Copyright © benny5609 </P>
<SCRIPT src="进程注入的三种方法 - benny5609的专栏 - CSDNBlog.files/counter.js"></SCRIPT>
<SCRIPT type=text/javascript>
<!--
var Page_Validators = new Array(document.getElementById("PostComment.ascx_RequiredFieldValidator2"), document.getElementById("PostComment.ascx_valAntiBotImage"), document.getElementById("PostComment.ascx_RequiredFieldValidator3"));
// -->
</SCRIPT>
<SCRIPT type=text/javascript>
<!--
var Page_Vali
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -