|
[求助]问个小问题
参考: 像Edit控件发送EM_SETLIMITTEXT消息可以限制Edit控件的输入长度。 MSDN链接:http://msdn.microsoft.com/en-us/library/bb761647(VS.85).aspx |
|
谁帮我脱PEBundle 2.0x
如果是按键精灵,最好是别报什么希望了。 看看这里,http://bbs.pediy.com/showthread.php?t=75697 连peeler都不愿意动它。 |
|
[求助]查壳的疑惑
工具给出的结果仅供参考,具体是什么壳,或者没壳,亲自看了程序才知道。 |
|
[求助]pe在内存中的存储顺序
你说的教程3是什么? 用Stud_PE等工具打开一个文件,可以查看文件的结构;用OD载入一个程序后,ALT+M切换到内存映射窗口,可以查看文件映射到内存中的状况。 大体上,一个程序的内存镜像和磁盘镜像基本一样,有差别。 比如,section的内存镜像可以大于磁盘文件镜像;文件中的section可以标记为不映射到内存中;section磁盘文件和内存当中的对齐粒度不同等等。 |
|
|
|
[求助]请教对PE文件中几个数据的理解
根据文档中的说明,是这样的。 获得“节的文件镜像的大小(没有对齐)”它本来就没什么意义。举例来说,比如一个节是代码节,它的大小是500个字节,而文件是按512字节对齐的,那么连接器直接在500字节的有用数据后面填上12字节的‘0字节’,然后SizeOfRawData就是512,无法得知,也不用去知道实际有用的数据是多少字节,因为除非程序(故意设计或因设计中存在BUG)“跑飞”或“越界访问”,否则填充的部分将永远不可能被访问到,即它们是“无害填充”。 对数据节是一样的道理,反正“未初始化”的数据也是需要用“0字节”来填充的,所以在“已初始化的数据”的节的后面用0来填充是合理的。 所以,只要记录了一个节的对齐的size即可,而不对齐的size没有必要记录。 |
|
|
|
|
|
|
|
[求助]ida pro 如何下 d [esp+8] 功能?
没在Linux调过程序,不知道ida linux是什么样子。 不过说明书里写着,可以用ida linux作调试代理,通过网络,用ida graphic在远程调试。这样就可以用Windows下的界面了。 不妨一试。 另外,我查了一下我的ida5.2说明书,其中debugger related命令,确实没看到查看内存内容的命令: AddBpt AddBptEx AttachProcess CanExceptionContinue DelBpt DetachProcess EnableBpt EnableTracing GetBptAttr GetBptEA GetBptQty GetCurrentThreadId GetDebuggerEvent GetEventBptHardwareEa GetEventEa GetEventExceptionCode GetEventExceptionEa GetEventExceptionInfo GetEventExitCode GetEventId GetEventInfo GetEventModuleBase GetEventModuleName GetEventModuleSize GetEventPid GetEventTid GetFirstModule GetModuleName GetModuleSize GetNextModule GetProcessPid GetProcessQty GetRegValue GetProcessState GetThreadId GetThreadQty IsEventHandled LoadDebugger PauseProcess RefreshDebuggerMemory RunTo SelectThread SetBptAttr SetBptCnd SetRemoteDebugger SetDebuggerOptions SetRegValue StartDebugger StepInto StepOver StepUntilRet StopDebugger |
|
[求助]请教对PE文件中几个数据的理解
“程序”包含未初始化的数据。 “文件”不包含。 .data节,它的“内存镜像”中必须包含“未初始化数据”和“用0初始化的数据” 但它的“文件镜像”中只要包含“非0初始值”的数据即可。 OptionalHeader描述的是PE文件,SizeOfUninitializedData是0,是说在磁盘文件中没有保存“未初始”和“0初始”的数据的映像。 而SectionHeader描述.data这个section,既要描述它的文件镜像,也要描述它的内存镜像。 加载器是按照Section来进行内存映射的,它从文件头中读取section table,然后按照表中的section header把需要映射的section依次映射到内存中,再处理好相关重定位就好了。 有的链接器会把“未初始化数据”和“0初始化数据”放在名为.bss的section,该section的文件大小为0,而内存大小为需要分配的空间,这种情况下,OptionalHeader中SizeOfUninitializedData可能不为零,取决于连接器对该域的填充。 总之,OptionalHeader中的SizeOf字段是链接器填充的,然而加载器按section来映射内存,不使用它。所以连接器通常就直接将它填为0了。 听说是这样的。 |
|
[求助]mov eax, 38E38E39
硬件除法器的效率,不用说比加减,就是比乘法,也至少慢几倍。 硬件乘法器目前的研究已经相当成熟,比如十分常见的化莱氏树并行加法快速乘法器,对于设计好的乘法器,比如很多DSP中的乘加单元,在流水中可以一个周期完成一条乘法(当然是乘法器流水线处于理想状态下),在通常情况下,一条乘法指令可以在4~8个周期内完成。 但除法器要完成一次除法运算,在当今极度优化的硬件上,也至少需要十几个周期。 用乘法替换除法的近似算法,在库和编译器里随处可见。如果配置编译器按最大速度优化,那么编译器很可能会执行这种优化。而如果按最小体积优化,可能就使用硬件的除法指令了。 想起个有意思的事,大家在分析时经常见到51eb851f 这个值吧,这是编译器优化常见的一个值,再配合几次移位可以实现对进制100的除法。 我记得有一次看到一篇破文,作者不明白这个用法,说“这个操作数比较有意思,将它变为十进制为1374389535,不知是不是软件作者的手机号”,着实让我笑了一笑,觉得这个人太可爱,想像力真是太丰富了,可惜手机号是十一位,还差一位啊。 |
|
[求助]flashboot——高手给个爆破的思路
1.bootsect将自己从0000:7c00搬移到1feo:7c00,即物理地址27a00,然后跳到这1fe0这个段来执行。代码的功能是查找根目录下的fbwtload.bin,并将其载入到内存0060:0000处,即物理地址600处。 2.fbwtload.bin的功能是给27a0:jmp offset处写入字节0xfa,0xf4,即cli\hlt两条指令,然后27a0:0000处的一个扇区写回到磁盘。最后,它再将fbwtload.bin偏移0x548处开始的512个字节读入0000:7c00,并跳到那里执行。 而27a0:0000正是原来的bootsect,因FAT分区的第一扇区存放相关参数,所以有一条Jmp指令,而跳到jmp offset处开始执行。而fbwtload.bin的偏移0x548处开始的512字节是一个完整的bootsect,而且是原来OS的标准bootsect。 使用flashboot的向导配置的各种不同引导类型,就是将不同的引导扇区数据附加到fbwtload.bin的0x548处,实际向磁盘首扇区写入的只是前述的加载fbwtload.bin的代码。 3.我所说的偏移0x35-0x39一个字节,正是一条mov指令,即给原来的bootsect添加cli/hlt指令。将其nop掉,则它会将原来的bootsect写回,下次仍然可以引导。 也可以nop掉0x48-0x48三个字节,这三个字节是一条near call指令,调用写磁盘的函数。将其nop掉,则不将修改后的bootsect写回磁盘,也可达到“爆破”的目的。 4.你用command.com覆盖fbwtload.bin当然行不通,就算你用DOS的IO.SYS去覆盖也不行。因为fbwtload.bin的加载地址0060:0000既不是默认bootloader的加载地址,也不是command.com的加载地址,况且command.com加载之前的初始化都没有进行。 5.可引导U盘,原本就很简单,如果主板支持USB-FLP,就把FAT12/16的引导扇区写入即可。如果支持USB-HDD,则可以用FAT32。使用这个flashboot的软件没有太大意义。直接WinImage甚至WinHex就可以了。 |
|
用DEBUG调试时出错
16位程序建议在虚拟机装个纯DOS,或者用8086模拟器来跑,NT下的ntvmd提供的虚拟86环境与真正8086实模式有一定的区别,所以出了错也不太容易搞清楚原因。 虚拟机推荐使用bochs,模拟器我记得有一个软件叫emu8086,这两种环境都自带调试功能,连调试器都可以省了。 |
|
[求助]flashboot——高手给个爆破的思路
把根目录下fbwtload.bin文件,偏移0x35-0x39共5个字节,全部改成0x90,即nop,应该就跳过了它对引导扇区的改写。 当然,前提是刚用软件生成可引导U盘,还没有用它进行过引导,所以引导扇区中的内容还是正确的。如果你用生成的U盘引导了一次系统,那么引导扇区里的内容就已经被修改了。 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值