|
[讨论][讨论]想学习ocx破解方法
ocx、exe、dll,或者什么其它的文件句后缀,都只是表象,只要它是程序,它就是由代码和数据和资源等组成的。 要逆向它的功能,就让它的代码运行,调试它的代码,管它文件后缀名是什么,就这样而已。 |
|
|
|
[求助]请问如何给od2.0版本加插件啊
Olly200目前是beta阶段,没有提供对Plugin的支持,没有导出函数,也没有SDK发布。 应该是暂关闭了对插件的支持,等作者觉得足够稳定了,发布正式版本时,应该会开放的。 目前,还在用各种110版本的修改版,最常用的是ICE版和Dark版。 |
|
[求助]关于普通文件逆向
非公开的,只有逆向客户端了。客户端加密了,逆向就不容易了。 |
|
[求助]怎样往OD的工具栏添加工具
Olly提供了Plugin的SDK,要实现什么功能,最好是写个插件来实现。 刚才看了一下condition_branch_log的实现,它添加一个工具栏按钮的方法是: 用CreateWindowEx()创建一个Button,父窗口就是OLLY的主窗口,然后LoadImage(),加载按钮的图片,并SendMessage(BM_SETIMAGE),最重要的是Hook了OLLY主窗口的WndProc,这样就可以在用户点击按钮时进行处理。 |
|
[原创]读取MBR产生异常
调试了一下,异常,是因为int3指令导致的。 这条int3指令应该是汇编器自动插入的,为了调试用。 你把ExitProcess放到CloseHandle后面就可以了。 程序运行时,SetFilePointer返回0,所以直接转到CloseHandle处执行,结果后面没有代码,汇编器在这里插入了一条int3指令,结果就触发了异常。 也就是说,你的程序流程不正确。用伪C描述一下,应该是这样 if ( SetFilePointer() ) { ReadFile(); } CloseHandle(); ExitProcess(); Assert(false); 你的程序是这样的: if ( SetFilePointer() ) { ReadFile(); ExitProcess(); } CloseHandle(); Assert(false); 其中的Assert(false)就会触发异常。 如果系统没有JIT调试器,或者程序不是在调试器中运行,或者程序没有自己捕获异常,int3指令只好使程序退出。 |
|
[建议]渴望看雪老大们带带我们
技术论坛不同于破组,没有什么“体力活”的东西,论坛只是一个交流的平台,而不是什么组织。 |
|
[求助]为什么CPU不支持内存到内存寻址
对于数据拷贝,INTEL提供了所谓“串操作指令”,在地址对齐的情况下,理论上是最快速的内存拷贝的方式。 而对于算术逻辑运算指令,虽然INTEL的指令集中,允许内存操作数作为dest,但这样的指令过于复杂,因为要在一条指令中发起两个总线周期(一次读,一次写),这样的指令,特别对流水线而言,实际上效率并不高。 并且,INTEL的CPU的体系结构,它的译码方式为微码流水执行;由于体系结构的限制,在一条指令中,两次对存储器的访问是极限,硬件结构无法完成单条指令的三次或更多次的存储器访问(INTEL的指令系统已经够*复杂*的了,如果硬要加上这样的超级复杂指令,那硬件电路的性能不敢相像)。 这样就好理解了。 对于add这样的指令,假设它的dest和source操作数都是内存数,那它必须执行3次内存访问(两个读一个写);而像xchg这样的指令,如果要实现两个内存之间的交换,必须执行4次存储器访问,这是不可接受的! 并且,这样的指令实际上没有存在的意义,对程序来说,虽然变量在内存中存储,但是程序的运算,绝大多数是对某中间结果进行的,而CPU的寄存器的速度要比存储器快一个数量级以上,所以大多数RISC机器都采用load/store型的设计,而运算被限制在寄存器之中。 虽然x86不是RISC,自己看一下就会发现,编译器通常情况并不会选择那些复杂的指令,即使一条i++;指令,编译器一般还是倾向于使用mov eax, dword ptr [i] / add eax,1 / mov dword ptr [i],eax这样的指令组合(当然具体情况跟编译器的优化选项有关系,如果是按最小目标代码进行优化,那就可能生成inc dword ptr [i]这样的指令了),因为这样在性能上并没有损失(在流水线中),而编译器的设计会简化很多 |
|
|
|
[求助]下 bp GetDriveTypeA断点后~~~~!!
断点触发后,直接看堆栈,在返回地址处按F4就可以了。 顺便说句题外话:如果不是加密光盘,试试LTT他们的产品WinMount,中文版免费,很棒的国产软件,目前仍在不断完善中,相信有不错的前景。 |
|
|
|
[求助]那个大哥能帮我讲解下这段汇编是什么意思啊
这就是一个浮点数到整数的转换。 那些多余的代码,只因intel的x87默认与IEEE浮点规范不完全兼容,所以需要(暂)修改浮点处理器的控制寄存器,以完成数的正确转换。 |
|
[求助]dos软件的exe不能增加区段?
DOS的EXE不是PE格式,没有section的概念。 回想一下PE格式,最开头是一个DOS Stub,之后才是PE头,而DOS Stub已经是一个完整的DOS程序了。 DOS下的EXE文件布局十分简单,对了Stud_PE这个工具可以很形象地显示它的结构。 |
|
[求助]OllyDBG 出现怪问题
如果确实如你所说,不管调试什么程序都有这个问题,那十有八九中毒了,可能病毒会在所有的进程中创建线程,而病毒的作者没有处理好,导致线程执行出错。 |
|
[求助]如何让进程运行停留至入口点
如果以调试器的方式,可以设置断点;如果不是调试器方式,可以如楼上所说,在CreateProcess时传递CREATE_SUSPENDED标志,然后记下入口点的原来的两个字节,然后用0xEB,0xFE替换,然后ResumeThread,之后轮询线程的Context,当EIP到达入口点时,恢复原来的字节。 |
|
[求助]为什么CPU不支持内存到内存寻址
什么叫“内存到内存寻址”??? |
|
[求助]OllyDbg中怎样在WndProc函数设断
如果是对话框程序,应该设断“DlgProc”,先在DialogBoxParam下断点,中断后堆栈会有参数提示,看一下DlgProc的值,然后到那里下断点。 如果不是DialogBoxParam方式的程序,可以点击菜单->窗口->窗口,来到“窗口”窗口,然后刷新一下窗口内容,在想要设断的窗口上右键->在WndProc上切换断点 或 在ClsProc上切换断点。 OD里一般是不会有用户定义的函数名字的,比如“WndProc”之类的,除非程序带有完整的调试符号表。 |
|
[求助]这样的问题谁可以解释为什么?(vc连接dll给vb调用)
MSVBVM60.DLL中没有类似StrPtr这样的函数,你需要自己调试确定它被映射成哪一个API |
|
[讨论]请教软件机器码是依据PC的哪些方面来计算的?
最常用的除有硬盘序列号之外,还有网卡的MAC地址。 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值