|
[分享]射-->XP/2003/VISTA的简单INLINE HOOK
难道是传说中的HotPatch? |
|
[分享]新版MFC可以下载了.
beta ing... |
|
[求助]这算不算安全问题:学校图书馆主机限制ie上网
开机进入 安全方式 然后随便想个办法就行了. 如果安全方式的密码也进去不了,就是Administrator的默认用户 就用清除密码之类的纯DOS 工具通过光驱引导,如果有光驱 没有的话 USB总有吧,在BIOS里面设置一下启动选项,通过USB引导吧。 国内的图书馆居然限制IE 访问,纯粹脑壳有病,图书馆不拿来上网的哪来干嘛的. |
|
[分享]PEP2.55学习笔记
Bull |
|
|
|
[求助]请见多识广的大大赐教下
.........呵呵.其实这种应该算作是一种漏洞,可以归类为验证漏洞.早期的外挂包括现在的很多脱机都存在这个漏洞,但有预防和减少的趋势,因为如果堂而皇之的拿出来说,这种漏洞就会消失的更快,因为很多朋友因为自身利益的原因大多都不愿意公布出来,当然就算公布出来也很难等上台面来讲.拿我们现在的观点来看,就是缺乏技术价值.要知道破解外挂是一个完整的商业活动,其利润是很大的,也顺便发发牢骚,正因为如此,我发现在肉类涨价的大环境下依然存在着贬值的东西.算我火星两句吧.而破解外挂如果不通过找相关的验证漏洞来加以破解是很难的,而且效率也是很低的至少我这么认为,因为很多外挂更新速度很快.如果破解的速度跟不上就失去意义.其次要说难度大,其实也是客观存在的,引用论坛牛人的说法,会做外挂的人有几个不精通逆向技术,又有几个不精通C/C++.当然我这里指脱机,那种用按键精灵可以编写的内挂不再讨论的行列.当然这些人对VM的理解也算是很深的,必然他们做的外挂对于绝大多数人来将应该是难度很大的,毕竟这叫做知己知彼.常规方法早被堵上了,现在脱机有几个不是VM满天飞,Themida遍地跑?甚至很多还是私壳,当然这都是很题外很题外的东西了.要知道做破解外挂和做脱机外挂比起来.通常意义来讲后者远大于前者,我指通常.只是的我理解.因为当牛到一定层次的人,就自动飞升去做脱机了,呵呵.从而把外挂破解的难度进一步加大.因为这些多少都是猛牛.因为懂破解外挂的同行大多都因为彼此都是认识等原因而避而不谈,当然也有难度本身就大或者说懂得人时间少的只有一天25个小时. .而就逐渐形成了问如何破解外挂,或者说如何编写制作外挂,从而讨论破解,制作的却甚少.当然包括木马也是,这种也要用到很基本的逆向技术. 对于搂主的问题,我只是说LZ来晚了.[不排除我对时间认识不足].我对这个问题的认知大概是在传奇世界刚刚开始公测也就是 WY的CJB普及的时候认知的,距今多少也有好些年生了.......当然那个时候还不会一点点汇编语言,甚至编程语言,纯粹一个会玩游戏的人.花了几个小时,也许几天,从网上down了一个VB6.0的socket5 代理转发程序源代码,然后通过观察传奇世界的封包格式来达到"破解外挂的目的",当然当时有一个限制也是和楼主一样就是帐号和密码的长度必须和被CLone的正版外挂帐号的长度相一致.因为传奇世界没有用随机种子来作加密处理.这些都是后来才知道,当然之所以用socket 5的服务器端源代码是因为为了修改封包,只得利用好像叫做 e-board 来着一个代理客户端程序,挂SPI曾实现的封包拦截.当然这个软件目前很多挂国外游戏的工作室还在使用.又火星了......55 ,当然现在想想的确当时是很幼稚的,因为现在大家都可以玩的跟皮球桃似的APIHOOK,在当时我兴许还不知道HOOK 是啥,只是有点形象就是programmersolon 出售 HookAPi的LIB文件.800元一份? 忘了.而当时CJB所用的壳是非常厉害的.因为据我了解一直到1.92/1.93才有人公开了相应版本,当然当时好像工作室组织打钱的说法好像不怎么听说.外挂大家是私人玩家在使用,WY论坛每天的帖子貌似都可以以10万计.可能没有这么多,不小心火星一下.而现在想想当时的外挂,不要说VM,连代码变形这些都应该来说很少很少.仅仅是Anti一下Debugger然后再随随便便处理一下IAT.当时流行内核调试器貌似,Ring 3 调试器貌似很少.当然也就弹不上Anti的问题.者都是后来翻阅pediy的存档帖子才知道的. 只可惜等我知道汇编是啥东西的时候已经是 asprotect 横飞的年代了.当然对于forgXt来说随便什么XXprotector都是对他弹琴而已. 仅而感叹时间飞逝,,,吾已老矣...哎. 谁来拯救我呢? 以上纯属个人牢骚.建议没有闲心和想学知识的人都略过不看,以免伤眼球. |
|
[求助]如何在不关闭MessageBox的情况下解除对话框hWnd的锁定?
原理可以看 /*********************************************************************** * DIALOG_CreateIndirect * Creates a dialog box window * * modal = TRUE if we are called from a modal dialog box. * (it's more compatible to do it here, as under Windows the owner * is never disabled if the dialog fails because of an invalid template) */ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate, HWND owner, DLGPROC dlgProc, LPARAM param, BOOL unicode, BOOL modal ) { HWND hwnd; RECT rect; DLG_TEMPLATE template; DIALOGINFO * dlgInfo = NULL; DWORD units = GetDialogBaseUnits(); BOOL ownerEnabled = TRUE; HMENU hMenu = 0; HFONT hUserFont = 0; UINT flags = 0; UINT xBaseUnit = LOWORD(units); UINT yBaseUnit = HIWORD(units); /* Parse dialog template */ if (!dlgTemplate) return 0; dlgTemplate = DIALOG_ParseTemplate32( dlgTemplate, &template ); /* Load menu */ if (template.menuName) hMenu = LoadMenuW( hInst, template.menuName ); /* Create custom font if needed */ if (template.style & DS_SETFONT) { /* We convert the size to pixels and then make it -ve. This works * for both +ve and -ve template.pointSize */ HDC dc; int pixels; dc = GetDC(0); pixels = MulDiv(template.pointSize, GetDeviceCaps(dc , LOGPIXELSY), 72); hUserFont = CreateFontW( -pixels, 0, 0, 0, template.weight, template.italic, FALSE, FALSE, DEFAULT_CHARSET, 0, 0, PROOF_QUALITY, FF_DONTCARE, template.faceName ); if (hUserFont) { SIZE charSize; HFONT hOldFont = SelectObject( dc, hUserFont ); charSize.cx = GdiGetCharDimensions( dc, NULL, &charSize.cy ); if (charSize.cx) { xBaseUnit = charSize.cx; yBaseUnit = charSize.cy; } SelectObject( dc, hOldFont ); } ReleaseDC(0, dc); TRACE("units = %d,%d\n", xBaseUnit, yBaseUnit ); } /* Create dialog main window */ rect.left = rect.top = 0; rect.right = MulDiv(template.cx, xBaseUnit, 4); rect.bottom = MulDiv(template.cy, yBaseUnit, 8); if (template.style & WS_CHILD) template.style &= ~(WS_CAPTION|WS_SYSMENU); if (template.style & DS_MODALFRAME) template.exStyle |= WS_EX_DLGMODALFRAME; if (template.style & DS_CONTROL) template.exStyle |= WS_EX_CONTROLPARENT; AdjustWindowRectEx( &rect, template.style, (hMenu != 0), template.exStyle ); rect.right -= rect.left; rect.bottom -= rect.top; if (template.x == CW_USEDEFAULT16) { rect.left = rect.top = CW_USEDEFAULT; } else { if (template.style & DS_CENTER) { rect.left = (GetSystemMetrics(SM_CXSCREEN) - rect.right) / 2; rect.top = (GetSystemMetrics(SM_CYSCREEN) - rect.bottom) / 2; } else { rect.left += MulDiv(template.x, xBaseUnit, 4); rect.top += MulDiv(template.y, yBaseUnit, 8); } if ( !(template.style & WS_CHILD) ) { INT dX, dY; if( !(template.style & DS_ABSALIGN) ) ClientToScreen( owner, (POINT *)&rect ); /* try to fit it into the desktop */ if( (dX = rect.left + rect.right + GetSystemMetrics(SM_CXDLGFRAME) - GetSystemMetrics(SM_CXSCREEN)) > 0 ) rect.left -= dX; if( (dY = rect.top + rect.bottom + GetSystemMetrics(SM_CYDLGFRAME) - GetSystemMetrics(SM_CYSCREEN)) > 0 ) rect.top -= dY; if( rect.left < 0 ) rect.left = 0; if( rect.top < 0 ) rect.top = 0; } } if (modal) { ownerEnabled = DIALOG_DisableOwner( owner ); if (ownerEnabled) flags |= DF_OWNERENABLED; } if (unicode) { hwnd = User32CreateWindowEx(template.exStyle, (LPCSTR)template.className, (LPCSTR)template.caption, template.style & ~WS_VISIBLE, rect.left, rect.top, rect.right, rect.bottom, owner, hMenu, hInst, NULL, TRUE); } else { LPSTR class = (LPSTR)template.className; LPSTR caption = (LPSTR)template.caption; if (HIWORD(class)) { DWORD len = WideCharToMultiByte( CP_ACP, 0, template.className, -1, NULL, 0, NULL, NULL ); class = HeapAlloc( GetProcessHeap(), 0, len ); WideCharToMultiByte( CP_ACP, 0, template.className, -1, class, len, NULL, NULL ); } if (HIWORD(caption)) { DWORD len = WideCharToMultiByte( CP_ACP, 0, template.caption, -1, NULL, 0, NULL, NULL ); caption = HeapAlloc( GetProcessHeap(), 0, len ); WideCharToMultiByte( CP_ACP, 0, template.caption, -1, caption, len, NULL, NULL ); } hwnd = User32CreateWindowEx(template.exStyle, class, caption, template.style & ~WS_VISIBLE, rect.left, rect.top, rect.right, rect.bottom, owner, hMenu, hInst, NULL, FALSE); if (HIWORD(class)) HeapFree( GetProcessHeap(), 0, class ); if (HIWORD(caption)) HeapFree( GetProcessHeap(), 0, caption ); } if (!hwnd) { if (hUserFont) DeleteObject( hUserFont ); if (hMenu) DestroyMenu( hMenu ); if (modal && (flags & DF_OWNERENABLED)) DIALOG_EnableOwner(owner); return 0; } /* moved this from the top of the method to here as DIALOGINFO structure will be valid only after WM_CREATE message has been handled in DefDlgProc All the members of the structure get filled here using temp variables */ // dlgInfo = DIALOG_get_info( hwnd, TRUE ); if (!(dlgInfo = HeapAlloc( GetProcessHeap(), 0, sizeof(*dlgInfo) ))) return 0; SETDLGINFO(hwnd, dlgInfo); dlgInfo->hwndFocus = 0; dlgInfo->hUserFont = hUserFont; dlgInfo->hMenu = hMenu; dlgInfo->xBaseUnit = xBaseUnit; dlgInfo->yBaseUnit = yBaseUnit; dlgInfo->idResult = 0; dlgInfo->flags = flags; // dlgInfo->hDialogHeap = 0; if (template.helpId) SetWindowContextHelpId( hwnd, template.helpId ); if (unicode) SetWindowLongPtrW( hwnd, DWLP_DLGPROC, (ULONG_PTR)dlgProc ); else SetWindowLongPtrA( hwnd, DWLP_DLGPROC, (ULONG_PTR)dlgProc ); if (dlgInfo->hUserFont) SendMessageW( hwnd, WM_SETFONT, (WPARAM)dlgInfo->hUserFont, 0 ); /* Create controls */ if (DIALOG_CreateControls32( hwnd, dlgTemplate, &template, hInst, unicode )) { /* Send initialisation messages and set focus */ if (SendMessageW( hwnd, WM_INITDIALOG, (WPARAM)dlgInfo->hwndFocus, param ) && ((~template.style & DS_CONTROL) || (template.style & WS_VISIBLE))) { /* By returning TRUE, app has requested a default focus assignment */ dlgInfo->hwndFocus = GetNextDlgTabItem( hwnd, 0, FALSE); if( dlgInfo->hwndFocus ) SetFocus( dlgInfo->hwndFocus ); } if (template.style & WS_VISIBLE && !(GetWindowLongW( hwnd, GWL_STYLE ) & WS_VISIBLE)) { ShowWindow( hwnd, SW_SHOWNORMAL ); /* SW_SHOW doesn't always work */ } return hwnd; } if (modal && ownerEnabled) DIALOG_EnableOwner(owner); if( IsWindow(hwnd) ) DestroyWindow( hwnd ); return 0; } /* INTERNAL FUNCTIONS ********************************************************/ /*********************************************************************** * DIALOG_EnableOwner * * Helper function for modal dialogs to enable again the * owner of the dialog box. */ void DIALOG_EnableOwner( HWND hOwner ) { /* Owner must be a top-level window */ if (hOwner) hOwner = GetAncestor( hOwner, GA_ROOT ); if (!hOwner) return; EnableWindow( hOwner, TRUE );} |
|
[求助]如何在不关闭MessageBox的情况下解除对话框hWnd的锁定?
::EnableWindow(hWnd,TRUE) 我刚测试了一下,是可行的: #include "windows.h" #include "resource.h" DWORD WINAPI ThreadProc( LPVOID lpParameter ) { OutputDebugStringA("Thread Proc Startup ...."); HWND hWnd = (HWND)lpParameter; Sleep(2000); if(::EnableWindow(hWnd,TRUE) == FALSE){ OutputDebugStringA("Error On EnableWindow"); } return FALSE; } VOID CALLBACK WaitOrTimerCallback( PVOID lpParameter, BOOLEAN TimerOrWaitFired ) { if(TimerOrWaitFired == TRUE){ OutputDebugStringA("WaitOrTimerCallback Proc Startup ...."); HWND hWnd = (HWND)lpParameter; if(::EnableWindow(hWnd,TRUE) == FALSE){ OutputDebugStringA("Error On EnableWindow"); } return; } } INT_PTR CALLBACK DialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { BOOL bProcess = TRUE; switch(uMsg) { case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: case IDCANCEL: { ::PostQuitMessage(NULL); } break; case IDC_BUTTON_SHOWMSGBOX: { //::CreateThread(NULL,NULL,&ThreadProc,(LPVOID)hwndDlg,NULL,NULL); HANDLE hTimer; HANDLE hTimerQueue = NULL; hTimerQueue = ::CreateTimerQueue(); if(::CreateTimerQueueTimer( &hTimer, hTimerQueue, WaitOrTimerCallback, (LPVOID)hwndDlg, 2000, NULL, WT_EXECUTEDEFAULT ) == FALSE){ OutputDebugStringA("Error CreateTimerQueueTimer"); } ::MessageBoxA(hwndDlg,"Test Show Mode MessageBox","Testing",MB_ICONINFORMATION); if(hTimerQueue != NULL) ::DeleteTimerQueueEx(hTimerQueue,NULL); } break; } break; default: DefWindowProcA(hwndDlg,uMsg,wParam,lParam); bProcess = FALSE; } return bProcess; } void main(){ DialogBoxA(::GetModuleHandleA(NULL),MAKEINTRESOURCEA(IDD_DIALOG1),NULL,&DialogProc); } |
|
[通告]论坛被攻击的记录[2008.6.6再次被恶意攻击着]
根据以前玩Hack的经验.(我指比较常用的情况)这种攻击分为SYN 与 正常方式提交用以占用IIS(,可能是其他)的处理. 当然后者常用于工具虚拟主机,因为如果攻击独立主机,需要攻击者拥有相当多甚至是有相当质量的肉鸡. 而前者仅需一两台放在主干上的服务器 即可很方便的使得目标端口睹死,从而拒绝访问.当然偶以前更常用SYN,说点题外话.基本上百试百灵,哪怕是很多门户网站,只要最终的服务器不是太多的话,拥有相同带宽的攻击服务器与被攻击服务器即可很好的完成任务,当然要求攻击服务器的CPU够快.这一点一般4Xeon 配合 1000电信主干光纤就基本够用. 这两种攻击方式如果要从追查角度来讲.毫不客气地说就目前中国的现状SYN攻击是不可能查出来的,具体分析好像安全焦点有相关文章.我就不去多说了.除非你能够有权调用和修改各地ISP的路由,其可能性..就. 但是就pediy.com这种类型的工具,[猜测]应该是属于后者,即构造正常的数据包给HTTP 以造成服务器段脚本解析忙,或者数据库队列超时.,但我个人认为使用这种攻击方法的人,其实并不是什么高手.我只是凭经验来说,也不排除大牛养鸡的可能性.当然个人认为喜欢养鸡的人不外乎那一类人而已.开发这些工具的人我想是没有多少兴趣去养你几只鸡的. 而这种方式相对来说要好跟踪一些. 首先,因为所抓的肉鸡属于低质量高数量的那种,从而这种肉鸡的来源必然来自于某一种漏洞扫描以及木马植入软件.因此从这个角度来说,在虽然肉鸡的IP并不固定,但是在实施攻击的途中,必然会以正常的IP提交并建立连接,而此时正是反向入侵的好时机,由于程序都可以容易的把漏洞识别出来,相信各路英雄豪杰也不例外.只是做一种合理的假设,毕竟不知道现在的木马是否已经智能到植入木马以后自动封锁漏洞,下载补丁,是否以后也准备把主防也安装上?...... 假如一切按照预想的方向发展.此时我们就可以得到感染攻击木马的计算机的控制权,剩下的工作就是想办法把木马原始样本提取出来,然后交给IDA 的 F5.当然也不排除人肉反编译器比如forgXt,shoooo,之类的工具 . 之后就容易找到试图入侵者用于存放木马更新的FTP,或者空间地址,以及与攻击者的通信方式.采用直接控制方式的就很容易找到入侵者的IP,当然不排除用的被动模式,这也是一般模式,因为攻击者是ADSL或者内网的可能性比较大,为了照顾情绪,一般而言都是采用的被动方式.这种就需要动用社会工程学联系一下域名或者空间提供商,让其提供一下IP地址即可.当然这还不算晚.有经验的攻击者常常使用跳板,如果国内跳板还是好办得.相信各位英雄豪杰的社会能力,至于放在国外的,可能就要困难一点,尤其是匿名sock4/5代理. 话又说回来了,vbulletin应该提供discuz!的防攻击机制[也许有,我火星了也有可能.声明我不懂php].既然资源消耗大主要来自于数据库和脚本解析,那么是否可以考虑加一个验证码之类的?另外对于数据库查询间隔进行简单的判断. 对于一个非会员session建立一个全局对象,在首次登陆访问时必须输入验证码(具体还可以工具当前服务器负载决定是否开放).这个对于PHP应该也不复杂 估计也就是无限_include的问题.只是有一个坏处就是搜索引擎可能就无法正常搜索.虽然可以通过一些特定搜索引擎的关键字判断.但要判断这个实在是需要折中的一个解决方案.我感觉与其去追查source还不如搞defend.我想这一点hack 与crack既有相同点又有共同点. 因此我YY两局顺便说一下我的意见,虽然交公安机关是可以恐吓一下攻击者,但是客观来讲.......既然是搞攻击的人自然对于这种问题是有数的.因此为了避免不必要的新闻发布,我还是推荐更新一下平台,就如之前提过的这类解决方法一样.最后我在乌鸦两句,我认为vBulletin从各方面其实都没有Discuz!好,就包括防攻击等细节处理上.虽然pediy的确用了很多年vBulletin,但是我想有更好的东西还是应该考虑换一下.当然这个就是纯属XY了,仅仅是从攻击事件联想到的.比如Discuz!生成静态页面以后对这种问题有一个较好的优化作用. 欺骗这种攻击木马的方法很多,并非一点要用验证码,因为现在大多数攻击马只管发包,而不管之后的事情,也不具有动态脚本分析等的能力,因此诸如插入全局随机页面通过跳转来访问真实页面,甚至利用Js,页面载入以后比如发送一个标志给服务器,服务器才会返回真实页面信息....挂钩挂钩,不知道PHP有没有全局页面解析设置,就和aspx一样,弄一个全局过滤将后缀为aspx的简单过滤一下插入验证码,总之一切可以欺骗这种框刷新机的东西.甚至如果超过一定次数发现是'流量刷'.就可以考虑设置硬件路由或者防火墙把IP ban掉一定时间从而节约带宽. 注意:以上纯属个人意见,有错误或者不准确的地方都是客观存在的.别使我变成海王星就行了.火星也就够X了. 累死了..睡觉去. |
|
|
|
[求助]为什么现在没有usb接口音箱
个人觉得USB音响应该是可行的,但是音响内部应该有处理芯片负责把USB传来的数字信号转换为 模拟信号. 不知道目前有没有,但是没有的可能性是很大的,如果用通用CPU 成本又上去了.就是类似于带MP3播放的那种音响.[其实用ARM芯片其实也不贵,关键是还有整个硬件电路板的设计.其实就把可编程的Mp3改写一下说不定就可以用了] USB显示器可能性不大, 首先就是显示器不可能等待操作系统进入了加载了USB驱动再来输出显示 其次就是USB的带宽应该是不够的,当然USB3.0 也许就够了.如果也用数字方式,把视频压缩了再传给显示器解压,,,,,,,,,,,,,这还叫作显示器吗?... 纯属乱弹. |
|
[求助]一个壳折腾了好多天,大大们要不要试试手
找机机脱哦 前提是RP够好的话 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值