|
64位 call 32位?
这个比较难说,RP好的话工作量 = 0,RP不好够忙很久的…… 使用32位进程作为中继后,WOW64已经解决了大部分兼容性问题,对于指针传递,需要考虑到的问题如下: 1.32位DLL寻址范围只有4GB(假如内部有指针有效性检测代码的话,可能这个范围只有2GB)。 2.如果存在回调的话,反向调用又存在兼容性问题。 不知道回调涉及到哪些函数,这里只能给出简单的建议: 1.主程序中通过中继调用DLL的函数时只传递指向低2GB内存地址的指针。 2.利用MDL(Ring3下应该可以用FileMap)共享内存,避免调用指针。 不过预计还是得花大把的时间调试去研究回调,建议还是考虑下从整个程序架构的角度出发,试着把主程序分离成32位和64位两部分,同时运行两个进程。那些可能被回调的部分放在32位进程中,需要用到大内存或者64位运算的部分放在64位进程中。 |
|
64位 call 32位?
直接比较麻烦。 由于32位环境下返回地址是32位的,需要写驱动实现类似WOW64的功能,外部函数返回后作出处理再返回主程序,而64位下的驱动那蛋疼的数字签名问题…… 这里有个小思路:再建立一个32位进程,作为“中继”,所有调用32位函数的过程都通过它来完成,最后再通过各种进程间数据传递机制来实现。 这样性能损失可能会比较大,但方便。 |
|
求一条汇编指令:能判断一处内存的数据如果为假,就置成真。
假设标志存储在bool Flag中 or Flag,1 or mem,imm可以加上lock前缀锁总线以保证实现“原子操作” lock or Flag,1 不过我在Ring0的代码中有锁总线的行为时有时会导致BSOD,原因不明。 ====================分割线===================== 另外还是推荐LZ利用Windows提供的各种机制实现同步。内联汇编会带来无数麻烦…… |
|
谁有学习DLL 的教材
补充一下: 要了解相关内容,主要需要知道一些Windows系统原理的知识。 《Windows》核心编程基本局限于用户层(RING3),而《Windows内核原理与实现》偏重内核和操作。 建议主要通过这两本书了解Windows中进程、线程、内存方面的知识。另外可能还会涉及到PE文件格式相关的内容。 |
|
快疯了求帮助
额您说的俺也不是很理解,下面根据俺可能错误的理解来回复: 首先SSDT里的函数全部是Nt开头的(和R3的Native API对应),PsGetContextThread不会在SSDT中出现。不知道您的操作系统是哪个版本,不同版本SSDT号对应的函数会有差异。 或许是KD本身存在问题,可以先试试使用其它ARK工具(比如PCHunter,原Xuetr)之类的。 至于第一次回复中俺提出的方法,是通过使用WinDBG分析蓝屏转储文件来查看内核中各种数据/代码,此方法可以有效绕过不少反调试机制(比如TP会阻止WinDBG双机调试),首先参考微软的文章:http://msdn.microsoft.com/zh-cn/library/ff545499.aspx 设置好后就可以通过组合键在需要的时候生成内存转储文件(Dump file)。通过WinDBG分析转储文件,反汇编生成时的内核中的函数或者查看其它数据 |
|
|
|
快疯了求帮助
在函数头直接返回?!当然要出问题了,人家的函数没跑完就返回,很可能造成意外。或许TP对Kernel Detective之类的ARK采取了新的措施(不再直接非法或者BSOD)。 可以试试设置好DUMP后自己产生BugCheck,然后用WinDBG分析DUMP文件,查看该函数的反汇编代码 |
|
|
|
求教一下OD附加后按ALT+M得到的内存分布图
基本操作实现: Windows 内存管理API 对于LZ所描述的功能,大概实现思路如下: 得到目标进程的句柄和访问权限后,通过VirtualQueryEx()API(http://msdn.microsoft.com/en-us/library/windows/desktop/aa366907(v=vs.85).aspx)查询目标进程的内存属性。以小页(4KB)为单位,扫描所有目标进程用户地址空间内内存的属性(32位系统上未开启/3GB开关时为0-0x7fffffff,注意其中还有一些保留区域)。如果某页内存的属性不是free,该页内存的首地址就是LZ要的adress项,随后统计连续的属性不是free的页数量,size项即为得到的页数量*页尺寸。 推荐阅读相关资料: http://cxc200026.blog.163.com/blog/static/34268672008437130950/ 相关书籍: 《Windows核心编程》:详细讲解了Windows的各种API和相关信息 《Windows内核原理与实现》:以WRK为参考,讲解了Windows内核各方面的实现原理 另外《软件调试》一书详细介绍了和调试有关的各种机制和API。 |
|
如何绕过这个“在线学习防挂机”限制???
尝试禁用JS或者提高JS的安全等级 |
|
如何强制结束死掉的进程?
插入一个APC 通常情况下一个进程的所有线程的中断级(IRQL)都比APC低,插入一个APC后APC会抢占资源并执行,可以在APC中结束该进程。 请参考: http://hi.baidu.com/xgymcn/item/8637a7f1ed95840cd89e7285 http://hi.baidu.com/combojiang/item/0fe3485b6253140de7c4a53b http://www.programlife.net/apc-injection.html |
|
如何过360修改Hosts文件
R0下自己写文件…… |
|
读取license好像是在驱动中,如何解密啊
驱动也是PE格式的,只不过调试稍微复杂一些。内核中的程序出错很可能导致蓝屏,调试器也比OD复杂一些。 首先需要搭建好调试环境,本机调试可以使用SofitICE或者syser,不过不推荐这样(BSOD了很可能会造成数据损失),可以使用WinDBG进行双击调试。 方案1是再找一台调试机,通过USB/1394/串口连接,更经济的方案是用虚拟机,可以参考: http://hi.baidu.com/52hmily/item/7ebd1a0f74eeee38f2eafc77 如果硬件无力的话可能会比较慢,个人认为至少得Intel Pentium E2140 +2GB内存 |
|
关于PE文件对齐的问题
请注意PE文件中“节”的概念,对齐是以“节”为单位的 记得有本黄颜色封面的《PE格式详解》,还有看雪学院的《软件加密技术内幕》等书都讲到了PE格式,前者比较详细(厚厚的一本)。 |
|
c# 拦截、修改CPUID (非物理改变)
1.如果目标程序只是通过读取注册表值之类的方法获取CPU信息的话,尝试HOOK相关读取时调用的函数。 2.如果目标程序直接通过CPUID指令读取CPU信息,要么通过VT-x(具体请参考IA32手册卷3)陷入CPUID指令,要么通过内存补丁/直接修改原文件替换掉关键部分,换上自己的处理代码。 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值