|
|
|
[求助]基地址的问题
每个WINDOWS程序都有独享的4GB内存,所以不同进程的0x00400000并不冲突。 |
|
|
|
[求助]PE文件中区块问题
可能是重定位问题。节应该不能随便移动的,移动以后里面的变量 函数都需要重定位。 |
|
[求助]在看PE文件结构中的问题!
对齐的意思就是把长度修改为对齐长度的整数倍。 比如一个段里面的数据长度是450h,对齐长度是200,那么这个450不能被200整除,如果把长度改为600就对齐了。 一般的算法是把长度模上对齐长度,如果有余数的话就把整除的结果加上1,然后乘以对齐长度,得到的就是对其以后的长度。 450%200==50 有余数说明没对齐 450/200==2 整除等于2 (2+1)*200=600 把整除得到的数加上1乘以对齐长度200,得到的就是对齐以后的长度,等于600. |
|
[讨论]学汇编太枯燥了
枯燥是必然的,要坚持住啊,要不就前功尽弃了 |
|
[北京]招聘 安全工程师 + 程序员
请问没有工作经验的新人是否有机会?我是学习网络安全的,刚走出校门。 |
|
[求助]如何得到PE文件的输入表.........
VirtualAddress是虚拟内存地址,而我们的文件并没有装入内存,所以需要的是文件偏移地址。必须把VirtualAddress转换为文件偏移才可以。下面是虚拟内存地址转换文件偏移的函数,其中pFileMap是文件指针,RVA是虚拟内存地址。 int RVAToOffset(char *pFileMap, DWORD RVA) { char *buff=pFileMap; int rva=RVA; IMAGE_DOS_HEADER *idh2; IMAGE_NT_HEADERS *inh2; IMAGE_SECTION_HEADER *ish2; idh2=(IMAGE_DOS_HEADER*)buff; inh2=(IMAGE_NT_HEADERS*)(buff+idh2->e_lfanew); int i=inh2->FileHeader.NumberOfSections; for(int j=0;j<i;j++) { ish2=(IMAGE_SECTION_HEADER*)(buff+idh2->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*j); if(rva>=(ish2->VirtualAddress)) { int off=ish2->VirtualAddress+ish2->SizeOfRawData; if(rva<off) { off=rva-ish2->VirtualAddress+ish2->PointerToRawData; return off; } } } return rva; } 有了这个函数以后就可以这样: IMAGE_NT_HEADERS *inh; IMAGE_EXPORT_DIRECTORY *ied; DWORD offset=RVAToOffset(buff,inh->OptionalHeader.DataDirectory[0].VirtualAddress); ied=(IMAGE_EXPORT_DIRECTORY *)(buff+offset); |
|
[求助]线性地址到物理地址的转换的一个问题
00201H就是查页目录表得出的,页目录表里放的是什么?应该就是这个值了。 |
|
[求助]SendMessage 最后一个参数的奇怪用法
SendMessage中的wparam和lparam并没有固定的作用,或者说没有指定要传递的值是什么。要根据具体的情况来判断这两个参数中的值是什么意思。 如cutcut说的,你看看WM_RBUTTONDOWN的消息响应函数中是怎么处理lparam的。既然作者说是一个内存地址,那就是个内存地址。不能因为在鼠标消息中它表示的是一个坐标信息,就判定这里也应该是坐标信息。 重点不在传递的是什么东西,而是消息响应函数中是怎么利用和处理这个值的。 |
|
[求助]关于PE文件中IMAGE_IMPORT_BY_NAME结构读取的疑问
我是使用C语言的文件操作函数写的,定位到字符串位置以后,用(char*)做一个强制类型转换,直接当成字符串指针访问就可以了。 |
|
[求助]如何把程序注册为系统服务
楼主可以参考下这个,下面是安装和卸载NT服务的函数,函数中安装的服务程序就是程序本身,如果你要安装其他程序的话稍作修改就行了。 网上有篇关于windows NT服务程序编程的文章,写的很好,楼主可以看看。 http://tieba.baidu.com/f?kz=137973986 这个是安装NT服务的函数: BOOL InstallService() { char strDir[1024]; SC_HANDLE schSCManager,schService; GetCurrentDirectory(1024,strDir); GetModuleFileName(NULL,strDir,sizeof(strDir)); char chSysPath[1024]; GetSystemDirectory(chSysPath,sizeof(chSysPath)); strcat(chSysPath,"\\WindowsMgr.exe"); if(!CopyFile(strDir,chSysPath,FALSE)) printf("Copy File OK\n"); strcpy(strDir,chSysPath); //打开service control manager database schSCManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if(schSCManager==NULL) { printf("open scmanger failed,maybe you do not have the privilage to do this\n"); return false; } LPCTSTR lpszBinaryPathName=strDir; schService=CreateService(schSCManager,"WindowsMgr","Windows Manger Control", SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, lpszBinaryPathName, NULL,NULL,NULL,NULL,NULL); if(schService==NULL) { printf("faint,we failed just because we invoke createservices failed\n"); return false; } CloseServiceHandle(schService); return true; } 这个是删除NT服务的函数: BOOL DeleteService() { SC_HANDLE schSCManager; SC_HANDLE hService; schSCManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); char chSysPath[1024]; GetSystemDirectory(chSysPath,sizeof(chSysPath)); strcat(chSysPath,"\\WindowsMgr.exe"); if (schSCManager == NULL) { printf("faint,open scmanger failed\n"); return false; } hService=OpenService(schSCManager,"WindowsMgr",SERVICE_ALL_ACCESS); if (hService == NULL) { printf("faint,open services failt\n"); return false; } if(DeleteFile(chSysPath)==0) { printf("Dell file Failure !\n"); return false; } else printf("Delete file OK!\n"); if(DeleteService(hService)==0) return false; if(CloseServiceHandle(hService)==0) return false; else return true; } |
|
[求助]一段socket代码似乎有问题。高手指教下。连接成功收不到消息
你的客户端和服务端在同一个进程中,最好分开写,把服务端和客户端分离。 要不会出现如Rootkitche所说的问题,程序本身好像没什么问题。 |
|
[求助]钩子的回调函数在哪个进程中执行?
钩子的回调函数是在消息本身的进程中执行的。 如果是局部钩子,那不用说,回调函数本身就在进程中。如果是全局钩子,回调函数在一个DLL中,在拦截的消息发生时系统会加载这个DLL到进程中。所以回调函数也就到了进程的地址空间。这也是为什么钩子经常被用作线程注入的原因。 |
|
[求助]关于PE文件中IMAGE_IMPORT_BY_NAME结构读取的疑问
这种定义是一种指针的变通用法。 既然文章中这么说,楼主可以把它当成指针使用。我用C语言写过这样的程序,访问函数名字的时候的确是用指针的方式访问的。 楼主为什么用ReadFile去访问函数名呢?函数名的地址定位了吗。如果定位了地址就直接用指针的方式去读取就行了。 |
|
[求助]汇编语言和c++语言的区别
汇编是低级语言,C++是面向对象的高级语言。 如果你两个都要学的话,建议先学C++,因为在有高级语言的基础下学习汇编会容易一些。如果你没有接触过任何语言就去学汇编的话,恐怕你很难坚持下去。 当然也不是一定要先学C++,如果你对自己有足够的信心的话,先学那个都无所谓,但是一定要坚持。 还有C++语言只有一种,通常说的不同的C++是指编译器或者开发环境不同,并不是有好几个版本的C++语言。 |
|
|
|
|
|
[讨论][讨论]学了两个月的破解,还是没有什么大的进展,晕~~
如果从零开始学破解的话,两个月入门基本是不可能的。如果有编程和底层基础的话可能会快一点。 要的学的东西比较多,而且比较难。要不破解怎么比较冷门呢 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值