在线等,一段完成的东西出问题了,麻烦看看。

zxsean 2009-07-24 11:51:18
在线等朋友解决
补充:邮箱zxsean@126.com
475708896@qq.com


问题如下,1:我使用vc的源码转换思路用vb写,在这里朋友的帮助下完成了99.9%现在有一个地方无法完成【在源码中已经用'隔开】

2:VC编辑出来的程序能够正常使用DEBUG命令暂停程序,读取堆栈,继续程序,可以我用VB写出来以后就无法实现。

3:我VB是为了做这个东西才赶着学的,如果大家看到我的源码中有低级错误,请指出。

4:希望大家有时间的可以帮忙改改我的错误,因为源码就只有几十行的样子。而且很多行完全一样。。。就是重复调用。

5:今天时间比较充裕,在线等大家。

6: 附件中带了2个程序的源码。其中源码中的XXXX代指程序。

源码上传网盘:http://good.gd/206422.htm
以上是下载链接。
...全文
170 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独剑_LPZ 2009-07-26
  • 打赏
  • 举报
回复
楼主给的工程缺少form1.frm和Module1.bas,再重新给个全的
zxsean 2009-07-25
  • 打赏
  • 举报
回复
楼上朋友可以帮忙修改下我写的vb码吗??
zxsean 2009-07-25
  • 打赏
  • 举报
回复
没人了……囧
zxsean 2009-07-25
  • 打赏
  • 举报
回复
不会vc做界面…………
zxsean 2009-07-25
  • 打赏
  • 举报
回复
话说楼上每次都路过…………不厚道
zxsean 2009-07-25
  • 打赏
  • 举报
回复
自己路过。。
波导终结者 2009-07-25
  • 打赏
  • 举报
回复
以前用VB6写过一个游戏修改器的,看起来和你的代码很像,不过代码找不到了。有VC的源码为什么还要用VB写呢?
zxsean 2009-07-25
  • 打赏
  • 举报
回复
以下是vb公有声明
Public Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * 260
End Type
Public Type THREADENTRY32
dwSize As Long
cntUsage As Long
th32ThreadID As Long
th32OwnerProcessID As Long
tpBasePri As Long
tpDeltaPri As Long
dwFlags As Long
End Type


Public Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long

zxsean 2009-07-25
  • 打赏
  • 举报
回复
GOOD地址我没问题。。。
// kashkack.cpp : Defines the entry point for the console application.
//6F3AE20C ESI+4
//LEA EDI,DWORD PTR SS:[ESP+20]
//8D7C24 20

#include "stdlib.h"
#include "iostream.h"
#include "windows.h"
#include "tlhelp32.h"
#include "conio.h"

#define XXXX_BREAK_ADDRESS 0x6F3AE20C
#define XXXX_BREAK_ADDREST 0x6F3AE210
#define BREAK_OPEN 0x401

int main(int argc, char* argv[])
{
system("color 6");
cout<<"Test"<<endl;

//提升本程序权限使其能获取PID
HANDLE hcurrent=GetCurrentProcess();
HANDLE hToken;
BOOL bret=OpenProcessToken(hcurrent,TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken);
LUID luid;
bret=LookupPrivilegeValue(NULL,"SeDebugPrivilege",&luid);
TOKEN_PRIVILEGES NewState,PreviousState;
DWORD ReturnLength;
NewState.PrivilegeCount =1;
NewState.Privileges[0].Luid =luid;
NewState.Privileges[0].Attributes=2;
bret=AdjustTokenPrivileges(hToken,FALSE,&NewState,28,&PreviousState,&ReturnLength);
CloseHandle(hToken);
//寻找窗口
HWND hwar3=::FindWindow(NULL,"xxxx");
if (!hwar3)
{
MessageBox(0, "Run xxxx First!", "", MB_OK);
return false;
}
else
cout<<"寻找xxxx窗口成功!"<<endl;

//获取PID
DWORD PID, TID;
TID = ::GetWindowThreadProcessId (hwar3, &PID);

//打开进程以供编辑
HANDLE hopen=OpenProcess( PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE,FALSE,PID);
if (!hopen)
{
MessageBox(0, "Can't Openxxxx!", "", MB_OK);
return false;
}
else
cout<<"打开xxxx进程成功!"<<endl;

if (!DebugActiveProcess(PID))
{
MessageBox(0, "Can't debug!", "", MB_OK);
return false;
}
DEBUG_EVENT DebugEv;
DWORD dwContinueStatus;
bool key=true;
bool breakdone=false;
int number=0;

unsigned char p6F3AE20C[2]={0xCC,0xCC};
unsigned char pold[2]={0x8D,0x7C};



while(key)
{
if(WaitForDebugEvent(&DebugEv, 10))
{
dwContinueStatus = DBG_EXCEPTION_NOT_HANDLED;
switch(DebugEv.dwDebugEventCode)
{
//case 1 open prosess==================================================================
case CREATE_PROCESS_DEBUG_EVENT:
{
HANDLE hSnapshot = NULL;
THREADENTRY32 ThreadInfo = { sizeof(THREADENTRY32) };

hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, NULL);
if(hSnapshot>0)
{
if(Thread32First(hSnapshot, &ThreadInfo))
{
do
{
if(ThreadInfo.th32OwnerProcessID==PID)
{
//printf("%08x %08x\n", ThreadInfo.th32ThreadID, ThreadInfo.th32OwnerProcessID);

HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, ThreadInfo.th32ThreadID);
SuspendThread(hThread);

CONTEXT Regs = {0};
Regs.ContextFlags = CONTEXT_DEBUG_REGISTERS; //CONTEXT_DEBUG
::GetThreadContext(hThread, ®s);

Regs.Dr0 = WAR3_BREAK_ADDRESS;
Regs.Dr7 = BREAK_OPEN;

::SetThreadContext(hThread, ®s);

ResumeThread(hThread);
CloseHandle(hThread);
}
}while(Thread32Next(hSnapshot, &ThreadInfo));
}
CloseHandle(hSnapshot);
}


cout<<"附加进程成功!\n";

break;
}
//case 2 exception
case EXCEPTION_DEBUG_EVENT:
{
if((DWORD)DebugEv.u.Exception.ExceptionRecord.ExceptionAddress==XXXX_BREAK_ADDRESS)
{
number++;
HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, DebugEv.dwThreadId);
//cout<<DebugEv.dwThreadId<<endl;
SuspendThread(hThread);
CONTEXT Regs = {0};
Regs.ContextFlags = CONTEXT_DEBUG_REGISTERS|CONTEXT_INTEGER;
::GetThreadContext(hThread, ®s);
Regs.Esi=Regs.Esi+9;
Regs.Dr0=WAR3_BREAK_ADDREST;
Regs.Dr7=BREAK_OPEN;
::SetThreadContext(hThread, ®s);
ResumeThread(hThread);
CloseHandle(hThread);
}
if((DWORD)DebugEv.u.Exception.ExceptionRecord.ExceptionAddress==xxxx_BREAK_ADDREST)
{
HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, DebugEv.dwThreadId);
SuspendThread(hThread);
CONTEXT Regs = {0};
Regs.ContextFlags = CONTEXT_DEBUG_REGISTERS|CONTEXT_INTEGER;
::GetThreadContext(hThread, ®s);
Regs.Dr0=XXXX_BREAK_ADDRESS;
Regs.Dr7=BREAK_OPEN;
::SetThreadContext(hThread, ®s);
ResumeThread(hThread);
CloseHandle(hThread);
}
dwContinueStatus = DBG_CONTINUE;
break;
}

//case 3 exit
case EXIT_PROCESS_DEBUG_EVENT:
{
cout<<"Case 3"<<endl;
return 0;
break;
}
//case end
}
}
ContinueDebugEvent(DebugEv.dwProcessId, DebugEv.dwThreadId, dwContinueStatus);
}

return 0;
}

zxsean 2009-07-25
  • 打赏
  • 举报
回复
网盘地址?楼上的朋友介意留下邮箱吗?
zxsean 2009-07-25
  • 打赏
  • 举报
回复
再囧一个……
嗷嗷叫的老马 2009-07-25
  • 打赏
  • 举报
回复
路过.

你的那地址确认没问题?

我这里无法进行正确的DNS解析.
zxsean 2009-07-25
  • 打赏
  • 举报
回复
在网盘下载。太长了
bigriverhorse 2009-07-25
  • 打赏
  • 举报
回复
楼主的VB代码呢?
贝隆 2009-07-24
  • 打赏
  • 举报
回复
帮顶
zxsean 2009-07-24
  • 打赏
  • 举报
回复
http://good.gd/206422.htm
再发一次源码下载链接

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧