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

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

2007-9-1 17:57
7195
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会导致系统崩溃

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
ZwTerminateProcess方法:

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

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

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

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

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