(看过觉得有用,帮留言一下,如果没有用我会在一天后删除)
本人没有上过电脑课,所有的东东都是东学一点西学一点,然后自己乱摸一点的.现在有一点点无意中的发现不知有没有用:
假设某个软件有一个加密函数A(参数1,参数2,参数3).现在只知有三个参数,而我有办法运行此软件后,动态的情况下,这个函数空间中加入一个线程,然后在这个线程中实现调用此加密码函数A,按软件要求进行加密.如某游戏的加密过程,只要知道了动作数据结构,那你就能实现了封包加密码过程并送到服务器去而服务器确认无误.(这里不需要什么库之类的东东),(当然也能在软件中插入你自己编写的函数.)
上述过程不知是不是网上到处都有的.如果有我就不去写这个过程了.如果没有就能试写一下.
(QQ是43004790或348858444,我不常上这里,希望与大家交个朋友)
附上实现代码:
DWORD ADDR_send=0x00521df0;//A函数首址
DWORD addmi_0=0x005decc4;//网络句柄
void addmi(DWORD a,DWORD b,DWORD c,DWORD d,DWORD e)//加密
{//a需要加密的数据b加密后保存的数据c加密长度d密钥终点e密钥起点
//基址是0x005deccc
DWORD zdx_eax,zdx_ebx,zdx_ecx,zdx_edx,zdx_esi,zdx_edi,zdx_1;
zdx_eax=e;
zdx_ebx=c;
zdx_ecx=d;
zdx_edx=0;
zdx_edi=d-0x20;
zdx_esi=zdx_edi-0x12430;
zdx_1=e-0xd;
_asm{
pushad
}
_asm{
mov eax,zdx_eax
mov ebx,zdx_ebx
mov ecx,zdx_ecx
mov edx,zdx_edx
mov edi,zdx_edi
mov esi,zdx_esi
push 1
push zdx_1
push e
push d
push c
push b
push a
CALL ADDR_send
add esp,0x1c
}
_asm{
popad
}
DWORD hProcId;
GetWindowThreadProcessId(HWND0,&hProcId);
HANDLE nOK = OpenProcess(PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATION|PROCESS_VM_READ|
PROCESS_VM_WRITE,FALSE,hProcId);
DWORD addmi_0_0,addmi_0_1;
ReadProcessMemory(nOK,(LPCVOID)(addmi_0),(LPVOID)&addmi_0_0,4,NULL);//得到加密址
ReadProcessMemory(nOK,(LPCVOID)(addmi_0_0+0x2004),(LPVOID)&addmi_0_1,4,NULL);//得到网络句柄
CloseHandle(nOK);
SOCKET m_hSocket;
m_hSocket=addmi_0_1;
send(m_hSocket,(char*)b,c,0);
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课