在网上找到份搜索内存的代码 可是无法用,请教高手帮忙看看,是不是那里有错误-_- ( 积分: 200 )

  • 主题发起人 主题发起人 精灵猪
  • 开始时间 开始时间

精灵猪

Unregistered / Unconfirmed
GUEST, unregistred user!
type<br>&nbsp;&nbsp;TLongJmp&nbsp;=&nbsp;packed&nbsp;record<br>&nbsp;&nbsp;&nbsp;&nbsp;JmpCode:&nbsp;byte;&nbsp;{指令,用$E9来代替系统的指令}<br>&nbsp;&nbsp;&nbsp;&nbsp;FuncAddr:&nbsp;DWORD;&nbsp;{函数地址}<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;PLongJmp&nbsp;=&nbsp;^TLongJmp;&nbsp;<br><br>var<br>code:PLongJmp;<br><br>function&nbsp;StrPosB(Str:&nbsp;PChar;&nbsp;iLen:&nbsp;longword;&nbsp;c:&nbsp;Char):&nbsp;longword;&nbsp;assembler;<br>asm<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;&nbsp;&nbsp;&nbsp;EDI<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;&nbsp;&nbsp;&nbsp;EBX<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EAX,EAX&nbsp;&nbsp;//Str1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@@2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EDI,EAX<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EBX,EAX<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AL,CL&nbsp;&nbsp;&nbsp;//c<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ECX,EDX&nbsp;//iLen<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ECX<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REPNE&nbsp;&nbsp;&nbsp;SCASB<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ECX,0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@@2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EAX,EDI<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EAX,EBX<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EAX<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@@3<br>@@2:&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EAX,0FFFFFFFFH<br>@@3:&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EBX<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EDI<br>end;&nbsp;<br><br>function&nbsp;Comp(const&nbsp;Str1,&nbsp;Str2:&nbsp;PChar;&nbsp;Len:&nbsp;Cardinal):&nbsp;boolean;&nbsp;assembler;<br>asm<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;&nbsp;&nbsp;&nbsp;EDI<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;&nbsp;&nbsp;&nbsp;ESI<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EDI,EDX&nbsp;//str2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ESI,EAX&nbsp;//str1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EAX,1&nbsp;&nbsp;&nbsp;//result:=1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ECX,ECX&nbsp;//if&nbsp;Len=0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@@1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XOR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EDX,EDX<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REPE&nbsp;&nbsp;&nbsp;&nbsp;CMPSB<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ECX,ECX&nbsp;//if&nbsp;Len=0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JNE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@@Error<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CL,[EDI-1]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CL,[ESI-1]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@@1<br>@@Error:XOR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EAX,EAX<br>@@1:&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ESI<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EDI<br>end;&nbsp;<br><br><br>function&nbsp;FindCode:&nbsp;PLongJmp;<br>const&nbsp;<br>&nbsp;&nbsp;const1&nbsp;=&nbsp;#$81#$E1#$0F#$0F#$0F#$0F#$8B#$F9#$83#$C4#$10#$33#$FE#$89#$3A#$5F&nbsp;+<br>&nbsp;&nbsp;&nbsp;&nbsp;#$5E#$C1#$E1#$04#$33#$C8#$5D#$89#$4A#$04#$5B#$C3;<br>var<br>&nbsp;&nbsp;SysInfo:&nbsp;_SYSTEM_INFO;<br>&nbsp;&nbsp;MBI:&nbsp;MEMORY_BASIC_INFORMATION;<br>&nbsp;&nbsp;iLen:&nbsp;integer;<br>&nbsp;&nbsp;PMemoAddr:&nbsp;Pointer;<br>&nbsp;&nbsp;p:&nbsp;pchar;<br>&nbsp;&nbsp;nSize,&nbsp;size,&nbsp;d1:&nbsp;DWORD;<br>&nbsp;&nbsp;bBreak:&nbsp;boolean;<br>&nbsp;&nbsp;c:&nbsp;char;<br>begin<br>&nbsp;&nbsp;result&nbsp;:=&nbsp;nil;<br>&nbsp;&nbsp;if&nbsp;hasSend&nbsp;then&nbsp;exit;<br>&nbsp;&nbsp;if&nbsp;(not&nbsp;ThreadBusy)&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;ThreadBusy&nbsp;:=&nbsp;true;<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;ProcessHndle&nbsp;&lt;&gt;&nbsp;0&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetSystemInfo(SysInfo);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PMemoAddr&nbsp;:=&nbsp;SysInfo.lpMinimumApplicationAddress;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bBreak&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writedat2('fc1');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iLen&nbsp;:=&nbsp;length(const1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;:=&nbsp;pchar(const1)^;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(not&nbsp;bBreak)&nbsp;and&nbsp;(dword(PMemoAddr)&nbsp;&lt;&nbsp;dword(SysInfo.lpMaximumApplicationAddress))&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fillchar(MBI,&nbsp;sizeof(MBI),&nbsp;0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VirtualQueryEx(ProcessHndle,&nbsp;PMemoAddr,&nbsp;MBI,&nbsp;SizeOf(MBI));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;MBI.RegionSize&nbsp;=&nbsp;0&nbsp;then&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;dword(MBI.BaseAddress)&nbsp;&gt;=&nbsp;$01000000&nbsp;then&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nSize&nbsp;:=&nbsp;MBI.RegionSize;<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writedat2('a:'&nbsp;+&nbsp;inttostr(dword(MBI.baseaddress))&nbsp;+&nbsp;'&nbsp;'&nbsp;+&nbsp;inttostr(Mbi.Protect)&nbsp;+&nbsp;'&nbsp;'&nbsp;+&nbsp;inttostr(Mbi.RegionSize)&nbsp;+&nbsp;'&nbsp;'&nbsp;+&nbsp;inttostr(MBI.State));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(MBI.State&nbsp;=&nbsp;MEM_COMMIT)&nbsp;and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((Mbi.Protect&nbsp;=&nbsp;PAGE_READWRITE)&nbsp;or&nbsp;(Mbi.Protect&nbsp;=&nbsp;PAGE_EXECUTE_READWRITE))&nbsp;then&nbsp;//2000Ice:PAGE_READWRITE&nbsp;xp:PAGE_EXECUTE_READWRITE<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writedat2('b');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;:=&nbsp;pchar(MbI.BaseAddress)&nbsp;+&nbsp;$10;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size&nbsp;:=&nbsp;MbI.RegionSize&nbsp;-&nbsp;$10&nbsp;-&nbsp;dword(iLen)&nbsp;-&nbsp;$4;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;true&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d1&nbsp;:=&nbsp;StrPosB(p,&nbsp;size,&nbsp;c);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;d1&nbsp;=&nbsp;$FFFFFFFF&nbsp;then&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dec(size,&nbsp;d1&nbsp;+&nbsp;1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(p,&nbsp;d1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(plongword(p)^&nbsp;=&nbsp;plongword(pchar(const1))^)&nbsp;and&nbsp;(comp(p,&nbsp;const1,&nbsp;iLen))&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;:=&nbsp;pointer(p&nbsp;+&nbsp;iLen&nbsp;-&nbsp;1);&nbsp;/&nbsp;0057259b<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writedat2('fc2:'&nbsp;+&nbsp;inttostr(dword(result))&nbsp;+&nbsp;'&nbsp;'&nbsp;+&nbsp;inttostr(Mbi.Protect)&nbsp;+&nbsp;'&nbsp;'&nbsp;+&nbsp;inttostr(Mbi.RegionSize)&nbsp;+&nbsp;'&nbsp;'&nbsp;+&nbsp;inttostr(MBI.State));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bBreak&nbsp;:=&nbsp;true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(p);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PMemoAddr&nbsp;:=&nbsp;Pointer(DWORD(PMemoAddr)&nbsp;+&nbsp;nSize);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;ThreadBusy&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;end;<br>end;&nbsp;<br><br>以上是代码&nbsp;在程序中调用code:=findcode;是不是可以得到&nbsp;#$81#$E1#$0F#$0F#$0F#$0F#$8B#$F9#$83#$C4#$10#$33#$FE#$89#$3A#$5F&nbsp;<br>这里的&nbsp;内存地址&nbsp;我试了好多次都没有成功&nbsp;请教高手是那里错了?<br>另外如果我要搜索&nbsp;user32.dll下的一段代码得到内存地址用这个代码可以吗?&nbsp;如果不可以应该如何做?&nbsp;其实我的目的是要利用这套代码得到user32.dll里的一个地址&nbsp;由于是内存地址而不是API所以用搜索的方法&nbsp;希望高手指点一下&nbsp;应该如何做&nbsp;小弟感激不尽
 
后退
顶部