|
|
[原创]驱动注入用户线程之跨session通知csrss之真正解决
翻了翻10年的老代码 #ifdef _WIN32 for(DWORD i = 0x1000; i < dwNtdllSize; ++i) { if(*((PBYTE)pvNtdllBase + i) == 0x8B) { if(*(PDWORD)((PBYTE)pvNtdllBase + i) == 0x340FD48B) { m_spvKisystemFastCall = (PVOID)((PBYTE)pvNtdllBase + i); if (m_pulCsrPortHandle) { break; } } } else if (*((PBYTE)pvNtdllBase + i) == 0x56) { if (*(PDWORD)((PBYTE)pvNtdllBase + i) == 0x35FF5656 && *(PWORD)((PBYTE)pvNtdllBase + i - 6) == 0x850F) { m_pulCsrPortHandle = *(PULONG*)((PBYTE)pvNtdllBase + i + 4); if (m_spvKisystemFastCall) { break; } } } } #endif 不知道这样好使不? 太久啦,记得好像createthread是不需要自己通知csrss的,BaseThreadStartThunk构造的妙就行(要复制到目标进程中). 但是创建进程必须自己通知. |
|
|
[求助帮扶] 让我们出点力帮助林版度过难关!(捐款名单见1楼)
祝林版早日康复! |
|
|
[原创]调戏:纯应用层的Anti本地调试器(1)
10年的时候用过这种办法 : 所有正常的线程,都要经过ntdll的那个点 插个桩,注册一个terminal port给保护线程. 然后每个线程结束的时候,保护线程会感知到线程结束,此时写入一个随机值到LastThreadExitStatus里面(注意这个地方要用驱动,但是还有其它ring3的地方可以用的办法自己去找找看把).同时校验这个值是不是自己写的,否则的话....这样StrongOd的anti anti attach功能是可以被检测的. 如果熟悉了一般线程创建的流程,还可以在csrss里面弄点代码. 反调试这东西还有很多坑可以挖的.但是话又说回来,弄个反调试老板会给你涨工资吗 |
|
|
[注意]2013年第二届全国网络与信息安全防护峰会(XDef2013)会议注册进行中(11.7截止)
支持 爱爆来武汉了啊 看能不能见见 |
|
|
|
|
|
[推荐]Parasoft c++Test 9.2 And concerto
我建了个c++test使用群 205785742 可以加进去交流下.这个软件的单元测试上手还是有一点难度的. |
|
|
[原创]再论C语言指针、地址、赋值的问题,又是一通“扯”
涉及到词法语法语义的东西都不用解释,因为标准就是这么定的,所以就行了. 这跟地址,指针,什么都没关系. |
|
|
[原创]恶意代码分析模板
顶乌龟大师 非常有用的的东西 |
|
|
[推荐]北京理工大学信息安全与对抗竞赛~欢迎参加
能注册成功,会有邮件自动发送给你用户名 密码 |
|
|
[推荐]北京理工大学信息安全与对抗竞赛~欢迎参加
下午实验室机房维修 出了点问题 现在可以了 |
|
|
[原创]针对某游戏保护DebugPort清零的一次逆向。
论坛里面有很多过debugport的办法,不过都是原理简单,实现复杂. 我还是激励下现在做TP以及其它有用debugport清零方案保护游戏的同学好了: 搜全局变量,改为其它的. |
|
|
[原创]自己定义Object Type对抗Object Hook
5楼的方法是经过验证的.(代码是经过精简放上来的,for中的代码不全). |
|
|
[求助]DLL隐藏之线程处理函数无法执行
看看LdrIntilizeThunk有没有被Hook. |
|
|
[原创]自己定义Object Type对抗Object Hook
Object hook 自己定义Process Type和Thread Type才是王道 如果是security就搞 checkobjectaccess,如果是open就搞incrementhandlecount.
template<>
class CObject<Win32Win7Sp0,32>:
public CObjectBase
{
bool PatchOpenProcedure(void* pvNtosBase,unsigned long ulSize) const
{
PUCHAR pucBase = static_cast<PUCHAR>(pvNtosBase);
KdPrint(("Find begin:%p\n",pucBase));
bool bRet = false;
for (unsigned long i = 0; i < ulSize; ++i)
{
if (*pucBase == 0xFF &&
*(pucBase + 1) == 0x74 &&
*(pucBase + 2) == 0x24 &&
*(pucBase + 3) == 0x1C &&
*(pucBase + 4) == 0xFF &&
*(pucBase + 5) == 0x75 &&
*(pucBase + 6) == 0x0C &&
*(pucBase + 7) == 0xFF &&
*(pucBase + 8) == 0x75 &&
*(pucBase + 9) == 0x14 &&
*(pucBase + 10) == 0xFF &&
*(pucBase + 11) == 0x75 &&
*(pucBase + 12) == 0x10 &&
*(pucBase + 13) == 0xFF &&
*(pucBase + 14) == 0x75 &&
*(pucBase + 15) == 0x18 &&
*(pucBase + 16) == 0xFF &&
*(pucBase + 17) == 0x75 &&
*(pucBase + 18) == 0x08 &&
*(pucBase + 19) == 0xFF &&
*(pucBase + 20) == 0x57 &&
*(pucBase + 21) == 0x5C)
{
//此处省略
bRet = true;
}
}
return bRet;
}
};
|
|
|
[原创]科锐三阶段项目---CreateProcess流程分析
楼主分析的不错. 给楼主的楼填一转头: 接着调用了BasepSxsCreateProcessCsrMessage函数,该函数的具体作用不是很清楚 BasepSxsCreateProcessCsrMessage在win32系统中,是从共享堆中申请内存,然后把sxs信息写进去,然后会在下面把这个消息(传递的是指针)传递给csrss(x64 wow中不是在共享堆),(sxs是什么搜索side-by-side assembly,可以理解为程序的mainifest). 一般写简单的createprocess demo(比如创建记事本,很多代码可以a)的时候会感觉这东西是没用的,但如果不把这个消息传递给csrss,创建带有mainifest的程序是会"应用程序初始化失败". 整个CreateProcess从ring3到ring0最复杂的一块就是与CSRSS的通信,主要原因是有些结构从任何地方都找不到完整的代码和文档可以a,各个系统都稍有不同,而且要做点手段才能调试. |
|
|
[原创]游戏保护大放送之TP
楼主再放点怎么阻止这种过保护方式的就能找到工作了。 比如:TP的保护,应该怎么增强。 看TP会不会立马来招安你。。。 过保护一般体现不出来水平,尤其是网上一堆代码可以a的情况下,相比而言,能把驱动写稳定的游戏公司会更想要。论坛也应该适当的做点产品方面的引导。 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
勋章
兑换勋章
证书
证书查询 >
能力值