首页
社区
课程
招聘
[求助][求助]求大神帮萌新看看DLL代码,运行老是报堆栈损毁!DLL代码是逆向工程核心原理的示例代码!
发表于: 2017-6-14 23:41 3219

[求助][求助]求大神帮萌新看看DLL代码,运行老是报堆栈损毁!DLL代码是逆向工程核心原理的示例代码!

2017-6-14 23:41
3219

include <tchar.h>
#include <windows.h>

#pragma comment(lib,"urlmon.lib")
#define DEF_URL (L"f98K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2Z5j5h3)9I4x3U0y4Q4x3X3g2U0L8$3#2Q4x3V1k6A6L8X3c8W2P5q4)9J5k6h3S2@1L8h3H3`.")
#define DEF_FILE_NAME (L"index.html")

HMODULE g_hMod;

DWORD WINAPI ThreadProc(LPVOID lparam)
{
 TCHAR szPath[_MAX_PATH]={0,};

 if(!GetModuleFileName(g_hMod,szPath,MAX_PATH))
  return FALSE;

 TCHAR *p=_tcsrchr(szPath,'\\');

 if(!p)
  return FALSE;

 _tcscpy_s(p+1,_MAX_PATH,DEF_FILE_NAME);

 URLDownloadToFile(NULL,DEF_URL,szPath,0,NULL);

 return 0;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
 HANDLE hThread=NULL;
 g_hMod=(HMODULE)hinstDLL;

 switch(fdwReason){
  case DLL_PROCESS_ATTACH :
   OutputDebugString(L"myhack.dll Injection!!!");
   hThread=CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
   CloseHandle(hThread);
   break;
 }
 return TRUE;
}

错误提示

    

求大神解惑                

问题在 _tcscpy_s(p+1, _MAX_PATH, DEF_FILE_NAME);函数的第二个参数,第二个参数为整个数组的剩余的元素个数,该参数可以小于数组的实际数目但不能大于数组的实际数目。不然 _tcscpy_s()函数调用memset函数填充数组时会照成栈溢出把要验证的值给覆盖掉。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 201
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
_tcscpy_s(p+1,_MAX_PATH,DEF_FILE_NAME);这段代码有问题吧
p+1指向的内存肯定不是szPath的首地址啊  第二个参数为szPath的长度,这不是越界了么?
2017-6-15 00:10
0
雪    币: 40
活跃值: (128)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
  TCHAR  szPath[_MAX_PATH]={0,};中括号里有个逗号
2017-6-15 07:00
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
云里雾里 TCHAR szPath[_MAX_PATH]={0,};中括号里有个逗号[em_19]
逗号不是表明只初始化第一个元素吗?
2017-6-15 09:23
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
为谁留恋 _tcscpy_s(p+1,_MAX_PATH,DEF_FILE_NAME);这段代码有问题吧 p+1指向的内存肯定不是szPath的首地址啊 第二个参数为szPath的长度,这不是越界了么?
我试着改过指针,但是还是报错。用从网上找的源码试了下他的也是指针加一但是他的没报错。求大神解惑
2017-6-15 09:26
0
雪    币: 1790
活跃值: (4560)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
会不会是这里错误      TCHAR  szPath[_MAX_PATH]={0,};{}里多了个,导致只初始化了第一个元素。
对了,TCHAR  *p=_tcsrchr(szPath,'\\');这里的字符串要加L
2017-6-15 23:47
0
雪    币: 26
活跃值: (31)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
问题出在这句话:_tcscpy_s(p+1,_MAX_PATH,DEF_FILE_NAME);  p+1的话后面就不该是MAX_PATH,你也可以考虑直接:lstrcpy(p+1,  DEF_FILE_NAME); 
2017-6-16 09:23
0
雪    币: 1790
活跃值: (4560)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
萧柚 问题出在这句话:_tcscpy_s(p+1,_MAX_PATH,DEF_FILE_NAME); p+1的话后面就不该是MAX_PATH,你也可以考虑直接:lstrcpy(p+1, DEF_FILE_N ...
那里的确有问题,但是会造成这个原因吗?

实际内容:DEF_FILE_NAME  (L&quot;index.html&quot;)
GetModuleFileName(g_hMod,szPath,MAX_PATH)    结果应该是  C:\Windows\System32\notepad.exe
TCHAR  *p=_tcsrchr(szPath,'\\');      后p的值应该是C:\Windows\System32\的位置,再加上(L&quot;index.html&quot;)应该不会超过_MAX_PATH(260)吧。
除非_MAX_PATH是楼主自己定义的长度不足,其实楼主直接在函数开头加个MESSAGEBOX,然后用VS附加下notepad.exe,调试下直接就知道原因了。
2017-6-16 16:59
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
拍拖 那里的确有问题,但是会造成这个原因吗? 实际内容:DEF_FILE_NAME (L"index.html") GetModuleFileName(g_hMod,szPath ...
谢谢,萌新不怎么会用VS调试DLL。求大神给一些这方面的资料.
2017-6-17 08:08
0
雪    币: 8437
活跃值: (6358)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
_tcscpy_s(p+1,strlen(DEF_FILE_NAME),DEF_FILE_NAME);
2017-6-17 20:14
0
游客
登录 | 注册 方可回帖
返回