|
[求助]弱弱的问下,这是哪国语言?
应该是中文。。。 |
|
[求助]给 OD 的所有CMP 指令下断
OD查找指令,找到第一个以后可以用 Ctrl + L 查找下一个。 我试着用脚本写了一个自动查找的,不过不知道怎么判断当前指令长度。ASM命令只能返回输入的汇编指令长度,不能返回原有的指令长度,难道要自己分析 ModR/M 和 SIB 里面的编码?太麻烦了,写了一半放弃了。。。 |
|
[求助]請教一下,關於游戲修改問題
用金山游侠试试。 |
|
[求助]userdb是用来干什么的?
好像是用来自己定义壳的签名的。原来没有的签名可以在这里加。比如你自己写个壳,开头是AA BB CC DD,你加到里面,下次PEiD就能认出来你写的壳了。 |
|
怎么理解DLL被注入呢?
每种毒的毒性都不一样,不能一概而论啊。可以看看别人的病毒分析。病毒这玩意儿,中了还挺痛苦的,俗话说得好:祖传牛皮癣,专治老中医。 |
|
[求助]在劫持DLL过程中如何取得函数的参数
12楼的下载就是完整的代码。我测过,没问题啊。不过我当时只是做学习,只用FlashFXP等软件测过,能记录下来,不过如果你的测试软件通讯量比较大,或者有多线程(像FlashGet,Bitcomet等等),那我就没测过了,我觉得应该会很卡。至于你说的错误提示,你怎么改的recv()?最后用什么软件做的测试? |
|
[分享]某软件的完整源代码,vc6工程
楼主真有耐心,发了快一个月了。 |
|
|
|
[求助]一个软件1.16M用Upx脱壳后2.18M然后弹框
人家作者都点明了别做坏事了,看来挺在意这件事。你就支持一下人家吧,别搞了 |
|
[求助]请教DLL文件修改后存回调用?????
直接用OD修改,保存到可执行文件,然后保存到你的程序目录。如果你的程序没有指定系统目录的那个dll,应该可以劫持成功吧。 |
|
|
|
[求助]使用什么工具可以监控cup
恩,目测cup |
|
[求助]问个OD的搜索功能问题
选中 004347F0 /$ 55 push ebp 这一行,然后按 Ctrl + R,就会列出所有对此的引用 |
|
[求助]在劫持DLL过程中如何取得函数的参数
在开头加入 #include <winsock2.h> 就行了 或者自己定义 typedef void (CALLBACK * LPWSAOVERLAPPED_COMPLETION_ROUTINE)( IN DWORD dwError, IN DWORD cbTransferred, IN LPWSAOVERLAPPED lpOverlapped, IN DWORD dwFlags ); |
|
[求助]在劫持DLL过程中如何取得函数的参数
我暂时不上QQ,就在这里说吧,顺便发一下代码把,其实没有技术含量,只要读了看雪上面那个《加密解密第三版》那个样章,大家都能做。。。 VC2005的工程文件,用VC6的,重建一个,把cpp文件导进去就行了 ws2_32.zip |
|
[求助]在劫持DLL过程中如何取得函数的参数
// 导出函数 #pragma comment(linker, "/EXPORT:accept=_AheadLib_accept,@1") #pragma comment(linker, "/EXPORT:bind=_AheadLib_bind,@2") #pragma comment(linker, "/EXPORT:closesocket=_AheadLib_closesocket,@3") #pragma comment(linker, "/EXPORT:connect=_AheadLib_connect,@4") #pragma comment(linker, "/EXPORT:getpeername=_AheadLib_getpeername,@5") #pragma comment(linker, "/EXPORT:getsockname=_AheadLib_getsockname,@6") #pragma comment(linker, "/EXPORT:getsockopt=_AheadLib_getsockopt,@7") #pragma comment(linker, "/EXPORT:htonl=_AheadLib_htonl,@8") #pragma comment(linker, "/EXPORT:htons=_AheadLib_htons,@9") #pragma comment(linker, "/EXPORT:ioctlsocket=_AheadLib_ioctlsocket,@10") #pragma comment(linker, "/EXPORT:inet_addr=_AheadLib_inet_addr,@11") #pragma comment(linker, "/EXPORT:inet_ntoa=_AheadLib_inet_ntoa,@12") #pragma comment(linker, "/EXPORT:listen=_AheadLib_listen,@13") #pragma comment(linker, "/EXPORT:ntohl=_AheadLib_ntohl,@14") #pragma comment(linker, "/EXPORT:ntohs=_AheadLib_ntohs,@15") #pragma comment(linker, "/EXPORT:recv=_AheadLib_recv,@16") #pragma comment(linker, "/EXPORT:recvfrom=_AheadLib_recvfrom,@17") #pragma comment(linker, "/EXPORT:select=_AheadLib_select,@18") #pragma comment(linker, "/EXPORT:send=_AheadLib_send,@19") #pragma comment(linker, "/EXPORT:sendto=_AheadLib_sendto,@20") #pragma comment(linker, "/EXPORT:setsockopt=_AheadLib_setsockopt,@21") #pragma comment(linker, "/EXPORT:shutdown=_AheadLib_shutdown,@22") ... 程序开始声明了 DWORD m_dwReturn[500] = {0}; // 原始函数返回地址 用来存放返回地址,按照导出列表 recv() 排16,send()排19,因为数组是0开始的,所以各减了1,就成了15和18。 我当时做这个的时候只是记录发送和接受的数据,所以只修改了send(), sendto(), recv(), recvfrom(), WSASend(), WSASendTo(), WSARecv(), WSARecvFrom(),内容基本都差不多。我也是照着上面那个地址里的例子做的,他讲得挺详细的。其他的dll我就没做过了。 |
|
[求助]内联汇编的问题
按照提示改就行了 lea EDX,offset[name] 改成 lea EDX,name ADD dword ptr[EBP-3C],EDX 改成 ADD dword ptr[EBP-0x3C],EDX 把里面所有的16进制前面都加上0x EBP_3C 没有定义 JGE k4n2.0040122F,这里看情况,自己写一个Label,然后改一下,让他跳到那个Label |
|
[求助]在劫持DLL过程中如何取得函数的参数
晕,我写错了,实在是不好意思。 如果可以的话,你可以把变量定义到函数外面。我当时是在Class里面多定义了几个成员变量,用它们存的。 在函数里面定义变量会破坏堆栈,因为这样编译出来,会变成 mov dword ptr [ebp-xx],eax 的形势,而这里刚进来的时候没有 push ebp 和 mov ebp, esp。 这个是我以前用 AheadLib 改的一个例子,拿send() 和 recv() 举个例子吧,调用原函数前后的操作。红色是我自己加的,其他的是自动生成就有的。这个我以前测试过,没问题。 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // AheadLib 命名空间 namespace AheadLib { HMODULE m_hModule = NULL; // 原始模块句柄 DWORD m_dwReturn[500] = {0}; // 原始函数返回地址 [COLOR="Red"]LPVOID m_ptrBuffer = 0; DWORD m_size = 0; HANDLE m_hFile = NULL; DWORD m_byteCount = 0;[/COLOR] // 加载原始模块 inline BOOL WINAPI Load() { TCHAR tzPath[MAX_PATH]; TCHAR tzTemp[MAX_PATH * 2]; GetSystemDirectory(tzPath, MAX_PATH); lstrcat(tzPath, TEXT("\\ws2_32")); m_hModule = LoadLibrary(tzPath); if (m_hModule == NULL) { wsprintf(tzTemp, TEXT("无法加载 %s,程序无法正常运行。"), tzPath); MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP); } [COLOR="red"]m_hFile = CreateFile("MyLog.log", GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_ALWAYS, 0, 0); if (m_hFile == INVALID_HANDLE_VALUE) MessageBox(NULL, "Can not open log file!", "ws2_32.dll", MB_ICONSTOP); else { SetFilePointer(m_hFile, 0, 0, FILE_END); WriteFile(m_hFile, TEXT("========== START ===========\r\n"), 30, &m_byteCount, 0); FlushFileBuffers(m_hFile); }[/COLOR] return (m_hModule != NULL); } // 释放原始模块 inline VOID WINAPI Free() { if (m_hModule) { FreeLibrary(m_hModule); } [COLOR="red"]if (m_hFile) { WriteFile(m_hFile, "=========== END ============\r\n", 30, &m_byteCount, 0); WriteFile(m_hFile, m_ptrBuffer, m_size, &m_byteCount, 0); FlushFileBuffers(m_hFile); CloseHandle(m_hFile); }[/COLOR] } // 获取原始函数地址 FARPROC WINAPI GetAddress(PCSTR pszProcName) { FARPROC fpAddress; CHAR szProcName[16]; TCHAR tzTemp[MAX_PATH]; fpAddress = GetProcAddress(m_hModule, pszProcName); if (fpAddress == NULL) { if (HIWORD(pszProcName) == 0) { wsprintf(szProcName, "%d", pszProcName); pszProcName = szProcName; } wsprintf(tzTemp, TEXT("无法找到函数 %hs,程序无法正常运行。"), pszProcName); MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP); ExitProcess(-2); } return fpAddress; } } using namespace AheadLib; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 导出函数 ALCDECL AheadLib_send(void) { // 保存返回地址 __asm POP m_dwReturn[18 * TYPE long]; [COLOR="red"]__asm { push eax mov eax, [esp+8] mov m_ptrBuffer, eax mov eax, [esp+12] mov m_size, eax } if (m_hFile != INVALID_HANDLE_VALUE) { WriteFile(m_hFile, TEXT("---------- send() ----------\r\n"), 30, &m_byteCount, 0); WriteFile(m_hFile, m_ptrBuffer, m_size, &m_byteCount, 0); FlushFileBuffers(m_hFile); } __asm pop eax[/COLOR] // 调用原始函数 GetAddress("send")(); // 转跳到返回地址 __asm JMP m_dwReturn[18 * TYPE long]; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 导出函数 ALCDECL AheadLib_recv(void) { // 保存返回地址 __asm POP m_dwReturn[15 * TYPE long]; [COLOR="red"]__asm { push eax; mov eax, [esp+8] mov m_ptrBuffer, eax mov eax, [esp+12] mov m_size, eax pop eax }[/COLOR] // 调用原始函数 GetAddress("recv")(); [COLOR="red"]__asm push eax if (m_hFile != INVALID_HANDLE_VALUE) { WriteFile(m_hFile, "---------- recv() ----------\r\n", 30, &m_byteCount, 0); WriteFile(m_hFile, m_ptrBuffer, m_size, &m_byteCount, 0); FlushFileBuffers(m_hFile); } __asm pop eax[/COLOR] // 转跳到返回地址 __asm JMP m_dwReturn[15 * TYPE long]; } |
|
[结束][第一阶段◇第二题]看雪论坛.腾讯公司2008软件安全技术竞赛
做题时间是什么?从12:00算起?分钟? |
|
[求助]用什么工具可以方便查看dll和exe中每个导出函数的地址,汇编代码呀
用VC里面的depends.exe就行了 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值