如何获取其他进程当前读取的数据?
公司有一套加密软件,是透明加密方式!我的想法是既然他要解密才能让我们的软件读取数据嘛,不然这么读取啊?O(∩_∩)O~
这个程序会监视指定程序保存数据(比如word),然后立马加密!
我们要做的工作就是把该程序当前读取的数据给读取出来(已经是正规的编码了,没有加密了),然后再保存!保存出来的就不是加密的,因为他监视的是word、excel等其他软件的读写操作,而不是我们的程序!
简单点说,我打开word,然后我读取word进程打开的doc的数据,然后保存成doc文件!有能实现这样的嘛?{:soso_e101:}
或者说是读取CAD进程打开的dwg文件数据,然后给另存下来?{:soso_e122:}
也许程序会hook读取进程的函数,这个都不要紧,我们恢复这个hook再读取嘛,嘿嘿!~~ 那意思是被加密的程序WriteFile写的是明文,但存到硬盘的是密文;
而ReadFile读取的是明文罗?
这样的话,很简单嘛,注入,然后在那个进程里调用ReadFile,再把读到的内容发到自己进程,然后自己进程再保存文件.{:soso__9053858523583330587_2:} 马大哈 发表于 2012-4-11 15:24 static/image/common/back.gif
那意思是被加密的程序WriteFile写的是明文,但存到硬盘的是密文;
而ReadFile读取的是明文罗?
有木有参考? /*
两个关键函数 ReadProcessMemory和VirtualQueryEx 理解得不透彻,所以可能有点小问题,但大体流程应该是这样,希望对你有帮助。另外,好多地方没有作错误检查,不保证在你的环境下一定能用。
请各路大神指正。
*/
#include<iostream>
#include <fstream>
#include<windows.h>
#include<tlhelp32.h>
using namespace std;
int main()
{
char app;
cout<<"请输入映像名(含.exe)\n如: ctfmon.exe\n:";
cin>>app;
fstream fp("dump.txt",ios::binary|ios::out);
BOOL flag=0;
HANDLE htoken;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&htoken);
LookupPrivilegeValue(NULL, SE_DEBUG_NAME,&tkp.Privileges.Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges.Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(htoken,0,&tkp,NULL,NULL,0);
CloseHandle(htoken);
PROCESSENTRY32 pe32;
pe32.dwSize=sizeof(pe32);
HANDLE hprosnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hprosnap==INVALID_HANDLE_VALUE)
{
cout<<"Snapshot failed!"<<endl;
}
if(Process32First(hprosnap,&pe32))
{
do
{
if(!strcasecmp(app,pe32.szExeFile))
{
cout<<"Program is dumping..."<<endl;
flag=true;
break;
}
}
while(::Process32Next(hprosnap,&pe32));
}
CloseHandle(hprosnap);
if(!flag)
{
cout<<"Process not found!\n";
system("pause");
return 1;
}
SYSTEM_INFO si;
GetSystemInfo(&si);
HANDLE htarget=OpenProcess(PROCESS_ALL_ACCESS,0,pe32.th32ProcessID);
if(htarget==NULL)
{
cout<<"Open Process Error!\n";
return 2;
}
MEMORY_BASIC_INFORMATION mbi;
char *onepagebuf=new char ;
for(DWORD start=(DWORD)si.lpMinimumApplicationAddress; start<(DWORD)si.lpMaximumApplicationAddress-si.dwPageSize; start+=si.dwPageSize)
{
if(!VirtualQueryEx(htarget,(void *)start,&mbi,sizeof(mbi))==sizeof(mbi))
break;
if(mbi.State==MEM_COMMIT)
{
ReadProcessMemory(htarget,(void *)start,onepagebuf,si.dwPageSize,NULL);
fp.write(onepagebuf,si.dwPageSize);
}
}
cout<<"done\n";
CloseHandle(htarget);
fp.close();
delete []onepagebuf;
system("pause");
return 0;
}新电脑没装VC,欢迎翻译成VB!~ VB变态应用之"移花接木",陈辉原创(VB6.0)
这是VB6的远程执行函数的封装,你注入WORD再执行看看 没人了》???我苦等10多天~!~ 顶 支持
页:
[1]