首页
社区
课程
招聘
第二阶段: 第二题:Patch的方法
2007-9-1 17:57 6998

第二阶段: 第二题:Patch的方法

2007-9-1 17:57
6998
Patch的方法:

1. 得到CrackMer 的ZwOpenProcess入口
   pCrackMe = KeServiceDescriptorTable.ServiceTableBase[*(PLONG) ((PUCHAR)ZwOpenProcess +1)]
   
2. 将 pCrackMe+0x77处的判断清空
   *(pCrackMe+0x77) = 0x90;
   *(pCrackMe+0x78) = 0x90;
   
3. 用普通的TerminateProcess杀掉  

4. 注: 要求CrackMeApp.exe已经运行,否则运行kill1.exew会导致系统崩溃

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
benzeng 2007-9-1 17:58
2
0
ZwTerminateProcess方法:

在KillDrv.sys中:
NtQuerySystemInformation -> PsLookupProcessByProcessId -> NtOpenProcess -> ZwTerminateProcess
上传的附件:
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
benzeng 2007-9-1 17:59
3
0
欺骗CrackMe.sys方法:

因为CrackMe.sys只保护一个Process ID, 通过KillDrv调用CrackMe的IO 0X830020C0,
使它保护一个无用的 Process ID,这样就可以使用一般的TerminateProcess杀掉CrackMeApp。

KillDrv:
ObReferenceObjectByName -> IoBuildSynchronousFsdRequest -> IoGetNextIrpStackLocation -> IoCallDriver

Kill1:
LoadKillDrv -> OpenProcess -> TerminateProcess
上传的附件:
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
benzeng 2007-9-1 18:00
4
0
PostMessage方法:
EnumWindows -> GetWindowText -> PostMessage(WM_QUIT)

(这种方法算不算数呀,如果不算数我也没有意见,呵呵)
上传的附件:
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
benzeng 2007-9-2 12:09
5
0
HOOK: MmIsAddressValid
然后在堆栈中查找:
(LONG)SYSTEMSERVICE(ZwOpenProcess) + ( 0x1173F - 0x11700 )
上传的附件:
游客
登录 | 注册 方可回帖
返回