|
[讨论]关于echap511的问题的原理
原来还不是一个章节,我都没注意,我就是看了你写的算法,以为和我那个是同一个呢。。。 |
|
|
|
[求助]RPL保存在选择子里,那么CPL是保存在哪里的?
选择子不代表描述符!选择子用来选择描述符,但你选择了并不表示就给你了。 实际情况是,当程序往断寄存器中装载选择子时,处理器检查选择子中的RPL与DPL,如果特权不够,将直接触发保护异常! 而当特权检查通过时,才会将描述符中的基址与限装入SHADOW寄存器,不过我在书上没有看到装入的特权级是RPL还是DPL,个人猜测应该是RPL。 实际访问内存时,硬件只使用SHADOW寄存器的内容,如果不重新装载(哪怕是用原来的值)段寄存器,SHADOW寄存器中的内容就不发生变化。也就是说,修改GDT中的描述符,没有重新装载段寄存器之前是不生效的 |
|
[求助]问个GDT的问题
不好意思,有点想当然了,细看时发现确实不正确。 是不是GDT被修改过了呢? 以下是wiki中的GDT Entry的结构图,以及Linux早期版本中的定义的x86_seg宏的定义。 #define upper_seg(type,dpl,base,limit) \ ((base) & 0xff000000) | \ (((base) & 0x00ff0000)>>16) | \ (((limit)>>12) & 0xf0000) | \ ((dpl)<<13) | \ (0x00c09000) | \ ((type)<<8) #define lower_seg(type,dpl,base,limit) \ (((base) & 0x0000ffff)<<16) | \ ((limit) & 0x0ffff) #define x86_seg(type,dpl,base,limit) \ .long lower_seg(type,dpl,base,limit); \ .long upper_seg(type,dpl,base,limit) |
|
[求助]驱动对象指针-0x10指向的ULONG是对象头的什么成员?
这里的QUAD不是LARGE_INGETER中的QuadPart,它其实就是实际的内核对象的占位符,或者说就是为了让编译器计算偏移地址(比如CONTAINING_RECORD()宏)的一个(伪)字段。不同的内核对象,这个字段就用不同的对象来替换了。 而QUAD被定义为union,而不是一个struct,这样就可以对类似这样的错误的代码产生编译错误: OBJECT_HEADER someObjectHeader = OBJECT_TO_OBJECT_HEADER(someObject); someObjectHeader.[COLOR="Red"]Body[/COLOR] ... QUAD的定义如下,并且这也说明这个union是不可以直接引用的: typedef struct _QUAD { union { INT64 UseThisFieldToCopy; Float DoNotUseThisField; }; } QUAD, *PQUAD; |
|
[求助]如何知道一段程序在那下断点啊!~
断点,当程序运行到那里时就会被调试器捕获。 所以,下断点的原则就是,从程序的行为,猜测它可能会执行哪段代码。 但是用户代码无从下手,而正常的程序,总要使用操作系统服务的,也就是总要调用系统的API的。 所以,你猜测程序会调用哪个API,在那个API下断点。然后运行程序,如果真的如你猜测,那么调试器例会捕获断点异常,获得控制权。 |
|
[求助]汇编代码与机器码
一种方法是:查手册。INTEL指令手册中有所有指令的机器码的详细格式。当然,你需要知道opcode的一些基本知识,比如Mod R/M,以及SIB的编码等。 另一种方法是,直接打开调试器,用a命令写入一条指令,调试器会将其转化成操作码。 |
|
[求助]问个GDT的问题
首先,0x38是selector的值,对照selector的定义,此selector的RPL为0,使用GDT,选择的Descriptor的索引号是0x38 >> 3,结果是7,希捷找到GDT中的第7项(最开始那一项是第0项),把那个数值对照Descriptor的结构图看一遍就清楚了。 |
|
[讨论]关于echap511的问题的原理
呵呵, xor操作的本质就是“按位加”,或者 “不进位的加法”。 于是,它满足交换律,结合律。 这就是问题的本质。 这个例子我也曾经啰嗦了一翻,就是从数学上进行推导的。 http://bbs.pediy.com/showthread.php?t=77367 |
|
[求助]请教d edx是什么意思?
d命令(是dump的缩写)是很多调试器通用的,最初起源不清楚,DOS的DEBUG,TD,Windows下的各种调试器(SoftICE,OLLY的命令行插件,ntsd等),当然,还有gdb,d命令的语义都没有发生变化。 此外,很多调试器命令,由于约定俗成的原因,在各种调试器中都有相同的语义(虽然可能参数等略有不同),比如u命令,r命令等。 |
|
[求助]怎样修改这里面的源码让这列内容在窗口列表里面不输出?
要修改程序,先要理解程序,不是说你搜索字符串,希捷把什么给Nop掉这么简单。 你就这么几行代码,没有任何相关信息,连程序是什么样子都不知道,别人怎么帮你? 如果是在控制台打印出的结果,那就修改printf附近的代码 如果程序是显示在ListBox中的,那需要拦截SetDlgItemText、SetWindowText等API,以及WM_SETTEXT、LB_ADDSTRING、LB_INSERTSTRING以及LB_SETITEMDATA等消息。 |
|
[求助]怎样修改这里面的源码让这列内容在窗口列表里面不输出?
要修改程序,先要理解程序,不是说你搜索字符串,希捷把什么给Nop掉这么简单。 你就这么几行代码,没有任何相关信息,连程序是什么样子都不知道,别人怎么帮你? 如果是在控制台打印出的结果,那就修改printf附近的代码 如果程序是显示在ListBox中的,那需要拦截SetDlgItemText、SetWindowText等API,以及WM_SETTEXT、LB_ADDSTRING、LB_INSERTSTRING以及LB_SETITEMDATA等消息。 |
|
[求助]RPL保存在选择子里,那么CPL是保存在哪里的?
其实这个很简单的逻辑,首先你心里要明白descriptor与selector代表的都是一个内存段(segment): Descriptor描述一个segment,既然叫描述符,它自然就有一些字段用来描述这个段的属性(DPL)。 而selector是用来访问内存的,比如DS用来访问数据段,SS访问堆栈段。selector它的一部分字段用来指出要使用哪个descriptor(换言之,就是要访问哪一个内存段),还有一部分字段,用来表明“我有什么特权来访问这段内存(RPL)”。 而CS与SS中的RPL,就是被称为CPL。因为CPU执行指令,必须要读指令,实际上就是访问CS段中EIP偏移量的内存。因此,CS选择子的特权就代表了“我有多大权力去运行这段代码”,也就是当前特权级(CPL),正因为执行的代码(CODE)的特权也就代表了当前任务(TASK)的特权。至于SS,因为堆栈的特殊性,代码的执行与堆栈密切相关,特别是诸如retn之类的指令,是有可能改变程序执行流程的,因此要求堆栈具有足够的特权。 你把指令执行当成“访问CS:[EIP]内存”,于是就很清楚了: CPU只是执行“你有足够的特权去访问这个segment的内存吗”这个简单的判断而已。 (其实上面说的有些并不准确,但不防这么理解,接触的时间长了,自然就明白了) |
|
[求助]VB程序,if then else end 结构如何防破解?
只要你使用的是 if-else逻辑,那就可以瞬间爆破。 所以,答案是,不要使用简单的if-else逻辑。 一种办法是,将判断过程分成多个步骤。当然,这样的逻辑,在熟悉代码的人眼里,仍然可以瞬间破解,但至少比一个单独的if-else要复杂。 所谓矛盾是对立统一的,如果你真正理解了爆破的原理,就会知道为什么if-else无法防止爆破。 而要防止程序被爆破,最好的办法是自己去掌握破解的技术。知道了怎么破解,才可能知道怎么反破解。 而知道了怎么反破解,反过来也可能会知道如何反-反破解。 这是过程正是促使双方都不断提高技术的动力。 |
|
[求助]VB程序,if then else end 结构如何防破解?
只要你使用的是 if-else逻辑,那就可以瞬间爆破。 所以,答案是,不要使用简单的if-else逻辑。 一种办法是,将判断过程分成多个步骤。当然,这样的逻辑,在熟悉代码的人眼里,仍然可以瞬间破解,但至少比一个单独的if-else要复杂。 所谓矛盾是对立统一的,如果你真正理解了爆破的原理,就会知道为什么if-else无法防止爆破。 而要防止程序被爆破,最好的办法是自己去掌握破解的技术。知道了怎么破解,才可能知道怎么反破解。 而知道了怎么反破解,反过来也可能会知道如何反-反破解。 这是过程正是促使双方都不断提高技术的动力。 |
|
|
|
[求助]驱动对象指针-0x10指向的ULONG是对象头的什么成员?
看看这个有能找到点什么。按我的理解,应该是type http://blog.csdn.net/I2Cbus/archive/2008/05/21/2466316.aspx |
|
[讨论]AMD蕊片内,测试实验8一个奇怪的现象,希望大侠们帮忙解答
用T命令,单步一下mov cs:[di],ax这条指令,看看执行前与执行后的地址08处机器码分别是什么,应该就知道问题出在哪里了。 |
|
[求助]关于DOS下实模式切换到保护模式的问题
搜索一下OPCODE |
|
|
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值