|
[原创]第二阶段第二题解答
nnd,刚才好不容易都写好了,提交之后居然连不上了,写得内容还没保存 因此先把程序提交,然后再写内容。 5、内核相关: 5.1、恢复SDT:首先使用ZwQuerySystemInformation找到内核文件,然后在该文件中查找KeServiceDescriptorTable,进而找到KiServiceTable的原始NtOpenProcess的地址,然后通过\\Device\\PhysicalMemory设备来修改SDT回到原始数据。 (10) ZwQuerySystemInformation(SystemModuleInformation) -> CreateFile -> ReadFile -> LookUp KeServiceDescriptorTable -> Got NtOpenProcess Index&Entry -> NtOpenSection("\\Device\\PhysicalMemory") -> NtMapViewOfSection -> Restore NtOpenProcess Orignal Entry -> TerminateProcess 5.2、patch Crackme.sys: 因为Driver得地址空间在R3下很难准确定位到一个物理地址。因此采用代码搜索的方式,来在物理内存中查找相应的地址。只要以4K的页大小为单位查找即可,最大查询次数为0xFFFFF。 (11) NtOpenSection("\\Device\\PhysicalMemory") -> NtMapViewOfSection -> Search Pattern -> Got Crackme.sys Address -> patch Crackme.sys -> TerminateProcess patch方法:搜索0xXXXXX71D地址,搜索数据是0x137501E0,然后把75 13 改成 EB 6D。 只要保证OpenProcess没有存取权限的限制,结束进程的方法就可以像上面提到的进程和线程相关的方法,这里只是实现了一种。 |
|
|
|
[结束][第二阶段◇第二题]看雪论坛.珠海金山2007逆向分析挑战赛
提交了用户态下的几种方法。 |
|
[原创]第二阶段第二题解答
进一步优化,让覆盖多28个字节,最少只能也只能是28个字节。找到合适的前8个字节数据,转换后的指令不是EB 7C了,而是7B 72,是个JNP指令。 此时CPU的P标志是1,这个指令不会跳转。多出的28个字节必须用0填充,恰好VirtualAlloc分配的内存初始都是0,这样0就不需要写在文件里了。因此可以优化到最小尺寸51个字节。 |
|
|
|
|
|
|
|
|
|
看雪论坛翻译的《程序员密码学》由华章公司发行
上一个原版的 |
|
|
|
[推荐]UPX V2.93
这个版本的brute功能有bug. |
|
|
|
探讨ECC加密被破译的可能性---看雪学院2006金秋读书季[讨论]
指出两点错误: 1、算私钥不需要穷举 2、基于DLP(ECDLP)的签名算法不但私钥很重要,而且还有一个重要的随机数。上文分析就漏了这个重要的随机数,也就是r。如果这个随机数是固定的,直接就可以算出私钥。 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值