|
[求助]逆向基础知识
虽然在Windows平台下调试通常面对的是32位汇编代码,不学16位的汇编直接学32位的汇编也是可以的。不过如果学过了16位的汇编,把机器的体系结构弄懂了以后,对学32位是有很大帮助的。 其实从哪开始学并不重要,重要的是弄懂计算机体系结构的一些基本知识,一定要理解“寄存器”、“寻址模式”、“机器指令与汇编助记符的关系”等基本概念。这些东西懂了,那就无所谓32位16位、甚至无所谓intel还是mips了,无非是寄存器、寻址方式、汇编语法格式的一些差别。 当然,如果有高级语言的程序设计基础,是有助于更好更快地掌握汇编语言,不过不是必要的。 |
|
[求助]用OD载入程序后和C32载入程序后的地址不是一个地址吧?
呃。。。 段值左移4位再加偏移地址是16位实模式的概念。Windows系统运行在32位保护模式(或64位长模式)下,跟实模式是不同的。 http://www.pediy.com/document.htm有“保护模式编程基础”的资料。 如果对保护模式了解得不多,暂且这样理解就行了:32位平台地址不再“分段”了,地址就是32位的,至于CS、DS、SS等就当是“遗留物”吧。 16位处理器,数据宽度(指ALU或能用寄存器的位数)是16但有20根地址线,所以设计了个“分段”的内存模式。 32位处理器,数据宽度和地址宽度都是32(PAE等技术另论),所以就不必要再“分段”了(虽然intel的硬件确实提供了逻辑分段的能力,但现代操作系统几乎都不用“段式”的内存模型)。 |
|
[求助]大家帮忙分析下,这是什么原因?
0.关于anti-debug,参考一下这篇文章或许有所帮助。 http://bbs.pediy.com/showthread.php?t=71113 1.搜索字符串,先在反汇编窗口打打开要搜索的代码段,然后再搜索。 2.消息断点除了对付很“规范”的程序外,多数情况下很难成功使用。还是想办法下API的断点吧。 |
|
|
|
[求助]关于WIN API 问个问题 NT开头的函数到底是什么
用“原生API”(或“Native API”)谷歌或百度一下试试。 所谓原生,就是NT内核提供的服务,不属于任何的子系统(如Win32子系统、WoW64子系统等)。 补充:原生API在内核和ntdll.dll中通常各存在一个,其中内核函数是导出给ring0代码(即驱动程序)使用的,是真正的服务函数。ntdll.dll中对应的函数是内核相应服务的一个入口,是让ring3程序调用的。 |
|
[求助]脱Zprotect发现硬盘被“革”了
要恢复数据,千万别再往原来那个分区里执行“写”操作,将数据恢复软件装起,当然不能装在要恢复的那个分区了,一般装到系统分区就行,然后就扫描,恢复。恢复最好挂个第二硬盘或者USB硬盘,往第二硬盘上恢复,不推荐往本硬盘的其它分区恢复。 恢复软件常用Easy Recovery Professional。 还有一款国产的叫 “易我数据恢复向导”,我用过,也不错。 |
|
[求助]一道简单的汇编题,大家帮着算下.
其实 mov sp, offset start 就可以了。 根据你的定义,start应该是24h,不是14h,因为0Ah个word(即14h个byte)的栈前面还有8h个word(即10h个byte)。所以,start = 14h + 10h = 24h 那个1ah,大概是把10个word的栈看成10个byte的栈了。 |
|
[求助]请问,如何通过静态分析,获得DLL中某API的参数表
IDA会自动根据代码中对堆栈帧中相关数据的引用情况,结合函数的返回指令retn x来推测函数的参数个数和类型。 至于参数的功能,或者说名称,就需要手工分析函数代码来推测了,IDA对参数名称的推测仅提供有限的支持。 纯的静态分析结果一般还是要通过动态跟踪来验证的。 |
|
[求助]DELPHI程序下断问题
“窗体不可用”是将窗口关闭还是说让上面的按钮变灰? 试试在让窗口变得不能用的代码处下断点,然后往上找,判断的地方应该离得不太远。 比如,如果是按钮会变灰,那就在类似button1.enabled:=false;的代码处下断点,比如EnableWindow。然后若干次返回,大概就能到关键代码了。 |
|
[求助]DLL虚拟地址和真实地址转换问题
DLL文件最好还是保留重定位信息比较好,否则遇到默认基址已经被使用的情况时程序就加载不了了;不像EXE,加载器几乎总是把它加载到默认基址上,因为一般不需要重定位。 你说的push + retn,push后面的地址是绝对地址,必须添加到重定位表才能保证程序可以正确执行。 call指令,分不同的情况。 如果是near的call,即机器码0xe8,0xAAAAAAAA,只要目的地址在同一个dll中,就不用重定位,因为这每次指令使用相对地址(0xAAAAAAAA)。而如果要call不同模块中的地址,通常不用near call,而用下面的函数指针的call。 如果是call [BBBBBBBB],机器码是0xff,0x15,0xBBBBBBBB,这里的函数指针0xBBBBBBBB是绝对地址,就必须重定位了。并且0xBBBBBBBB处的值也需要重定位(当然IAT中的指针是加载器自动重定位的,但自定义的指针则需要手动添加重定位信息)。 |
|
[求助]od如何在2003下调试2000兼容模式运行的程序?
试试到入口点放int3然后附加的方法。 |
|
[求助]关于wsprint的参数还是搞不懂·请教高手
关于上db 0ah,0dh和dw 0d0ah的问题,我想提醒你,虽然汇编后这两处的数据一样,但不保证invoke宏展开后的代码也一样啊! 比如,很有可能它把最右边的参数展开成为 movzx eax, szNum push eax 在这种情况下,db 和 dw当然就不一样了。 关于格式化消息记录的问题,你试着在格式化字符串后加一个CRLF试试。后面的乱码很可以是跟下一次的输入信息搞混了。 |
|
[讨论]请教高手 有关DeFixed Edition v.2这个
[QUOTE=konsi;567190]>"<感谢版主 已经解决了 再请问 图里面箭头指的那两个断点 是怎么弄出来的 只有位址 [/QUOTE] 什么意思,什么叫“只有位址”???? 直接到7c80b549这里然后F2下断点就行了,或者输入命令bp 7c80b549 不懂你要问什么。 |
|
[讨论]请教高手 有关DeFixed Edition v.2这个
所有能anti-anti的插件都开动起来,这样OD就很强大了,可以说对普通的anti已经免疫了。 比如StrongOD、OllyAdvanced等。 |
|
[求助]DLL虚拟地址和真实地址转换问题
一般来说,DLL的入口点应该是用RVA基址加上LORDPE里面的入口点地址吧,如图1 入口点的虚拟地址VA(也就是虚拟地址的定义)确实是RVA+BASE,但这个BASE是指模块被加载后在内存中的基地址,而对DLL来说这个加载基址不一定与图中LordPE显示的那个值(叫默认基址,由PE头中相关字段给出)相等,而对EXE来说几乎总是相等。 但是我居然遇到这样一个DLL,跟这个算法不一样啊`如图2 图2看起来没什么问题啊,入口点RVA=001EB2C,加载后的VA是003EEB2C,说明加载的基址是003D0000 还有一个难题我一直不明白,在看雪也问了几次了,就是DLL的重定位问题,让DLL不能加重定位指令怎么办啊~ 没读明白你这句话的意思,什么叫“让DLL不能加重定位指令怎么办”??? |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值