C++ 嵌套汇编

langzi8818 2008-07-28 02:03:48
http://topic.csdn.net/u/20080724/00/4b2af10a-af3d-4e75-acb5-bd8e108e933a.html
上个帖子可能我没有把事情说清楚。现在另外开贴。上贴将结贴给各位参与者,谢谢大家

我有三个程序,
1:要被注入的程序。TEST.EXE。里面定义了一个类函数Test()
void CTextDlgDlg::Test()
{
MessageBox(m_strRes, "1234565");
}

这个函数调用了下,便于找函数地址
void CTextDlgDlg::OnButton1()
{
// TODO: Add your control notification handler code here
int n = TCYAdd();
m_strRes.Format("%d", n);
Test();
//UpdateData(FALSE);
}
Test的地址为00401570,通过OD找到。
00401541 8BF1 MOV ESI,ECX
00401543 E8 5A040000 CALL <JMP.&FunDll.#1>
00401548 50 PUSH EAX
00401549 8D46 60 LEA EAX,DWORD PTR DS:[ESI+60]
0040154C 68 20304000 PUSH TextDlg.00403020 ; ASCII "%d"
00401551 50 PUSH EAX
00401552 E8 5D020000 CALL <JMP.&MFC42.#2818>
00401557 83C4 0C ADD ESP,0C
0040155A 8BCE MOV ECX,ESI
0040155C E8 0F000000 CALL TextDlg.00401570
00401561 5E POP ESI ; TextDlg.004022F8
00401562 C3 RETN

2:注入程序,HOOK.EXE。他调用CreateRomoteThread传入DLL名字和LoadLibary函数地址,达到把一个DLL注入到Test.exe中去
3:要注入的DLL。HOOK.DLL。

现在注入成功了。因为HOOK.DLL会被调用,于是我想在HOOK.DLL被调用加载时,根据上面OD找到的函数地址CALL下。
BOOL CHOOKDllApp::InitInstance()
{
AfxMessageBox("DLL Load Success");

int p = Ox00401570;
__asm
{
CALL p;
}

AfxMessageBox("Call End");
return CWinApp::InitInstance();
}
但是没有反应,执行到CALL P后,AfxMessageBox("Call End"); 没有调用到。不知道为什么,希望大家给点思路指点下,我的思路是否对?如果思路对,那么哪里写错误?如果思路不对,如何达到这个效果?初次内嵌汇编。

想法:
1:既然DLL被进程加载进去了,那么因该在同一进程中,直接CALL 地址,应该可以
2:因为这个函数没有参数(THIS除外),所以CALL前应该不必PUSH什么。

...全文
95 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
langzi8818 2008-07-28
  • 打赏
  • 举报
回复
是我地址搞错了。结贴
rageliu 2008-07-28
  • 打赏
  • 举报
回复
1。od加载,去Ox00401570地址看看,是否是test函数,确定地址正确
2。既然不需要this指针,那就不管ecx,这样试试:
pushad
mov eax, Ox00401570;
call eax;
popad

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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