阅读:2017回复:10
[bmyyyud垃圾原创]hook全部-1中断,tiamo好久不出原创了,老朽顶一下
嘿嘿,偷懒一下,利用了一下以前的工程,执行w2k_hook *,然后用softice的idt看全部中断被截获,按esc后再看,全部恢复
感觉VC对嵌入汇编编译太差,编译是一条对应一条的,但如果没有对应的汇编指令,vc不提示你出错,胡着按字面编译一个,等你跟踪到那里,一看就错了,想后悔都来不及,只有兰屏,再重启计算机,浪费很多时间。各位在遇到这种情况,有没有简单的直接返回OS不兰屏的方法么 心得都写在附件中的注视里了 |
|
|
沙发#
发布于:2005-04-25 10:39
当然可以,你在SOFTICE中可以随意修改EIP和指令,发现不对的地方用A然后用NOP指令代替,注意指令长度必须一致,或者直接修改EIP到退出的地方,当然你得注意平衡你的堆栈.
|
|
|
板凳#
发布于:2005-04-25 10:48
当然可以,你在SOFTICE中可以随意修改EIP和指令,发现不对的地方用A然后用NOP指令代替,注意指令长度必须一致,或者直接修改EIP到退出的地方,当然你得注意平衡你的堆栈. 就是“当然你得注意平衡你的堆栈“这个比较麻烦,尤其是在中断处理中,有没有软件或调试器象SEH那样替我处理一下 |
|
|
地板#
发布于:2005-04-25 11:14
当然可以,你在SOFTICE中可以随意修改EIP和指令,发现不对的地方用A然后用NOP指令代替,注意指令长度必须一致,或者直接修改EIP到退出的地方,当然你得注意平衡你的堆栈. 不仅仅是堆栈,还有寄存器中的值也要注意 |
|
|
地下室#
发布于:2005-04-25 21:39
没有明白你说vc的inline 汇编错在什么地方?
我用inline asm多了.. 游戏引擎特别是图形引擎2d方面 底层全是清一色的mmx汇编啊 语法错vc能很清楚的识别啊 至于逻辑错 不应该怪vc本身吧... 偶最近忙.....刚刚作完一3d图形引擎还没有来得及测试 马上就被弄去作服务器的server引擎.... 而且也不知道下一个分析个什么东西比较适合我现在的水平 acpi吧..又看不懂.. |
|
5楼#
发布于:2005-04-26 09:03
没有明白你说vc的inline 汇编错在什么地方? 好久不用汇编了,见笑了 比如 mov eax, [dHooks1 + 4 * n] dHooks1, n都是局变 由于汇编没有内存间址指令,应该是非法的 但vc编译后却变成 mov eax, [ebp - xxx + 4 * ebp - xxx] 完全按字面编译,而且不提示错误!!!郁闷。。。 |
|
|
6楼#
发布于:2005-04-27 15:57
这.....似乎不能怪vc吧.....
vc得那个是inline asm 又不是macro asm 读读msdn关于vc得inline asm的语法吧... 作汇编的话... nasm是个很不错的东西 nasm + tlink32 + softice这配合我用了很久.... |
|
7楼#
发布于:2005-04-27 16:23
这.....似乎不能怪vc吧..... 我是用Masm32 + Softice,这个感觉更好,Masm32用的是Mams6.11,他的Obj是Coff格式的,比较符合当前的Windows要求 |
|
|
8楼#
发布于:2005-04-27 16:26
nasm生成的是OMF格式的吧,老弟觉得nasm哪里不错呢,或许给我这老脑筋转转弯
|
|
|
9楼#
发布于:2005-04-27 23:15
nasm是全格式制霸的
也能生成coff格式的.... nasm虽然有一个很大的限制就是在符合使用上的 但是nasm提供的宏的功能太强大了.. 实在舍不得扔掉 extern _RtlRaiseException@4 ; void __stdcall _CxxThrowException(void *pObject,_s_ThrowInfo const* pThrowInfo) function __CxxThrowException proc __CxxThrowException@8 %$pObject arg %$pThrowInfo arg %$msException locvar 20h endlocvar mov dword var(%$msException + EHExceptionRecord.ExceptionCode),MSC_EXCEPTION_NASM mov dword var(%$msException + EHExceptionRecord.ExceptionFlags),EXCEPTION_NONCONTINUABLE_NASM mov dword var(%$msException + EHExceptionRecord.ExceptionRecord),0 mov dword var(%$msException + EHExceptionRecord.ExceptionAddress),0 mov dword var(%$msException + EHExceptionRecord.NumberParameters),MSC_EXCEPTION_PARAM_NUMBER_NASM mov dword var(%$msException + EHExceptionRecord.magicNumber),MSC_MAGIC_NASM mov eax,var(%$pObject) mov dword var(%$msException + EHExceptionRecord.pExceptionObject),eax mov eax,var(%$pThrowInfo) mov dword var(%$msException + EHExceptionRecord.pThrowInfo),eax lea eax,var(%$msException) push eax call _RtlRaiseException@4 endproc 贴个代码上来瞧瞧 |
|
10楼#
发布于:2005-04-27 23:25
当时我是觉得masm太复杂了
那文档实在看不下去了 才在某高人的怂恿下试试了这个open source 的nasm 一下子就喜欢上了.... 因为他是open source的..所以文档很全文字也浅显易懂. 而且还有好多的教程...上手非常的快 那高手还给了我一个他改良后的包括n多n多常用的宏的定义文件 我感觉那种纯asm的太复杂了. 而那种\"invoke xxxx\" 的所谓win32 asm的有太不伦不类了 nasm这种反到是很合我胃口呵呵... |
|