好友
阅读权限25
听众
最后登录1970-1-1
|
OD好像不能往上查找特征码,第次破解的时候,找到关键了,想从段首开始跟代码的时候,如果段首离关键地方太远,有时候要往上翻好久,一不小心,可能还会找错。于是乎自己写了个找段首的小工具。使用OD查找当前进程的PID,输入查找位置的起始位置,就能查到段首了。
软件原理:向上查找push ebp, mov ebp,esp的特征码。因此本软件只适用于段首是这个特征的段首,一般的VC是不适用的。
本人觉得这个量适合于VB程序。VB程序一般代码超长,看起来就累。
小菜不会写程序,大家别吐口水啊。
Lookup Start.rar
(100.28 KB, 下载次数: 285)
附上VC 6源码:
void CLookupStartDlg::OnButton1()
{
CString strpid;
m_PID.GetWindowText(strpid);
strpid.TrimLeft();
strpid.TrimRight();
CString strNowAdd;
m_NowAddr.GetWindowText(strNowAdd);
strNowAdd.TrimLeft();
strNowAdd.TrimRight();
MODULEENTRY32 ml={0};
ml.dwSize=sizeof(MODULEENTRY32);
int mbase=0;
BYTE duanshou[]={0x55, 0x8b, 0xec}; //PUSH EBP,MOV EBP,ESP的特征码
BYTE mbyte[255]={0};
DWORD pid;
pid=strtol((LPSTR)(LPCSTR)strpid,NULL,16);
DWORD nowaddr=strtol((LPSTR)(LPCSTR)strNowAdd,NULL,16);
HANDLE hsnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pid);
if (hsnap==INVALID_HANDLE_VALUE)
{
MessageBox("PID无效");
return;
}
else
{
Module32First(hsnap,&ml);
mbase=(int)ml.modBaseAddr;
}
HANDLE hprocess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
VirtualProtectEx(hprocess,ml.modBaseAddr,(DWORD)ml.modBaseSize,PAGE_EXECUTE_READWRITE,NULL);
ml.modBaseAddr=(unsigned char *)nowaddr;
while ((int)ml.modBaseAddr>mbase)
{
ReadProcessMemory(hprocess,ml.modBaseAddr,mbyte,3,NULL);
if (memcmp(mbyte,duanshou,3)==0)
{
CString strStarAddr;
strStarAddr.Format("%X",(DWORD)ml.modBaseAddr);
m_StartAddr.SetWindowText(strStarAddr);
return;
}
ml.modBaseAddr=ml.modBaseAddr-1;
}
}
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|